张量分解-CP分解

转载文章,有空我好好写一写CP分解哈

一般CP分解的求解都是用迭代最小二乘法(ALS),想详细了解cp算法可以看看tensor toolbox里cp-als的代码,相当详细,哈哈,最开始读用了好久,不过可以详细了解整个算法,里面做了很多的优化,优化部分可以忽略,跳过。

CP分解是将一个高阶张量分解成若干个一维的因子矩阵,例如:三阶张量可以分解成3个一维的因子矩阵,从而可以用更少的数据量表示整个张量数据。可以理解为对高维数据的一种低秩逼近或特征提取。

未完待续。。。

 

以下内容为转载

张量分解-CP分解(Canonical Polyadic Decomposition)

1927年Hitchcock提出了CP 分解。CP 分解将一个NN阶的张量∈ℝI1×I2×⋯×INXRI1I2IN分解为RR个秩为1的张量和的形式即:

=∑r=1Rλra(1)r∘a(2)r∘⋯a(N)rXr1Rλrar1ar2arN

通常情况下a(n)rarn是一个单位向量。定义A(n)=[an1an2⋯anR]Ana1na2naRn,D=diag(λ)Ddiagλ 那么上面的公式可以写为:

=D×1A(1)×2A(2)⋯×NA(N)XD1A12A2NAN

矩阵的表达形式即为:

X(n)=AnD(A(N)⨀⋯A(n+1)⨀A(n−1)⋯⨀A1)TXnAnDANAn1An1A1T

特殊的时候当张量X的阶数为3的时候,它的分解的形式下图所示。

 

三阶张量的CP 分解

张量的低秩近似

在矩阵中定义最小的秩为1的矩阵和的个数为矩阵的秩,类似于矩阵的定义,RR的最小值为张量的秩,记作Rank()=RRankXR,这样的CP分解也称为张量的秩分解。值得注意的是在张量中秩的定义是不唯一的,张量秩的个数求解是一个NP问题。对于一个矩阵AA它的SVD分解定义为:

A=∑r=1Rσrur∘vr,σ1≥σ2≥⋯σR≥0Ar1Rσrurvrσ1σ2σR0

取SVD分解得到的前kk个因子作为矩阵AA的近似可以得到矩阵AA的低秩近似。类似于矩阵中的定义我们取张量的前kk个因子作为张量X 的低秩近似即:

=∑k=1Kλka(1)k∘a(2)k∘⋯a(N)KXk1Kλkak1ak2aKN

,不同于矩阵的低秩近似,张量的最佳Rank-n近似并不包括在其最佳Rank-n+1近似中,即张量的秩Rank-n 近似无法渐进地得到。

 

CP的求解

CP分解的求解首先要确定分解的秩1张量的个数,正如前面介绍的由于张量的秩Rank-n 近似无法渐进地得到。通常我们通过迭代的方法对RR从1开始遍历直到找到一个合适的解。当数据无噪声时,重构误差为0所对应的解即为CP分解的解,当数据有噪声的情况下,可以通过CORCONDIA算法估计RR。当分解的秩1张量的个数确定下来之后,可以通过交替最小二乘方法对CP分解进行进行求解。下面我们以三阶张量为例对ALS 算法进行阐述。

假设∈ℝI×J×KXRIJK是一个三阶张量,对它进行张量分解的目标表达式为

 

min̂ ‖−‖^,̂ =∑r=1Rλrar∘br∘cr=[[λ;A,B,C]]XXXXr1RλrarbrcrλABC

ALS算法首先固定BB,CC去求解AA,接着固定AA和CC去求解BB,然后固定BB 和CC去求解AA,这样不断地重复迭代直到达到收敛条件。固定矩阵BB和CC,可以得到上面的式子在mode-1矩阵展开的时候形式为

min =‖X(1)− (C⊙B)T‖FAX1ACBTF

其中 =A.diag(λ)AAdiagλ,那么上述式子的最优解为

 =X(1)[(C⊙B)T]†AX1CBT

为了防止数值计算的病态问题,通常把 A的每一列单位化,即 λr=|ar^|,ar=ar^/λrλrarararλr 将上述式子推广到高阶形式可以得到

A(n)=Xn(A(N)⨀⋯A(n+1)⨀A(n−1)⋯⨀A1)V† whereV=A(1)T(A(1)⨀⋯A(n−1)⨀A(n+1)⋯⨀A(N)TA(N))AnXnANAn1An1A1V whereVA1TA1An1An1ANTAN

对于一个NN阶的张量XX它的ALS求解的步骤如下图所示。它假设分解出Rank-1 张量的个数RR是事先知道的,对于各个因子的初始化,可以采用随机初始化也可以通过下面的式子进行初始化。

A(n)=R leading left singular vectors ofX(n)forn=1,⋯NAnR leading left singular vectors ofXnforn1N

 

CP分解算法

可加约束

在一些应用中,为了使得CP分解更加的鲁棒和精确,可以在分解出的因子上加上一些先验知识即约束。比如说平滑约束(smooth)、正交约束、非负约束(nonegative) 、稀疏约束(sparsity)等。

CP分解应用

CP分解已经在信号处理,视频处理,语音处理,计算机视觉、机器学习等领域得到了广泛的应用 下面,以去噪为例,对CP分解在高光谱图像处理中的应用进行阐述。

高光谱图像(HSI)是上个世纪80年代以来新兴的一种新型成像技术,它包括了可见光和不可见光范围的几十到几百个连续光谱窄波段构成,形成了一种数据立方体结构的图像。高光谱图像可以看作是一个三阶张量,图像的空间域和光谱域构成了数据的三个维度。采用低秩CP分解对高光谱图像去噪认为低秩的部分是无噪声的部分,剩下的部分认为是噪声数据,它的示意图如下图所示。CP decomposition  algorithm for HSI noise reduction从图中可以看到一个高光谱图像数据X 可以由两部分组成即:

=+XSN

其中S认为是低秩的部分即干净的图像,N是噪声的部分(这里的噪声包括白噪声,高斯噪声等)。可以通过对原始数据X 进行低秩CP分解来得到S。在Urban数据上进行去噪得到去噪前的数据和去噪之后的数据图分别如图下面的两幅图所示。从图中可以看到采用CP分解可以对高光谱图像进行去噪。有噪声图像处理之后的图像

 

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页