三、Tucker 分解

Tucker 分解


Tucker 分解


       Tucker 分解法可以被视作一种高阶 PCA. 它将张量分解为核心张量在每个mode上与矩阵的乘积. 因此, 对三阶张量 X ∈ R I × J × K \mathcal{X}\in\mathbb{R}^{I \times J \times K} XRI×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]\!] XG×1A×2B×3C=p=1Pq=1Qr=1Rgpqrapbqcr=[[G;A,B,C]]

其中, A ∈ R I × P \mathrm{A}\in \mathbb{R}^{I\times P} ARI×P B ∈ R J × Q \mathrm{B}\in\mathbb{R}^{J\times Q} BRJ×Q C ∈ R K × R \mathrm{C} \in \mathbb{R}^{K\times R} CRK×R 被称为因子矩阵,它们通常是正交的,可以视为沿相应 mode 下的主成分。张量 G ∈ R P × Q × R \mathcal{G} \in \mathbb{R}^{P \times Q \times R} GRP×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 xijkp=1Pq=1Qr=1Rgpqraipbjqckr,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)(CB)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)(CA)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)(BA)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(n1)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} GRP×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}]\!] XG×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}]\!] XG×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=jkGijkGijk

由此我们可以引出对 T T T 进行 HOSVD 算法的另外一种求解方法:

  1. 计算各个指标的键约化矩阵
    I i i ′ = ∑ j k T i j k T i ′ j k I_{ii'}=\sum_{jk}T_{ijk}T_{i'jk} Iii=jkTijkTijk

    J j j ′ = ∑ i k T i j k T i j ′ k J_{jj'}=\sum_{ik}T_{ijk}T_{ij'k} Jjj=ikTijkTijk

    K k k ′ = ∑ i j T i j k T i j k ′ K_{kk'}=\sum_{ij}T_{ijk}T_{ijk'} Kkk=ijTijkTijk

  2. 计算每个键约化矩阵的本征值分解
    I = U Ω U T I=U\Omega U^T I=UΩUT

    J = V Π V T J=V\Pi V^T J=VΠVT

    K = W Υ W T K=W\Upsilon W^T K=WΥWT

  3. 计算核张量
    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=abcTabcUaiVbjWck

  4. 得到高阶奇异值分解
    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=ijkGijkUaiVbjWck


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| minX[[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} GRR1×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=X22X,[[G;A(1),A(2),,A(N)]]+G;A(1),A(2),,A(N)2=X22X×1A(1)T×NA(N)T,G+G2=X22G,G+G2=X2G2=X2X×1A(1)T×2×NA(N)T2

如果使目标函数取值最小,那么我们可以使得上面结果的第二项取最大值,即
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| maxX×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| maxA(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(n1)A(1))

我们可以将 A ( n ) A^{(n)} A(n) 定义为 W \mathrm{W} W 的前 R n R_n Rn 个左奇异向量就可以求出解。

       

  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值