张量分解(二):CP分解

这一篇文章主要讲解CP分解算法(CANDECOMP/PARAFAC decomposition).
首先,我们必须明确,CP分解是做了什么工作,目的是想干什么。
我来自问自答:CP分解是将一个高维的张量,分解成多个核的和,每个核是由向量的外积组成;通过这样的分解,我们可以大大地降低参数的维度。
其实,不止CP分解,其他的张量分解算法都是同个道理,只是所采用的分解方法不同而已。当然,这样的分解只是原来张量的近似,没办法保证完全复原。
从以上角度来说,张量分解的目的跟矩阵分解是相同的,只是一个是在二维上的分解,另一个是在高维上的分解而已。
好了,开始进入正题。简单来说,CP分解其实就是多个rank-one tensors的和。rank-one tensors请参考上一篇文章:张量分解(一):基础知识
一个三维张量的CP分解如下图所示:
张量分解(二):CP分解
用公式表达如下:
张量分解(二):CP分解
当然,我们还可以将张量X矩阵化:
张量分解(二):CP分解
至于怎么转换的,可能要看一下上一篇文章的Khatri-Rao product,这里不细说。
我们可以使用向量λ对三维向量a,b,c进行归一化:
张量分解(二):CP分解
当然,这是当核是三维的情况下,当核是N维时,同个道理:
张量分解(二):CP分解
以上,就是CP分解的介绍。
接下来,我将讲一下CP分解的优化。上面我们已经有了CP分解的形式了,那么我们怎么去优化所有参数,使得分解后跟分解前尽可能的相似呢?
一个常用的方法是使用交替最小二乘法(the alternating least squares,ALS)去优化。我们以三维张量为例,如下所示:
张量分解(二):CP分解
其中,X为已知的张量,X^为待优化的参数,已经被分解成向量外积的形式。
我们这里的优化方法是:先固定B,C,优化A;接着固定A,C,优化B;固定A,B,优化C;然后继续迭代,直到达到终止条件(达到迭代次数或者损失不再降低等)。
对于参数A,完整的优化过程如下图所示:
张量分解(二):CP分解
张量分解(二):CP分解
参数B,C同理,然后不断迭代即可。
N维tensor完整的交替最小二乘法优化CP分解参数的过程如下图:
张量分解(二):CP分解
以上,便是关于CP分解的所有内容。

参考:tensor decompositions and application