
张量分解-Block term decomposition (BTD)
去年差不多这个时候,我在本人的博客上发表了三个关于张量分解的博客,从百度统计来看,很多人阅读了这三篇博文。今天,我再介绍一种张量分解-block term decomposition (BTD),下面将分几个部分对BTD进行介绍。
从CP分解到BTD
在CP分解中我们将一个张量分解为 K个Rank1的成员张量的形式,写成公式即为: T=K∑r=1ar∘br∘cr=K∑r=1(arbTr)∘cr
基于CP分解,我们想,如果arbTr,它不是一个秩为1️的矩阵,而是一个秩为K的矩阵,那么显然ar和br就不是一个向量了,而是一个秩为Lr的矩阵。于是就得到了BTD模型的一种形式即 T=K∑r=1ArBTr∘cr
可以将这个模型进一步进行推导即可得到BTD的通俗形式。
BTD分解概览
2008年Lieven De Lathauwer 等人提出了一种Block term decomposition(BTD),这种张量分解在一些论文中也被称为Block component decomposition (BCD)。我本人认为叫BCD 更合理一些,因为这种张量分解将一个N阶张量分解为R个成员张量的形式,BCD更符合。如下图就是一个Rank−(Lr,Mr,Nr)的分解,每一个成员张量是一个Rank−(Lr,Mr,Nr)的Tucker分解。
采用数学表达式可以写为:
T=R∑r=1Dr×1Ar×2Br×3Cr
其中 Dr是一个Rank−(Lr,Mr,Nr)的张量,Ar∈RI×L是一个秩为I的矩阵。显然BTD可以看出该分解可以看作是我们之前介绍的Tucker分解和CP分解的结合形式。当R=1的时候,显然成员张量只有一个,此时这个分解就是个Rank−(L,M,N)的Tucker分解。而当每一个成员张量是一个Rank−1分解的时候,该分解退化为一个CP分解 (CP分解是将一个张量分解为R个 秩为1的张量分解形式)。这也说明了,BTD分解具有很强的泛化能力。论文 http://epubs.siam.org/doi/pdf/10.1137/070690730 同时对它的唯一性进行了证明,从证明来看,该算法的唯一性的条件要比Tucker分解和CP分解的唯一性要弱。
BTD分解的求解
BTD分解现在的求解算法有很多,比如说非线性最小二乘法,交替最小二乘算法(ALS),张量对角算法等,其中交替最小二乘算法形式最为简单,下面我们以一个三阶张量T∈I×J×K的张量为例,这种求解算法进行介绍。
定义A=[A1,⋯,AR],B=[B1,⋯,BR] C=[C1,⋯,CR]将BTD写为矩阵的形式,可以得到如下三个表达式:
TJK×I=(B⊗C).Blockdiag(D1MN×L,⋯,DRMN×L)AT
TKI×J=(C⊗A).Blockdiag(D1NL×M,⋯,DRNL×M)BT
TIJ×K=(A⊗B).Blockdiag(D1LM×N,⋯,DRLM×N)CT
当更新某一个因子矩阵或者张量的时候,固定其它元素即可进行求解。如当求解A时,固定Dr和B以及C,设置M=(B⊗C).Blockdiag(D1MN×L,⋯,DRMN×L)因此,我们可以得到A的更新规则为
A=M†.TJK×I
同理可以得到其它矩阵或者张量的更新规则。因此采用ALS算法求解BTD的步骤如下:
算法中的QR分解是为了防止算法出现数值计算错误。
特殊BTD分解
在前面我们已经介绍了BTD分解的两种特殊形式:Tucker分解和CP分解。下面我们再介绍两种特殊的张量分解。
Rank-(Lr,Lr,1)分解
当每一个成员张量退化为Lr×Lr的矩阵时,可以得到Rank−(Lr,Lr,1)分解即:
相应的求解算法和BTD算法类似,只是没有了最后一步的求解core tensor部分。
Rank-(L,L,1)分解
当Rank−(Lr,Lr,1)的每一个Lr取值为一致即L时候即可得到Rank−(L,L,1)分解即:
BTD分解的应用
BTD分解的现阶段的主要应用在盲源分离上,尤其是它的蜕化形式Rank−(L,L,1)形式。 在Rank−(L,L,1)中cr可以看作是一个信号,Ar×Br可以看作是混合矩阵的低秩表达形式。本人也基于此分解在IEEE TGRS上发表了一篇题为“Matrix-Vector Nonnegative Tensor Factorization for Blind Unmixing of Hyperspectral Imagery”的文章,具体可以看 http://www.cs.zju.edu.cn/people/qianyt/paper/Matrix-Vector%20Nonnegative%20Tensor%20Factorization%20for%20Blind%20Unmixing%20of%20Hyperspectral%20Imagery.pdf。
另外,BTD分解现在也开始应用在深度学习中(事实上张量分解在深度学习中的应用最近被广泛地被研究,因为张量分解可以有效地减少深度学习中参数的个数,具体可以Google Tensor deep learning )。新加坡国立大学颜水成教授2017年发表了一篇题为Sharing Residual Units Through Collective Tensor Factorization in Deep Neural Networks 的文章,这篇文章中,用BTD分解来代替残差网路中的卷积单元(没有仔细读,等仔细读之后再详细写)
test comment
请问张量分解现在主要应用有哪些?
因为我是做高光谱图像处理的,我了解的张量分解在高光谱图像的去噪,分类,解混都有应用。另外,现在的深度学习中也有用张量分解做模型的压缩的。
谢谢解答。
请问楼主是否方便分享下您基于BTD发表在IEEE TGRS上论文的代码,若方便,可发送至邮箱(yujieahaq@163.com),谢谢
代码已经放在了GitHub上了 请自行下载 或者访问 http://www.cs.zju.edu.cn/people/qianyt/code/MVNTF.zip 下载
感谢分享