【張量分解(二)】CP分解

本文是對論文Tensor Decompositions and Applications進行了翻譯、整理、篩選和適當的補充,如何希望深入理解可以閱讀原文。

相關文章:

【張量分解(一)】符號與基礎知識
【張量分解(二)】CP分解
【張量分解(三)】Tucker分解

一、CP分解

1.1 定義

CP分解就是將一個張量分解成多個單秩張量的和。例如,給定一個三階張量XRI×J×K\mathcal{X}\in\mathbb{R}^{I\times J\times K},則CP分解可以寫爲
Xr=1Rarbrcr\mathcal{X}\approx\sum_{r=1}^{R}\textbf{a}_r\circ\textbf{b}_r\circ\textbf{c}_r
其中,\circ是指向量外積,RR是正整數且arRI\textbf{a}_r\in\mathbb{R}^I,brRJ\textbf{b}_r\in\mathbb{R}^J,crRK\textbf{c}_r\in\mathbb{R}^K。下圖展示了三階張量的CP分解
在這裏插入圖片描述
將上面的CP分解展開,也可以寫作
xijkr=1Rairbjrckr,i=1,2,,I,j=1,2,,J,k=1,2,,Kx_{ijk}\approx\sum_{r=1}^R a_{ir}b_{jr}c_{kr},\quad i=1,2,\dots,I,j=1,2,\dots,J, k=1,2,\dots,K
此外,對於三階張量來說,可以從通道切片(frontal slice)的角度表示CP分解
XkAD(k)BTD(k)diag(ck:),k=1,,K\textbf{X}_k\approx\textbf{A}\textbf{D}^{(k)}\textbf{B}^T,\textbf{D}^{(k)}\equiv diag(\textbf{c}_{k:}),k=1,\dots,K
其中,Xk\textbf{X}_k表示張量X\mathcal{X}的第k個通道切片。對於行切片和列切片也可以寫出類似的公式。

1.2 張量矩陣化後的CP分解

在文章【張量分解(一)】符號與基礎知識中介紹過張量的矩陣化。這裏主要介紹將張量轉換爲矩陣後的CP分解。
首先,定義因子矩陣(factor matrices)爲CP分解中組成單秩張量的同一維度的向量合併成的矩陣(這個表述有點繞)。具體來說,就是把所有的a\textbf{a}向量合併成一個矩陣A=[a1a2aR]\textbf{A}=[\textbf{a}_1\quad\textbf{a}_2\quad\dots\quad\textbf{a}_R]。同理,還可以合成因子矩陣B\textbf{B}C\textbf{C}。那麼矩陣化後的張量CP分解形式如下:
X(1)A(BC)T\textbf{X}_{(1)}\approx\textbf{A}(\textbf{B}\odot\textbf{C})^T
X(2)B(CA)T\textbf{X}_{(2)}\approx\textbf{B}(\textbf{C}\odot\textbf{A})^T
X(3)C(BA)T\textbf{X}_{(3)}\approx\textbf{C}(\textbf{B}\odot\textbf{A})^T
其中,\odot表示Khatri-Rao積,X(i)\textbf{X}_{(i)}表示張量X\mathcal{X}的模i矩陣化後的矩陣。

1.3 符號表示

爲了更加簡潔的表達,CP分解可以簡寫如下XA,B,C\mathcal{X}\approx\lgroup\textbf{A},\textbf{B},\textbf{C}\rgroup
實在是打不出空心方括號(攤手),只能用\lgroup\rgroup代替了。


通常,假設矩陣A\textbf{A},B\textbf{B}C\textbf{C}的列向量是標準化後的向量,並且將提取出來的權重合併入向量λRR\mathrm{\lambda}\in\mathbb{R}^R,因此CP分解還可以寫成Xr=1Rλrarbrcr=λ;A,B,C\mathcal{X}\approx\sum_{r=1}^{R}\lambda_{r}\textbf{a}_r\circ\textbf{b}_r\circ\textbf{c}_r=\lgroup\mathrm{\lambda};\textbf{A},\textbf{B},\textbf{C}\rgroup

1.4 高維擴展

先前主要介紹的是三階張量的CP分解,主要是因爲其具有廣泛的適用性。對於N階張量XRI1×I2××IN\mathcal{X}\in\mathbb{R}^{I_1\times I_2\times \dots \times I_N},其CP分解爲
Xr=1Rλrar(1)ar(2)ar(N)=λ;A(1),A(2),,A(N)\mathcal{X}\approx\sum_{r=1}^{R}\lambda_{r}\textbf{a}_r^{(1)}\circ\textbf{a}_r^{(2)}\circ\dots\circ\textbf{a}_r^{(N)}=\lgroup\mathrm{\lambda};\textbf{A}^{(1)},\textbf{A}^{(2)},\dots,\textbf{A}^{(N)}\rgroup
其中,λRR\mathrm{\lambda}\in\mathbb{R}^RA(n)RIn×R,n=1,2,,N\textbf{A}^{(n)}\in\mathbb{R}^{I_n\times R},n=1,2,\dots,N

類似的,N階張量X\mathcal{X}進行模n矩陣化後的CP分解爲
X(n)A(n)Λ(A(N)An+1An1A(1))T\textbf{X}_{(n)}\approx\textbf{A}^{(n)}\mathrm{\Lambda}(\textbf{A}^{(N)}\odot\dots\odot\textbf{A}^{n+1}\odot\textbf{A}^{n-1}\odot\dots\odot\textbf{A}^{(1)})^T
其中,對角矩陣Λ=diag(λ)\mathrm{\Lambda}=diag(\mathrm{\lambda})

二、張量的秩(Tensor Rank)

2.1 張量秩的定義

用於生成張量X\mathcal{X}所需要的單秩張量的最小數量即爲張量X\mathcal{X}的秩,用rank(X)rank{\mathcal{(X)}}表示。換個角度,張量的秩就是CP分解時單秩張量數量的最小值。

2.2 張量秩與矩陣秩

此外,張量的秩與矩陣秩的定義非常相似,但是二值的性質非常的不同。例如,實數張量的秩在實數域R\mathbb{R}和複數域C\mathbb{C}上可能會不同。另一個張量秩和矩陣秩的顯著不同是,當前沒有一個直接的方法來確定給定張量的秩。例如,Krushkal對特定的9×9×99\times9\times9的張量進行分析,只能確定其秩在18到23之間。在實際應用中,張量的秩是通過CP分解來確定的。

2.3 張量的最大秩和典型秩

最大秩:一類張量能夠達到的最大的秩稱爲張量的最大秩(maximum rank)。典型秩:一個從均勻連續分別中隨機抽取元素所組成的張量中,出現概率大於0的任何秩。
具體來說,對於所有形狀爲I×JI\times J的矩陣,最大秩和典型秩均等於min{I,J}min\{I,J\}。但是對於張量來說,最大秩和典型秩可能不相同,而且典型秩可能不只一個。例如2×2×22\times 2\times 2張量的典型秩爲2或3,通過蒙特卡洛實驗也可以發現秩爲2的張量佔79%,秩爲3的張量佔21%,秩爲1的張量在理論上雖然可能,但是實際概率爲0。
對於一般的三階張量XRI×J×K\mathcal{X}\in\mathbb{R}^{I\times J\times K},當前只知道其最大秩的一個弱上界
rank(X)min{IJ,IK,JK}rank(\mathcal{X})\leq min\{IJ,IK,JK\}
對於特定形狀或類型的張量來說,有可能存在一些確定最大秩和典型秩的具體值或者範圍的方法,可以參考原文Tensor Decompositions and Applications

三、唯一性

高階張量的一個有趣的特性是它的秩分解是唯一的,而通常矩陣分解不是。

3.1 矩陣分解的不唯一性

對於秩爲RR的矩陣XRI×J\textbf{X}\in\mathbb{R}^{I\times J},其秩分解可以寫爲
X=ABT=r=1Rarbr\textbf{X}=\textbf{AB}^T=\sum_{r=1}^R\textbf{a}_r\circ\textbf{b}_r
具體來說,對於矩陣X\textbf{X}的SVD分解爲UΣVT\mathrm{U\Sigma V}^T,爲了與上面的秩分解對於,令A=UΣ\textbf{A}=\mathrm{U\Sigma}B=V\textbf{B}=\mathrm{V}。但是,如果令A=UΣW\textbf{A}=\mathrm{U\Sigma W}B=VW\textbf{B}=\mathrm{VW},其中W\mathrm{W}R×RR\times R的正交矩陣(WTW=EW^TW=E),同樣也滿足矩陣秩分解的定義。
換句話說,我們可以輕易的構造兩個完全不同的單秩矩陣集合,但是集合中的矩陣相加就等於原始矩陣。而SVD分解的唯一性僅僅是因爲正交約束的加入。

3.2 張量分解的唯一性

通常,在十分微弱的約束條件下,張量的CP分解就是唯一的。對於秩爲RR的三階張量XRI×J×K\mathcal{X}\in\mathbb{R}^{I\times J\times K},其CP分解爲
X=r=1Rarbrcr=A,B,C\mathcal{X}=\sum_{r=1}^{R}\textbf{a}_r\circ\textbf{b}_r\circ\textbf{c}_r=\lgroup\textbf{A},\textbf{B},\textbf{C}\rgroup
而唯一性就是指上面的分解中是唯一可能的單秩矩陣的組合。當然,這是排除了縮放和重新排列後的唯一性。例如這裏使用置換矩陣對分解後的單秩矩陣的列進行重排列
X=A,B,C=AΠ,BΠ,CΠ\mathcal{X}=\lgroup\textbf{A},\textbf{B},\textbf{C}\rgroup=\lgroup\textbf{A}\Pi,\textbf{B}\Pi,\textbf{C}\Pi\rgroup
其中,Π\PiR×RR\times R的置換矩陣。同樣,對於將CP分解中的向量進行縮放也不影響CP分解的結果,例如
X=r=1R(αrar)(βrbr)(γrcr)\mathcal{X}=\sum_{r=1}^R(\alpha_r\textbf{a}_r)\circ(\beta_r\textbf{b}_r)\circ(\gamma_r\textbf{c}_r)
其中,αrβrγr=1,r=1,...,R\alpha_r\beta_r\gamma_r=1,r=1,...,R

3.3 CP分解唯一性的充分條件

對於CP分解X=A,B,C\mathcal{X}=\lgroup\textbf{A},\textbf{B},\textbf{C}\rgroup,令kAk_AkBk_BkCk_C分別表示矩陣A\textbf{A}B\textbf{B}C\textbf{C}的秩,那麼CP分解唯一的充分條件是kA+kB+kC2R+2k_A+k_B+k_C\ge2R+2
將上面的條件擴展至N維,對於張量X=r=1Rar(1)ar(2)ar(N)=A(1),A(2),,A(N)\mathcal{X}=\sum_{r=1}^R\textbf{a}_{r}^{(1)}\circ \textbf{a}_{r}^{(2)}\circ\dots\circ\textbf{a}_{r}^{(N)}=\lgroup\textbf{A}^{(1)},\textbf{A}^{(2)},\dots,\textbf{A}^{(N)}\rgroup,其CP分解唯一性的充分條件爲
n=1NkA(n)2R+(N1)\sum_{n=1}^N k_{\textbf{A}^{(n)}}\ge2R+(N-1)

3.4 CP分解唯一性的必要條件

上面的充分條件在R=2R=2R=3R=3的條件下,也是CP分解唯一性的必要條件,但是當R>3R>3則不成立。更加廣泛的CP分解唯一性的必要條件爲
min{rank(AB),rank(AC),rank(BC)}=Rmin\{rank(\textbf{A}\odot\textbf{B}),rank(\textbf{A}\odot\textbf{C}),rank(\textbf{B}\odot\textbf{C})\}=R
推廣的N維情況下,則
minn=1,,Nrank(A(1)A(n1)A(n+1)A(N))=Rmin_{n=1,\dots,N}rank(\textbf{A}^{(1)}\odot\dots\odot\textbf{A}^{(n-1)}\odot\textbf{A}^{(n+1)}\odot\dots\odot\textbf{A}^{(N)})=R
但是,由於性質
rank(AB)rank(AB)rank(A)rank(B)rank(\textbf{A}\odot\textbf{B})\le rank(\textbf{A}\otimes\textbf{B})\le rank(\textbf{A})\cdot rank(\textbf{B})
因此,N維下的必要條件可以擴展爲
minn=1,,N(rank(A(1))rank(A(n1))rank(A(n+1))rank(A(N)))Rmin_{n=1,\dots,N}\Big(rank(\textbf{A}^{(1)})\cdot\dots\cdot rank(\textbf{A}^{(n-1)})\cdot rank(\textbf{A}^{(n+1)})\cdot\dots\cdot rank(\textbf{A}^{(N)})\Big)\ge R

3.5 CP分解唯一性的判斷標準

對於秩爲RR的三階張量XRI×J×K\mathcal{X}\in\mathbb{R}^{I\times J\times K},當滿足條件
RKR(R1)I(I1)J(J1)/2R\le K並且R(R-1)\le I(I-1)J(J-1)/2
則,其CP分解是唯一的。
類似的,對於秩爲R的四階張量XRI×J×K×L\mathcal{X}\in\mathbb{R}^{I\times J\times K\times L},其CP分解唯一的條件是
RLR(R1)IJK(3IJKIJIKJKIJK+3)/4R\le L並且R(R-1)\le IJK(3IJK-IJ-IK-JK-I-J-K+3)/4

四、低秩近似與邊界秩(border rank)

4.1 矩陣的低秩近似

給定一個秩爲RR的矩陣A\textbf{A},那麼該矩陣的SVD分解可以寫作:
A=r=1Rσrurvrσ1σ2σR\textbf{A}=\sum_{r=1}^R\sigma_r\textbf{u}_r\circ\textbf{v}_r,其中\sigma_1\ge\sigma_2\ge\dots\ge\sigma_R
那麼該矩陣的秩k近似,可以直接使用SVD分解中前k個部分,即
B=r=1kσrurvr\textbf{B}=\sum_{r=1}^k\sigma_r\textbf{u}_r\circ\textbf{v}_r

4.2 張量的低秩近似

上面對於矩陣的結果並不適用於張量。給定一個秩爲RR的三階張量,其CP分解爲
X=r=1Rλrarbrcr\mathcal{X}=\sum_{r=1}^R\lambda_r\textbf{a}_r\circ\textbf{b}_r\circ\textbf{c}_r
按上面矩陣的低秩近似來看,三階張量的秩k近似也應該是其中k個部分的和,但實際情況並非如此。
Kolda提供過一個例子,對於一個三階張量的單秩近似並不是秩2近似的組成部分(在矩陣的低秩分解中一定成立)。因此會得出一個推論,一個張量的最優秩k近似中的k個組成部分並不是按順序求得的,而是需要同時被發現的。
總的來說,這個問題比較複雜,有時一個張量的最優秩k近似不一定存在。如果一個張量可以通過低秩的因式分解任意逼近,那麼該張量就是一個退化張量。
舉一個具體的例子來說,給定一個秩爲3的具體三階張量XRI×J×K\mathcal{X}\in\mathbb{R}^{I\times J\times K}
X=a1b1c2+a1b2c1+a2b1c1\mathcal{X}=\textbf{a}_1\circ\textbf{b}_1\circ\textbf{c}_2+\textbf{a}_1\circ\textbf{b}_2\circ\textbf{c}_1+\textbf{a}_2\circ\textbf{b}_1\circ\textbf{c}_1
其中,ARI×2,BRJ×2,CRK×2\textbf{A}\in\mathbb{R}^{I\times 2},\textbf{B}\in\mathbb{R}^{J\times 2},\textbf{C}\in\mathbb{R}^{K\times 2}是由於上式中對應的向量組成的,且這三個矩陣的列向量線性無關。
上面描述的張量可以使用下面的下面的秩2張量進行任意的近似
Y=n(a1+1na2)(b1+1nb2)(c1+1nc2)na1b1c1\mathcal{Y}=n\Big(\textbf{a}_1+\frac{1}{n}\textbf{a}_2\Big)\circ\Big(\textbf{b}_1+\frac{1}{n}\textbf{b}_2\Big)\circ\Big(\textbf{c}_1+\frac{1}{n}\textbf{c}_2\Big)-n\textbf{a}_1\circ\textbf{b}_1\circ\textbf{c}_1
原始的秩3張量X\mathcal{X}和近似的秩2張量Y\mathcal{Y}之間的誤差爲
XY=1na2b2c1+a2b1c2+a1b2c2+1na2b2c2\Vert\mathcal{X}-\mathcal{Y}\Vert=\frac{1}{n}\Big\Vert\textbf{a}_2\circ\textbf{b}_2\circ\textbf{c}_1+\textbf{a}_2\circ\textbf{b}_1\circ\textbf{c}_2+\textbf{a}_1\circ\textbf{b}_2\circ\textbf{c}_2+\frac{1}{n}\textbf{a}_2\circ\textbf{b}_2\circ\textbf{c}_2\Big\Vert
當然,這個誤差可以任意的小。

4.3 邊界秩(border rank)

在不存在最優低秩近似的情況下,可以考慮邊界秩。其定義爲,能夠以任意非零誤差充分近似給定張量的最小單秩張量的數量。形式化的定義爲
rank~(X)=min{rϵ>0,E滿E<ϵrank(X+E)=r}\widetilde{rank}(\mathcal{X})=min\{r|對於任意\epsilon>0,均存在一個張量\mathcal{E}滿足\Vert\mathcal{E}\Vert<\epsilon且rank(\mathcal{X}+\mathcal{E})=r\}
顯然,rank~(X)rank(X)\widetilde{rank}(\mathcal{X})\le rank(\mathcal{X})

五、計算CP分解

本小節介紹怎麼計算一個張量的CP分解。
在前面的小節中提到過,沒有一個有限的算法可以確定張量的秩。而CP分解則是將待分解張量分解成RR個單秩張量,其中RR就是待分解張量的秩。因此,計算CP分解的第一個問題就是如何確定張量的秩。
大多數的CP求解思路是嘗試不同的RR值來擬合待分解張量,直至找到一個最佳的分解。對於無噪聲的數據,那麼可以對RR的值從1,2,…這樣逐步嘗試,從而得到一個最優的CP分解。但是,前面介紹了張量的低秩近似,一個張量可以被一個更低秩的張量任意逼近,這在實際中有一些問題。

5.1 計算三階張量的CP分解

假設CP分解中的RR取值已經確定,那麼這裏介紹一種求解CP分解的ALS(交替最小二乘法)算法。
XRI×J×K\mathcal{X}\in\mathbb{R}^{I\times J\times K},該算法的目標是計算一個包含RR個單秩張量的CP分解,使其儘量近似X\mathcal{X},即
minX^XX^,X^=r=1Rλrarbrcr=λ;A,B,Cmin_{\hat{\mathcal{X}}}\Vert\mathcal{X}-\hat{\mathcal{X}}\Vert,其中\hat{\mathcal{X}}=\sum_{r=1}^{R}\lambda_r\textbf{a}_r\circ\textbf{b}_r\circ\textbf{c}_r=\lgroup\mathrm{\lambda};\textbf{A},\textbf{B},\textbf{C}\rgroup
交替最小二乘法(ALS)就是固定B和C,求解A;再固定A和C,求解B;再固定A和B,求解C。重複上面的過程,直至滿足收斂條件。這就是ALS的思路。
固定兩個張量來求解另外一個張量,這就變成了線性最小二乘的問題。例如,B和C固定,那麼依照1.2節中張量矩陣化後的CP分解,那麼就能把上面的最小化問題重寫爲
minA^X(1)A^(CB)TF,A^=Adiag(λ)min_{\hat{\textbf{A}}}\Vert\textbf{X}_{(1)}-\hat{\textbf{A}}(\textbf{C}\odot\textbf{B})^T\Vert_F,其中\hat{\textbf{A}}=\textbf{A}\cdot diag(\lambda)
上面的最小化問題的最優解爲
A^=X(1)[(CB)T]1\hat{\textbf{A}}=\textbf{X}_{(1)}[(\textbf{C}\odot\textbf{B})^T]^{-1}
其中,-1是指張量的僞逆,而Khatri-Rao積的僞逆可以進行變換,因此上面的最優解還可以寫作
A^=X(1)(CB)(CTCBTB)1\hat{\textbf{A}}=\textbf{X}_{(1)}(\textbf{C}\odot\textbf{B})(\textbf{C}^T\textbf{C}*\textbf{B}^T\textbf{B})^{-1}
這個版本寫法的最優解有一個優勢,僅需要求解一個R×RR\times R矩陣的僞逆,而不是JK×RJK\times R矩陣的僞逆。最後,對矩陣A^\hat{\textbf{A}}的列進行標準化後就得到了矩陣A\textbf{A}

5.2 ALS算法在高維張量上的應用

給定N階張量XRI1×I2××IN\mathcal{X}\in\mathbb{R}^{I_1\times I_2\times\dots\times I_N},使用CP分解將其分解爲RR個單秩矩陣的ALS算法。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章