欢迎大家来到这一期的张量分解博客学习,本期博客的主要内容就是标题,难度会加大,本人也有写的错误的地方,烦请大家不吝赐教!
一. CANDECOMP/PARAFAC分解法
CANDECOMP(canonical decomposition)和PARAFAC(parallel factors)是一种对高维张量进行拆分的方法, 其核心思想是用有限个的秩1张量的和来(近似地)表示该张量. 这种方法被很多人独立的发现, 不考虑历史上的因素, 我们将其称为CP分解法 (CP decomposition) !
其实你可以这么理解:
CP分解是将一个高维的张量,分解成多个核的和,每个核是由向量的外积组成;通过这样的分解,我们可以大大地降低参数的维度。其实,不止CP分解,其他的张量分解算法都是同个道理,只是所采用的分解方法不同而已。当然,这样的分解只是原来张量的近似,没办法保证完全复原。从以上角度来说,张量分解的目的跟矩阵分解是相同的,只是一个是在二维上的分解,另一个是在高维上的分解而已!
这就要陆续的结合我们之前铺垫的相关知识了,检测前几期博客是否认真学习的时候到了,我们先看定义:
小伙伴们千万别把它想得有多复杂,且听我一步一步的慢慢道来:
如果我们要把一个3阶张量 X∈RI×J×K\mathcal{X} \in \mathbb{R}^{I\times J\times K}X∈RI×J×K 进行CP分解, 其结果如下:
X≈∑r=1Rar∘br∘cr\mathcal{X} \approx \sum_{r=1}^{R} a_{r}\circ b_{r} \circ c_{r}X≈r=1∑Rar∘br∘cr
这里的 ∘\circ∘ 是外积的意思!
根据上面的图,我们知道这里的 ara_{r}ar 之类的都是向量,通过三者之间的外积,组成一个新的矩阵,之后将新得到的矩阵求和,就是新的矩阵了, 通过外积的定义, 对张量中的每个元素都有:
xijk≈∑r=1Rairbjrckrfori=1,…,I,j=1,…,J,k=1,…,Kx_{i j k} \approx \sum_{r=1}^{R} a_{i r} b_{j r} c_{k r} \text { for } i=1, \ldots, I, j=1, \ldots, J, k=1, \ldots, Kxijk≈r=1∑Rairbjrckrfori=1,…,I,j=1,…,J,k=1,…,K