機器學習中的矩陣向量求導(五) 矩陣對矩陣的求導

    在矩陣向量求導前4篇文章中,咱們主要討論了標量對向量矩陣的求導,以及向量對向量的求導。本文咱們就討論下以前沒有涉及到的矩陣對矩陣的求導,還有矩陣對向量,向量對矩陣求導這幾種形式的求導方法。html

    本文全部求導佈局以分母佈局爲準,爲了適配矩陣對矩陣的求導,本文向量對向量的求導也以分母佈局爲準,這和前面的文章不一樣,須要注意。算法

    本篇主要參考了張賢達的《矩陣分析與應用》和長軀鬼俠的矩陣求導術機器學習

1. 矩陣對矩陣求導的定義

    假設咱們有一個$p \times q$的矩陣$F$要對$m \times n$的矩陣$X$求導,那麼根據咱們第一篇求導的定義,矩陣$F$中的$pq$個值要對矩陣$X$中的$mn$個值分別求導,那麼求導的結果一共會有$mnpq$個。那麼求導的結果如何排列呢?方法有不少種。函數

    最直觀能夠想到的求導定義有2種:佈局

    第一種是矩陣$F$對矩陣$X$中的每一個值$X_{ij}$求導,這樣對於矩陣$X$每個位置(i,j)求導獲得的結果是一個矩陣$\frac{\partial F}{\partial X_{ij}}$,能夠理解爲矩陣$X$的每一個位置都被替換成一個$p \times q$的矩陣,最後咱們獲得了一個$mp \times nq$的矩陣。post

    第二種和第一種相似,能夠看作矩陣$F$中的每一個值$F_{kl}$分別對矩陣$X$求導,這樣矩陣$F$每個位置(k,l)對矩陣$X$求導獲得的結果是一個矩陣$\frac{\partial F_{kl}}{\partial X}$, 能夠理解爲矩陣$F$的每一個位置都被替換成一個$m \times n$的矩陣,最後咱們獲得了一個$mp \times nq$的矩陣。學習

    這兩種定義雖然沒有什麼問題,可是很難用於實際的求導,好比相似咱們在機器學習中的矩陣向量求導(三) 矩陣向量求導之微分法中很方便使用的微分法求導。優化

    目前主流的矩陣對矩陣求導定義是對矩陣先作向量化,而後再使用向量對向量的求導。而這裏的向量化通常是使用列向量化。也就是說,如今咱們的矩陣對矩陣求導能夠表示爲:$$\frac{\partial F}{\partial X} = \frac{\partial vec(F)}{\partial vec(X)}$$url

    對於矩陣$F$,列向量化後,$vec(F)$的維度是$pq \times 1$的向量,一樣的,$vec(X)$的維度是$mn \times 1$的向量。最終求導的結果,這裏咱們使用分母佈局,獲得的是一個$mn \times pq$的矩陣。htm

2. 矩陣對矩陣求導的微分法

    按第一節的向量化的矩陣對矩陣求導有什麼好處呢?主要是爲了使用相似於前面講過的微分法求導。回憶以前標量對向量矩陣求導的微分法裏,咱們有:$$df= tr((\frac{\partial f}{\partial \mathbf{X}})^Td\mathbf{X})$$

    這裏矩陣對矩陣求導咱們有:$$vec(dF) =\frac{\partial vec(F)^T}{\partial vec(X)} vec(dX) = \frac{\partial F^T}{\partial X} vec(dX)$$

    和以前標量對矩陣的微分法相比,這裏的跡函數被矩陣向量化代替了。

    矩陣對矩陣求導的微分法,也有一些法則能夠直接使用。主要集中在矩陣向量化後的運算法則,以及向量化和克羅內克積之間的關係。關於矩陣向量化和克羅內克積,具體能夠參考張賢達的《矩陣分析與應用》,這裏只給出微分法會用到的常見轉化性質, 相關證實能夠參考張的書。

    矩陣向量化的主要運算法則有:

    1) 線性性質:$vec(A+B) =vec(A) +vec(B)$

    2) 矩陣乘法:$vec(AXB)= (B^T \bigotimes A)vec(X)$,其中$\bigotimes$是克羅內克積。

    3) 矩陣轉置:$vec(A^T) =K_{mn}vec(A)$,其中$A$是$m \times n$的矩陣,$K_{mn}$是$mn \times mn$的交換矩陣,用於矩陣列向量化和行向量化之間的轉換。

    4) 逐元素乘法:$vec(A \odot X) = diag(A)vec(X)$, 其中$diag(A)$是$mn \times mn$的對角矩陣,對角線上的元素是矩陣$A$按列向量化後排列出來的。

    克羅內克積的主要運算法則有:

    1) $(A \bigotimes B)^T = A^T \bigotimes B^T$

    2) $vec(ab^T) = b \bigotimes a$

    3) $(A \bigotimes B)(C \bigotimes D )=AC \bigotimes BD$

    4) $K_{mn} = K_{nm}^T, K_{mn}K_{nm}=I$

    使用上面的性質,求出$vec(dF)$關於$ vec(dX)$的表達式,則表達式左邊的轉置即爲咱們要求的$\frac{\partial vec(F)}{\partial vec(X)} $,或者說$\frac{\partial F}{\partial X} $

3. 矩陣對矩陣求導實例

    下面咱們給出一個使用微分法求解矩陣對矩陣求導的實例。

    首先咱們來看看:$\frac{\partial AXB}{\partial X}$, 假設A,X,B都是矩陣,X是$m \times n$的矩陣。

    首先求$dF$, 和以前第三篇的微分法相似,咱們有: $$dF =AdXB$$

    而後咱們兩邊列向量化(以前的微分法是套上跡函數), 獲得:$$vec(dF) = vec(AdXB) = (B^T \bigotimes A)vec(dX)$$

    其中,第二個式子使用了上面矩陣向量化的性質2。

    這樣,咱們就獲得了求導結果爲:$$\frac{\partial AXB}{\partial X} =  (B^T \bigotimes A)^T = B \bigotimes A^T$$

    利用上面的結果咱們也能夠獲得:$$\frac{\partial AX}{\partial X} =  I_n \bigotimes A^T$$$$\frac{\partial XB}{\partial X} =  B \bigotimes I_m$$

    來個複雜一些的:$\frac{\partial Aexp(BXC)D}{\partial X}$

    首先求微分獲得:$$dF =A [dexp(BXC)]D = A[exp(BXC) \odot (BdXC)]D  $$

    兩邊矩陣向量化,咱們有:$$vec(dF) = (D^T \bigotimes A) vec[exp(BXC) \odot (BdXC)]  =  (D^T \bigotimes A) diag(exp(BXC))vec(BdXC) =  (D^T \bigotimes A) diag(exp(BXC))(C^T\bigotimes B)vec(dX) $$

    其中第一個等式使用了矩陣向量化性質2,第二個等式使用了矩陣向量化性質4, 第三個等式使用了矩陣向量化性質2。

    這樣咱們最終獲得:$$\frac{\partial Aexp(BXC)D}{\partial X} = [(D^T \bigotimes A) diag(exp(BXC))(C^T\bigotimes B)]^T = (C \bigotimes B^T) diag(exp(BXC)) (D\bigotimes A^T )$$

4. 矩陣對矩陣求導小結

    因爲矩陣對矩陣求導的結果包含克羅內克積,所以和以前咱們講到的其餘類型的矩陣求導很不一樣,在機器學習算法優化中中,咱們通常不在推導的時候使用矩陣對矩陣的求導,除非只是作定性的分析。若是遇到矩陣對矩陣的求導很差繞過,通常可使用機器學習中的矩陣向量求導(四) 矩陣向量求導鏈式法則中第三節最後的幾個鏈式法則公式來避免。

    到此機器學習中的矩陣向量求導系列就寫完了,但願能夠幫到對矩陣求導的推導過程感到迷茫的同窗們。

相關文章
相關標籤/搜索