CANDECOMP(canonical decomposition)和PARAFAC(parallel factors)是一種對張量進行拆分的方法, 其核心思想是用有限個的秩1張量的和來(近似地)表示該張量. 這種方法被不少人獨立的發現, 不考慮歷史上的因素, 咱們將其稱爲CP分解法 (CP decomposition).
算法
例: 若是咱們要把一個3階張量\(\mathcal{X}\in\mathbb{R}^{I \times J \times K}\)進行CP分解, 咱們期待其結果以下.
\[ \begin{equation} \mathcal{X} \approx \sum_{r=1}^R a_r \circ b_r \circ c_r \end{equation}, \]app
經過外積的定義, 對每一個元素都有:
\[ x_{ijk} \approx \sum_{r=1}^R a_{ir}b_{jr}c_{kr} \text{ for $i=1,\dots,I,\,j=1,\dots,J, \, k=1,\dots,K.$} \]ide
咱們稱那些上式中經過外積組成秩1張量元素的向量集合爲因子矩陣(factor matrices). 例如, \(\mathrm{A} = \begin{bmatrix} a_1 & a_2 & \dots & a_R \end{bmatrix}\), 相似的,咱們構造\(\mathrm{B}\) 和 \(\mathrm{C}\). 利用這些定義, CP分解能夠被等價寫做如下矩陣形式. 注意, 其左側都是張量的對應mode的矩陣化.
\[ \mathrm{X}_{(1)} \approx \mathrm{A}(\mathrm{C}\odot \mathrm{B})^\mathsf{T},\\ \mathrm{X}_{(2)} \approx \mathrm{B}(\mathrm{C}\odot \mathrm{A})^\mathsf{T},\\ \mathrm{X}_{(3)} \approx \mathrm{C}(\mathrm{B}\odot \mathrm{A})^\mathsf{T}. \]函數
以上3維模型也能夠用張量的frontal slices來表示:
\[ \mathcal{X} \approx \mathrm{A}\mathrm{D}^{(k)}\mathrm{B}^\mathsf{T},\, \text{ where }\, \mathrm{D}^{(k)} \equiv \text{diag}(c_{k::}) \, \text{ for $\, k=1,...,K.$} \]學習
咱們也能夠將上式子改寫爲horizontal slices和lateral slices的版本, 須要注意的是, 這種以slice爲主體的表達很難延伸到超過3維的張量之中. 利用Kolda的命名方式, 咱們也能夠進一步簡化CP模型:
\[ \mathcal{X} \approx [\![\mathrm{A,B,C]}\!] \equiv \sum_{r=1}^R \mathrm{a}_r \circ \mathrm{b}_r \circ \mathrm{c}_r. \]ui
爲了便利, 咱們一般假設\(\mathrm{A, B}\)和\(\mathrm{C}\)的列向量都是歸一化的(normalized). 而本來的比重(weights)則被一個向量\(\lambda\in\mathbb{R}^R\)所吸取, 寫做如下形式:
\[ \mathcal{X} \approx [\![\lambda \, ; \, \mathrm{A,B,C}]\!] \equiv \sum_{r=1}^R \lambda_r \: \mathrm{a}_r \circ \mathrm{b}_r \circ \mathrm{c}_r. \]spa
其中 \(\Lambda = diag(\lambda).\)3d
與矩陣時的定義相似, 張量秩寫做$ \text{rank}(\mathcal{X}) \(, 爲還原張量所需秩1張量的最小數目. 換句話說, 也就是精確(exact)CP分解中的最小成分數. 當CP分解是精確的, 也就是\)R=\text{rank}(\mathcal{X})$時, 咱們也稱之爲秩分解(rank decomposition).orm
這個張量在 \(\mathbb{R}\) 下的秩爲3, 但在 \(\mathbb{C}\) 下的秩爲2. 其 \(\mathbb{R}\) 之下的秩分解\(\mathcal{X} = [\![\mathrm{A}, \mathrm{B}, \mathrm{C}]\!]\)爲:blog
\[ \mathrm{A} = \begin{bmatrix}1 & 0 & 1 \\ 0 & 1 & -1 \end{bmatrix}, \quad \mathrm{B} = \begin{bmatrix}1 & 0 & 1 \\ 0 & 1 & 1 \end{bmatrix}, \quad and \quad \mathrm{C} = \begin{bmatrix}1 & 1 & 0 \\ -1 & 1 & 1 \end{bmatrix}, \]
或許讀者已經注意到了, 咱們給出了張量秩的定義, 但咱們沒有給出如何求他的方法. 這是張量秩和矩陣秩的第二個巨大不一樣. 張量秩沒有一個簡單直接的求法, 以致於任何張量秩都伴隨着證實他確實爲秩的過程. 即便咱們對秩的最大值有必定程度的瞭解, 直接求秩自己已被證實是NP-hard.
除了最大秩之外, 咱們定義典型秩爲那些出現機率不爲0的秩. 當給定尺寸的張量中填上隨機實數值,咱們用monte-carlo法等檢測其秩爲某數的機率. 當其機率不爲0時, 咱們稱之爲典型秩. 好比, 咱們發現\(2 \times 2 \times 2\)張量中, 79%的可能性是秩2, 21%可能性是秩3. 秩1理論可能,但機率爲0. (試想隨機生成的一個張量剛好爲3個秩1向量外積的可能性).
下圖是一些在某些狀況下咱們知道的最大秩(maximum rank)和典型秩(typical rank), 其中最詳細的是某維度下只有兩層slice的3階張量:
\[ \text{rank}(\mathcal{X}) \leq \text{min}\{IJ, IK, JK\}. \]
\[ \text{rank}_S(\mathcal{X}) = \Bigg\lceil \frac{{I+N-1}\choose{N}}{I} \Bigg\rceil, \]
高維張量的另外一個很神奇的特性在於他們的秩分解每每是惟一的. 而矩陣並非, 他們每每有多個秩分解解法. 咱們能夠從一個簡單的例子來複習如何輕易構造出無窮多個這樣的矩陣秩分解.
令矩陣\(\mathrm{X} \in \mathbb{R}^{I \times J}\), 則他的秩分解爲:
\[ \mathrm{X} = \mathrm{A}\mathrm{B}^\mathsf{T} = \sum_{r=1}^R \mathrm{a}_r \circ \mathrm{b}_r. \]
若是\(\mathrm{X}\)的SVD爲\(\mathrm{U\Sigma V}^\mathsf{T}\)那麼, 咱們能夠選擇\(\mathrm{A} = \mathrm{U \Sigma}\)和\(\mathrm{B} = \mathrm{V}.\) 然而, 這也等效於選擇\(\mathrm{A} = \mathrm{U \Sigma W}\)和\(\mathrm{B} = \mathrm{VW}\), 其中 \(\mathrm{W}\) 是任意一個 \(R\times R\)的正交矩陣(orthogonal matrix)
換句話說, 咱們能夠找到無窮多個知足上述要求的矩陣秩分解. SVD的結果是惟一理由僅僅是由於其正交限制及對奇異值排序上的約束所致使.
然而, CP分解在弱的多的前提下也是惟一的.令\(\mathcal{X} \in \mathbb{R}^{I \times J \times K}\)爲一個秩\(R\)三階張量, 那麼咱們有以下分解:
\[ \mathcal{X} = \sum_{r=1}^R \mathrm{a}_r \circ \mathrm{b}_r \circ \mathrm{c}_r = [\![\mathrm{A},\mathrm{B},\mathrm{C}]\!]. \quad\quad\quad\quad\quad(3.1) \]
上述的惟一性指的是, 咱們只能找到一種可能的秩1張量的組合使得他們的和爲\(\mathcal{X}\). 請注意, 因爲張量的特殊性, 咱們在講惟一時排除了張量的度量(scaling)和置換(permutation)上的內在不肯定性(indeterminacy).
置換不肯定性是由於任何秩1張量均可以被隨意交換維度. 寫成數學語言即是:
\[ \mathcal{X} = [\![\mathrm{A}, \mathrm{B}, \mathrm{C}]\!] = [\![\mathrm{A\Pi}, \mathrm{B\Pi}, \mathrm{C\Pi}]\!] \,\text{ for any $R \times R$ permutaton matrix $\mathrm{\Pi}$}. \]
而度量的不肯定性則來自於咱們能夠縮放組成秩1張量的向量, 只要保證他們最後的外積不便便可:
\[ \mathcal{X} = \sum_{r=1}^{R}(\alpha_r \mathrm{a}_r) \circ (\beta_r \mathrm{b}_r) \circ (\gamma_r \mathrm{c}_r), \quad \alpha_r \beta_r \gamma_r = 1 \text{ for }r=1,\dots,R. \]
在惟一性這方面最有建樹的理論之一來自於Kruskal和新概念k-rank. 對於一個矩陣\(\mathrm{A}\)來講, k-rank, 寫做\(k_\mathrm{A}\),是知足A的任意k個列向量都是線性不相關的條件下的k的最大值. 該k揭示了CP分解法(3.1)惟一性的充分條件:
\[ k_{\mathrm{A}} + k_{\mathrm{B}} + k_{\mathrm{C}} \geq 2R + 2. \]
隨後, Kruskal的結論被其餘人延伸至N階張量. 設\(\mathcal{X}\)是一個N階的秩R張量, 並假設其CP分解以下:
\[ \mathcal{X} = \sum_{r=1}^R \mathrm{a}_r^{(1)}\circ \mathrm{a}_r^{(2)} \circ \dots \circ \mathrm{a}_r^{(N)} = [\![\mathrm{A}^{(1)}, \mathrm{A}^{(2)},\dots,\mathrm{A}^{(N)}]\!]. \]
\[ \sum_{n=1}^N k_\mathrm{A}^{(n)} \geq 2R + (N-1). \]
然而咱們經過觀察發現, \(\text{rank}(\mathrm{A} \odot \mathrm{B}) \leq \text{rank} (\mathrm{A} \otimes \mathrm{B}) \leq \text{rank}(\mathrm{A}) \cdot \text{rank}(\mathrm{B})\), 咱們能夠甚至能夠得出一個更簡單的必要條件:
\[ \min_{n=1,\dots,N}\Bigg(\prod_{m=1 \\ m \neq n} \text{rank}(\mathrm{A}^{(m)})\Bigg) \geq R. \]
De Lathauwer 提出了觀察張量秩是否爲肯定惟一(deterministically unique)或generically unique (通常惟一, 也就是機率爲1). CP分解法對一個\(\mathcal{X} \in \mathbb{R}^{I \times J \times K}\)的通常惟一條件以下:
\[ R \leq K \quad \text{and} \quad R(R-1) \leq I(I-1)J(J-1)/2. \]
相似的, 對於一個4階秩R張量$\mathcal{X} \in \mathbb{R}^{I \times J \times K \times L}來講, CP分解法的通常惟一條件爲:
\[ R \leq L \quad \text{and} \quad R(R-1) \leq IJK(3IJK - IJ - IK - JK - I - J - K +3)/4 \]
對矩陣來講, 咱們知道使用SVD的前k個因子便可得到其最好的秩k近似(rank-k approximation). 咱們來複習一下. 若秩R矩陣\(\mathrm{A}\)的SVD以下:
\[ \mathrm{A} = \sum_{r=1}^R \sigma_r \mathrm{u}_r \circ \mathrm{v}_r \quad \text{with }\sigma_1 \geq \sigma_2 \geq \dots \geq \sigma_R > 0. \]
最小化\(||\mathrm{A} - \mathrm{B}||\)的秩k近似爲:
\[ \mathrm{B}= \sum_{r=1}^k \sigma_r \mathrm{u}_r \circ \mathrm{v}_r. \]
理想狀態下, 咱們期待將其中k個分解因子相加來得到一個最佳k秩近似. 但實際上, 這並不可行. Kolda已經給出一個反例, 其中最佳秩1近似的因子, 並不存在於其最佳秩2分解的因子中. 換句話說, 咱們不能經過尋找秩N分解因子集, 來按序給出秩N如下的最佳近似. 咱們必須獨立的面對每一個秩k問題, 並同時找出其全部因子.
其中, \(\mathrm{A} \in \mathbb{R}^{I \times 2}, \, \mathrm{B} \in \mathbb{J \times 2}, \quad \mathrm{C} \in \mathbb{R}^{K \times 2}\) 而且其列向量均爲線性無關. 那麼, 這個張量就能夠被一個秩2張量近似至任意程度:
\[ \mathcal{Y} = \alpha \, \Big( \mathrm{a}_1 + \frac{1}{\alpha} \mathrm{a}_2 \Big) \circ \Big( \mathrm{b}_1 + \frac{1}{\alpha} \mathrm{b}_2 \Big) \circ \Big( \mathrm{c}_1 + \frac{1}{\alpha} \mathrm{c}_2 \Big) - \alpha \, \mathrm{a}_1 \circ \mathrm{b}_1 \circ \mathrm{c}_1. \]
具體來講:
\[ ||\mathcal{X} - \mathcal{Y}|| = \frac{1}{\alpha} \Bigg|\Bigg| \, \mathrm{a}_2 \circ \mathrm{b}_2 \circ \mathrm{c}_1 + \mathrm{a}_2 \circ \mathrm{b}_1 \circ \mathrm{c}_2 + \mathrm{a}_1 \circ \mathrm{b}_2 \circ \mathrm{c}_2 + \frac{1}{\alpha} \mathrm{a}_2 \circ \mathrm{b}_2 \circ \mathrm{c}_2 \,\Bigg|\Bigg| \]
很顯然, 此式能夠被縮小至任意程度. 所以上述張量爲退化的. 從這個例子中咱們還能夠發現, 秩2張量空間並非閉合(closed)的. 此例中, 以下圖所示的那樣, 秩2向量的序列收斂於秩3張量.
接下來快速的敘述一些關於此性質的重要發現. Lundy, Harshman 和 Kruskal發現結合Tucker分解法能夠避免退化. De Silva和Lima指出, 那些沒有最優秩k近似的張量, 至少對某些k來講有正體積(Lebesgue measure 勒貝格測度). 換句話說, 沒有最優秩k近似並非一個罕見的事件. Comon給出了對稱矩陣和對稱近似的類似退化例子. Stegeman證實了維度爲\(I\times \times 2\)時, 任何秩爲\(I+1\)的張量都不存在最佳秩\(I\)近似. 他接下來又證實了當張量的維度爲\(I\times J\times 3\), 秩爲其2種典型秩時, 絕大多數狀況下咱們能夠找到一個近似至任意程度的低秩近似.
當最佳低秩近似不存在時, 考慮其邊界秩(border rank)變得十分有用. 他被定義爲容許咱們近似至任意精度時, 所需秩1張量的數量的最小值:
\[ \begin{aligned} \widetilde{\text{rank}} (\mathcal{X}) = \min \{ \, r \, | \, \text{ for any $\epsilon > 0$, exists tensor $\mathcal{E}$ such that $||\mathcal{E}|| < \epsilon$, rank $(\mathcal{X} + \mathcal{\mathcal{E}}) = r$}\} \end{aligned} \]
顯然, 邊界秩知足:
\[ \widetilde{\text{rank}}(\mathcal{X}) \leq \text{rank}(\mathcal{X}). \]
就如前文所述, 並無一個肯定的算法來得出一個張量的秩. 因而, 當咱們試圖計算CP分解時遇到的第一個問題, 即是如何選擇其秩1成分的個數. 許多計算方法同時選擇了幾個不一樣的秩1成分個數來計算CP分解, 直到發現某一種選擇看起來"最好". 理想上來講, 若是數據是沒有噪音並且秩1成分數量給定後的CP計算方法是已知的, 那麼咱們只要在分解的擬合精度達到100%以前, 對\(R= 1,2,3,\dots\)依序進行計算便可.
假設三階張量\(\mathcal{X} \in \mathbb{R}^{I \times J \times K}\). 咱們的目標是算出他的CP分解, 使得其中R個秩1元素的和可以最好的近似\(\mathcal{X}\). 也就是說, 咱們要尋找
\[ \min_{\hat{\mathcal{X}}} ||\mathcal{X} - \hat{\mathcal{X}}|| \, \text{ with } \, \hat{\mathcal{X}} = \sum_{t=1}^R \lambda_r \, \mathrm{a}_r \circ \mathrm{b} \circ \mathrm{c}_r = [\![\mathrm{\lambda}\, ; \, \mathrm{A}, \mathrm{B}, \mathrm{C}]\!]. \]
交替最小方差法先固定\(\mathrm{B}\)和\(\mathrm{C}\)來求出\(\mathrm{A}\), 而後固定\(\mathrm{A}\)和\(\mathrm{C}\)來求\(\mathrm{B}\), 最後固定\(\mathrm{A}\)和\(\mathrm{B}\)來求出\(\mathrm{C}\). 而後將重複整個流程直到一些收斂條件被符合.
經過固定除了一個矩陣之外的全部矩陣, 問題就被簡化成了一個線性最小方差問題. 好比, 假設\(\mathrm{B}\)和\(\mathrm{C}\)被固定, 回憶在上一章中咱們說起如下性質:
\[ \mathrm{X}_{(1)} \approx \mathrm{A}(\mathrm{C}\odot \mathrm{B})^\mathsf{T},\\ \mathrm{X}_{(2)} \approx \mathrm{B}(\mathrm{C}\odot \mathrm{A})^\mathsf{T},\\ \mathrm{X}_{(3)} \approx \mathrm{C}(\mathrm{B}\odot \mathrm{A})^\mathsf{T}. \]
所以, 最小化問題能夠被寫成如下矩陣形式
\[ \min_{\hat{\mathrm{A}}}||\mathrm{X}_{(1)} - \hat{\mathrm{A}}(\mathrm{C}\odot\mathrm{B})^\mathsf{T}||_F, \]
\[ \hat{\mathrm{A}} = \mathrm{X}_{(1)}\big[(\mathrm{C}\odot \mathrm{B})^{\mathsf{T}}\big]^\dagger. \]
因爲Khatri-Rao乘積的性質, 其僞逆矩陣有特殊形式. (可參考本筆記開頭介紹Khatri-Rao性質的部分). 常常將解寫做
\[ \hat{\mathrm{A}} = \mathrm{X}_{(1)}(\mathrm{C} \odot \mathrm{B})(\mathrm{C}^{\mathsf{T}}\mathrm{C} * \mathrm{B}^{\mathsf{T}}\mathrm{B})^\dagger. \]
這個版本的優點在於咱們僅僅須要計算一個\(R\times R\)而不是\(JK\times R\)矩陣的僞逆矩陣. 然而, 因爲存在數值病態條件的可能, 咱們並不老是推薦這個版本.
最後, 咱們還須要歸一化\(\hat{\mathrm{A}}\)的列向量來得到\(\mathrm{A}\). 換句話說, 令\(\lambda_r = ||\hat{\mathrm{a}}_r||\) 及 \(\mathrm{a}_r = \hat{\mathrm{a}}_r / \lambda_r \, \text{ for } r = 1,\dots , R.\)
如圖中所述, 在每一個內迭代中, 都必須計算矩陣\(\mathrm{V}\)的僞逆矩陣. 雖然這只是個\(R\times R\)尺寸的矩陣. 迭代將持續到某些中止條件都被符合爲止. 常見的選擇有: 目標函數的提高爲0或低於閾值; 因子矩陣幾乎或沒有被改變; 目標值爲0或幾乎爲0以及預設的最大迭代次數被超過等. (熟悉深度學習的朋友應該都很熟悉這些常見的中止模式)
ALS算法簡單易懂, 實現輕鬆, 但每每須要不少次迭代才能收斂, 顯得效率有些低. 並且, 該算法並不保證咱們能達到一個全局最小值, 甚至不能保證是一個駐點. 他其實只是給出了一個上述最小化目標的函數的解, 使得最小化目標函數開始慢慢中止減小, 他沒有保證這個最小化目標函數處於最低值或者不會繼續減小.
替代ALS的可行算法有許多, 但在時間不是緊缺的狀況下, 研究代表並無一個比ALS全面優秀的算法存在. 研究ALS的變種算法的論文更是不可勝數. 他成爲了一個分支研究的起點, 人們期待從他出發, 尋找張量分解的新的可能.
下一章咱們將引入另外一種分解法: Tucker分解法及張量壓縮, 敬請期待!!