本文是对论文Tensor Decompositions and Applications进行了翻译、整理、筛选和适当的补充,如何希望深入理解可以阅读原文。

相关文章:

【张量分解(一)】符号与基础知识
【张量分解(二)】CP分解
【张量分解(三)】Tucker分解

一、介绍

物理或工程中的张量,在数学中通常称为张量场。本文所涉及到的张量是指多维数组,或者说是多维向量空间中的元素。
一阶张量称为向量,二阶张量称为矩阵,三阶或者更高阶张量则称为高阶张量或者直接称为张量。

二、符号

  1. 张量使用手写风格的大写字母表示,例如X\mathcal{X}X;
  2. 矩阵使用黑体的大写字母表示,例如A\textbf{A}A;
  3. 向量使用黑体的小写字母表示,例如a\textbf{a}a;
  4. 标量使用小写字母表示,例如aaa;
  5. 向量a\textbf{a}a的第i个分量表示为aia_iai​;
  6. 矩阵A\textbf{A}A的第(i,j)个元素表示为aija_{ij}aij​;
  7. 三阶张量X\mathcal{X}X的第(i,j,k)个元素为xijkx_{ijk}xijk​;
  8. 某个序列中的第n个元素使用带括号的上标来表示,例如A(n)表示一系列矩阵中的第n个矩阵\textbf{A}^{(n)}表示一系列矩阵中的第n个矩阵A(n)表示一系列矩阵中的第n个矩阵;
  9. 张量的阶(order)也就是张量的维度,也称为张量的模(mode);

三、一些概念

1. 子数组

由于张量可以看做是多维数组,那么当对多维数组中各个维度进行选择后就会形成子数组。在这里使用冒号":"来表示选择该维度上的所有值。
例如对于矩阵A\textbf{A}A的第j列表示为a:j\textbf{a}_{:j}a:j​,第i行表示为ai:\textbf{a}_{i:}ai:​。为了更加紧凑,将矩阵的列a:j\textbf{a}_{:j}a:j​表示为aj\textbf{a}_{j}aj​。

2. Fiber

Fiber是矩阵行和列在高阶张量中的类似物。更正式的来说,通过固定一个张量的大部分维度只保留其中的一个维度所形成的子数组,称为fiber。
例如一个矩阵的1模(mode-1)fiber就是指矩阵的列,2模(mode-2)fiber就是指矩阵的行。对于三阶张量来说,则有行、列和通道(tube)三种fiber,分别表示为x:jk\textbf{x}_{:jk}x:jk​、xi:k\textbf{x}_{i:k}xi:k​和xij:\textbf{x}_{ij:}xij:​。直观的展示如下图:

3. Slice

通过固定一个张量的大部分维度只保留其中的两个维度所形成的子数据,称为Slice。
例如三阶张量X\mathcal{X}X的水平、垂直和通道slice表示为Xi::\textbf{X}_{i::}Xi::​、X:j:\textbf{X}_{:j:}X:j:​和X::k\textbf{X}_{::k}X::k​。为了更加紧凑,三阶张量的第k个通道slice X::k\textbf{X}_{::k}X::k​表示为Xk\textbf{X}_{k}Xk​。直观的展示如下图:

四、基础知识

1. 范数

张量的范数类似于矩阵的Frobenius范数,即对张量中所有元素平方求和后再开方:
∣∣X∣∣=∑i1=1I1∑i2=1I2...∑iN=1INxi1i2...iN2\Big\lvert \big\lvert \mathcal{X} \big\rvert \Big\rvert = \sqrt{\sum_{i_1=1}^{I_1}\sum_{i_2=1}^{I_2}...\sum_{i_N=1}^{I_N}x^2_{i_1i_2...i_N}}∣∣∣​∣∣​X∣∣​∣∣∣​=i1​=1∑I1​​i2​=1∑I2​​...iN​=1∑IN​​xi1​i2​...iN​2​​

2. 内积

两个形状相同的张量的各个分量相乘并求和称为张量的内积,设X,Y∈RI1×I2...×IN\mathcal{X},\mathcal{Y}\in\mathbb{R}^{I_1\times I_2...\times I_N}X,Y∈RI1​×I2​...×IN​,则两张量的内积为⟨X,Y⟩=∑i1=1I1∑i2=1I2...∑iN=1INxi1i2...iNyi1i2...iN\langle\mathcal{X},\mathcal{Y}\rangle = \sum_{i_1=1}^{I_1}\sum_{i_2=1}^{I_2}...\sum_{i_N=1}^{I_N}x_{i_1i_2...i_N}y_{i_1i_2...i_N}⟨X,Y⟩=i1​=1∑I1​​i2​=1∑I2​​...iN​=1∑IN​​xi1​i2​...iN​​yi1​i2​...iN​​

3. 单秩张量(Rank-one)

如果一个N阶张量X∈RI1×I2...×IN\mathcal{X}\in\mathbb{R}^{I_1\times I_2...\times I_N}X∈RI1​×I2​...×IN​,能够写成N个向量的外积,即
X=a(1)∘a(2)∘...∘a(N)\mathcal{X}=\textbf{a}^{(1)}\circ\textbf{a}^{(2)}\circ...\circ\textbf{a}^{(N)}X=a(1)∘a(2)∘...∘a(N)
那么,该张量就称为单秩张量。
从微观的角度来看,张量的每一个元素都是由对于向量的分量相乘得到的:
xi1i2...iN=ai1(1)ai2(2)...aiN(N)x_{i_1i_2...i_N}=a_{i_1}^{(1)}a_{i_2}^{(2)}...a_{i_N}^{(N)}xi1​i2​...iN​​=ai1​(1)​ai2​(2)​...aiN​(N)​
可以理解为,每个向量表示最终张量的一个维度,向量的分量则是张量维度取值乘积中的一项。

4. 张量对称

如何一个张量的所有维度均相同,则称该张量为cubical,例如X∈RI×I×...×I\mathcal{X}\in\mathbb{R}^{I\times I\times ... \times I}X∈RI×I×...×I;
如何一个cubical张量中一组下标任意组合所对应的元素均相等则称该张量超对称。例如三阶张量X∈RI×I×I\mathcal{X}\in\mathbb{R}^{I\times I\times I}X∈RI×I×I,如果满足
xijk=xikj=xjik=xjki=xkij=xkji,i,j,k=1,...,Ix_{ijk}=x_{ikj}=x_{jik}=x_{jki}=x_{kij}=x_{kji}, i,j,k=1,...,Ixijk​=xikj​=xjik​=xjki​=xkij​=xkji​,i,j,k=1,...,I
则称张量X\mathcal{X}X超对称。
除了上面在所有维度均对称的超对称外,张量也可以在两维甚至多维上对称。例如,如果三阶张量X∈RI×I×I\mathcal{X}\in\mathbb{R}^{I\times I\times I}X∈RI×I×I的所有通道slice都是对称的,即
Xk=XkT,k=1,2,...,K\textbf{X}_k=\textbf{X}_k^T,k=1,2,...,KXk​=XkT​,k=1,2,...,K
则张量X\mathcal{X}X在维度1和2上对称。

5. 对角张量(Diagonal tensors)

对于张量X∈RI1×I2...×IN\mathcal{X}\in\mathbb{R}^{I_1\times I_2...\times I_N}X∈RI1​×I2​...×IN​,如果所有下标满足i1=i2=...=iNi_1=i_2=...=i_Ni1​=i2​=...=iN​的元素值不为0,其他元素均为0,则该张量为对角张量。特别地,当对角张量中不为0的元素值均为1时,称为单位张量(identity tensor),用符号J\mathcal{J}J表示。三阶单位张量间下图:

6. 张量矩阵化(Matricization)

张量矩阵化也称为张量展开(unfolding)或者拉平(flattening),是一种将n阶张量中的元素重新排列为矩阵的过程。例如一个2×3×42\times3\times42×3×4的三阶张量可以重排列为一个6×46\times46×4或许3×83\times83×8的矩阵。本文仅讨论张量矩阵化的一种特例,n模矩阵化。在介绍fiber时,我们知道n模fiber就是张量按第n维为自由维度得到了向量,而n模矩阵化就是将n模fiber向量作为重排矩阵的列。将一个张量X∈RI1×I2...×IN\mathcal{X}\in\mathbb{R}^{I_1\times I_2...\times I_N}X∈RI1​×I2​...×IN​进行n模矩阵化后得到的矩阵表示为X(n)\textbf{X}_{(n)}X(n)​。
从微观来看,张量中元素(i1,i2,...,iN)(i_1,i_2,...,i_N)(i1​,i2​,...,iN​)映射到矩阵元素为(in,j)(i_n,j)(in​,j),即第n维上元素的坐标作为新矩阵中的横坐标,纵坐标则由其他维度上的坐标统一决定,具体方式如下:
j=1+∑k=1,k≠nN(ik−1)Jk,其中Jk=∏m=1,m≠nk−1Imj=1+\sum_{k=1,k\neq n}^N(i_k-1)J_k,其中J_k=\prod_{m=1,m\neq n}^{k-1}I_mj=1+k=1,k​=n∑N​(ik​−1)Jk​,其中Jk​=m=1,m​=n∏k−1​Im​
JkJ_kJk​可以理解为前k-1个维度中,除去第n维以外的所有维度相乘。

7. 张量的n模积乘法

张量可以有很多种方式乘在一起,但这里只介绍n模积,即张量在维度n处乘以矩阵或者向量。
7.1 张量与矩阵相乘
给定一个N阶张量X∈RI1×I2...×IN\mathcal{X}\in\mathbb{R}^{I_1\times I_2...\times I_N}X∈RI1​×I2​...×IN​和矩阵U∈RJ×In\textbf{U}\in\mathbb{R}^{J\times I_n}U∈RJ×In​,则二者的n模积可以表示为X×nU\mathcal{X}\times_n\textbf{U}X×n​U,其结果是一个维度为I1×...×In−1×J×In+1×...×INI_1\times ... \times I_{n-1} \times J \times I_{n+1}\times ... \times I_NI1​×...×In−1​×J×In+1​×...×IN​的张量,即将维度InI_nIn​转变为JJJ。
从slice的角度来看,由于n模slice是一个矩阵,因此n模积可以看做张量X\mathcal{X}X的所有n模slice乘以矩阵U\textbf{U}U。设Y=X×nU\mathcal{Y}=\mathcal{X}\times_n\textbf{U}Y=X×n​U,则张量Y\mathcal{Y}Y的n模slice,等于X\mathcal{X}X的n模slice乘以矩阵U\textbf{U}U,即
Y(n)=UX(n)\textbf{Y}_{(n)}=\textbf{U}\textbf{X}_{(n)}Y(n)​=UX(n)​
另外,n模积的结果与乘积的顺序无关,即
X×mA×nB=X×nB×mA\mathcal{X}\times_m\textbf{A}\times_n\textbf{B} = \mathcal{X}\times_n\textbf{B}\times_m\textbf{A}X×m​A×n​B=X×n​B×m​A

7.2 张量与向量相乘
给定一个N阶张量X∈RI1×I2...×IN\mathcal{X}\in\mathbb{R}^{I_1\times I_2...\times I_N}X∈RI1​×I2​...×IN​和向量v∈RIn\textbf{v}\in\mathbb{R}^{I_n}v∈RIn​,则二者的n模积可以表示为X∙nv\mathcal{X}\bullet_n\textbf{v}X∙n​v,其结果是一个维度为I1×...×In−1×In+1×...×INI_1\times ... \times I_{n-1} \times I_{n+1}\times ... \times I_NI1​×...×In−1​×In+1​×...×IN​的N-1阶张量,即将消除原张量的第n维。
从fiber的角度来看,由于n模fiber是一个向量,因此n模积可以看做张量X\mathcal{X}X的所有n模fiber乘以向量v\textbf{v}v。由于向量间乘法使用的是内积,因此导致最终结果为维度为N-1。从微观的角度来看,可以得到
(X∙nv)i1...in−1in+1...iN=∑in=1Inxi1i2...iNvin(\mathcal{X}\bullet_n\textbf{v})_{i_{1}...i_{n-1}i_{n+1}...i_N}=\sum_{i_n=1}^{I_n}x_{i_{1}i_{2}...i_{N}}v_{i_n}(X∙n​v)i1​...in−1​in+1​...iN​​=in​=1∑In​​xi1​i2​...iN​​vin​​
与n模矩阵乘法不同,n模向量乘法的顺序会影响最终的结果,例如:
X∙ma∙nb=(X∙ma)∙n−1b=(X∙nb)∙ma,其中m<n\mathcal{X}\bullet_m\textbf{a}\bullet_n\textbf{b}=(\mathcal{X}\bullet_m\textbf{a})\bullet_{n-1}\textbf{b}=(\mathcal{X}\bullet_n\textbf{b})\bullet_m\textbf{a},其中m<nX∙m​a∙n​b=(X∙m​a)∙n−1​b=(X∙n​b)∙m​a,其中m<n
由于m<n,如果先进行X∙ma\mathcal{X}\bullet_m\textbf{a}X∙m​a,那么会导致前m维度缩减为m-1维,因此需要∙n−1b\bullet_{n-1}\textbf{b}∙n−1​b。

8. 矩阵的Kronecker、Khatri-Rao、Hadamard积

8.1 Kronecker积
Kronecker积是将一个矩阵的所有元素与另一个矩阵相乘,拼接得到更大的矩阵。矩阵A∈RI×J\textbf{A}\in\mathbb{R}^{I\times J}A∈RI×J和B∈RK×L\textbf{B}\in\mathbb{R}^{K\times L}B∈RK×L的Kronecker积表示为A⊗B\textbf{A}\otimes\textbf{B}A⊗B, 其结果是一个大小为(IK)×(JL)(IK)\times(JL)(IK)×(JL)的矩阵,即
A⊗B=[a11Ba12B...a1JBa21Ba22B...a2JB⋮⋮⋱⋮aI1BaI2B...aIJB]=[a1⊗b1a1⊗b2a1⊗b3…aJ⊗bL−1aJ⊗bL]\textbf{A}\otimes\textbf{B}= \begin{bmatrix} a_{11}\textbf{B} & a_{12}\textbf{B} & ... & a_{1J}\textbf{B} \\ a_{21}\textbf{B} & a_{22}\textbf{B} & ... & a_{2J}\textbf{B} \\ \vdots & \vdots & \ddots & \vdots \\ a_{I1}\textbf{B} & a_{I2}\textbf{B} & ... & a_{IJ}\textbf{B} \end{bmatrix}= \begin{bmatrix} \textbf{a}_1\otimes\textbf{b}_1\quad\textbf{a}_1\otimes\textbf{b}_2\quad\textbf{a}_1\otimes\textbf{b}_3 \quad\dots\quad\textbf{a}_J\otimes\textbf{b}_{L-1}\quad\textbf{a}_J\otimes\textbf{b}_{L} \end{bmatrix} A⊗B=⎣⎢⎢⎢⎡​a11​Ba21​B⋮aI1​B​a12​Ba22​B⋮aI2​B​......⋱...​a1J​Ba2J​B⋮aIJ​B​⎦⎥⎥⎥⎤​=[a1​⊗b1​a1​⊗b2​a1​⊗b3​…aJ​⊗bL−1​aJ​⊗bL​​]
这里ai⊗bj=[ai1bj⋮aiIbj]\textbf{a}_i\otimes \textbf{b}_j= \begin{bmatrix} a_{i1}\textbf{b}_j\\ \vdots\\ a_{iI}\textbf{b}_j \end{bmatrix}ai​⊗bj​=⎣⎢⎡​ai1​bj​⋮aiI​bj​​⎦⎥⎤​

8.2 Khatri-Rao积

类似Kronecher积,矩阵A∈RI×K\textbf{A}\in\mathbb{R}^{I\times K}A∈RI×K和B∈RJ×K\textbf{B}\in\mathbb{R}^{J\times K}B∈RJ×K的Khatri-Rao积表示为A⊙B\textbf{A}\odot\textbf{B}A⊙B,其结果是一个大小为(IJ)×K(IJ)\times K(IJ)×K的矩阵,详细原理如下:
A⊙B=[a1⊗b1a2⊗b2…aK⊗bK]\textbf{A}\odot\textbf{B}=\begin{bmatrix} \textbf{a}_1\otimes\textbf{b}_1\quad\textbf{a}_2\otimes\textbf{b}_2\quad\dots\quad\textbf{a}_K\otimes\textbf{b}_K \end{bmatrix}A⊙B=[a1​⊗b1​a2​⊗b2​…aK​⊗bK​​]
两个向量的Kronecher积和Khatri-Rao积是玩家等价的,例如a⊗b=a⊙b\textbf{a}\otimes\textbf{b}=\textbf{a}\odot\textbf{b}a⊗b=a⊙b。

8.3 Hadamard积
Hadamard积就是两个形状相同的矩阵对应元素相乘得到的矩阵。给定两个矩阵A,B∈RI×J\textbf{A,B}\in\mathbb{R}^{I\times J}A,B∈RI×J,则Hadamard积表示为A∗B\textbf{A}*\textbf{B}A∗B,其结果仍然是一个大小为I×JI\times JI×J的矩阵。详细原理如下:
A∗B=[a11b11a12b12…a1Jb1Ja21b21a22b22…a2Jb2J⋮⋮⋱⋮aI1bI1aI2bI2…aIJbIJ]\textbf{A}*\textbf{B}= \begin{bmatrix} a_{11}b_{11} & a_{12}b_{12} & \dots & a_{1J}b_{1J}\\ a_{21}b_{21} & a_{22}b_{22} & \dots & a_{2J}b_{2J}\\ \vdots & \vdots & \ddots & \vdots\\ a_{I1}b_{I1} & a_{I2}b_{I2} & \dots & a_{IJ}b_{IJ} \end{bmatrix} A∗B=⎣⎢⎢⎢⎡​a11​b11​a21​b21​⋮aI1​bI1​​a12​b12​a22​b22​⋮aI2​bI2​​……⋱…​a1J​b1J​a2J​b2J​⋮aIJ​bIJ​​⎦⎥⎥⎥⎤​

8.4 一些性质
(A⊗B)(C⊗D)=AC⊗BD(\textbf{A}\otimes\textbf{B})(\textbf{C}\otimes\textbf{D})=\textbf{AC}\otimes\textbf{BD}(A⊗B)(C⊗D)=AC⊗BD
(A⊗B)−1=A−1⊗B−1(\textbf{A}\otimes\textbf{B})^{-1}=\textbf{A}^{-1}\otimes\textbf{B}^{-1}(A⊗B)−1=A−1⊗B−1
A⊙B⊙C=(A⊙B)⊙C=A⊙(B⊙C)\textbf{A}\odot\textbf{B}\odot\textbf{C}=(\textbf{A}\odot\textbf{B})\odot\textbf{C}=\textbf{A}\odot(\textbf{B}\odot\textbf{C})A⊙B⊙C=(A⊙B)⊙C=A⊙(B⊙C)
(A⊙B)T(A⊙B)=ATA∗BTB(\textbf{A}\odot\textbf{B})^T(\textbf{A}\odot\textbf{B})=\textbf{A}^T\textbf{A}*\textbf{B}^T\textbf{B}(A⊙B)T(A⊙B)=ATA∗BTB
(A⊙B)−1=((ATA)∗(BTB))−1(A⊙B)T(\textbf{A}\odot\textbf{B})^{-1}=((\textbf{A}^T\textbf{A})*(\textbf{B}^T\textbf{B}))^{-1}(\textbf{A}\odot\textbf{B})^T(A⊙B)−1=((ATA)∗(BTB))−1(A⊙B)T

【张量分解(一)】符号与基础知识相关推荐

  1. 张量分解学习(一 基础铺垫)

    在经过痛并快乐着的 张量基础学习之后 之后 ,我们终于可以在慢慢科研路之张量篇上再进一步了,好事多磨,万事都是开头难,不过前面的基础打好了,概念清晰了,后面自然就水道渠成了,废话不多说,上才艺! Te ...

  2. 基于低秩张量的高光谱图像重建理论基础-基础知识学习

    原文<基于张量低秩稀疏恢复理论的遥感高光谱图像降噪研究> 本文为选择学习的部分章节的节选内容,根据个人学习侧重点,内容有所删减调整. [1]黎波. 基于张量低秩稀疏恢复理论的遥感高光谱图像 ...

  3. mysql注释符号_MySQL基础知识(2021最新版教程)

    一.MySQL简介 MySQL是一种开放源代码的关系型数据库管理系统,使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理. MySQL是开放源代码的,因此任何人都可以在General ...

  4. 【张量分解(二)】CP分解

    本文是对论文Tensor Decompositions and Applications进行了翻译.整理.筛选和适当的补充,如何希望深入理解可以阅读原文. 相关文章: [张量分解(一)]符号与基础知识 ...

  5. 与或非逻辑符号_理解FPGA的基础知识——逻辑电路

    FPGA (Field Programmable Gate Aray,现场可编程门阵列)是一种可通过重新编程来实现用户所需逻辑电路的半导体器件.为了便于大家理解FPGA的设计和结构,我们先来简要介绍一 ...

  6. 机器学习知识点(十九)矩阵特征值分解基础知识及Java实现

    1.特征值分解基础知识 矩阵乘法Y=AB的数学意义在于变换,以其中一个向量A为中心,则B的作用主要是使A发生伸缩或旋转变换.一个矩阵其实就是一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相 ...

  7. ​NeurIPS 2020 | 面向张量分解知识图谱补全的对偶诱导正则

    简介 近年来,张量分解模型凭借模型简洁.计算速度快等优点在知识图谱补全任务上取得了令人瞩目的成就.但是,这些模型较易受到过拟合的影响,在性能上通常落后于其他类型的模型.为解决过拟合问题,包括 L2 正 ...

  8. 论文浅尝 | TuckER:基于张量分解的知识图谱补全

    笔记整理:孙泽群,南京大学计算机科学与技术系,博士研究生. 论文链接:https://arxiv.org/abs/1901.09590   背景 知识图谱是图结构的数据库,以三元组(es, r, eo ...

  9. 矩阵论(零):线性代数基础知识整理(1)——逆矩阵、(广义)初等变换、满秩分解

    矩阵论专栏:专栏(文章按照顺序排序) 线性代数是矩阵论的先修课程,本篇博客整理线性代数的基础理论知识,为矩阵论的学习做准备.限于篇幅,梳理的重点将在定理和结论上(只给出部分必要的定义),对最基础的概念 ...

最新文章

  1. 公司各个阶段 CTO 需要做什么?(下篇)
  2. linux centos7 升级 make 4.0
  3. c++ 常见问题之string
  4. foreach和while的区别(编译之后)_一文了解解释型语言和编译型语言之区别
  5. MySQL 对查询结果进行排序
  6. RTX5 | 内存池04 - 共享内存用于线程之间的通讯(阻塞方式)- 使用信号量
  7. SVO实时全局光照优化(里程碑MK2):Sparse Voxel Octree based Global Illumination (SVO GI)...
  8. request.getAttribute()和request.getParameter()区别
  9. android 软件apk自动更新实现注意点!!
  10. ngrok实现内网穿透
  11. CSND Markdown模板
  12. 13个测试网站访问速度的服务网站
  13. 一文详解传统金融与数字资产衍生品的区别
  14. (imooc笔记)短除法计算算 十进制 八进制 十六进制
  15. mipi接口 1280(RGB)*720 LCD屏开发驱动笔记帖
  16. karabiner macOs Sierra不可用后的临时解决方法
  17. 【多功能小程序】古风姓氏圣诞国庆头像生成小程序源码
  18. 培训直播平台这些功能是必不可少的
  19. 正极前驱体生产废水除磷
  20. 数据结构之 二叉树的存储和遍历总结

热门文章

  1. Java UDP 入门实例
  2. 分享77个Java源码,总有一款适合您
  3. 深入浅出MySQL JSON数据类型
  4. InstallShield Limited Edtion for VS2015
  5. mysql8.0如何授权_MySQL8.0 创建用户及授权
  6. Kad算法模拟测试程序
  7. docker-compose安装mongoDB详细步骤
  8. Windows下模拟dns迭代查询过程
  9. Xshell连接Linux时中文乱码的解决
  10. JPEG图像文件格式