张量分解法

  张量分解算法(CP分解)_Double-V的博客-CSDN博客_cp分解

【张量分解(一)】符号与基础知识_BQW_的博客-CSDN博客_张量符号

『矩阵论笔记』张量CP分解的详细数学推导以及Python实现_布衣小张的博客-CSDN博客

二、张量 CP 分解_上官永石的博客-CSDN博客_张量的cp分解

补充张量分解算法

   一、CP分解是张量分解中的一个分支,那么什么是张量分解?  

        一般一维数组,我们称之为向量(vector),二维数组,我们称之为矩阵(matrix);三维数组以及多位数组,我们称之为张量(tensor)。 

张量分解法_第1张图片

  1. 张量使用手写风格的大写字母表示​;三阶张量​的第(i,j,k)个元素为
  2. 某个序列中的第n个元素使用带括号的上标来表示表示一系列矩阵中的第n个矩阵;
  3. 张量的阶(order)也就是张量的维度,也称为张量的模(mode);

 纤维(fiber)表示从张量中抽取向量的操作, 规定其它维度只保持一个维度变化。

张量分解法_第2张图片

张量分解法_第3张图片

张量分解法_第4张图片

张量分解法_第5张图片

张量分解法_第6张图片

张量分解法_第7张图片

向量内积和外积

张量分解法_第8张图片

三个向量的外积:

     两个矢量的外积是一个矩阵,三个矢量的外积是一个三阶矩阵。计算三个矢量的外积,我们可以用前两个矢量外积的矩阵,分别乘以第三个矢量的每个元素,得到第若干个矩阵按照正面切片拼接为新的张量。

         对矢量其外积记为;  

 我们用的第一个元素和上面的矩阵相乘,得到第一个切片,即

单秩张量(Rank-one)

     如果一个N阶张量能够写成N个向量的外积,即

那么,该张量就称为单秩张量
从微观的角度来看,张量的每一个元素都是由对于向量的分量相乘得到的:

 可以理解为,每个向量表示最终张量的一个维度,向量的分量则是张量维度取值乘积中的一项。

张量分解法_第9张图片

张量展开:

将 N阶张量 沿mode-n展开成一个矩阵(mode-1, 对应着张量的第一阶;mode-2, 对应着张量的第二阶;mode-3 对应着张量的第三阶)。

张量分解法_第10张图片

 例子:张量的展开

张量分解法_第11张图片

CP 分解( Canonical Polyadic Decomposition ,CPD)

CP分解就是将一个张量分解成多个单秩张量的和。

张量分解法_第12张图片

例如,给定一个三阶张量将一个张量表示成有限个秩一张量之和,比如一个三阶张量可以分解为:

如果我们记

 我们称 A,B,C 为因子矩阵,则张量可以表示为:

即为cp分解。 

通常,假设矩阵A ,BC的列向量是标准化后的向量,我们引入一个权重向量来表示每个秩一矩阵所占权重,则分解可以记为如下形式:

 三阶张量是应用当中最为广泛也往往是足够满足我们需求的张量。但是对于一个N阶的张量

其 CP 分解可以被写为:

 其中

CP分解的矩阵形式:

因子矩阵: 秩一张量中对应的向量组成的矩阵,如

 利用因子矩阵,一个三阶张量的CP分解可以写成展开形式:

张量分解法_第13张图片

也就是得到如下近似:

以上的模型还可以用张量的正面切片方式表示为:

 其中, k=1,......,K,整个表示可以用下图表示: 

张量分解法_第14张图片

对于高维的张量,其 mode - n 矩阵化可以写为:

其中 

例子:张量与矩阵相乘,若给定张量 

张量分解法_第15张图片

 这一运算规则也不难发现,张量 Y 的大小为 3 × 2 × 2 以(1,1,1)位置为例:

 再以(1,1,2)位置为例:

张量分解法_第16张图片

张量分解法_第17张图片

 交替最小二乘法求解

下面以三阶张量 X 为例介绍如何使用ALS计算CP分解的因子矩阵 A 、 B 、 C 。首先我们的最终目标是让由 A 、 B 、 C 估计得到的张量尽可能的接近原始张量,即:

 上面的问题可以作为 ALS 的一个子问题,因为分解可以表示为:

 则问题可以转变为固定 B , C 求解

其中表示张量 X的模式1展开为矩阵,=  为X的广义逆

根据性质:

 可以得到:

=

你可能感兴趣的:(算法,机器学习,python)