Tucker 分解
Tucker 分解
Tucker 分解法可以被视作一种高阶 PCA. 它将张量分解为核心张量在每个mode上与矩阵的乘积. 因此, 对三阶张量
X
∈
R
I
×
J
×
K
\mathcal{X}\in\mathbb{R}^{I \times J \times K}
X∈RI×J×K ,我们有如下分解:
X
≈
G
×
1
A
×
2
B
×
3
C
=
∑
p
=
1
P
∑
q
=
1
Q
∑
r
=
1
R
g
p
q
r
a
p
∘
b
q
∘
c
r
=
[
[
G
;
A
,
B
,
C
]
]
\mathcal{X} \approx \mathcal{G}\times_1 \mathrm{A} \times_2 \mathrm{B} \times_3 \mathrm{C} = \sum_{p=1}^P\sum_{q=1}^Q\sum_{r=1}^R g_{pqr} \: \mathrm{a}_p\circ \mathrm{b}_q\circ \mathrm{c}_r = [\![\mathcal{G}\,;A,B,C]\!]
X≈G×1A×2B×3C=p=1∑Pq=1∑Qr=1∑Rgpqrap∘bq∘cr=[[G;A,B,C]]
其中, A ∈ R I × P \mathrm{A}\in \mathbb{R}^{I\times P} A∈RI×P, B ∈ R J × Q \mathrm{B}\in\mathbb{R}^{J\times Q} B∈RJ×Q 和 C ∈ R K × R \mathrm{C} \in \mathbb{R}^{K\times R} C∈RK×R 被称为因子矩阵,它们通常是正交的,可以视为沿相应 mode 下的主成分。张量 G ∈ R P × Q × R \mathcal{G} \in \mathbb{R}^{P \times Q \times R} G∈RP×Q×R 被称为核心张量,其每个数字元素代表了不同成分之间的互动程度。三阶张量的 Tucker 分解可以用下图表示:
对于每个元素来说,Tucker 分解法可以写作
x
i
j
k
≈
∑
p
=
1
P
∑
q
=
1
Q
∑
r
=
1
R
g
p
q
r
a
i
p
b
j
q
c
k
r
,
i
=
1
,
…
,
I
,
j
=
1
,
…
,
J
,
k
=
1
,
…
,
K
x_{ijk} \approx \sum_{p=1}^P \sum_{q=1}^Q \sum_{r=1}^R g_{pqr}a_{ip}b_{jq}c_{kr} \quad , \quad i = 1,\dots,I, j =1,\dots,J, k=1,\dots,K
xijk≈p=1∑Pq=1∑Qr=1∑Rgpqraipbjqckr,i=1,…,I,j=1,…,J,k=1,…,K
其中, P , Q , R P,Q,R P,Q,R 为对应因子矩阵里列的个数。
容易看出 CP 分解是 Tucker 分解的一种特殊形式,如果核心张量的为超对角张量而且 P = Q = R P=Q=R P=Q=R ,Tucker 分解就退化成了权重 CP 分解。
Tucker 分解可以写成如下的矩阵化形式:
X
(
1
)
≈
A
G
(
1
)
(
C
⊗
B
)
T
\mathrm{X}_{(1)} \approx \mathrm{A}\mathrm{G}_{(1)}(\mathrm{C}\otimes \mathrm{B})^\mathsf{T}
X(1)≈AG(1)(C⊗B)T
X ( 2 ) ≈ B G ( 2 ) ( C ⊗ A ) T \mathrm{X}_{(2)} \approx \mathrm{B}\mathrm{G}_{(2)}(\mathrm{C}\otimes \mathrm{A})^\mathsf{T} X(2)≈BG(2)(C⊗A)T
X ( 3 ) ≈ C G ( 3 ) ( B ⊗ A ) T \mathrm{X}_{(3)} \approx \mathrm{C}\mathrm{G}_{(3)}(\mathrm{B}\otimes \mathrm{A})^\mathsf{T} X(3)≈CG(3)(B⊗A)T
Tucker 分解的高维推广
对于
N
N
N 维张量,Tucker 分解可以写作:
X
=
G
×
1
A
(
1
)
×
2
A
(
2
)
⋯
×
N
A
(
N
)
=
[
[
G
;
A
(
1
)
,
A
(
2
)
,
…
,
A
(
N
)
]
]
\mathcal{X} = \mathcal{G} \times_1 \mathrm{A}^{(1)} \times_2 \mathrm{A}^{(2)}\dots \times_N \mathrm{A}^{(N)} = [\![\mathcal{G}; \mathrm{A}^{(1)}, \mathrm{A}^{(2)}, \dots , \mathrm{A}^{(N)}]\!]
X=G×1A(1)×2A(2)⋯×NA(N)=[[G;A(1),A(2),…,A(N)]]
矩阵化可以写为:
X
(
n
)
=
A
(
n
)
G
(
n
)
(
A
(
N
)
⊗
⋯
⊗
A
(
n
+
1
)
⊗
A
(
n
−
1
)
⊗
⋯
⊗
A
(
1
)
)
T
\mathrm{X}_{(n)} = \mathrm{A}^{(n)}\mathrm{G}_{(n)}(\mathrm{A}^{(N)}\otimes \dots \otimes \mathrm{A}^{(n+1)}\otimes \mathrm{A}^{(n-1)}\otimes \dots \otimes \mathrm{A}^{(1)})^\mathsf{T}
X(n)=A(n)G(n)(A(N)⊗⋯⊗A(n+1)⊗A(n−1)⊗⋯⊗A(1))T
Tucker 2 分解法
对于三阶张量,固定一个因子矩阵为单位矩阵,就可以得到 Tucker 分解的一个重要的特例,Tucker 2 分解。例如,固定
C
=
I
\mathrm{C=I}
C=I,若
I
\mathrm{I}
I 是
K
×
K
K \times K
K×K 的单位矩阵,则再使
G
∈
R
P
×
Q
×
R
\mathcal{G}\in\mathbb{R}^{P \times Q \times R}
G∈RP×Q×R,那么我们就可以得到:
X
≈
G
×
1
A
×
2
B
=
[
[
G
;
A
,
B
,
I
]
]
\mathcal{X} \approx \mathcal{G}\times_1 \mathrm{A} \times_2 \mathrm{B} = [\![\mathcal{G}\,;\mathrm{A,B,I}]\!]
X≈G×1A×2B=[[G;A,B,I]]
Tucker 1 分解法
更近一步,如果我们固定两个因子矩阵,只利用一个矩阵来分解,并将剩余矩阵设为单位矩阵。例如,如果设
B
=
C
=
I
\mathrm{B=C=I}
B=C=I,那么我们可以得到:
X
≈
G
×
1
A
=
[
[
G
;
A
,
I
,
I
]
]
\mathcal{X} \approx \mathcal{G} \times_1 \mathrm{A} = [\![\mathcal{G}\,;\mathrm{A,I,I}]\!]
X≈G×1A=[[G;A,I,I]]
这等价于一个标准的二维 PCA ,即:
X
(
1
)
=
A
G
(
1
)
\mathrm{X}_{(1)} = \mathrm{A}\mathrm{G}_{(1)}
X(1)=AG(1)
n - rank (n 秩)
若
X
\mathcal{X}
X 是一个大小为
I
1
×
I
2
×
⋯
×
I
N
I_1\times I_2 \times \dots \times I_N
I1×I2×⋯×IN 的
N
N
N 阶张量,那么它的 n 秩为:
X
\mathcal{X}
X 在 mode - n 矩阵化后得到的矩阵
X
(
n
)
\mathrm{X}_{(n)}
X(n) 的列秩,表示为
rank
n
(
X
)
\text{rank}_n(\mathcal{X})
rankn(X) 。如果在 Tucker 分解中,令
R
n
=
rank
n
(
X
)
,
n
=
1
,
2
,
⋯
,
N
R_n=\text{rank}_n(\mathcal{X}), \quad n=1,2,\cdots ,N
Rn=rankn(X),n=1,2,⋯,N
那么就称张量 X \mathcal{X} X 是一个 rank − ( R 1 , R 2 , … , R N ) \text{rank}-(R_1,R_2,\dots,R_N) rank−(R1,R2,…,RN) 张量。
如果一个张量是 rank − ( R 1 , R 2 , … , R N ) \text{rank}-(R_1,R_2,\dots,R_N) rank−(R1,R2,…,RN) 张量,那么我们很容易找到一个 R n = rank n ( X ) R_n=\text{rank}_n(\mathcal{X}) Rn=rankn(X) 的精确 Tucker 分解。但是如果我们计算某些 n n n 满足 R n < rank n ( X ) R_n<\text{rank}_n(\mathcal{X}) Rn<rankn(X) 的 Tucker 分解,那么我们将必然无法获得精确的结果,即该分解不能精确地还原 X \mathcal{X} X 。
Tucker 分解法的计算
1. HOSVD (高阶 SVD)
该方法是利用 SVD 对每个 mode 做一次 Tucker 1 分解,其结果为将一个张量分解为一个核心张量和三个正交矩阵,HOSVD 是 Tucker 分解的一种特殊情况,其要求分解得到的因子矩阵必须为正交的,即
X
=
G
×
1
U
(
1
)
×
2
U
(
2
)
×
3
U
(
3
)
\mathcal{X} = \mathcal{G}\times_1 \mathrm{U}_{(1)} \times_2 \mathrm{U}_{(2)} \times_3 \mathrm{U}_{(3)}
X=G×1U(1)×2U(2)×3U(3)
其中,
U
(
1
)
,
U
(
2
)
,
U
(
3
)
U_{(1)},U_{(2)},U_{(3)}
U(1),U(2),U(3) 分别为先将张量进行 mode - n 矩阵化,得到
X
(
n
)
\mathcal{X}_{(n)}
X(n) 矩阵,然后对得到的矩阵进行奇异值分解,使得
X
(
n
)
=
U
(
n
)
Σ
V
(
n
)
T
\mathcal{X}_{(n)}= U_{(n)}\Sigma V_{(n)}^T
X(n)=U(n)ΣV(n)T
对于不同的 mode 矩阵 X ( n ) \mathcal{X}_{(n)} X(n) ,我们可以得到上面的式子中的 U ( n ) U_{(n)} U(n) ,如果对三个 mode 矩阵都做上式的运算,就可以得到 U ( 1 ) , U ( 2 ) , U ( 3 ) U_{(1)},U_{(2)},U_{(3)} U(1),U(2),U(3) 。
根据
X
=
G
×
1
U
(
1
)
×
2
U
(
2
)
×
3
U
(
3
)
\mathcal{X} = \mathcal{G}\times_1 \mathrm{U}_{(1)} \times_2 \mathrm{U}_{(2)} \times_3 \mathrm{U}_{(3)}
X=G×1U(1)×2U(2)×3U(3)
我们可以得到:
G
=
X
×
1
U
(
1
)
T
×
2
U
(
2
)
T
×
3
U
(
3
)
T
\mathcal{G} = \mathcal{X} \times_1 \mathrm{U}_{(1)}^T \times_2 \mathrm{U}_{(2)}^T \times_3 \mathrm{U}_{(3)}^T
G=X×1U(1)T×2U(2)T×3U(3)T
从而我们得到 HOSVD 的分解结果,即 G , U 1 , U 2 , U 3 \mathcal{G},U_1,U_2,U_3 G,U1,U2,U3 。
如果至少存在一个 R n < rank n ( X ) R_n<\text{rank}_n(\mathcal{X}) Rn<rankn(X) ,则称为截断 HOSVD 。
HOSVD 不能保证得到一个较好的近似,但是 HOSVD 的结果可以作为一个其他迭代算法(如下面的 HOOI)的很好的初始解。
HOSVD 的另一种描述
我们定义一个张量
G
G
G 的 键约化矩阵 为
J
i
i
′
=
∑
j
k
G
i
j
k
G
i
′
j
k
J_{ii'}=\sum_{jk}G_{ijk}G_{i'jk}
Jii′=jk∑GijkGi′jk
由此我们可以引出对 T T T 进行 HOSVD 算法的另外一种求解方法:
-
计算各个指标的键约化矩阵
I i i ′ = ∑ j k T i j k T i ′ j k I_{ii'}=\sum_{jk}T_{ijk}T_{i'jk} Iii′=jk∑TijkTi′jkJ j j ′ = ∑ i k T i j k T i j ′ k J_{jj'}=\sum_{ik}T_{ijk}T_{ij'k} Jjj′=ik∑TijkTij′k
K k k ′ = ∑ i j T i j k T i j k ′ K_{kk'}=\sum_{ij}T_{ijk}T_{ijk'} Kkk′=ij∑TijkTijk′
-
计算每个键约化矩阵的本征值分解
I = U Ω U T I=U\Omega U^T I=UΩUTJ = V Π V T J=V\Pi V^T J=VΠVT
K = W Υ W T K=W\Upsilon W^T K=WΥWT
-
计算核张量
G i j k = ∑ a b c T a b c U a i V b j W c k G_{ijk}=\sum_{abc}T_{abc}U_{ai}V_{bj}W_{ck} Gijk=abc∑TabcUaiVbjWck -
得到高阶奇异值分解
T a b c = ∑ i j k G i j k U a i V b j W c k T_{abc}=\sum_{ijk}G_{ijk}U_{ai}V_{bj}W_{ck} Tabc=ijk∑GijkUaiVbjWck
2. HOOI 迭代算法
HOOI 秩去计算 X ( n ) \mathrm{X}_{(n)} X(n) 的主奇异向量,并且运用 SVD 来代替特征值分解,或者只计算其主子空间的单位正交基底向量即可。
设
X
\mathcal{X}
X 是一个
I
1
×
I
2
×
⋯
×
I
N
I_1 \times I_2 \times \dots \times I_N
I1×I2×⋯×IN 尺寸的张量,那么我们可以将要分解问题转化为求:
min
∣
∣
X
−
[
[
G
;
A
(
1
)
,
A
(
2
)
,
…
,
A
(
N
)
]
]
∣
∣
\min \Big|\Big| \mathcal{X} - [\![\mathcal{G}\,;\mathrm{A}^{(1)},\mathrm{A}^{(2)},\dots,\mathrm{A}^{(N)}]\!] \Big|\Big|
min∣∣∣∣∣∣X−[[G;A(1),A(2),…,A(N)]]∣∣∣∣∣∣
其中, G ∈ R R 1 × R 2 × ⋯ × R N \mathcal{G}\in\mathbb{R}^{R_1\times R_2 \times \dots \times R_N} G∈RR1×R2×⋯×RN ,矩阵 A ( n ) ∈ R I n × R n \mathrm{A}^{(n)}\in \mathbb{R}^{I_n \times R_n} A(n)∈RIn×Rn 且列正交。
对于上式的最优解,显然其核心张量
G
\mathcal{G}
G 必须满足
G
=
X
×
1
A
(
a
)
T
×
2
A
(
2
)
T
⋯
×
N
A
(
N
)
T
\mathcal{G} = \mathcal{X} \times_1 \mathrm{A}^{(a)\mathsf{T}} \times_2 \mathrm{A}^{(2)\mathsf{T}} \dots \times_N \mathrm{A}^{(N)\mathsf{T}}
G=X×1A(a)T×2A(2)T⋯×NA(N)T
则目标函数的平方为:
∣
∣
X
−
[
[
G
;
A
(
1
)
,
(
2
)
,
…
,
A
(
N
)
]
]
∣
∣
2
=
∣
∣
X
∣
∣
2
−
2
⟨
X
,
[
[
G
;
A
(
1
)
,
A
(
2
)
,
…
,
A
(
N
)
]
]
⟩
+
∣
∣
G
;
A
(
1
)
,
A
(
2
)
,
…
,
A
(
N
)
∣
∣
2
=
∣
∣
X
∣
∣
2
−
2
⟨
X
×
1
A
(
1
)
T
⋯
×
N
A
(
N
)
T
,
G
⟩
+
∣
∣
G
∣
∣
2
=
∣
∣
X
∣
∣
2
−
2
⟨
G
,
G
⟩
+
∣
∣
G
∣
∣
2
=
∣
∣
X
∣
∣
2
−
∣
∣
G
∣
∣
2
=
∣
∣
X
∣
∣
2
−
∣
∣
X
×
1
A
(
1
)
T
×
2
⋯
×
N
A
(
N
)
T
∣
∣
2
\begin{aligned} &\Big|\Big| \mathcal{X} - [\![\mathcal{G}\,; \mathrm{A}^{(1)}, \mathrm{(2)},\dots,\mathrm{A}^{(N)}] \!] \Big|\Big|^2 \\ &= ||\mathcal{X}{||}^2 - 2 \langle \mathcal{X}, [\![\mathcal{G}\,;\mathrm{A}^{(1)},\mathrm{A}^{(2)},\,\dots,\mathrm{A}^{(N)}]\!]\rangle + ||\mathcal{G}\,;\mathrm{A}^{(1)},\mathrm{A}^{(2)},\dots,\mathrm{A}^{(N)}{||}^2 \\ &= ||\mathcal{X}{||}^2 - 2\langle \mathcal{X} \times_1 \mathrm{A}^{(1)\mathsf{T}}\dots \times_N \mathrm{A}^{(N)\mathsf{T}},\mathcal{G}\rangle +||\mathcal{G}{||}^2 \\ &= ||\mathcal{X}{||}^2 - 2\langle \mathcal{G},\,\mathcal{G}\rangle + ||\mathcal{G}{||}^2 \\ &= ||\mathcal{X}{||}^2 - ||\mathcal{G}{||}^2 \\ &= ||\mathcal{X}{||}^2 - ||\mathcal{X}\times_1 \mathrm{A}^{(1)\mathsf{T}} \times_2 \dots \times_N \mathrm{A}^{(N)\mathsf{T}}{||}^2 \end{aligned}
∣∣∣∣∣∣X−[[G;A(1),(2),…,A(N)]]∣∣∣∣∣∣2=∣∣X∣∣2−2⟨X,[[G;A(1),A(2),…,A(N)]]⟩+∣∣G;A(1),A(2),…,A(N)∣∣2=∣∣X∣∣2−2⟨X×1A(1)T⋯×NA(N)T,G⟩+∣∣G∣∣2=∣∣X∣∣2−2⟨G,G⟩+∣∣G∣∣2=∣∣X∣∣2−∣∣G∣∣2=∣∣X∣∣2−∣∣X×1A(1)T×2⋯×NA(N)T∣∣2
如果使目标函数取值最小,那么我们可以使得上面结果的第二项取最大值,即
max
∣
∣
X
×
1
A
(
1
)
T
×
2
A
(
2
)
T
⋯
×
N
A
(
N
)
T
∣
∣
\max\Big|\Big|\mathcal{X}\times_1 \mathrm{A}^{(1)\mathsf{T}} \times_2 \mathrm{A}^{(2)\mathsf{T}}\dots \times_N\mathrm{A}^{(N)\mathsf{T}}\Big|\Big|
max∣∣∣∣∣∣X×1A(1)T×2A(2)T⋯×NA(N)T∣∣∣∣∣∣
进一步,我们可以将上式写为
max
∣
∣
A
(
n
)
T
W
∣
∣
\max\Big|\Big|\mathrm{A}^{(n)\mathsf{T}}\mathrm{W}\Big|\Big|
max∣∣∣∣∣∣A(n)TW∣∣∣∣∣∣
其中
W
=
X
(
n
)
(
A
(
N
)
⊗
⋯
⊗
A
(
n
+
1
)
⊗
A
(
n
−
1
)
⊗
⋯
⊗
A
(
1
)
)
\mathrm{W} = \mathrm{X}_{(n)} (\mathrm{A}^{(N)} \otimes \dots \otimes \mathrm{A}^{(n+1)}\otimes \mathrm{A}^{(n-1)} \otimes\dots\otimes\mathrm{A}^{(1)})
W=X(n)(A(N)⊗⋯⊗A(n+1)⊗A(n−1)⊗⋯⊗A(1))
我们可以将 A ( n ) A^{(n)} A(n) 定义为 W \mathrm{W} W 的前 R n R_n Rn 个左奇异向量就可以求出解。