张量分解--CP、Tucker分解

目录

符号和准备工作

张量

实例

Fiber

Slice

norm

张量内积

(超)对称与(超)对角

秩一张量

对角张量

张量的矩阵化与向量化

Kolda水平展开

 具体例子

mode-n product

矩阵的Kronecker乘积-(张量积)

矩阵的Khatri-Rao乘积

矩阵的Hadamard乘积

CP分解

张量CP分解的定义

向量的内积与外积

CP秩

张量CP分解的理解

Tucker分解

线性变化改变向量维度例子


这两种张量分解算法可以被看做是张量奇异值分解的高阶扩展:CP分解将张量分解为秩一张量之和,Tucker分解是主成成分分析(PCA)的高阶形式。

符号和准备工作

张量

张量可以理解为高阶矩阵

张量分解--CP、Tucker分解_第1张图片

实例

在网络测量领域,如果我们想要测量 n 个网络设备之间的延迟,那么,很自然地,在具体的某一时刻,我们会将这 n 个网络设备两两之间通信的延迟表示为一个 n×n 矩阵。接下来,如果我们收集了许多不同时刻的数据,比方说 n3 个时刻,我们将这些数据排列起来,这样就构成了一个 n×n×n3 张量,如下图所示

张量分解--CP、Tucker分解_第2张图片

Fiber

Fiber在张量分解中指的是张量的一维切片。在三维张量中,Fiber可以是沿着某一特定方向的线段,类似于矩阵的行或列。它是张量结构的一个重要组成部分。

张量分解--CP、Tucker分解_第3张图片

Slice

在张量分解中,"slice"指的是张量的二维切片。对于三维张量,一个slice可以看作是沿着特定方向的一个平面切片,就像三维立方体的一面。每个slice都是一个矩阵,张量可以看作是这些矩阵的堆叠。

张量分解--CP、Tucker分解_第4张图片

正面切片也就对应这上文提到的网络延迟的样子。

我们可以对比一下Fiber以及切片的符号表示,可以看出来,Fiber是固定三阶张量的两个维度,切片是固定三阶张量的一个维度。如果扩展到更 n 阶的张量,那么Fiber是固定张量的 n−1 个维度,切片是固定张量的 n−2 个维度

norm

norm"是一个数学术语,用于衡量向量或矩阵的大小。对于向量,norm通常表示向量的长度,对于矩阵,norm可以表示矩阵的某种“大小”或“长度”。

常见的norm包括:

  • L1范数:向量元素的绝对值之和。
  • L2范数:向量元素的平方和的平方根,也称为欧几里得范数。
  • 无穷范数:向量元素的最大绝对值。
  • Frobenius范数:矩阵元素的平方和的平方根。

假设现在有张量 \chi \in R^{I_{1}\times I_{2}\times \cdots I_{N}} ,张量的范数定义为张量的各个元素\chi _{ijk}的平方和开根号,用公式表示如下:

$\|\boldsymbol{X}\|=\sqrt{\sum_{i_{1}=1}^{I_{1}} \sum_{i_{2}=1}^{I_{2}} \cdots \sum_{i_{N}}^{I_{N}} x_{i_{1} i_{2} \cdots i_{N}}^{2}}$

张量内积

向量的内积就是两个向量对应元素乘积之和,结果是个标量,两个向量外积结果是一个矩阵,三个向量外积是一个三阶张量。

此处张量内积的定义和向量内积是类似的,即张量对应元素乘积之和:

\langle\boldsymbol{x}, \boldsymbol{y}\rangle=\sum_{i_{1}=1}^{I_{1}} \sum_{i_{2}=1}^{I_{2}} \cdots \sum_{i_{N}=1}^{I_{N}} x_{i_{1} i_{2} \cdots i_{N}} y_{i_{1} i_{2} \cdots i_{N}}

(超)对称与(超)对角

  • 立方张量:各个mode的长度相等
  • 对称:一个立方张量是对称的,如果其元素在下标的任意排列下是常数。如一个三阶立方张量是超对称的,如果   x_{i j k}=x_{i k j}=x_{j i k}=x_{j k i}=x_{k i j}=x_{k j i}, \forall i, j, k
  • 对角:仅当 $i_{1}=i_{2}=\cdots=i_{N} \quad x_{i_{1} i_{2} \cdots i_{N}} \neq 0$时,

张量分解--CP、Tucker分解_第5张图片

秩一张量

秩一张量的定义是:如果一个张量可以被表示为一组向量的外积,那么这个张量就被称为秩一张量。具体来说,如果张量 $\mathcal{A} \in R^{n_{1} \times \ldots \times n_{d}}$ 可以被写成 $d$ 个向量的外积,即$\mathcal{A} = \mathbf{v}_{1} \otimes \mathbf{v}_{2} \otimes \ldots \otimes \mathbf{v}_{d}$,那么我们就说张量$\mathcal{A}$ 是秩一的。这里的 $\otimes$ 表示外积运算。

张量分解--CP、Tucker分解_第6张图片

 回顾一下SVD分解

张量分解--CP、Tucker分解_第7张图片

一个矩阵可以分解为左右奇异向量矩阵以及一个奇异值矩阵的乘积形式我们现在不妨以另外一种角度来看待矩阵的SVD分解:

我们如果拿出第一个左奇异向量以及第一个右奇异向量,这两个向量做外积,我们就可以得到一个矩阵,同时这两个奇异向量对应同一个奇异值,我们尝试将奇异值理解为这两个向量外积得到的这个矩阵的在原始矩阵中所占的权重,以此类推我们就可以得到所有奇异值对应的左右奇异向量外积的结果矩阵,然后将这些矩阵加起来就得到了原始矩阵。

矩阵SVD分解就是将矩阵分解为许多因子矩阵之和

1.奇异值分解(SVD): 给定一个矩阵M,SVD分解将其分解为三个部分:左奇异向量(U)、奇异值对角矩阵(Σ)和右奇异向量的转置V^T。数学上表示为:
                                                               M = U \cdot \Sigma \cdot V^T

2. 左右奇异向量的外积: 左奇异向量和右奇异向量可以看作矩阵空间的一组基。外积所得的矩阵可以看作这些基的线性组合。

3. 带有权重的因子矩阵: 奇异值对角矩阵Σ包含了矩阵的奇异值,这些值可以看作权重。将权重与左右奇异向量的外积相乘,得到的就是所谓的因子矩阵

4. 因子矩阵之和: 将所有的因子矩阵相加,就可以重构原始矩阵。这就是说,原始矩阵可以看作许多因子矩阵之和。

矩阵做SVD分解以后,奇异值矩阵中第一个奇异值为1,剩下的奇异值都为0。因此,奇异值为1对应的左右奇异向量的外积所得到的矩阵就是原始矩阵。

对角张量

张量分解--CP、Tucker分解_第8张图片

张量的矩阵化与向量化

在张量的分析与计算中,经常希望用一个矩阵代表一个三阶张量。此时,就需要有一种运算,能够将一个三阶张量(三路阵列)经过重新组织或者排列,变成一个矩阵(二路阵列)。将一个三路或N路阵列重新组织成一个矩阵形式的变换称为张量的矩阵化。张量的矩阵化有时也称张量的展开或张量的扁平化。

                                        将N阶张量$\mathcal{X}$ 沿mode-n展开成一个矩阵 $\mathbf{X}_{(n)}$
除了高阶张量的唯一矩阵表示外,一个高阶张量的唯一向量表示也是很多场合感兴趣的。高阶向量的向量化是一种将张量排列成唯一一个向量的变换。

在张量的矩阵化过程中,首先可以分为水平展开与纵向展开,然后可以进一步细分为Kiers展开、LMV展开、Kolda展开。在此,我们仅介绍Kolda水平展开

Kolda水平展开

Kolda于2006年提出该方法,将 $N$阶张量元素$a_{i_{1}, i_{2}, \cdots, i_{N}}$ 映射为模式-n矩阵 $A_{(n)}$ 的元素 $a_{i_{n}, j}^{I_{n} \times I_{1} \cdots I_{n-1} I_{n+1} \cdots I_{N}}$ ,其中

j=1+\sum_{\substack{k=1 \\ k \neq n}}^{N}\left(i_{k}-1\right) J_{k} \quad$ with $\quad J_{k}=\prod_{\substack{m=1 \\ \text { c. }}}^{k-1} I_{m}

张量分解--CP、Tucker分解_第9张图片

 具体例子

$\mathbf{X}_{1}=\left[\begin{array}{llll}1 & 4 & 7 & 10 \\ 2 & 5 & 8 & 11 \\ 3 & 6 & 9 & 12\end{array}\right], \quad \mathbf{X}_{2}=\left[\begin{array}{llll}13 & 16 & 19 & 22 \\ 14 & 17 & 20 & 23 \\ 15 & 18 & 21 & 24\end{array}\right]$

X_{1}X_{2} 代表张量 $\chi$ 的两个正面切片矩阵。该张量的模式-n展开如下所示:

                     $\begin{array}{c}\mathbf{X}_{(1)}=\left[\begin{array}{llllllll}1 & 4 & 7 & 10 & 13 & 16 & 19 & 22 \\ 2 & 5 & 8 & 11 & 14 & 17 & 20 & 23 \\ 3 & 6 & 9 & 12 & 15 & 18 & 21 & 24\end{array}\right] \\ \mathbf{X}_{(2)}=\left[\begin{array}{ccccccc}1 & 2 & 3 & 13 & 14 & 15 \\ 4 & 5 & 6 & 16 & 17 & 18 \\ 7 & 8 & 9 & 19 & 20 & 21 \\ 10 & 11 & 12 & 22 & 23 & 24\end{array}\right] \\ \mathbf{X}_{(3)}=\left[\begin{array}{cccccccccc}1 & 2 & 3 & 4 & 5 & \cdots & 9 & 10 & 11 & 12 \\ 13 & 14 & 15 & 16 & 17 & \cdots & 21 & 22 & 23\end{array}\right]\end{array}$
对于该张量的向量化形式,因为很好理解,因此直接给出该例的向量化结果:

$\operatorname{vec}(\boldsymbol{X})=\left[\begin{array}{c}1 \\ 2 \\ \vdots \\ 24\end{array}\right]$

mode-n product

mode-n product(模式n乘积)是张量与矩阵之间的一种特殊乘积操作。给定一个张量A和一个矩阵 U,mode-n product表示在张量的第n个模式(或维度)上与矩阵相乘。

数学上,mode-n product可以表示为:

(A \times_n U)_{i_1, \ldots, i_{n-1}, j, i_{n+1}, \ldots, i_d} = \sum_{i_n} A_{i_1, \ldots, i_d} \cdot U_{j, i_n}

其中A \times_n U是新的张量,A是原始张量,U是与张量的第n个模式相乘的矩阵。

这个定义可以写成沿mode-n展开的形式


                                              \mathcal{Y}=\mathcal{X} \times_{n} \mathbf{U} \Leftrightarrow \mathbf{Y}_{(n)}=\mathbf{U} \mathbf{X}_{(n)}
性质:
                ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​\begin{array}{l} \mathcal{X}_{\times_{m}} \mathbf{A} \times_{n} \mathbf{B}=\mathcal{X}_{\times_{n} \mathbf{B} \times{ }_{m} \mathbf{A}, m \neq n} \\ \mathcal{X}_{\times_{n}} \mathbf{A} \times_{n} \mathbf{B}=\mathcal{X}_{\times_{n}}(\mathbf{B A}) \end{array}

一个张量 $\mathrm{X} \in \mathbb{R}^{I_{1} \times I_{2} \times \cdots \times I_{N}}$和一个向量 $\mathbf{v} \in \mathbb{R}^{I_{n}}$$\mathbf{n - m o d e}$ 乘积     

    ​​​​​​​        ​​​​​​​                            $\left(X \bar{x}_{n} \mathbf{v}\right) \in \mathbb{R}^{I_{1} \times \cdots \times I_{n-1} \times I_{n+1} \times \cdots \times I_{N}}$,

其元素定义为        \left(\mathrm{X} \bar{x}_{n} \mathbf{v}\right)_{i_{1} \cdots i_{n-1} i_{n+1} \cdots i_{N}}=\sum_{i_{n}=1}^{I_{n}} x_{i_{1} i_{2} \cdots i_{N}} v_{i_{n}}


性质:                 \mathrm{X} \overline{\mathrm{x}}_{m} \mathbf{a} \overline{\mathrm{x}}_{n} \mathbf{b}=\left(\mathrm{X} \overline{\mathrm{x}}_{m} \mathbf{a}\right) \overline{\mathrm{x}}_{n-1} \mathbf{b}=\left(\mathrm{X} \overline{\mathrm{x}}_{n} \mathbf{b}\right) \overline{\mathrm{x}}_{m} \mathbf{a}, m<n

假设有一个三维张量,可以想象成一个立方体,由许多小立方体组成。每个方向(长度、宽度、高度)都是一个模式。

现在,你想在其中一个方向(例如高度)上与一个矩阵相乘。你可以将立方体切成许多层(每一层都是一个矩阵),然后用给定的矩阵与每一层相乘。

  • 如果你在第一个模式(长度方向)上乘以矩阵,就像将每一行压缩或拉伸。
  • 如果在第二个模式(宽度方向)上乘以矩阵,就像将每一列压缩或拉伸。
  • 如果在第三个模式(高度方向)上乘以矩阵,就像将每一层压缩或拉伸。

这个操作改变了张量的形状,并且可以用于提取信息、降维或其他数学任务。

考虑三阶张量与矩阵的乘积,由于该方法是Tucker定义的,现在常称为Tucker积。

三阶张量的Tucker积: 考虑三阶张量 $\chi \in K^{I_{1} \times I_{2} \times I_{3}}$ 和矩阵 A \in K^{J_{1} \times I_{1}}B \in K^{J_{2} \times I_{2}}$C \in K^{J_{3} \times I_{3}}$的乘积。三阶张量的Tucker模式-1积 $\chi \times_{1} A$ ,模式-2积 $\chi \times_{2} B$ ,模式-3积 $\chi \times{ }_{3} C$分别定义为:

\left(\mathcal{X} \times{ }_{1} A\right)_{j_{1} i_{2} i_{3}}=\sum_{i_{1}=1}^{I_{1}} x_{i_{1} i_{2} i_{3}} a_{j_{1} i_{1}}, \forall j_{1}, i_{2}, i_{3} \\ \left(\mathcal{X} \times{ }_{2} B\right)_{i_{1} j_{2} i_{3}}=\sum_{i_{2}=1}^{I_{2}} x_{i_{1} i_{2} i_{3}} b_{j_{2} i_{2}}, \forall i_{1}, j_{2}, i_{3} \\ \left(\mathcal{X} \times{ }_{3} C\right)_{i_{1} i_{2} j_{3}}=\sum_{i_{3}=1}^{I_{3}} x_{i_{1} i_{2} i_{3}} c_{j_{3} i_{3}}, \forall i_{1}, i_{2}, j_{3} \\

我们先将 $\chi$进行模式-1展开,所得矩阵的维度为 $I_{1} \times I_{2} I_{3}$
我们将张量展开成了一个矩阵,那么模式-n乘积也就变成了两个矩阵相乘,这个大家肯定都不陌生。这两个矩阵的维度分别是 I_{1} \times I_{2} I_{3} 以及 $A \in J_{1} \times I_{1}$,因此,很明显的一点是,如果按照原来的顺序,这两个矩阵是无法直接相乘的,因此我们需要把 $A$放到张量展开矩阵的左边。所得结果是一个 $J_{1} \times I_{2} I_{3}$ 的矩阵,注意,此处我们还需要将这个矩阵还原成张量,所以最终的结果是一个 $J_{1} \times I_{2} \times I_{3}$ 的张量。

矩阵的Kronecker乘积-(张量积)

$\mathbf{A} \in \mathbb{R}^{I \times J}, \mathbf{B} \in \mathbb{R}^{K \times L}$,


                        \mathbf{A} \otimes \mathbf{B}=\left[\begin{array}{cccc} a_{11} \mathbf{B} & a_{12} \mathbf{B} & \cdots & a_{1 J} \mathbf{B} \\ a_{21} \mathbf{B} & a_{22} \mathbf{B} & \cdots & a_{2 J} \mathbf{B} \\ \vdots & \vdots & \ddots & \vdots \\ a_{I 1} \mathbf{B} & a_{I 2} \mathbf{B} & \cdots & a_{I J} \mathbf{B} \end{array}\right] \in \mathbb{R}^{I K \times J L}


性质:        ​​​​​​​        ​​​​​​​        ​​​​​​​         (\mathbf{A} \otimes \mathbf{B})(\mathbf{C} \otimes \mathbf{D})=(\mathbf{A C}) \otimes(\mathbf{B D}) \\ (\mathbf{A} \otimes \mathbf{B})^{+}=\mathbf{A}^{+} \otimes \mathbf{B}^{+}

矩阵的 Kronecker 积还和张量和矩阵的 n-mode 乘积有如下关系:
$\begin{array}{l}\mathrm{Y}=\mathrm{X} \times{ }_{1} \mathbf{A}^{(1)} \cdots \times_{N} \mathbf{A}^{(N)} \Leftrightarrow \\ \mathbf{Y}_{(n)}=\mathbf{A}^{(n)} \mathbf{X}_{(n)}\left(\mathbf{A}^{(N)} \otimes \cdots \otimes \mathbf{A}^{(n+1)} \otimes \mathbf{A}^{(n-1)} \otimes \cdots \otimes \mathbf{A}^{(1)}\right)^{\mathrm{T}}\end{array}$

矩阵的Khatri-Rao乘积

$\mathbf{A} \in \mathbb{R}^{I \times K}{ }_{r} \mathbf{B} \in \mathbb{R}^{J \times K}$​​​​​​​, 则
$\mathbf{A} \odot \mathbf{B}=\left[\begin{array}{llll}\mathbf{a}_{1} \otimes \mathbf{b}_{1} & \mathbf{a}_{2} \otimes \mathbf{b}_{2} & \cdots & \mathbf{a}_{K} \otimes \mathbf{b}_{K}\end{array}\right] \in \mathbb{R}^{I J \times K}$
性质: $\mathbf{A} \odot \mathbf{B} \odot \mathbf{C}=(\mathbf{A} \odot \mathbf{B}) \odot \mathbf{C}=\mathbf{A} \odot(\mathbf{B} \odot \mathbf{C})$

矩阵的Hadamard乘积

\mathbf{A} \in \mathbb{R}^{I \times J}, \mathbf{B} \in \mathbb{R}^{I \times J},

                       $\mathbf{A} * \mathbf{B}=\left[\begin{array}{cccc}a_{11} b_{11} & a_{12} b_{12} & \cdots & a_{1 J} b_{1 J} \\ a_{21} b_{21} & a_{22} b_{22} & \cdots & a_{2 J} b_{2 J} \\ \vdots & \vdots & \ddots & \vdots \\ a_{I 1} b_{I 1} & a_{I 2} b_{I 2} & \cdots & a_{I J} b_{I J}\end{array}\right] \in \mathbb{R}^{I \times J}$

性质:                   $\begin{array}{l}(\mathbf{A} \odot \mathbf{B})^{\mathrm{T}}(\mathbf{A} \odot \mathbf{B})=\left(\mathbf{A}^{\mathrm{T}} \mathbf{A}\right) *\left(\mathbf{B}^{\mathrm{T}} \mathbf{B}\right) \\ (\mathbf{A} \odot \mathbf{B})^{+}=\left(\left(\mathbf{A}^{\mathrm{T}} \mathbf{A}\right) *\left(\mathbf{B}^{\mathrm{T}} \mathbf{B}\right)\right)^{+}(\mathbf{A} \odot \mathbf{B})^{\mathrm{T}}\end{array}$


CP分解

CP分解是将张量分解为一系列的秩一张量之和。

张量CP分解的定义

对于一个 $\chi \in R^{I \times J \times K}$ ,其CP分解公式如下:

                                                       \boldsymbol{X} \approx \sum_{r=1}^{R} \mathbf{a}_{r} \circ \mathbf{b}_{r} \circ \mathbf{c}_{r}
注意 $a_{r}, b_{r}, c_{r}$的维度分别是 a_{r} \in R^{I}, b_{r} \in R^{J}, c_{r} \in R^{K}R 就是我们所说的 CP秩。更直观的理解看下图:

张量分解--CP、Tucker分解_第10张图片

向量的内积与外积

张量分解--CP、Tucker分解_第11张图片

若向量 $a \in R^{n_{1}}, b \in R^{n_{2}}$ ,则两个向量的外积
\left(a \circ b=a b^{T}\right)_{n_{1} \times n_{2}}
生成一个矩阵。其中符号 “。”表示外积运算。因此两个向量的外积运算从一维向量变为二维矩 阵,增加了一个维度
举例说明,若
                                                        x=\left[\begin{array}{l} 0 \\ 1 \end{array}\right],

                        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        y=\left[\begin{array}{l} 1 \\ 0 \end{array}\right]

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        x \circ y=x y^{T}=\left[\begin{array}{ll} 0 & 0 \\ 1 & 0 \end{array}\right]
若向量 $a \in R^{n_{1}}, b \in R^{n_{2}}, c \in R^{n_{3}}$ ,则三个向量的外积
        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        a \circ b \circ c=\left(c *\left(a b^{T}\right)\right)_{n_{1} \times n_{2} \times n_{3}}
是一个三阶张量。这里的 “$*$ ” 运算为 $c$ 中第一个元素与矩阵$\left(a b^{T}\right)_{n_{1} \times n_{2}}$ 相乘生成张量的第一 个frontal slice,其中最后一个元素与矩阵\left(a b^{T}\right)_{n_{1} \times n_{2}} 相乘生成张量的最后一个frontal slice。三个向量的外积的 3 维的张量,因此每做一次外积运算维度都增加1。

CP秩

对于一个给定的张量,其CP秩是能够精确表示该张量的最小秩一张量的数量。

张量CP分解的理解

张量分解--CP、Tucker分解_第12张图片

$\chi_{111}$ 元素就是张量左上角的元素,我们知道,这个元素一定是各个因子张量左上角的元素之和组 成的。我们不妨来考虑一下上图的第一个因子张量。
在此之前,我们先定义一些新的符号,在上图中 $a_{1}, b_{1}, c_{1}$ 代表三个向量,现在定义$a_{1 i}, b_{1 j}, c_{1 k}$代表这三个向量中不同位置的标量值。为了书写方便,我们将第一个下标1去掉,现 在就变成了 $a_{i}, b_{j}, c_{k}$ 。假设 $I=J=K=3$ ,那么 $a \circ b \circ c$ 如下图所示:

\begin{array}{l} a=\left[\begin{array}{l} a_{1} \\ a_{2} \\ a_{3} \end{array}\right] \quad b=\left[\begin{array}{l} b_{1} \\ b_{2} \\ b_{3} \end{array}\right] \quad c=\left[\begin{array}{l} c_{1} \\ c_{2} \\ c_{3} \end{array}\right] \\ a \circ b=\left[\begin{array}{l} a_{1} \\ a_{2} \\ a_{3} \end{array}\right] \times\left[\begin{array}{lll} b_{1} & b_{2} & b_{3} \end{array}\right]=\left[\begin{array}{lll} a_{1} b_{1} & a_{1} b_{2} & a_{1} b_{3} \\ a_{2} b_{1} & a_{2} b_{2} & a_{2} b_{3} \\ a_{3} b_{1} & a_{3} b_{2} & a_{3} b_{3} \end{array}\right] \\ \end{array}

a \circ b \circ c为一个张量

设张量的第一个正面切片为:

$\left[\begin{array}{lll}a_{1} b_{1} c_{1} & a_{1} b_{2} c_{1} & a_{1} b_{3} c_{1} \\ a_{2} b_{1} c_{1} & a_{2} b_{2} c_{1} & a_{2} b_{3} c_{1} \\ a_{3} b_{1} c_{1} & a_{3} b_{2} c_{1} & a_{3} b_{3} c_{1}\end{array}\right]$

张量的第二个正面切片为:

$\left[\begin{array}{ccc}a_{1} b_{1} c_{2} & a_{1} b_{2} c_{2} & a_{1} b_{3} c_{2} \\ a_{2} b_{1} c_{2} & a_{2} b_{2} c_{2} & a_{2} b_{3} c_{2} \\ a_{3} b_{1} c_{2} & a_{3} b_{2} c_{2} & a_{3} b_{3} c_{2}\end{array}\right]$

张量的第三个正面切片为:
        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​     $\left[\begin{array}{lll}a_{1} b_{1} c_{3} & a_{1} b_{2} c_{3} & a_{1} b_{3} c_{3} \\ a_{2} b_{1} c_{3} & a_{2} b_{2} c_{3} & a_{2} b_{3} c_{3} \\ a_{3} b_{1} c_{3} & a_{3} b_{2}c_{3}&a_{3}b_{3}c_{3} \end{array}\right]$

也就是说,第一个因子张量的左上角位置元素为 $a_{11} b_{11} c_{11}$ ,第二个因子张量左上角位置元素为 $a_{21} b_{21} c_{21}$ ,以此类推,我们就可以知道 $\chi_{111}=\sum_{R}^{r} a_{r 1} b_{r 1} c_{r 1}$ ,张量 $\chi$其他位置的元素也可 以用同样的方法推导。


        ​​​​​​​        x_{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, K

我们将CP分解中最小的单元看作了不同的向量,向量的外积组成了不同的张量,因子张量之和就是原始张量。

Tucker分解

通常我们认为,CP分解是张量Tucker分解的一种特殊情况。

Tucker分解是一种高阶的主成分分析,它将一个张量表示成一个核心(core)张量沿每一个mode乘上一个矩阵。

通俗来讲,PCA的目的就是用 个主分量概括表达统计相关的 n 个特征,因此PCA算法是一种降维方法。那么,我们之前说Tucker分解是PCA的高阶形式,我们应该也可以尝试用这种降维的思想去理解Tucker分解。

首先,我们需要确立一种思维,我们知道一个矩阵可以理解为一种线性变换,那么对于 $A \times B$, 我们可以理解为在矩阵$A$ 上施加一种线性变换,如果同时考虑矩阵维数变化的话, $A \in R^{I_{1} \times I_{2}}, B \in R^{I_{2} \times I_{3}}$ ,那么 $(A \times B) \in R^{I_{1} \times I_{3}}$我们尝试这样去理解: $A \times B$ 相当 于沿着矩阵的第二个维度施加了线性变化,使得第二个维度由 $I_{2}$ 变成了$I_{3}$

线性变化改变向量维度例子

线性变换 T: V \rightarrow W 可以将一个 n-维向量空间V 映射到一个 m-维向量空间W

这种类型的线性变换通常用m \times n矩阵 A来表示。给定一个n-维向量 \mathbf{x},应用线性变换后,我们得到一个 m-维向量 \mathbf{y},即:

\mathbf{y} = A\mathbf{x}

例如,考虑以下 3 \times 2矩阵 A

A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{bmatrix}

这个矩阵可以将一个 2-维向量 \mathbf{x} = \begin{bmatrix} x_1 \\ x_2 \end{bmatrix}映射到一个 3-维向量\mathbf{y},即:

\mathbf{y} = A\mathbf{x} = \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} = \begin{bmatrix} x_1 + 2x_2 \\ 3x_1 + 4x_2 \\ 5x_1 + 6x_2 \end{bmatrix}

这样,我们就通过线性变换将一个 2-维向量映射到了一个 3-维向量。

我们现在来考虑$\chi \times_{1} A$ ,其中张量 $\chi \in R^{I_{1} \times I_{2} \times I_{3}}$ ,矩阵 $A \in R^{J_{1} \times I_{1}}$ ,我们知道这个模式- 1 积的结果是一个 $J_{1} \times I_{2} \times I_{3}$ 的张量,那么我们不妨认为 模式-1积是沿着张量 $\chi$ 的第一个维度施加了线性变换,使得第一个维度从 $I_{1}$ 变化到了 $J_{1}$ 。如果 $J_{1}<I_{1}$ 的话,就相当于沿着张量的第一维度进行了一种降维操作。

现在,我们给出Tucker分解的定义,对于张量 $\chi \in R^{I \times J \times K}$,其Tucker分解形式如下:
        ​​​​​​​        \boldsymbol{X} \approx \mathcal{G} \times{ }_{1} \mathbf{A} \times{ }_{2} \mathbf{B} \times{ }_{3} \mathbf{C}=\sum_{p=1}^{P} \sum_{q=1}^{Q} \sum_{r=1}^{R} g_{p q r} \mathbf{a}_{p} \circ \mathbf{b}_{q} \circ \mathbf{c}= [[\mathcal{G} ;A,B,C]]
其中, $A \in R^{I \times P}, B \in R^{J \times Q}, C \in R^{K \times R}$ 是Tucker分解得到的因子矩阵,
        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \mathcal{G} \in \mathbb{R}^{P \times Q \times R}

代表核心张量,它的元素代表不同因子矩阵之间相互作用的水平。Tucker分解示意图如下:

张量分解--CP、Tucker分解_第13张图片

参考链接



http://深入理解 | CP、Tucker分解 - 达布牛学习笔记的文章 - 知乎 https://zhuanlan.zhihu.com/p/302453223

githup项目​​​​​​​ 

你可能感兴趣的:(时序知识图谱补全,知识积累,张量分解)