张量分解算法(CP分解)_Double-V的博客-CSDN博客_cp分解
【张量分解(一)】符号与基础知识_BQW_的博客-CSDN博客_张量符号
『矩阵论笔记』张量CP分解的详细数学推导以及Python实现_布衣小张的博客-CSDN博客
二、张量 CP 分解_上官永石的博客-CSDN博客_张量的cp分解
一、CP分解是张量分解中的一个分支,那么什么是张量分解?
一般一维数组,我们称之为向量(vector),二维数组,我们称之为矩阵(matrix);三维数组以及多位数组,我们称之为张量(tensor)。
纤维(fiber)表示从张量中抽取向量的操作, 规定其它维度只保持一个维度变化。
向量内积和外积
三个向量的外积:
两个矢量的外积是一个矩阵,三个矢量的外积是一个三阶矩阵。计算三个矢量的外积,我们可以用前两个矢量外积的矩阵,分别乘以第三个矢量的每个元素,得到第若干个矩阵按照正面切片拼接为新的张量。
对矢量其外积记为;
我们用的第一个元素和上面的矩阵相乘,得到第一个切片,即
单秩张量(Rank-one)
那么,该张量就称为单秩张量。
从微观的角度来看,张量的每一个元素都是由对于向量的分量相乘得到的:
可以理解为,每个向量表示最终张量的一个维度,向量的分量则是张量维度取值乘积中的一项。
mode-n
展开成一个矩阵mode-1
, 对应着张量的第一阶;mode-2,
对应着张量的第二阶;mode-3
对应着张量的第三阶)。例子:张量的展开
CP分解就是将一个张量分解成多个单秩张量的和。
例如,给定一个三阶张量将一个张量表示成有限个秩一张量之和,比如一个
三阶张量
可以分解为:
如果我们记
我们称 A,B,C 为因子矩阵,则张量可以表示为:
即为cp分解。
通常,假设矩阵A ,B和C的列向量是标准化后的向量,我们引入一个权重向量来表示每个秩一矩阵所占权重,则分解可以记为如下形式:
三阶张量是应用当中最为广泛也往往是足够满足我们需求的张量。但是对于一个N阶的张量
其 CP 分解可以被写为:
其中
因子矩阵: 秩一张量中对应的向量组成的矩阵,如
利用因子矩阵,一个三阶张量的CP分解可以写成展开形式:
也就是得到如下近似:
以上的模型还可以用张量的正面切片方式表示为:
其中, k=1,......,K,整个表示可以用下图表示:
对于高维的张量,其 mode - n 矩阵化可以写为:
其中
例子:张量与矩阵相乘,若给定张量
这一运算规则也不难发现,张量 Y 的大小为 3 × 2 × 2 以(1,1,1)位置为例:
再以(1,1,2)位置为例:
下面以三阶张量 X 为例介绍如何使用ALS计算CP分解的因子矩阵 A 、 B 、 C 。首先我们的最终目标是让由 A 、 B 、 C 估计得到的张量尽可能的接近原始张量
,即:
上面的问题可以作为 ALS 的一个子问题,因为分解可以表示为:
则问题可以转变为固定 B , C 求解
根据性质:
可以得到: