在機器學習中的矩陣向量求導(二) 矩陣向量求導之定義法中,咱們討論了定義法求解矩陣向量求導的方法,可是這個方法對於比較複雜的求導式子,中間運算會很複雜,同時排列求導出的結果也很麻煩。所以咱們須要其餘的一些求導方法。本文咱們討論使用微分法來求解標量對向量的求導,以及標量對矩陣的求導。html
本文的標量對向量的求導,以及標量對矩陣的求導使用分母佈局。若是遇到其餘資料求導結果不一樣,請先確認佈局是否同樣。算法
在高數裏面咱們學習過標量的導數和微分,他們之間有這樣的關係:$df =f'(x)dx$。若是是多變量的狀況,則微分能夠寫成:$$df=\sum\limits_{i=1}^n\frac{\partial f}{\partial x_i}dx_i = (\frac{\partial f}{\partial \mathbf{x}})^Td\mathbf{x}$$機器學習
從上次咱們能夠發現標量對向量的求導和它的向量微分有一個轉置的關係。函數
如今咱們再推廣到矩陣。對於矩陣微分,咱們的定義爲:$$df=\sum\limits_{i=1}^m\sum\limits_{j=1}^n\frac{\partial f}{\partial X_{ij}}dX_{ij} = tr((\frac{\partial f}{\partial \mathbf{X}})^Td\mathbf{X})$$佈局
其中第二步使用了矩陣跡的性質,即跡函數等於主對角線的和。即$$tr(A^TB) = \sum\limits_{i,j}A_{ij}B_{ij}$$post
從上面矩陣微分的式子,咱們能夠看到矩陣微分和它的導數也有一個轉置的關係,不過在外面套了一個跡函數而已。因爲標量的跡函數就是它自己,那麼矩陣微分和向量微分能夠統一表示,即:$$df= tr((\frac{\partial f}{\partial \mathbf{X}})^Td\mathbf{X})\;\; \;df= tr((\frac{\partial f}{\partial \mathbf{x}})^Td\mathbf{x})$$學習
咱們在討論如何使用矩陣微分來求導前,先看看矩陣微分的性質:url
1)微分加減法:$d(X+Y) =dX+dY, d(X-Y) =dX-dY$htm
2) 微分乘法:$d(XY) =(dX)Y + X(dY)$blog
3) 微分轉置:$d(X^T) =(dX)^T$
4) 微分的跡:$dtr(X) =tr(dX)$
5) 微分哈達馬乘積: $d(X \odot Y) = X\odot dY + dX \odot Y$
6) 逐元素求導:$d \sigma(X) =\sigma'(X) \odot dX$
7) 逆矩陣微分:$d X^{-1}= -X^{-1}dXX^{-1}$
8) 行列式微分:$d |X|= |X|tr(X^{-1}dX)$
有了這些性質,咱們再來看看如何由矩陣微分來求導數。
因爲第一節咱們已經獲得了矩陣微分和導數關係,如今咱們就來使用微分法求解矩陣向量求導。
若標量函數$f$是矩陣$X$經加減乘法、逆、行列式、逐元素函數等運算構成,則使用相應的運算法則對$f$求微分,再使用跡函數技巧給$df$套上跡並將其它項交換至$dX$左側,那麼對於跡函數裏面在$dX$左邊的部分,咱們只須要加一個轉置就能夠獲得導數了。
這裏須要用到的跡函數的技巧主要有這麼幾個:
1) 標量的跡等於本身:$tr(x) =x$
2) 轉置不變:$tr(A^T) =tr(A)$
3) 交換率:$tr(AB) =tr(BA)$,須要知足$A,B^T$同維度。
4) 加減法:$tr(X+Y) =tr(X)+tr(Y), tr(X-Y) =tr(X)-tr(Y)$
5) 矩陣乘法和跡交換:$tr((A\odot B)^TC)= tr(A^T(B \odot C))$,須要知足$A,B,C$同維度。
咱們先看第一個例子,咱們使用上一篇定義法中的一個求導問題:$$y=\mathbf{a}^T\mathbf{X}\mathbf{b}, \frac{\partial y}{\partial \mathbf{X}}$$
首先,咱們使用微分乘法的性質對$f$求微分,獲得:$$dy = d\mathbf{a}^T\mathbf{X}\mathbf{b} + \mathbf{a}^Td\mathbf{X}\mathbf{b} + \mathbf{a}^T\mathbf{X}d\mathbf{b} = \mathbf{a}^Td\mathbf{X}\mathbf{b}$$
第二步,就是兩邊套上跡函數,即:$$dy =tr(dy) = tr(\mathbf{a}^Td\mathbf{X}\mathbf{b}) = tr(\mathbf{b}\mathbf{a}^Td\mathbf{X})$$
其中第一到第二步使用了上面跡函數性質1,第三步到第四步用到了上面跡函數的性質3.
根據咱們矩陣導數和微分的定義,跡函數裏面在$dX$左邊的部分$\mathbf{b}\mathbf{a}^T$,加上一個轉置即爲咱們要求的導數,即:$$\frac{\partial f}{\partial \mathbf{X}} = (\mathbf{b}\mathbf{a}^T)^T =ab^T$$
以上就是微分法的基本流程,先求微分再作跡函數變換,最後獲得求導結果。比起定義法,咱們如今不須要去對矩陣中的單個標量進行求導了。
再來看看$$y=\mathbf{a}^Texp(\mathbf{X}\mathbf{b}), \frac{\partial y}{\partial \mathbf{X}}$$
$$dy =tr(dy) = tr(\mathbf{a}^Tdexp(\mathbf{X}\mathbf{b})) = tr(\mathbf{a}^T (exp(\mathbf{X}\mathbf{b}) \odot d(\mathbf{X}\mathbf{b}))) = tr((\mathbf{a} \odot exp(\mathbf{X}\mathbf{b}) )^T d\mathbf{X}\mathbf{b}) = tr(\mathbf{b}(\mathbf{a} \odot exp(\mathbf{X}\mathbf{b}) )^T d\mathbf{X}) $$
其中第三步到第4步使用了上面跡函數的性質5. 這樣咱們的求導結果爲:$$\frac{\partial y}{\partial \mathbf{X}} =(\mathbf{a} \odot exp(\mathbf{X}\mathbf{b}) )b^T $$
以上就是微分法的基本思路。
因爲微分法使用了跡函數的技巧,那麼跡函數對對向量矩陣求導這一大類問題,使用微分法是最簡單直接的。下面給出一些常見的跡函數的求導過程,也順便給你們熟練掌握微分法的技巧。
首先是$\frac{\partial tr(AB)}{\partial A} = B^T, \frac{\partial tr(AB)}{\partial B} =A^T$,這個直接根據矩陣微分的定義便可獲得。
再來看看$\frac{\partial tr(W^TAW)}{\partial W}$:$$d(tr(W^TAW)) = tr(dW^TAW +W^TAdW) = tr(dW^TAW)+tr(W^TAdW) = tr((dW)^TAW) + tr(W^TAdW) = tr(W^TA^TdW) + tr(W^TAdW) = tr(W^T(A+A^T)dW) $$
所以能夠獲得:$$\frac{\partial tr(W^TAW)}{\partial W} = (A+A^T)W$$
最後來個更加複雜的跡函數求導:$\frac{\partial tr(B^TX^TCXB)}{\partial X} $: $$d(tr(B^TX^TCXB)) = tr(B^TdX^TCXB) + tr(B^TX^TCdXB) = tr((dX)^TCXBB^T) + tr(BB^TX^TCdX) = tr(BB^TX^TC^TdX) + tr(BB^TX^TCdX) = tr((BB^TX^TC^T + BB^TX^TC)dX)$$
所以能夠獲得:$$\frac{\partial tr(B^TX^TCXB)}{\partial X}= (C+C^T)XBB^T$$
使用矩陣微分,能夠在不對向量或矩陣中的某一元素單獨求導再拼接,所以會比較方便,固然熟練使用的前提是對上面矩陣微分的性質,以及跡函數的性質熟練運用。
還有一些場景,求導的自變量和因變量直接有複雜的多層鏈式求導的關係,此時微分法使用起來也有些麻煩。若是咱們能夠利用一些經常使用的簡單求導結果,再使用鏈式求導法則,則會很是的方便。所以下一篇咱們討論向量矩陣求導的鏈式法則。
(歡迎轉載,轉載請註明出處。歡迎溝通交流: liujianping-ok@163.com)