🍅 写在前面
👨🎓 博主介绍:大家好,这里是hyk写算法了吗,一枚致力于学习算法和人工智能领域的小菜鸟。
🔎个人主页:主页链接(欢迎各位大佬光临指导)
⭐️近期专栏:机器学习与深度学习
LeetCode算法实例
张量分解
张量分解系列知识,详见下方链接:
张量分解(1)——初探张量
张量分解(2)——张量运算
张量分解(3)——CP分解
张量分解(4)——SVD奇异值分解
张量分解(5)——Tucker分解
本系列文章主要参考论文:Tensor Decompositions and Applications∗
目录
CP分解综述
有了前两节基础内容的铺垫,本节开始学习张量分解的第一大方法:CANDECOMP/PARAFAC decomposition(CP分解)。
CP分解概念:将一个高维度的张量分解为几个核的总和,每个核都是多个向量的外积得到,实际上这里的“核”也就是上一节所提到的“Rank-one tensors”(详情可点击本文开头链接查看)。通过分解,可以大大降低参数的数量和复杂程度。张量分解目前都只是近似分解,无法做到完全复原回原张量。
下面是一个三维张量进行CP分解的示例图:
这里的X就是待分解的三维张量,约等号后方就是多个核相加的格式。a、b、c就是各个维度上的一维张量(向量),由它们构成每个核。
我们可以明显观察到,一个高维度张量可以被分解为多个Rank-one tensor的和的形式。
CP分解公式
这里以三维张量X∈R(I×J×K)为例,CP分解可以简单表示为:
而公式中,参数通常需要归一化,就额外加入了另一个参数λ,公式为:
当然三维张量不能代替所有张量,下面给出了高维张量CP分解的通用公式:
这里也可以将张量转化为矩阵形式,将张量X矩阵化。至于如何转化,可以看上一节张量运算中的Khatri-Rao product,公式为:
这里的A、B、C是每个核在不同方向上分量的集合,如A就是a1,a2,a3…的总和;B就是[b1、b2…bn]。X(1)、X(2)、X(3)是张量X在不同维度上的分量矩阵。
CP分解优化
CP分解优化也就是如何计算CP分解,使得我们在已有基本形式的基础之上,增加分解后的相似度。
这里讲解一个常用的方法:交替最小二乘法ALS(the alternating least squares)
同样以三维张量X为例,我们的优化目标是:
其中,X为已知的张量,X尖为待优化的参数,已经被分解成向量外积的形式。
这里的优化方法是:先固定B , C优化A;接着固定A , C 优化B;固定A , B优化C;然后继续迭代,直到达到终止条件(达到迭代次数或者损失不再降低等)。对于参数A,完整的优化过程如图所示:
流程中的公式变形以及一些细节,具体可以查看前两节文章,这里不再仔细解释。
B、C同理,不断迭代即可。
完整的n维tensor交替最小二乘法优化CP分解参数的过程如下图:
版权归原作者 hyk今天写算法了吗 所有, 如有侵权,请联系我们删除。