本文是对论文Tensor Decompositions and Applications进行了翻译、整理、筛选和适当的补充,如何希望深入理解可以阅读原文。
相关文章:
【张量分解(一)】符号与基础知识
【张量分解(二)】CP分解
【张量分解(三)】Tucker分解
一、介绍
物理或工程中的张量,在数学中通常称为张量场。本文所涉及到的张量是指多维数组,或者说是多维向量空间中的元素。
一阶张量称为向量,二阶张量称为矩阵,三阶或者更高阶张量则称为高阶张量或者直接称为张量。
二、符号
- 张量使用手写风格的大写字母表示,例如 X \mathcal{X} X;
- 矩阵使用黑体的大写字母表示,例如 A \textbf{A} A;
- 向量使用黑体的小写字母表示,例如 a \textbf{a} a;
- 标量使用小写字母表示,例如 a a a;
- 向量 a \textbf{a} a的第i个分量表示为 a i a_i ai;
- 矩阵 A \textbf{A} A的第(i,j)个元素表示为 a i j a_{ij} aij;
- 三阶张量 X \mathcal{X} X的第(i,j,k)个元素为 x i j k x_{ijk} xijk;
- 某个序列中的第n个元素使用带括号的上标来表示,例如 A ( n ) 表 示 一 系 列 矩 阵 中 的 第 n 个 矩 阵 \textbf{A}^{(n)}表示一系列矩阵中的第n个矩阵 A(n)表示一系列矩阵中的第n个矩阵;
- 张量的阶(order)也就是张量的维度,也称为张量的模(mode);
三、一些概念
1. 子数组
由于张量可以看做是多维数组,那么当对多维数组中各个维度进行选择后就会形成子数组。在这里使用冒号":"来表示选择该维度上的所有值。
例如对于矩阵
A
\textbf{A}
A的第j列表示为
a
:
j
\textbf{a}_{:j}
a:j,第i行表示为
a
i
:
\textbf{a}_{i:}
ai:。为了更加紧凑,将矩阵的列
a
:
j
\textbf{a}_{:j}
a:j表示为
a
j
\textbf{a}_{j}
aj。
2. Fiber
Fiber是矩阵行和列在高阶张量中的类似物。更正式的来说,通过固定一个张量的大部分维度只保留其中的一个维度所形成的子数组,称为fiber。
例如一个矩阵的1模(mode-1)fiber就是指矩阵的列,2模(mode-2)fiber就是指矩阵的行。对于三阶张量来说,则有行、列和通道(tube)三种fiber,分别表示为
x
:
j
k
\textbf{x}_{:jk}
x:jk、
x
i
:
k
\textbf{x}_{i:k}
xi:k和
x
i
j
:
\textbf{x}_{ij:}
xij:。直观的展示如下图:
3. Slice
通过固定一个张量的大部分维度只保留其中的两个维度所形成的子数据,称为Slice。
例如三阶张量
X
\mathcal{X}
X的水平、垂直和通道slice表示为
X
i
:
:
\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表示为
X
k
\textbf{X}_{k}
Xk。直观的展示如下图:
四、基础知识
1. 范数
张量的范数类似于矩阵的Frobenius范数,即对张量中所有元素平方求和后再开方:
∣
∣
X
∣
∣
=
∑
i
1
=
1
I
1
∑
i
2
=
1
I
2
.
.
.
∑
i
N
=
1
I
N
x
i
1
i
2
.
.
.
i
N
2
\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∑I1i2=1∑I2...iN=1∑INxi1i2...iN2
2. 内积
两个形状相同的张量的各个分量相乘并求和称为张量的内积,设 X , Y ∈ R I 1 × I 2 . . . × I N \mathcal{X},\mathcal{Y}\in\mathbb{R}^{I_1\times I_2...\times I_N} X,Y∈RI1×I2...×IN,则两张量的内积为 ⟨ X , Y ⟩ = ∑ i 1 = 1 I 1 ∑ i 2 = 1 I 2 . . . ∑ i N = 1 I N x i 1 i 2 . . . i N y i 1 i 2 . . . i N \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∑I1i2=1∑I2...iN=1∑INxi1i2...iNyi1i2...iN
3. 单秩张量(Rank-one)
如果一个N阶张量
X
∈
R
I
1
×
I
2
.
.
.
×
I
N
\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)
那么,该张量就称为单秩张量。
从微观的角度来看,张量的每一个元素都是由对于向量的分量相乘得到的:
x
i
1
i
2
.
.
.
i
N
=
a
i
1
(
1
)
a
i
2
(
2
)
.
.
.
a
i
N
(
N
)
x_{i_1i_2...i_N}=a_{i_1}^{(1)}a_{i_2}^{(2)}...a_{i_N}^{(N)}
xi1i2...iN=ai1(1)ai2(2)...aiN(N)
可以理解为,每个向量表示最终张量的一个维度,向量的分量则是张量维度取值乘积中的一项。
4. 张量对称
如何一个张量的所有维度均相同,则称该张量为cubical,例如
X
∈
R
I
×
I
×
.
.
.
×
I
\mathcal{X}\in\mathbb{R}^{I\times I\times ... \times I}
X∈RI×I×...×I;
如何一个cubical张量中一组下标任意组合所对应的元素均相等则称该张量超对称。例如三阶张量
X
∈
R
I
×
I
×
I
\mathcal{X}\in\mathbb{R}^{I\times I\times I}
X∈RI×I×I,如果满足
x
i
j
k
=
x
i
k
j
=
x
j
i
k
=
x
j
k
i
=
x
k
i
j
=
x
k
j
i
,
i
,
j
,
k
=
1
,
.
.
.
,
I
x_{ijk}=x_{ikj}=x_{jik}=x_{jki}=x_{kij}=x_{kji}, i,j,k=1,...,I
xijk=xikj=xjik=xjki=xkij=xkji,i,j,k=1,...,I
则称张量
X
\mathcal{X}
X超对称。
除了上面在所有维度均对称的超对称外,张量也可以在两维甚至多维上对称。例如,如果三阶张量
X
∈
R
I
×
I
×
I
\mathcal{X}\in\mathbb{R}^{I\times I\times I}
X∈RI×I×I的所有通道slice都是对称的,即
X
k
=
X
k
T
,
k
=
1
,
2
,
.
.
.
,
K
\textbf{X}_k=\textbf{X}_k^T,k=1,2,...,K
Xk=XkT,k=1,2,...,K
则张量
X
\mathcal{X}
X在维度1和2上对称。
5. 对角张量(Diagonal tensors)
对于张量
X
∈
R
I
1
×
I
2
.
.
.
×
I
N
\mathcal{X}\in\mathbb{R}^{I_1\times I_2...\times I_N}
X∈RI1×I2...×IN,如果所有下标满足
i
1
=
i
2
=
.
.
.
=
i
N
i_1=i_2=...=i_N
i1=i2=...=iN的元素值不为0,其他元素均为0,则该张量为对角张量。特别地,当对角张量中不为0的元素值均为1时,称为单位张量(identity tensor),用符号
J
\mathcal{J}
J表示。三阶单位张量间下图:
6. 张量矩阵化(Matricization)
张量矩阵化也称为张量展开(unfolding)或者拉平(flattening),是一种将n阶张量中的元素重新排列为矩阵的过程。例如一个
2
×
3
×
4
2\times3\times4
2×3×4的三阶张量可以重排列为一个
6
×
4
6\times4
6×4或许
3
×
8
3\times8
3×8的矩阵。本文仅讨论张量矩阵化的一种特例,n模矩阵化。在介绍fiber时,我们知道n模fiber就是张量按第n维为自由维度得到了向量,而n模矩阵化就是将n模fiber向量作为重排矩阵的列。将一个张量
X
∈
R
I
1
×
I
2
.
.
.
×
I
N
\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)。
从微观来看,张量中元素
(
i
1
,
i
2
,
.
.
.
,
i
N
)
(i_1,i_2,...,i_N)
(i1,i2,...,iN)映射到矩阵元素为
(
i
n
,
j
)
(i_n,j)
(in,j),即第n维上元素的坐标作为新矩阵中的横坐标,纵坐标则由其他维度上的坐标统一决定,具体方式如下:
j
=
1
+
∑
k
=
1
,
k
≠
n
N
(
i
k
−
1
)
J
k
,
其
中
J
k
=
∏
m
=
1
,
m
≠
n
k
−
1
I
m
j=1+\sum_{k=1,k\neq n}^N(i_k-1)J_k,其中J_k=\prod_{m=1,m\neq n}^{k-1}I_m
j=1+k=1,k=n∑N(ik−1)Jk,其中Jk=m=1,m=n∏k−1Im
J
k
J_k
Jk可以理解为前k-1个维度中,除去第n维以外的所有维度相乘。
7. 张量的n模积乘法
张量可以有很多种方式乘在一起,但这里只介绍n模积,即张量在维度n处乘以矩阵或者向量。
7.1 张量与矩阵相乘
给定一个N阶张量
X
∈
R
I
1
×
I
2
.
.
.
×
I
N
\mathcal{X}\in\mathbb{R}^{I_1\times I_2...\times I_N}
X∈RI1×I2...×IN和矩阵
U
∈
R
J
×
I
n
\textbf{U}\in\mathbb{R}^{J\times I_n}
U∈RJ×In,则二者的n模积可以表示为
X
×
n
U
\mathcal{X}\times_n\textbf{U}
X×nU,其结果是一个维度为
I
1
×
.
.
.
×
I
n
−
1
×
J
×
I
n
+
1
×
.
.
.
×
I
N
I_1\times ... \times I_{n-1} \times J \times I_{n+1}\times ... \times I_N
I1×...×In−1×J×In+1×...×IN的张量,即将维度
I
n
I_n
In转变为
J
J
J。
从slice的角度来看,由于n模slice是一个矩阵,因此n模积可以看做张量
X
\mathcal{X}
X的所有n模slice乘以矩阵
U
\textbf{U}
U。设
Y
=
X
×
n
U
\mathcal{Y}=\mathcal{X}\times_n\textbf{U}
Y=X×nU,则张量
Y
\mathcal{Y}
Y的n模slice,等于
X
\mathcal{X}
X的n模slice乘以矩阵
U
\textbf{U}
U,即
Y
(
n
)
=
U
X
(
n
)
\textbf{Y}_{(n)}=\textbf{U}\textbf{X}_{(n)}
Y(n)=UX(n)
另外,n模积的结果与乘积的顺序无关,即
X
×
m
A
×
n
B
=
X
×
n
B
×
m
A
\mathcal{X}\times_m\textbf{A}\times_n\textbf{B} = \mathcal{X}\times_n\textbf{B}\times_m\textbf{A}
X×mA×nB=X×nB×mA
7.2 张量与向量相乘
给定一个N阶张量
X
∈
R
I
1
×
I
2
.
.
.
×
I
N
\mathcal{X}\in\mathbb{R}^{I_1\times I_2...\times I_N}
X∈RI1×I2...×IN和向量
v
∈
R
I
n
\textbf{v}\in\mathbb{R}^{I_n}
v∈RIn,则二者的n模积可以表示为
X
∙
n
v
\mathcal{X}\bullet_n\textbf{v}
X∙nv,其结果是一个维度为
I
1
×
.
.
.
×
I
n
−
1
×
I
n
+
1
×
.
.
.
×
I
N
I_1\times ... \times I_{n-1} \times I_{n+1}\times ... \times I_N
I1×...×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
∙
n
v
)
i
1
.
.
.
i
n
−
1
i
n
+
1
.
.
.
i
N
=
∑
i
n
=
1
I
n
x
i
1
i
2
.
.
.
i
N
v
i
n
(\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∙nv)i1...in−1in+1...iN=in=1∑Inxi1i2...iNvin
与n模矩阵乘法不同,n模向量乘法的顺序会影响最终的结果,例如:
X
∙
m
a
∙
n
b
=
(
X
∙
m
a
)
∙
n
−
1
b
=
(
X
∙
n
b
)
∙
m
a
,
其
中
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<n
X∙ma∙nb=(X∙ma)∙n−1b=(X∙nb)∙ma,其中m<n
由于m<n,如果先进行
X
∙
m
a
\mathcal{X}\bullet_m\textbf{a}
X∙ma,那么会导致前m维度缩减为m-1维,因此需要
∙
n
−
1
b
\bullet_{n-1}\textbf{b}
∙n−1b。
8. 矩阵的Kronecker、Khatri-Rao、Hadamard积
8.1 Kronecker积
Kronecker积是将一个矩阵的所有元素与另一个矩阵相乘,拼接得到更大的矩阵。矩阵
A
∈
R
I
×
J
\textbf{A}\in\mathbb{R}^{I\times J}
A∈RI×J和
B
∈
R
K
×
L
\textbf{B}\in\mathbb{R}^{K\times L}
B∈RK×L的Kronecker积表示为
A
⊗
B
\textbf{A}\otimes\textbf{B}
A⊗B, 其结果是一个大小为
(
I
K
)
×
(
J
L
)
(IK)\times(JL)
(IK)×(JL)的矩阵,即
A
⊗
B
=
[
a
11
B
a
12
B
.
.
.
a
1
J
B
a
21
B
a
22
B
.
.
.
a
2
J
B
⋮
⋮
⋱
⋮
a
I
1
B
a
I
2
B
.
.
.
a
I
J
B
]
=
[
a
1
⊗
b
1
a
1
⊗
b
2
a
1
⊗
b
3
…
a
J
⊗
b
L
−
1
a
J
⊗
b
L
]
\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=⎣⎢⎢⎢⎡a11Ba21B⋮aI1Ba12Ba22B⋮aI2B......⋱...a1JBa2JB⋮aIJB⎦⎥⎥⎥⎤=[a1⊗b1a1⊗b2a1⊗b3…aJ⊗bL−1aJ⊗bL]
这里
a
i
⊗
b
j
=
[
a
i
1
b
j
⋮
a
i
I
b
j
]
\textbf{a}_i\otimes \textbf{b}_j= \begin{bmatrix} a_{i1}\textbf{b}_j\\ \vdots\\ a_{iI}\textbf{b}_j \end{bmatrix}
ai⊗bj=⎣⎢⎡ai1bj⋮aiIbj⎦⎥⎤
8.2 Khatri-Rao积
类似Kronecher积,矩阵
A
∈
R
I
×
K
\textbf{A}\in\mathbb{R}^{I\times K}
A∈RI×K和
B
∈
R
J
×
K
\textbf{B}\in\mathbb{R}^{J\times K}
B∈RJ×K的Khatri-Rao积表示为
A
⊙
B
\textbf{A}\odot\textbf{B}
A⊙B,其结果是一个大小为
(
I
J
)
×
K
(IJ)\times K
(IJ)×K的矩阵,详细原理如下:
A
⊙
B
=
[
a
1
⊗
b
1
a
2
⊗
b
2
…
a
K
⊗
b
K
]
\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⊗b1a2⊗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
∈
R
I
×
J
\textbf{A,B}\in\mathbb{R}^{I\times J}
A,B∈RI×J,则Hadamard积表示为
A
∗
B
\textbf{A}*\textbf{B}
A∗B,其结果仍然是一个大小为
I
×
J
I\times J
I×J的矩阵。详细原理如下:
A
∗
B
=
[
a
11
b
11
a
12
b
12
…
a
1
J
b
1
J
a
21
b
21
a
22
b
22
…
a
2
J
b
2
J
⋮
⋮
⋱
⋮
a
I
1
b
I
1
a
I
2
b
I
2
…
a
I
J
b
I
J
]
\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=⎣⎢⎢⎢⎡a11b11a21b21⋮aI1bI1a12b12a22b22⋮aI2bI2……⋱…a1Jb1Ja2Jb2J⋮aIJbIJ⎦⎥⎥⎥⎤
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
)
=
A
T
A
∗
B
T
B
(\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
=
(
(
A
T
A
)
∗
(
B
T
B
)
)
−
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