本文是對論文Tensor Decompositions and Applications進行了翻譯、整理、篩選和適當的補充,如何希望深入理解可以閱讀原文。
相關文章:
【張量分解(一)】符號與基礎知識
【張量分解(二)】CP分解
【張量分解(三)】Tucker分解
一、CP分解
1.1 定義
CP分解就是將一個張量分解成多個單秩張量的和。例如,給定一個三階張量X∈RI×J×K,則CP分解可以寫爲
X≈r=1∑Rar∘br∘cr
其中,∘是指向量外積,R是正整數且ar∈RI,br∈RJ,cr∈RK。下圖展示了三階張量的CP分解
將上面的CP分解展開,也可以寫作
xijk≈r=1∑Rairbjrckr,i=1,2,…,I,j=1,2,…,J,k=1,2,…,K
此外,對於三階張量來說,可以從通道切片(frontal slice)的角度表示CP分解
Xk≈AD(k)BT,D(k)≡diag(ck:),k=1,…,K
其中,Xk表示張量X的第k個通道切片。對於行切片和列切片也可以寫出類似的公式。
1.2 張量矩陣化後的CP分解
在文章【張量分解(一)】符號與基礎知識中介紹過張量的矩陣化。這裏主要介紹將張量轉換爲矩陣後的CP分解。
首先,定義因子矩陣(factor matrices)爲CP分解中組成單秩張量的同一維度的向量合併成的矩陣(這個表述有點繞)。具體來說,就是把所有的a向量合併成一個矩陣A=[a1a2…aR]。同理,還可以合成因子矩陣B和C。那麼矩陣化後的張量CP分解形式如下:
X(1)≈A(B⊙C)T
X(2)≈B(C⊙A)T
X(3)≈C(B⊙A)T
其中,⊙表示Khatri-Rao積,X(i)表示張量X的模i矩陣化後的矩陣。
1.3 符號表示
爲了更加簡潔的表達,CP分解可以簡寫如下X≈⟮A,B,C⟯
實在是打不出空心方括號(攤手),只能用⟮⟯代替了。
通常,假設矩陣A,B和C的列向量是標準化後的向量,並且將提取出來的權重合併入向量λ∈RR,因此CP分解還可以寫成X≈r=1∑Rλrar∘br∘cr=⟮λ;A,B,C⟯
1.4 高維擴展
先前主要介紹的是三階張量的CP分解,主要是因爲其具有廣泛的適用性。對於N階張量X∈RI1×I2×⋯×IN,其CP分解爲
X≈r=1∑Rλrar(1)∘ar(2)∘⋯∘ar(N)=⟮λ;A(1),A(2),…,A(N)⟯
其中,λ∈RR且A(n)∈RIn×R,n=1,2,…,N
類似的,N階張量X進行模n矩陣化後的CP分解爲
X(n)≈A(n)Λ(A(N)⊙⋯⊙An+1⊙An−1⊙⋯⊙A(1))T
其中,對角矩陣Λ=diag(λ)。
二、張量的秩(Tensor Rank)
2.1 張量秩的定義
用於生成張量X所需要的單秩張量的最小數量即爲張量X的秩,用rank(X)表示。換個角度,張量的秩就是CP分解時單秩張量數量的最小值。
2.2 張量秩與矩陣秩
此外,張量的秩與矩陣秩的定義非常相似,但是二值的性質非常的不同。例如,實數張量的秩在實數域R和複數域C上可能會不同。另一個張量秩和矩陣秩的顯著不同是,當前沒有一個直接的方法來確定給定張量的秩。例如,Krushkal對特定的9×9×9的張量進行分析,只能確定其秩在18到23之間。在實際應用中,張量的秩是通過CP分解來確定的。
2.3 張量的最大秩和典型秩
最大秩:一類張量能夠達到的最大的秩稱爲張量的最大秩(maximum rank)。典型秩:一個從均勻連續分別中隨機抽取元素所組成的張量中,出現概率大於0的任何秩。
具體來說,對於所有形狀爲I×J的矩陣,最大秩和典型秩均等於min{I,J}。但是對於張量來說,最大秩和典型秩可能不相同,而且典型秩可能不只一個。例如2×2×2張量的典型秩爲2或3,通過蒙特卡洛實驗也可以發現秩爲2的張量佔79%,秩爲3的張量佔21%,秩爲1的張量在理論上雖然可能,但是實際概率爲0。
對於一般的三階張量X∈RI×J×K,當前只知道其最大秩的一個弱上界
rank(X)≤min{IJ,IK,JK}
對於特定形狀或類型的張量來說,有可能存在一些確定最大秩和典型秩的具體值或者範圍的方法,可以參考原文Tensor Decompositions and Applications
三、唯一性
高階張量的一個有趣的特性是它的秩分解是唯一的,而通常矩陣分解不是。
3.1 矩陣分解的不唯一性
對於秩爲R的矩陣X∈RI×J,其秩分解可以寫爲
X=ABT=r=1∑Rar∘br
具體來說,對於矩陣X的SVD分解爲UΣVT,爲了與上面的秩分解對於,令A=UΣ且B=V。但是,如果令A=UΣW且B=VW,其中W是R×R的正交矩陣(WTW=E),同樣也滿足矩陣秩分解的定義。
換句話說,我們可以輕易的構造兩個完全不同的單秩矩陣集合,但是集合中的矩陣相加就等於原始矩陣。而SVD分解的唯一性僅僅是因爲正交約束的加入。
3.2 張量分解的唯一性
通常,在十分微弱的約束條件下,張量的CP分解就是唯一的。對於秩爲R的三階張量X∈RI×J×K,其CP分解爲
X=r=1∑Rar∘br∘cr=⟮A,B,C⟯
而唯一性就是指上面的分解中是唯一可能的單秩矩陣的組合。當然,這是排除了縮放和重新排列後的唯一性。例如這裏使用置換矩陣對分解後的單秩矩陣的列進行重排列
X=⟮A,B,C⟯=⟮AΠ,BΠ,CΠ⟯
其中,Π是R×R的置換矩陣。同樣,對於將CP分解中的向量進行縮放也不影響CP分解的結果,例如
X=r=1∑R(αrar)∘(βrbr)∘(γrcr)
其中,αrβrγr=1,r=1,...,R
3.3 CP分解唯一性的充分條件
對於CP分解X=⟮A,B,C⟯,令kA、kB、kC分別表示矩陣A、B、C的秩,那麼CP分解唯一的充分條件是kA+kB+kC≥2R+2
將上面的條件擴展至N維,對於張量X=r=1∑Rar(1)∘ar(2)∘⋯∘ar(N)=⟮A(1),A(2),…,A(N)⟯,其CP分解唯一性的充分條件爲
n=1∑NkA(n)≥2R+(N−1)
3.4 CP分解唯一性的必要條件
上面的充分條件在R=2或R=3的條件下,也是CP分解唯一性的必要條件,但是當R>3則不成立。更加廣泛的CP分解唯一性的必要條件爲
min{rank(A⊙B),rank(A⊙C),rank(B⊙C)}=R
推廣的N維情況下,則
minn=1,…,Nrank(A(1)⊙⋯⊙A(n−1)⊙A(n+1)⊙⋯⊙A(N))=R
但是,由於性質
rank(A⊙B)≤rank(A⊗B)≤rank(A)⋅rank(B)
因此,N維下的必要條件可以擴展爲
minn=1,…,N(rank(A(1))⋅⋯⋅rank(A(n−1))⋅rank(A(n+1))⋅⋯⋅rank(A(N)))≥R
3.5 CP分解唯一性的判斷標準
對於秩爲R的三階張量X∈RI×J×K,當滿足條件
R≤K並且R(R−1)≤I(I−1)J(J−1)/2
則,其CP分解是唯一的。
類似的,對於秩爲R的四階張量X∈RI×J×K×L,其CP分解唯一的條件是
R≤L並且R(R−1)≤IJK(3IJK−IJ−IK−JK−I−J−K+3)/4
四、低秩近似與邊界秩(border rank)
4.1 矩陣的低秩近似
給定一個秩爲R的矩陣A,那麼該矩陣的SVD分解可以寫作:
A=r=1∑Rσrur∘vr,其中σ1≥σ2≥⋯≥σR
那麼該矩陣的秩k近似,可以直接使用SVD分解中前k個部分,即
B=r=1∑kσrur∘vr
4.2 張量的低秩近似
上面對於矩陣的結果並不適用於張量。給定一個秩爲R的三階張量,其CP分解爲
X=r=1∑Rλrar∘br∘cr
按上面矩陣的低秩近似來看,三階張量的秩k近似也應該是其中k個部分的和,但實際情況並非如此。
Kolda提供過一個例子,對於一個三階張量的單秩近似並不是秩2近似的組成部分(在矩陣的低秩分解中一定成立)。因此會得出一個推論,一個張量的最優秩k近似中的k個組成部分並不是按順序求得的,而是需要同時被發現的。
總的來說,這個問題比較複雜,有時一個張量的最優秩k近似不一定存在。如果一個張量可以通過低秩的因式分解任意逼近,那麼該張量就是一個退化張量。
舉一個具體的例子來說,給定一個秩爲3的具體三階張量X∈RI×J×K爲
X=a1∘b1∘c2+a1∘b2∘c1+a2∘b1∘c1
其中,A∈RI×2,B∈RJ×2,C∈RK×2是由於上式中對應的向量組成的,且這三個矩陣的列向量線性無關。
上面描述的張量可以使用下面的下面的秩2張量進行任意的近似
Y=n(a1+n1a2)∘(b1+n1b2)∘(c1+n1c2)−na1∘b1∘c1
原始的秩3張量X和近似的秩2張量Y之間的誤差爲
∥X−Y∥=n1∥∥∥a2∘b2∘c1+a2∘b1∘c2+a1∘b2∘c2+n1a2∘b2∘c2∥∥∥
當然,這個誤差可以任意的小。
4.3 邊界秩(border rank)
在不存在最優低秩近似的情況下,可以考慮邊界秩。其定義爲,能夠以任意非零誤差充分近似給定張量的最小單秩張量的數量。形式化的定義爲
rank(X)=min{r∣對於任意ϵ>0,均存在一個張量E滿足∥E∥<ϵ且rank(X+E)=r}
顯然,rank(X)≤rank(X)
五、計算CP分解
本小節介紹怎麼計算一個張量的CP分解。
在前面的小節中提到過,沒有一個有限的算法可以確定張量的秩。而CP分解則是將待分解張量分解成R個單秩張量,其中R就是待分解張量的秩。因此,計算CP分解的第一個問題就是如何確定張量的秩。
大多數的CP求解思路是嘗試不同的R值來擬合待分解張量,直至找到一個最佳的分解。對於無噪聲的數據,那麼可以對R的值從1,2,…這樣逐步嘗試,從而得到一個最優的CP分解。但是,前面介紹了張量的低秩近似,一個張量可以被一個更低秩的張量任意逼近,這在實際中有一些問題。
5.1 計算三階張量的CP分解
假設CP分解中的R取值已經確定,那麼這裏介紹一種求解CP分解的ALS(交替最小二乘法)算法。
令X∈RI×J×K,該算法的目標是計算一個包含R個單秩張量的CP分解,使其儘量近似X,即
minX^∥X−X^∥,其中X^=r=1∑Rλrar∘br∘cr=⟮λ;A,B,C⟯
交替最小二乘法(ALS)就是固定B和C,求解A;再固定A和C,求解B;再固定A和B,求解C。重複上面的過程,直至滿足收斂條件。這就是ALS的思路。
固定兩個張量來求解另外一個張量,這就變成了線性最小二乘的問題。例如,B和C固定,那麼依照1.2節中張量矩陣化後的CP分解,那麼就能把上面的最小化問題重寫爲
minA^∥X(1)−A^(C⊙B)T∥F,其中A^=A⋅diag(λ)
上面的最小化問題的最優解爲
A^=X(1)[(C⊙B)T]−1
其中,-1是指張量的僞逆,而Khatri-Rao積的僞逆可以進行變換,因此上面的最優解還可以寫作
A^=X(1)(C⊙B)(CTC∗BTB)−1
這個版本寫法的最優解有一個優勢,僅需要求解一個R×R矩陣的僞逆,而不是JK×R矩陣的僞逆。最後,對矩陣A^的列進行標準化後就得到了矩陣A。
5.2 ALS算法在高維張量上的應用
給定N階張量X∈RI1×I2×⋯×IN,使用CP分解將其分解爲R個單秩矩陣的ALS算法。