一个张量就是一个多维数组,是矩阵在高维空间的扩展。张量的阶也就是它的维度数,也称为模。我们遵循一般文献中的惯例,使用小写字母
a
,
b
,
c
表示标量,加粗的小写字母
a
,
b
,
c
表示向量,矩阵使用粗体的大写字母
A
,
B
,
C
表示,张量用花体大写字母
X
,
Y
,
Z
表示。
a
r
:
表示矩阵
A
的第
r
行,
a
:
r
表示矩阵
A
的第
r
列。矩阵或者张量的元素用带下标的小写字母表示,即
N
阶张量的第(
i
1
,
i
2
,…,
i
N
)个元素表示为
。
本节将直接介绍本书用到的张量代数的一些基本定义及性质。
定义2.3 Hadamard积
。两个相同维度张量的Hadamard积就是将两个张量相同位置上的元素相乘,又称为元素积。
的Hadamard积记为
,它的元素定义如下:
在这里需要特别说明的是,与两个矩阵的Hadamard积相对应的是两个矩阵的元素商,也称为Hadamard商。与Hadamard积的定义类似,两个相同规模矩阵
A
,
B
∈
ℝ
I
×
J
的元素商记为
,是对应位置上的元素相除,其元素定义如下:
定义2.4 Kronecker积 。两个矩阵 A ∈ ℝ I × J 和 B ∈ ℝ K × L 的Kronecker积记为 A ⊗ B ,是一个( IK )×( JL )的矩阵:
矩阵的Kronecker积具有以下性质:令 A ∈ ℝ I × J , B ∈ ℝ K × L , C ∈ ℝ J × M , D ∈ ℝ L × N ,则
(1)( A ⊗ B )( C ⊗ D )= AC ⊗ BD ;
(2)( A ⊗ B ) † = A † ⊗ B † ;
(3)( A ⊗ B ) ⊤ = A ⊤ ⊗ B ⊤ .
其中,矩阵的上标“†”表示矩阵的Moore-Penrose伪逆,也称为矩阵的广义逆矩阵,而矩阵的上标“⊤”表示矩阵的转置。
定义2.5 Khatri-Rao积 。两个矩阵 A =[ a :1 , a :2 ,…, a : K ]∈ ℝ I × K 和 B =[ b :1 , b :2 ,…, b : K ]∈ ℝ J × K 的Khatri-Rao积记为 A ⊙ B ,是将两个矩阵对应列向量做Kronecker积,其结果是一个( IJ )× K 的矩阵:
A ⊙ B =[ a :1 ⊗ b :1 , a :2 ⊗ b :2 ,…, a : K ⊗ b : K ]
并且有两个向量 a 和 b 的Khatri-Rao积等于它们的Kronecker积,即 a ⊙ b = a ⊗ b 。
矩阵的Khatri-Rao积具有以下性质:令 A ∈ ℝ I × L , B ∈ ℝ J × L , C ∈ ℝ K × L ,则
(1) A ⊙ B ⊙ C =( A ⊙ B )⊙ C = A ⊙( B ⊙ C );
(2) A ⊙ B ≠ B ⊙ A ;
(3)( A ⊙ B ) ⊤ ( A ⊙ B )=( A ⊤ A )*( B ⊤ B );
(4)( A ⊙ B ) † =(( A ⊤ A )*( B ⊤ B )) -1 ( A ⊙ B ) ⊤ .
定义2.6 矩阵化(Matricization) 。矩阵化是将一个 N 阶张量中的所有元素都沿着某个指定阶按照一定的顺序排列为一个矩阵的操作,又称为张量的矩阵展开。
例如,一个张量
沿着第
n
阶的矩阵化记为
,张量
X
中的元素
对应于矩阵化
X
(
n
)
中的
,其中
张量矩阵化的一个特殊情况就是张量向量化,即将一个张量转化为一个向量。张量
的向量化记为
。
定义2.7 张量与矩阵的
n
模乘
。一个张量
与一个矩阵
的
n
模乘积记为
X
×
n
U
,规模为
I
1
×…×
I
n
-1
×
J
×
I
n+
1
×…×
I
N
。其元素记为
。
一个张量
和一个矩阵
的
n
模乘,相当于首先将
X
沿着第
n
阶矩阵化,然后再做
X
(
n
)
和
U
的矩阵乘法运算,最后将结果再还原为一个张量。
张量的矩阵化和张量与矩阵的 n 模乘具有以下性质:
令
是一个
N
阶的张量,则
(1)给定矩阵
和
,
m
≠
n
,有
Y × m A × n B =( Y × m A )× n B =( Y × n B )× m A
(2)给定矩阵
和
,有
Y × n A × n B = Y × n ( BA )
(3)如果矩阵
,那么
X = Y × n A ⇔ X ( n ) = A Y ( n )
(4)如果矩阵
是列满秩的,那么
X = Y × n A ⇒ Y = X × n A †
(5)如果矩阵
是正交的,那么
X = Y × n A ⇒ Y = X × n A ⊤
(6)令
,
n
=1,2,…,
N
,有
X = Y × 1 A (1) × 2 A (2) …× N A ( N ) ⇔
X ( n ) = A ( n ) Y ( n ) ( A ( N ) ⊗…⊗ A ( n+ 1) ⊗ A ( n -1) ⊗…⊗ A (1) ) ⊤
(7)令矩阵 A , B ∈ ℝ I × J ,有
(8)令矩阵 A ∈ ℝ I × J , B ∈ ℝ J × K , C ∈ ℝ K × L ,有
定义2.8 内积
。两个相同维度的张量
的内积记为〈
X
,
Y
〉。内积的结果就是Hadamard积中所有元素的和,即
定义2.9 向量的外积
。将两个向量做外积可以得到一个矩阵,记为
X
=
a
◦
b
。令
,
n
=1,2,…,
N
,则这
N
个向量做外积得到一个
N
阶的张量
,即
X = a (1) ◦ a (2) ◦…◦ a ( N )
其元素定义为
定义2.10 Frobenius范数
。一个张量
的Frobenius范数定义为
。
张量的内积、向量的外积和张量的Frobenius范数之间存在以下性质:
(1)令
,有
(2)令
,有
(3)令
,且
X
=
a
(1)
◦
a
(2)
◦…◦
a
(
N
)
,
Y
=
b
(1)
◦
b
(2)
◦…◦
b
(
N
)
,有
(4)令张量
,
,矩阵
A
∈
ℝ
J
×
K
,有
〈 X , Y × n A 〉=〈 X × n A ⊤ , Y 〉
(5)令张量
,矩阵
是一个标准正交矩阵,有
‖ X ‖ F =‖ X × n A ‖ F
运用张量代数对张量进行分解是对高阶数据降维的一种有效手段,通过张量分解还能够挖掘出高阶数据中隐含的语义信息和结构特征。张量分解也是数据挖掘领域的一个新兴工具。张量分解中两个最著名的分解模型就是TUCKER分解模型和CP分解模型。
TUCKER分解是将一个给定的
N
阶张量
分解为一个指定维度(
J
1
×
J
2
×…×
J
n
,
J
n
≤
I
n
)的核张量
G
与一系列特征矩阵
A
(
n
)
(
A
(
n
)
∈
,
n
=1,2,…,
N
)的
n
模乘形式,即
X ≈ G × 1 A (1) × 2 A (2) …× N A ( N )
令
则张量的TUCKER分解可以表示为
图2.2所示为一个三阶张量的TUCKER分解示意图。张量的TUCKER分解用一个小规模的核张量与一系列的特征矩阵进行
n
模乘来逼近一个大规模的张量。在经典的TUCKER分解中,一般都假设特征矩阵
是正交的。一般情况下,张量的TUCKER分解并不是唯一的,例如,令矩阵
是一个正交矩阵,那么
。
图2.2 三阶张量的TUCKER分解示意图
张量分解中另一种应用广泛的模型就是CP分解。CP分解是将一个张量表示为多个秩一张量(Rank-one Tensor)的和。如果一个
N
阶张量
可以用
N
个向量的外积表示,即
X
=
a
(1)
◦
a
(2)
◦…◦
a
(
N
)
,其中
,
n
=1,2,…,
N
,那么张量
X
就称为秩一张量(Rank-one Tensor),三阶秩一张量示意图如图2.3所示。而CP分解是将一个张量
X
表示为
R
个秩一张量的和,即
,其中
R
是一个正整数,并且
;
r
=1,2,…,
R
;
n
=1,2,…,
N
。张量的秩定义为使CP分解成立的最小的
R
,记为rank(
X
)=min
R
。实际上,要确定一个张量的秩是非常困难的。
图2.3 三阶秩一张量示意图
令特征矩阵
,其中
n
=1,2,…,
N
。记
从而,张量的CP分解可以表示为
实际上,从TUCKER分解和CP分解的形式上可以看出,CP分解是TUCKER分解的一种特殊形式。令TUCKER分解中的核张量 G 为一个超对角线全为1的超对角张量,TUCKER分解就变成了CP分解。