矩陣論(八):矩陣微分與矩陣求導

矩陣論專欄:專欄(文章按照順序排序)


做機器學習的幾乎避免不了矩陣求導,尤其是神經網絡方面的,反向傳播算法說白了就是在做矩陣求導,拿到代價函數對模型中每個參數矩陣的導數,才能找到一個下降方向,進而更新這些參數來降低損失。雖然實際編程時大可不必考慮這些繁瑣的數學計算,但是要真正理解凸優化中的一些方法,掌握這個基本的數學工具還是有必要的。

【1】下面的探討均在實數域內進行。
【2】雖然RnR^n定義爲實數域RR中的nn個數組成的有序數組(x1,x2,...,xn)(x_1,x_2,...,x_n)的集合,但當我們討論RnR^n中向量時,總是約定它是列向量的形式,即總是一個n×1n\times 1矩陣。這樣更符合一般的習慣,比如線性方程組的表達:Ax=b,ARm×n,xRn,bRmAx=b, A\in R^{m\times n},x\in R^n,b\in R^m
【3】我們討論三種情形。向量對向量求導、矩陣對標量求導、標量對矩陣求導。標量對標量求導、標量對向量求導、向量對標量求導都可以看作是向量對向量求導的特例,而向量對矩陣求導、矩陣對向量求導和矩陣對矩陣求導涉及到高階張量的運算,可以通過把矩陣向量化,從而把高階運算用低階運算代替。這樣的方法需要向量化運算vec和kronecker積的基礎,本篇博客不引入這兩個概念,後面的博客探討矩陣函數的微分時再引入。
【4】符號yx\frac{\partial y}{\partial x}表示偏導,本文爲表示方便,用yx(a)\frac{\partial y}{\partial x}(a)表示在點aa處的偏導的值(原本的表示應爲yxx=a\frac{\partial y}{\partial x}|_{x=a}f(x)xx=a\frac{\partial f(x)}{\partial x}|_{x=a}

  • 矩陣微分與矩陣求導
    • 佈局約定
    • 向量對向量求導
      • 可微與可導的關係
      • 複合函數的鏈式求導法則
      • 微分的形式不變性
      • 例子
    • 矩陣對標量求導
      • 鏈式法則
      • 幾個公式
    • 標量對矩陣求導
      • 微分的定義
      • 複合函數的微分
      • 常用的微分公式
      • 例子
  • 應用
    • 線性迴歸問題的最小二乘解
      • L2正則化情形
    • 多層前饋網絡(BP網絡)的反向傳播
    • 循環神經網絡(RNN)的反向傳播

矩陣微分與矩陣求導

佈局約定

詳細請見數學-矩陣計算(4)兩種佈局。在本文中,多數情況下采用分子佈局。分子佈局和分母佈局實際上無需刻意區分,只要兩種佈局採用不同的符號就可以了。然而,有時候有些作者對分子佈局和分母佈局採用相同的符號,這時候就必須事先知道作者採用的是什麼樣的佈局,才能確定該符號表達的佈局是怎樣的。例如,設有m維向量yy和n維向量xxyx\frac{\partial y}{\partial x}如果採用的是分子佈局,則是m×nm\times n矩陣,而如果採用的是分母佈局,則是n×mn\times m矩陣。在本文中,我們通過符號來區分分子佈局和分母佈局(實際上,有了符號的約定以後,可以拋卻這兩個概念不談)。

首先,正如文章開頭所提,我們默認一個未顯式指出究竟是行還是列的向量爲列的形式,即任取xRnx\in R^n,我們默認xx是列向量。接下來,導數的佈局通過微商符號的分子和分母的形式推定。以向量對向量的偏導爲例,yxT\frac{\partial y}{\partial x^T}分子上(即yy)是列向量,分母上(即xTx^T)是行向量,則在該矩陣的佈局中,yy的分量y1,y2,...,ymy_1,y_2,...,y_m是按列排布的,xx的分量x1,x2,...,xnx_1,x_2,...,x_n是按行排布的(這裏真不知道怎麼表達纔好,實際上我是想說y1,y2,...ym\partial y_1,\partial y_2,...\partial y_m這樣的順序總是出現在矩陣的一列上,x1,x2,...xn\partial x_1,\partial x_2,...\partial x_n總是出現在矩陣的一行上),即yxT=[y1x1y1x2...y1xny2x1y2x2...y2xn............ymx1ymx2...ymxn]\frac{\partial y}{\partial x^T}=\begin{bmatrix}\frac{\partial y_1}{\partial x_1}&\frac{\partial y_1}{\partial x_2}&...&\frac{\partial y_1}{\partial x_n}\\\frac{\partial y_2}{\partial x_1}&\frac{\partial y_2}{\partial x_2}&...&\frac{\partial y_2}{\partial x_n}\\...&...&...&...\\\frac{\partial y_m}{\partial x_1}&\frac{\partial y_m}{\partial x_2}&...&\frac{\partial y_m}{\partial x_n}\end{bmatrix}
這就是所謂的分子佈局。而yTx=[y1x1y2x1...ymx1y1x2y2x2...ymx2............y1xny2xn...ymxn]\frac{\partial y^T}{\partial x}=\begin{bmatrix}\frac{\partial y_1}{\partial x_1}&\frac{\partial y_2}{\partial x_1}&...&\frac{\partial y_m}{\partial x_1}\\\frac{\partial y_1}{\partial x_2}&\frac{\partial y_2}{\partial x_2}&...&\frac{\partial y_m}{\partial x_2}\\...&...&...&...\\\frac{\partial y_1}{\partial x_n}&\frac{\partial y_2}{\partial x_n}&...&\frac{\partial y_m}{\partial x_n}\end{bmatrix}就是所謂的分母佈局。這兩種佈局間的關係是yTx=(yxT)T\frac{\partial y^T}{\partial x}=(\frac{\partial y}{\partial x^T})^T。總結一下就是,我們可以通過符號推定導數的佈局是什麼樣的,在符號(微商)中,一個向量本來是什麼形式,它在導數中就是怎樣的排布,矩陣也同理。例如設有標量xRx\in R和矩陣Y=[Yij]Rm×nY=[Y_{ij}]\in R^{m\times n},則xY=[xY11xY12...xY1nxY21xY22...xY2n............xYm1xYm2...xYmn]\frac{\partial x}{\partial Y}=\begin{bmatrix}\frac{\partial x}{\partial Y_{11}}&\frac{\partial x}{\partial Y_{12}}&...&\frac{\partial x}{\partial Y_{1n}}\\\frac{\partial x}{\partial Y_{21}}&\frac{\partial x}{\partial Y_{22}}&...&\frac{\partial x}{\partial Y_{2n}}\\...&...&...&...\\\frac{\partial x}{\partial Y_{m1}}&\frac{\partial x}{\partial Y_{m2}}&...&\frac{\partial x}{\partial Y_{mn}}\end{bmatrix}xYT=[xY11xY21...xYm1xY12xY22...xYm2............xY1nxY2n...xYmn]\frac{\partial x}{\partial Y^T}=\begin{bmatrix}\frac{\partial x}{\partial Y_{11}}&\frac{\partial x}{\partial Y_{21}}&...&\frac{\partial x}{\partial Y_{m1}}\\\frac{\partial x}{\partial Y_{12}}&\frac{\partial x}{\partial Y_{22}}&...&\frac{\partial x}{\partial Y_{m2}}\\...&...&...&...\\\frac{\partial x}{\partial Y_{1n}}&\frac{\partial x}{\partial Y_{2n}}&...&\frac{\partial x}{\partial Y_{mn}}\end{bmatrix}


向量對向量求導

在談求導前,有必要談一下微分的概念。一方面在後面可以看到可微是比可導更強的概念,在可微的條件下運用一階微分的形式不變性可以簡化複合函數的求導運算;另一方面,凸優化中的很多結論都是以可微爲前提的,僅僅可導是遠遠不夠的。
可微的定義:

  • 定義1:設cRnc\in R^n,函數f:DRmf:D\rightarrow R^mcc的某個半徑爲r>0r>0的鄰域U(c)U(c)內有定義。若存在矩陣ARm×nA\in R^{m\times n},使得對於任意的uU˚(0)u\in \mathring U(0)0Rn0\in R^n是零向量,去心鄰域U˚(0)\mathring U(0)的半徑爲rr)有如下關係成立:f(c+u)f(c)=Au+ο(u2)f(c+u)-f(c)=Au+\omicron(||u||_2),其中ο(u2)\omicron(||u||_2)是當u0u\rightarrow 0時的一個高階無窮小,則稱ff在點cc處是可微的,稱uu的線性函數AuAu(又叫ff在點cc處的線性主部)爲ff在點cc處的微分,記作df(c)=Audf(c)=Au,並稱AAff在點cc處的一階導數矩陣,簡稱一階導數。
    【注1】“ffcc的某個半徑爲r>0r>0的鄰域U(c)U(c)內有定義”中“某個”的意思是指存在一個鄰域U(c)U(c),它在ff的定義域內
    【注2】當點cc給定後,AA就是一個常矩陣,即要求AAuu是無關的,AA可以看做是cc的函數A(c)A(c)
    【注3】微分的基本思想是將非線性函數局部線性化。f(c+u)f(c)f(c+u)-f(c)可以看做是ff在點cc處,自變量改變量爲uu時的函數值改變量(因變量改變量),若忽略高階無窮小項ο(u2)\omicron(||u||_2)則得到f(c+u)f(c)=Auf(c+u)-f(c)=Au,即在點cc的某個鄰域內(即“局部”的意思)將ff用一個線性函數AuAu替代
    【注4】符號df(c)df(c)直觀上可以理解爲ff在點cc處的一個微小改變量,相應地uu則是ff的自變量的一個微小改變量,常記作dcdc,故微分的式子可以寫作df(c)=Adcdf(c)=Adc(爲什麼自變量的改變量要採用微分符號d,實際上後面證明了一階微分的形式不變性後就知道了)
    【注5】高階無窮小ο(u2)\omicron(||u||_2)u=0u=0處是無定義的,常補充定義ο(0)=0\omicron(0)=0,這樣定義中的關係式無論uu是否爲零都成立

可微是比可導更強的概念,我們在說一個多元向量值函數可導時,往往是指它的每個分量對自變量的每個分量的偏導都存在。再嚴格一點的,就是指函數的每個分量對自變量的任意方向導數都存在。可微一定可導,可導不一定可微(在一元數量值函數的情形下,這個結論退化成可微與可導等價)。下面給出偏導的概念並證明可微與可導間的關係。

偏導的定義:

  • 定義2:設cRnc\in R^n,函數f:DRmf:D\rightarrow R^mcc的某個半徑爲r>0r>0的鄰域U(c)U(c)內有定義。設0t<r0\neq t<r,稱極限(若存在的話)limt0fi(c+tej)fi(c)t\lim_{t\rightarrow 0}\frac{f_i(c+te_j)-f_i(c)}{t}(其中eje_j是第j個標準向量,其第jj個分量爲1,其他分量爲零)爲ff的分量fif_i在點cc處對自變量xRnx\in R^n的第jj個分量的偏導,記作fixj(c)\frac{\partial f_i}{\partial x_j}(c)
  • 定義3(Jacobian矩陣):函數f:DRm(DRn)f:D\rightarrow R^m(D\subseteq R^n)在點cc處對自變量xx的Jacobian矩陣定義如下fxT(c)=[f1x1(c)f1x2(c)...f1xn(c)f2x1(c)f2x2(c)...f2xn(c)............fmx1(c)fmx2(c)...fmxn(c)]\frac{\partial f}{\partial x^T}(c)=\begin{bmatrix}\frac{\partial f_1}{\partial x_1}(c)&\frac{\partial f_1}{\partial x_2}(c)&...&\frac{\partial f_1}{\partial x_n}(c)\\\frac{\partial f_2}{\partial x_1}(c)&\frac{\partial f_2}{\partial x_2}(c)&...&\frac{\partial f_2}{\partial x_n}(c)\\...&...&...&...\\\frac{\partial f_m}{\partial x_1}(c)&\frac{\partial f_m}{\partial x_2}(c)&...&\frac{\partial f_m}{\partial x_n}(c)\end{bmatrix}
    【注1】當ff是數量值函數時,Jacobian矩陣退化爲一維行向量,即ff的梯度的轉置(梯度常常寫作列向量);需要注意的是,Jacobian矩陣的第i行就是ff的第i個分量fif_i的梯度的轉置;當ff是一元數量值函數時,Jacobian矩陣退化爲一元情形下的導數的概念。
    【注2】需要區分Jacobian矩陣和梯度矩陣的概念:梯度矩陣是Jacobian矩陣的轉置

可微與可導間的關係:

  • 定理1:設cRnc\in R^n,若ff在點cc處可微,則ffcc處的Jacobian矩陣存在,且導數矩陣A(c)=fxT(c)A(c)=\frac{\partial f}{\partial x^T}(c)
    證明:
    根據可微的定義,存在r>0r>0,對任意uu滿足0<u2<r0<||u||_2<r,有f(c+u)f(c)=A(c)u+ο(u2)f(c+u)-f(c)=A(c)u+\omicron (||u||_2),故limu0f(c+u)f(c)A(c)uu2=0\lim_{u\rightarrow 0}\frac{f(c+u)-f(c)-A(c)u}{||u||_2}=0u=tej,t<ru=te_j,t<r,則limt0f(c+tej)f(c)tA(c)ejt=0\lim_{t\rightarrow 0}\frac{f(c+te_j)-f(c)-tA(c)e_j}{t}=0故對任意i=1,2,...,mi=1,2,...,mj=1,2,...,nj=1,2,...,nfixjc=limt0fi(c+tej)fi(c)t=eiTA(c)ej=aij\frac{\partial f_i}{\partial x_j}|_c=\lim_{t\rightarrow 0}\frac{f_i(c+te_j)-f_i(c)}{t}=e_i^TA(c)e_j=a_{ij}其中aija_{ij}是導數矩陣A(c)A(c)(i,j)(i,j)元素。得證。

這個定理告訴我們,可微一定可導,且導數矩陣就是Jacobian矩陣。可導不一定可微,有很多反例,這裏不再列舉。反向傳播算法是以複合函數鏈式求導法則爲基礎的,實際上,鏈導法是複合函數微分法則的一個附帶結果,下面給出複合函數微分法則,並導出複合函數的鏈導法則。

  • 定理2:若函數f:DfRm(DfRn)f:D_f\rightarrow R^m(D_f\subseteq R^n)在點aa處可微,函數g:DgRr(DgR(f))g:D_g\rightarrow R^r(D_g\supseteq R(f))在點b=f(a)b=f(a)處可微,則複合函數gfg\circ f在點aa處可微,且dg(f(a))=B(b)A(a)dadg(f(a))=B(b)A(a)da,其中B(b)B(b)gg在點bb處的導數,A(a)A(a)ff在點aa處的導數
    證明:(下面涉及到的所有高階無窮小都在點00處補充定義ο(0)=0\omicron(0)=0
    由可微的定義,存在半徑爲r1>0r_1>0的鄰域U(a)U(a),使得任意u2<r1||u||_2<r_1f(a+u)f(a)=A(a)u+ο1(u2)(1)f(a+u)-f(a)=A(a)u+\omicron_1 (||u||_2)\qquad (1)存在半徑爲r2>0r_2>0的鄰域U(b)U(b),其中b=f(a)b=f(a),使得任意v2<r2||v||_2<r_2g(b+v)g(b)=B(b)v+ο2(v2)(2)g(b+v)-g(b)=B(b)v+\omicron_2 (||v||_2)\qquad (2)Δf=f(a+u)f(a)\Delta f=f(a+u)-f(a),令(1)式兩端u0u\rightarrow 0得到Δf0\Delta f\rightarrow 0,故Δf20||\Delta f||_2\rightarrow 0,由極限的定義知存在r3>0r_3>0使得任意u2<r3||u||_2<r_3Δf2<r2||\Delta f||_2<r_2。由(2)知可將v=Δfv=\Delta f代入,得g(b+Δf)g(b)=B(b)Δf+ο2(Δf2)g(b+\Delta f)-g(b)=B(b)\Delta f+\omicron_2 (||\Delta f||_2),即g(f(a+u))g(f(a))=B(b)A(a)u+αg(f(a+u))-g(f(a))=B(b)A(a)u+\alpha對任意u2<min{r1,r3}||u||_2<\min\{r_1,r_3\}成立,其中α=B(b)ο1(u2)+ο2(Δf2)\alpha=B(b)\omicron_1 (||u||_2)+\omicron_2(||\Delta f||_2)。要證明gfg\circ f在點aa處可微,只需證明limu0αu2=0\lim_{u\rightarrow 0}\frac{\alpha}{||u||_2}=0即可。由於limu0B(b)ο1(u2)u2=0\lim_{u\rightarrow 0}B(b)\frac{\omicron_1(||u||_2)}{||u||_2}=0,故只需證明limu0ο2(Δf2)u2=0\lim_{u\rightarrow 0}\frac{\omicron_2(||\Delta f||_2)}{||u||_2}=0。引入函數Q(u)={ο2(Δf2)Δf2Δf00Δf=0Q(u)=\begin{cases}\frac{\omicron_2(||\Delta f||_2)}{||\Delta f||_2}&\Delta f\neq 0\\0&\Delta f=0\end{cases},其中u2<min{r1,r3}||u||_2<\min\{r_1,r_3\},可以證明當u0u\rightarrow 0Q(u)0Q(u)\rightarrow 0,此處略去,證明見註釋。由於ο2(Δf2)u2=Q(u)Δf2u2\frac{\omicron_2(||\Delta f||_2)}{||u||_2}=Q(u)\frac{||\Delta f||_2}{||u||_2}Δf2u2A(a)u2u2+ο1(u2)2u2\frac{||\Delta f||_2}{||u||_2}\leqslant \frac{||A(a)u||_2}{||u||_2}+\frac{||\omicron_1(||u||_2)||_2}{||u||_2},由矩陣不等式A(a)TA(a)λ(a)IA(a)^TA(a)\leqslant \lambda(a)I,其中λ(a)\lambda(a)A(a)TA(a)A(a)^TA(a)的最大特徵值,得到A(a)u2u2λ(a)\frac{||A(a)u||_2}{||u||_2}\leqslant \sqrt{\lambda(a)},又由limu0ο1(u2)2u2=0\lim_{u\rightarrow 0}\frac{||\omicron_1(||u||_2)||_2}{||u||_2}=0,得到ο1(u2)2u2\frac{||\omicron_1(||u||_2)||_2}{||u||_2}是局部有界的,故Δf2u2\frac{||\Delta f||_2}{||u||_2}是局部有界的。綜上有limu0ο2(Δf2)u2=0\lim_{u\rightarrow 0}\frac{\omicron_2(||\Delta f||_2)}{||u||_2}=0,證畢。
    【注1】矩陣不等式見矩陣的正定性
    【注2】limu0Q(u)=0\lim_{u\rightarrow 0}Q(u)=0的證明:
    利用limu0Δf=0lim_{u\rightarrow 0}\Delta f=0以及limv0ο2(v2)v2=0lim_{v\rightarrow 0}\frac{\omicron_2(||v||_2)}{||v||_2}=0這兩個條件即可。ϵ>0,δ>0,v\forall \epsilon>0,\exist \delta>0,\forall v滿足0<v2<δ0<||v||_2<\delta都有ο2(v2)v22<ϵ||\frac{\omicron_2(||v||_2)}{||v||_2}||_2<\epsilonδ1>0,u\exist \delta_1>0,\forall u滿足0<u2<δ10<||u||_2<\delta_1都有Δf2<δ||\Delta f||_2<\delta,故由如下結論:ϵ>0,δ1>0,u\forall \epsilon >0,\exist \delta_1>0,\forall u滿足0<u2<δ10<||u||_2<\delta_1,若Δf=0\Delta f=0,則Q(u)2=0<ϵ||Q(u)||_2=0<\epsilon,若0<Δf2<δ0<||\Delta f||_2<\delta,則Q(u)2=ο2(Δf2)Δf22<ϵ||Q(u)||_2=||\frac{\omicron_2(||\Delta f||_2)}{||\Delta f||_2}||_2<\epsilon,即無論Δf2||\Delta f||_2是否爲零都有Q(u)2<ϵ||Q(u)||_2<\epsilon,故limu0Q(u)=0\lim_{u\rightarrow 0}Q(u)=0

下面由複合函數的微分法則導出複合函數的鏈式求導法則:

  • 推論:若函數y=f(x)(DfRn,yRm)y=f(x)(D_f\subseteq R^n,y\in R^m)在點aa處可微,函數z=g(y)(DgR(f),zRr)z=g(y)(D_g\supseteq R(f),z\in R^r)在點b=f(a)b=f(a)處可微,則複合函數gfg\circ f在點aa處可微,且其在點aa處的導數zxT(a)=zyT(b)yxT(a)\frac{\partial z}{\partial x^T}(a)=\frac{\partial z}{\partial y^T}(b)\frac{\partial y}{\partial x^T}(a)

通過一階微分的形式不變性,我們可以通過求微分來計算複合函數的導數,這在很多情況下是有用的,例如,在矩陣求導中通過計算微分,可以一次性得到多個參變量矩陣的導數。下面給出一階微分的形式不變性:

  • 一階微分的形式不變性:
    設函數f:DfRm(DfRn)f:D_f\rightarrow R^m(D_f\subseteq R^n)在點aa處可微,其微分爲df(a)=A(a)dadf(a)=A(a)da,函數g:DgRr(DgR(f))g:D_g\rightarrow R^r(D_g\supseteq R(f))在點b=f(a)b=f(a)處可微,其微分爲dg(b)=B(b)dbdg(b)=B(b)db,則由複合函數的微分法則知,函數gfg\circ f在點aa處的微分爲dg(f(a))=B(b)A(a)dadg(f(a))=B(b)A(a)da。注意到df(a)=A(a)dadf(a)=A(a)da,於是dg(f(a))=B(b)A(a)da=B(b)df(a)dg(f(a))=B(b)A(a)da=B(b)df(a),即dg(b)=B(b)dbdg(b)=B(b)db,這恰好就是ggbb處的微分的形式。這說明無論函數gg的變量是自變量還是中間變量,其微分形式就和gg只有自變量時一樣(這裏可以這樣理解:給定一個函數,其微分是一個線性函數,即一個線性映射,即使該函數與其他函數複合,這並不影響該函數本身的微分這個線性映射)。
    【注】一階微分的形式不變性說明了爲什麼自變量的微小增量也用微分符號d表示:df(a)=A(a)dadf(a)=A(a)da中,dada既能表示ffaa處的微分這個線性函數的自變量(這是人爲規定的),又能表示把ff的自變量當成因變量(中間變量),其取值爲aa時的微小增量(這是由形式不變性決定的)。

對於函數有多個自變量的情況,例如y=f(x1,x2,...,xn)y=f(x_1,x_2,...,x_n),其中x1,x2,...,xnx_1,x_2,...,x_n分別是m1,m2,...,mnm_1,m_2,...,m_n維向量,實際上可以看成只有一個自變量xx,其中x=(x1T,x2T,...,xnT)TRi=1nmix=(x_1^T,x_2^T,...,x_n^T)^T\in R^{\sum_{i=1}^nm_i},ff的微分的定義仍適用。實際上,可以把ff的微分的定義等價地拆開寫成f(x1+u1,x2+u2,...,xn+un)f(x1,x2,...,xn)=A1u1+A2u2+...+Anun+ο(u122+u222+...+un22)\begin{aligned}&f(x_1+u_1,x_2+u_2,...,x_n+u_n)-f(x_1,x_2,...,x_n)\\=&A_1u_1+A_2u_2+...+A_nu_n+\omicron(\sqrt{||u_1||_2^2+||u_2||_2^2+...+||u_n||_2^2})\end{aligned}相應地微分寫成dy=A1dx1+A2dx2+...+Andxn=Adxdy=A_1dx_1+A_2dx_2+...+A_ndx_n=Adx,其中AiA_iyyxix_i的導數,A=[A1A2...An],dx=(dx1T,dx2T,...,dxnT)TA=\begin{bmatrix}A_1&A_2&...&A_n\end{bmatrix},dx=(dx_1^T,dx_2^T,...,dx_n^T)^T

對於函數有多箇中間變量的情況,複合函數的微分法則與一階微分的形式不變性仍適用。例如z=g(y1,y2,...,ym)z=g(y_1,y_2,...,y_m)yi=fi(x1,x2,...,xn)y_i=f_i(x_1,x_2,...,x_n),若f1,f2,...,fmf_1,f_2,...,f_m都在點x0=(c1T,c2T,..,cnT)Tx_0=(c_1^T,c_2^T,..,c_n^T)^T可微,gg在點(f1T(x0),f2T(x0),...,fmT(x0))T(f_1^T(x_0),f_2^T(x_0),...,f_m^T(x_0))^T可微,那麼複合函數z=g(f1(x),f2(x),...,fm(x)),x=(x1T,x2T,..,xnT)Tz=g(f_1(x),f_2(x),...,f_m(x)),x=(x_1^T,x_2^T,..,x_n^T)^T是否在點x0x_0可微呢?答案是肯定的,有如下定理保證:

  • 定理3:函數f:DfRm(DfRn)f:D_f\rightarrow R^m(D_f\subseteq R^n)在點aa處可微的充要條件爲ff的每個分量都在點aa處可微(證明略)
    【注】比較ff的微分dfdf和分量fif_i的微分dfidf_i可知,df=(df1,df2,...,dfm)Tdf=(df_1,df_2,...,df_m)^T

對於上述情形,利用該定理可知fif_i的任意分量都在x0x_0可微(i=1,2,..,mi=1,2,..,m),再利用該定理知f=(f1T,f2T,...,fmT)Tf=(f_1^T,f_2^T,...,f_m^T)^Tx0x_0可微,於是由複合函數微分法則得到上述結論。由於多箇中間變量可以看成只有一箇中間變量,故一階微分的形式不變性仍成立。

例1:設z=f(x,y)=xTAy,xRm,yRnz=f(x,y)=x^TAy,x\in R^m,y\in R^n,求zx\frac{\partial z}{\partial x}zy\frac{\partial z}{\partial y}
法1:根據梯度矩陣(梯度)的定義
zx=[zx1zxm]=[iaiyxix1iaiyxixm]=[a1yamy]=Ay\begin{aligned}\frac{\partial z}{\partial x}&=\begin{bmatrix}\frac{\partial z}{\partial x_1}\\\vdots\\\frac{\partial z}{\partial x_m}\end{bmatrix}\\&=\begin{bmatrix}\frac{\partial \sum_ia_iyx_i}{\partial x_1}\\\vdots\\\frac{\partial \sum_ia_iyx_i}{\partial x_m}\end{bmatrix}\\&=\begin{bmatrix}a_1y\\\vdots\\a_my\end{bmatrix}\\&=Ay\end{aligned}式中aia_i是矩陣AA的第i行。同理可得zy=ATx\frac{\partial z}{\partial y}=A^Tx
法2:利用一階微分的形式不變性
根據一階微分的形式不變性容易證明以下幾個微分公式:

  • d(xTy)=yTdx+xTdyd(x^Ty)=y^Tdx+x^Tdy
  • d(Ax)=Adxd(Ax)=Adx

所以d(xTAy)=(Ay)Tdx+xTd(Ay)=(Ay)Tdx+xTAdy=(Ay)Tdx+(ATx)Tdyd(x^TAy)=(Ay)^Tdx+x^Td(Ay)=(Ay)^Tdx+x^TAdy=(Ay)^Tdx+(A^Tx)^Tdy,由微分與導數的關係和梯度與導數的關係得zx=Ay\frac{\partial z}{\partial x}=Ayzy=ATx\frac{\partial z}{\partial y}=A^Tx

例2:設z=f(x,y)=(Ax)(By),xRm,yRn,zRtz=f(x,y)=(Ax)\odot(By),x\in R^m,y\in R^n,z\in R^t,求zxT\frac{\partial z}{\partial x^T}zyT\frac{\partial z}{\partial y^T}
【注】\odot是Hardamard積,即逐元素乘積
法1:根據Jacobian矩陣(導數)的定義
zxT=[z1x1z1xmztx1ztxm]=[(a1x)(b1y)x1(a1x)(b1y)xm(atx)(bty)x1(atx)(bty)xm]=[a11(b1y)a1m(b1y)at1(bty)atm(bty)]=diag(By)A\begin{aligned}\frac{\partial z}{\partial x^T}&=\begin{bmatrix}\frac{\partial z_1}{\partial x_1}&\cdots&\frac{\partial z_1}{\partial x_m}\\\vdots&\ddots&\vdots\\\frac{\partial z_t}{\partial x_1}&\cdots&\frac{\partial z_t}{\partial x_m}\end{bmatrix}\\&=\begin{bmatrix}\frac{\partial (a_1x)(b_1y)}{\partial x_1}&\cdots&\frac{\partial (a_1x)(b_1y)}{\partial x_m}\\\vdots&\ddots&\vdots\\\frac{\partial (a_tx)(b_ty)}{\partial x_1}&\cdots&\frac{\partial (a_tx)(b_ty)}{\partial x_m}\end{bmatrix}\\&=\begin{bmatrix}a_{11}(b_1y)&\cdots&a_{1m}(b_1y)\\\vdots&\ddots&\vdots\\a_{t1}(b_ty)&\cdots&a_{tm}(b_ty)\end{bmatrix}\\&=diag(By)A\end{aligned}其中ai,bia_i,b_i分別是AABB的第i行。同理可得zyT=diag(Ax)B\frac{\partial z}{\partial y^T}=diag(Ax)B
法2:利用一階微分的形式不變性
根據一階微分的形式不變性可以證明如下微分公式:

  • d(xy)=ydx+xdy=diag(y)dx+diag(x)dyd(x\odot y)=y\odot dx+x\odot dy=diag(y)dx+diag(x)dy

所以dz=(By)d(Ax)+(Ax)d(By)=(By)(Adx)+(Ax)(Bdy)=diag(By)Adx+diag(Ax)Bdydz=(By)\odot d(Ax)+(Ax)\odot d(By)=(By)\odot (Adx)+(Ax)\odot (Bdy)=diag(By)Adx+diag(Ax)Bdy,故由微分與導數的關係得zxT=diag(By)A\frac{\partial z}{\partial x^T}=diag(By)AzyT=diag(Ax)B\frac{\partial z}{\partial y^T}=diag(Ax)B


矩陣對標量求導

矩陣對標量求導用的不多,只簡單提一下。
仿照定義1,我們可以寫出以標量爲自變量的矩陣函數的微分的定義,但由定理3啓發,我們可以給出一個等價的定義:

  • 定義4:若矩陣函數A(t)A(t)的每個元素aij(t)a_{ij}(t)在點t0Rt_0\in R處可微,則稱A(t)A(t)t0t_0處可微,且其在該點的導數爲At(t0)=[a11t(t0)a1nt(t0)am1t(t0)amnt(t0)]\frac{\partial A}{\partial t}(t_0)=\begin{bmatrix}\frac{\partial a_{11}}{\partial t}(t_0)&\cdots&\frac{\partial a_{1n}}{\partial t}(t_0)\\\vdots&\ddots&\vdots\\\frac{\partial a_{m1}}{\partial t}(t_0)&\cdots&\frac{\partial a_{mn}}{\partial t}(t_0)\end{bmatrix}
    【注】A(t)A(t)t0t_0處的微分寫作dA(t0)=(dt0)At(t0)dA(t_0)=(dt_0)\frac{\partial A}{\partial t}(t_0)

  • 定理4(鏈式法則):設A=A(α)A=A(\alpha)α=α0\alpha=\alpha_0處可微,標量α(t)\alpha(t)t0t_0處可微,α0=α(t0)\alpha_0=\alpha(t_0),則A(α(t))A(\alpha(t))t0t_0可微,且Aαt(t0)=αt(t0)At(α(t0))\frac{\partial A\circ\alpha}{\partial t}(t_0)=\frac{\partial \alpha}{\partial t}(t_0)\frac{\partial A}{\partial t}(\alpha(t_0))

矩陣對標量求導有一些簡單的公式,在此作爲例子:
A(t),B(t)A(t),B(t)t0t_0處可微,則有

  • AABB可加,則(A+B)t(t0)=At(t0)+Bt(t0)\frac{\partial (A+B)}{\partial t}(t_0)=\frac{\partial A}{\partial t}(t_0)+\frac{\partial B}{\partial t}(t_0)
  • AABB可乘,則ABt(t0)=At(t0)B(t0)+A(t0)Bt(t0)\frac{\partial AB}{\partial t}(t_0)=\frac{\partial A}{\partial t}(t_0)B(t_0)+A(t_0)\frac{\partial B}{\partial t}(t_0)
  • 設標量函數α(t)\alpha(t)t0t_0處可微,則αAt(t0)=αt(t0)B(t0)+α(t0)Bt(t0)\frac{\partial \alpha A}{\partial t}(t_0)=\frac{\partial \alpha}{\partial t}(t_0)B(t_0)+\alpha(t_0)\frac{\partial B}{\partial t}(t_0)

標量對矩陣求導

這部分內容纔是機器學習中需要用到的矩陣微分的核心內容。神經網絡往往以一個標量值的代價函數作爲優化目標,網絡參數往往是矩陣形式的,前向傳播的過程可以視爲計算一個以多個矩陣爲自變量的複合函數的值,反向傳播的過程可以視爲運用鏈式法則(或複合函數的微分法則)計算該標量函數對各個矩陣參數的導數。

鑑於以(多個)矩陣爲自變量的標量函數本質上是多元數量值函數,我們先研究多元數量值函數的微分和導數的定義,然後將它們推廣。由於多元數量值函數的微分可以視作多元向量值函數的微分的特例,因此在定義1中令m=1m=1,就得到了多元數量值函數微分的概念:

  • 定義5:設cRnc\in R^n,函數f:DRf:D\rightarrow Rcc的某個半徑爲r>0r>0的鄰域U(c)U(c)內有定義。若存在向量aRna\in R^{n},使得對於任意的uU˚(0)u\in \mathring U(0)0Rn0\in R^n是零向量,去心鄰域U˚(0)\mathring U(0)的半徑爲rr)有如下關係成立:f(c+u)f(c)=aTu+ο(u2)=iaiui+ο(iui2)f(c+u)-f(c)=a^Tu+\omicron(||u||_2)=\sum_{i}a_iu_i+\omicron(\sqrt{\sum_{i}u_i^2}),其中ο(u2)\omicron(||u||_2)是當u0u\rightarrow 0時的一個高階無窮小,則稱ff在點cc處是可微的,稱uu的線性函數aTua^Tuff在點cc處的微分,記作df(c)=aTudf(c)=a^Tu,並稱aaff在點cc處的梯度向量,簡稱梯度。

注意到微分的本質是把函數局部線性化,得到函數在某一點的鄰域內的線性主部,故很容易將定義5推廣到以矩陣爲自變量的標量函數的情形:

  • 定義6:設(aij)m×n=ARm×n(a_{ij})_{m\times n}=A\in R^{m\times n},存在r>0r>0,數量值函數y=f(X)y=f(X)XAF<r||X-A||_F<r時有定義。若存在(bij)m×n=BRm×n(b_{ij})_{m\times n}=B\in R^{m\times n},使得對於任意的(uij)m×n=URm×n(u_{ij})_{m\times n}=U\in R^{m\times n}滿足0<UF<r0<||U||_F<r有如下關係成立:f(A+U)f(A)=ijbijuij+ο(ijuij2)=tr(BTU)+ο(UF)f(A+U)-f(A)=\sum_{ij}b_{ij}u_{ij}+\omicron(\sqrt{\sum_{ij}u_{ij}^2})=tr(B^TU)+\omicron(||U||_F),則稱ff在點AA處是可微的,稱UUm×nm\times n個元素的線性函數tr(BTU)tr(B^TU)ff在點AA處的微分,記作df(A)=tr(BTU)df(A)=tr(B^TU),並稱BBff在點AA處的梯度矩陣,簡稱梯度。UU是自變量在AA處的增量,常記作U=dAU=dA,即df(A)=tr(BTdA)df(A)=tr(B^TdA)
    【注】tr()tr(\bullet)是指矩陣的跡;F||\bullet||_F是指矩陣的Frobenius範數,當矩陣爲行向量或列向量時,F||\bullet||_F就是向量的Frobenius範數,即2範數,矩陣範數的內容見矩陣的條件數

用類似定理1的證明方法,可以證明B=fX(A)=(fxij(A))m×nB=\frac{\partial f}{\partial X}(A)=(\frac{\partial f}{\partial x_{ij}}(A))_{m\times n}即梯度矩陣與ffXX的偏導相等(需要注意的是,以矩陣爲自變量的實值函數也有Jacobian矩陣的定義,Jacobian矩陣是梯度矩陣的轉置)
利用該結論可以證明如下微分公式:

  • dX=tr(XdX)d|X|=tr(X^*dX),其中X|X|是方陣XX(階數大於等於2)的行列式,XX^*XX的伴隨矩陣
    證:
    由行列式的定義,X=jxijAij|X|=\sum_jx_{ij}A_{ij}對任意i=1,2,...,ni=1,2,...,n成立,其中AijA_{ij}xijx_{ij}的代數餘子式(注意xijx_{ij}不是AijA_{ij}的自變量,即AijA_{ij}的取值與xijx_{ij}無關),則Xxij=Aij\frac{\partial |X|}{\partial x_{ij}}=A_{ij},故XX=(X)T\frac{\partial |X|}{\partial X}=(X^*)^TdX=tr(XdX)d|X|=tr(X^*dX)

還可以證明如下導數公式:
f(X),g(X)f(X),g(X)是以矩陣XX爲自變量的數量值函數,若ffggAA處可微,則f(X)g(X),f(X)+g(X)f(X)g(X),f(X)+g(X)AA處可微,且:

  • f(X)g(X)X=f(X)Xg(X)+f(X)g(X)X\frac{\partial f(X)g(X)}{\partial X}=\frac{\partial f(X)}{\partial X}g(X)+f(X)\frac{\partial g(X)}{\partial X}
  • f(X)±g(X)X=f(X)X±g(X)X\frac{\partial f(X)\pm g(X)}{\partial X}=\frac{\partial f(X)}{\partial X}\pm\frac{\partial g(X)}{\partial X}

現在我們依次考慮兩種複合函數的情形:

  1. 內層函數是以矩陣爲自變量的數量值函數,外層函數是一元數量值函數
  2. 內層函數是以矩陣爲自變量的矩陣值函數(稱爲矩陣函數),外層函數是以矩陣爲自變量的數量值函數

第一種情形:

  • 定理5:設y=f(X),yR,XRm×ny=f(X),y\in R, X\in R^{m\times n}在點AA處可微,z=g(y),zR,yRz=g(y),z\in R,y\in R在點b=f(A)b=f(A)處可微,則z=g(f(X))z=g(f(X))在點AA處可微,且在點AA處的微分爲dg(f(A))=tr((g(b)fX(A))TdX)dg(f(A))=tr((g'(b)\frac{\partial f}{\partial X}(A))^TdX)

證明思路與定理2是類似的,證明的關鍵在於limΔXOο(Δy)ΔXF=0lim_{\Delta X\rightarrow O}\frac{\omicron(|\Delta y|)}{||\Delta X||_F}=0,基本思路是改寫爲limΔXOο(Δy)ΔyΔyΔXF=0lim_{\Delta X\rightarrow O}\frac{\omicron(|\Delta y|)}{|\Delta y|}\frac{|\Delta y|}{||\Delta X||_F}=0,證明limΔXOο(Δy)Δy=0lim_{\Delta X\rightarrow O}\frac{\omicron(|\Delta y|)}{|\Delta y|}=0ΔyΔXF\frac{|\Delta y|}{||\Delta X||_F}局部有界即可。利用絕對值不等式放縮,Δytr((fX(A))TΔX)+ο(ΔX)F)|\Delta y|\leqslant|tr((\frac{\partial f}{\partial X}(A))^T\Delta X)|+|\omicron(||\Delta X)||_F)|ο(ΔX)F)ΔXF\frac{|\omicron(||\Delta X)||_F)|}{||\Delta X||_F}局部有界是顯然的,而tr((fX(A))TΔX)ΔXFij(fXij(Aij)ΔXijΔXFij(fXij(Aij)\frac{|tr((\frac{\partial f}{\partial X}(A))^T\Delta X)|}{||\Delta X||_F}\leqslant\sum_{ij}\frac{|(\frac{\partial f}{\partial X_{ij}}(A_{ij})||\Delta X_{ij}|}{||\Delta X||_F}\leqslant\sum_{ij}|(\frac{\partial f}{\partial X_{ij}}(A_{ij})|,也是局部有界的。

第二種情形:
需要考慮矩陣函數的微分,下面給出矩陣函數的微分的定義。
這裏不引入向量化和kronecker積的運算,在定義6的基礎上仿照定義4的方式給出矩陣函數的微分的定義:

  • 定義7:設有矩陣函數Y=F(X),XRm×n,YRp×qY=F(X),X\in R^{m\times n},Y\in R^{p\times q},若F(X)F(X)的每個元素fij(X),i=1,2,...,p,j=1,2,...,qf_{ij}(X),i=1,2,...,p,j=1,2,...,q都在點AA處可微,則稱F(X)F(X)在點AA處可微,且點AA處的微分爲dF(A)=[df11(A)...df1q(A)dfp1(A)dfpq(A)]dF(A)=\begin{bmatrix}df_{11}(A)&...&df_{1q}(A)\\\vdots&\ddots&\vdots\\df_{p1}(A)&\cdots&df_{pq}(A)\end{bmatrix}該矩陣稱爲微分矩陣

複合矩陣函數的微分法則是成立的(從而微分的形式不變性也是成立的),但在不使用vec+kronecker計算的情況下應該是無法證明的,這個在後面的博客中再說(vec+kronecker可以參考數學-矩陣計算(2)矩陣函數微積分前奏

下面考慮有多個矩陣自變量的情況:

  • 定義8:設AiRmi×ni,i=1,2,...,kA_i\in R^{m_i\times n_i},i=1,2,...,k,存在r>0r>0,數量值函數y=f(X1,X2,...,Xk),XiRmi×niy=f(X_1,X_2,...,X_k),X_i\in R^{m_i\times n_i}iXiAiF2<r\sqrt{\sum_{i}||X_i-A_i||_F^2}<r時有定義。若存在BiRmi×ni,i=1,2,...,kB_i\in R^{m_i\times n_i},i=1,2,...,k,使得對於任意的UiRmi×ni,i=1,2,...,kU_i\in R^{m_i\times n_i},i=1,2,...,k滿足0<iUiF2<r0<\sqrt{\sum_i||U_i||_F^2}<r有如下關係成立:f(A1+U1,A2+U2,...,Ak+Uk)f(A1,A2,...,Ak)=itr(BiTUi)+ο(iUiF2)f(A_1+U_1,A_2+U_2,...,A_k+U_k)-f(A_1,A_2,...,A_k)=\sum_itr(B_i^TU_i)+\omicron(\sqrt{\sum_i||U_i||_F^2}),則稱ff(A1,A2,...,Ak)(A_1,A_2,...,A_k)處是可微的,記作df(A1,...Ak)=itr(BiTdAi)df(A_1,...A_k)=\sum_itr(B_i^TdA_i)

可以證明定義中的BiB_i恰好是ffXiX_iAiA_i處的偏導fXi(Ai)\frac{\partial f}{\partial X_i}(A_i),微分形式不變性等仍成立,不再贅述。
下面根據定義7以及一階微分的形式不變性證明若干常用的微分矩陣的計算公式,前面的例子中出現的微分公式都可以視作下面的公式的特例:(以下設αR\alpha\in R爲常數,βR\beta \in R爲變量,A=(aij)A=(a_{ij})爲常矩陣,X=(xij)X=(x_{ij}),Y=(yij)Y=(y_{ij})爲變量,這三個矩陣的大小視公式中出現的運算而定)

  • dA=OdA=O
    證:
    dA=[da11da1ndam1damn]=OdA=\begin{bmatrix}da_{11}&\cdots&da_{1n}\\\vdots&\ddots&\vdots\\da_{m1}&\cdots&da_{mn}\end{bmatrix}=O
  • d(αX)=αdXd(\alpha X)=\alpha dX
    證:
    d(αX)=[d(αx11)d(αx1n)d(αxm1)d(αxmn)]=[αdx11αdx1nαdxm1αdxmn]=αdXd(\alpha X)=\begin{bmatrix}d(\alpha x_{11})&\cdots&d(\alpha x_{1n})\\\vdots&\ddots&\vdots\\d(\alpha x_{m1})&\cdots&d(\alpha x_{mn})\end{bmatrix}=\begin{bmatrix}\alpha dx_{11}&\cdots&\alpha dx_{1n}\\\vdots&\ddots&\vdots\\\alpha dx_{m1}&\cdots&\alpha dx_{mn}\end{bmatrix}=\alpha dX
  • d(βX)=(dβ)X+βdXd(\beta X)=(d\beta)X+\beta dX
    證:
    d(βX)=[d(βx11)d(βx1n)d(βxm1)d(βxmn)]=[x11dβ+βdx11x1ndβ+βdx1nxm1dβ+βdxm1xmndβ+βdxmn]=(dβ)X+βdXd(\beta X)=\begin{bmatrix}d(\beta x_{11})&\cdots&d(\beta x_{1n})\\\vdots&\ddots&\vdots\\d(\beta x_{m1})&\cdots&d(\beta x_{mn})\end{bmatrix}=\begin{bmatrix}x_{11}d\beta+\beta dx_{11}&\cdots&x_{1n}d\beta+\beta dx_{1n}\\\vdots&\ddots&\vdots\\x_{m1}d\beta+\beta dx_{m1}&\cdots&x_{mn}d\beta+\beta dx_{mn}\end{bmatrix}=(d\beta)X+\beta dX
  • dXT=(dX)TdX^T=(dX)^T
    證:
    dXT=[dx11dxm1dx1ndxmn]=(dX)TdX^T=\begin{bmatrix}dx_{11}&\cdots&dx_{m1}\\\vdots&\ddots&\vdots\\dx_{1n}&\cdots&dx_{mn}\end{bmatrix}=(dX)^T
  • dtr(X)=tr(dX)dtr(X)=tr(dX)
    證:
    dtr(X)=dixii=idxii=tr(dX)dtr(X)=d\sum_ix_{ii}=\sum_idx_{ii}=tr(dX)
  • FF是一個逐元素函數,即F(X)=[f(x11)f(x1n)f(xm1)f(xmn)],f:RRF(X)=\begin{bmatrix}f(x_{11})&\cdots&f(x_{1n})\\\vdots&\ddots&\vdots\\f(x_{m1})&\cdots&f(x_{mn})\end{bmatrix},f:R\rightarrow R,則dF(X)=F(X)dXdF(X)=F'(X)\odot dX,其中FF'也是逐元素函數
    證:
    dF(X)=[df(x11)df(x1n)df(xm1)df(xmn)]=[f(x11)dx11f(x1n)dx1nf(xm1)dxm1f(xmn)dxmn]=F(X)dXdF(X)=\begin{bmatrix}df(x_{11})&\cdots&df(x_{1n})\\\vdots&\ddots&\vdots\\df(x_{m1})&\cdots&df(x_{mn})\end{bmatrix}=\begin{bmatrix}f'(x_{11})dx_{11}&\cdots&f'(x_{1n})dx_{1n}\\\vdots&\ddots&\vdots\\f'(x_{m1})dx_{m1}&\cdots&f'(x_{mn})dx_{mn}\end{bmatrix}=F'(X)\odot dX
  • d(X±Y)=dX±dYd(X\pm Y)=dX\pm dY
    證:
    d(X±Y)=[d(x11±y11)...d(x1n±y1n)d(xm1±ym1)...d(xmn±ymn)]=[dx11±dy11...dx1n±dy1ndxm1±dym1...dxmn±dymn]=dX±dYd(X\pm Y)=\begin{bmatrix}d(x_{11}\pm y_{11})&...&d(x_{1n}\pm y_{1n})\\\vdots&\ddots&\vdots\\d(x_{m1}\pm y_{m1})&...&d(x_{mn}\pm y_{mn})\end{bmatrix}=\begin{bmatrix}dx_{11}\pm dy_{11}&...&dx_{1n}\pm dy_{1n}\\\vdots&\ddots&\vdots\\dx_{m1}\pm dy_{m1}&...&dx_{mn}\pm dy_{mn}\end{bmatrix}=dX\pm dY
  • d(XY)=(dX)Y+XdYd(XY)=(dX)Y+XdY
    證:
    由於(d(XY))ij=dkxikykj=k(ykjdxik+xikdykj)=((dX)Y)ij+(XdY)ij(d(XY))_{ij}=d\sum_kx_{ik}y_{kj}=\sum_k(y_{kj}dx_{ik}+x_{ik}dy_{kj})=((dX)Y)_{ij}+(XdY)_{ij},故d(XY)=(dX)Y+XdYd(XY)=(dX)Y+XdY
  • d(XY)=dXY+XdYd(X\odot Y)=dX\odot Y+X\odot dY
    證:
    由於(d(XY))ij=d(xijyij)=yijdxij+xijdyij=(dXY)ij+(XdY)ij(d(X\odot Y))_{ij}=d(x_{ij}y_{ij})=y_{ij}dx_{ij}+x_{ij}dy_{ij}=(dX\odot Y)_{ij}+(X\odot dY)_{ij},故d(XY)=dXY+XdYd(X\odot Y)=dX\odot Y+X\odot dY
    【注】\odot是逐元素乘積
  • d(XY)=(dXYXdY)(YY)d(X\oslash Y)=(dX\odot Y-X\odot dY)\oslash(Y\odot Y)
    證:
    由於(d(XY))ij=dxijyij=yijdxijxijdyijyij2=Zij(d(X\oslash Y))_{ij}=d\frac{x_{ij}}{y_{ij}}=\frac{y_{ij}dx_{ij}-x_{ij}dy_{ij}}{y_{ij}^2}=Z_{ij},其中Z=(dXYXdY)(YY)Z=(dX\odot Y-X\odot dY)\oslash(Y\odot Y),故d(XY)=Z=(dXYXdY)(YY)d(X\oslash Y)=Z=(dX\odot Y-X\odot dY)\oslash(Y\odot Y)
    【注】\oslash是逐元素除法

上面的公式基本就夠用了,這些公式可以用來計算複合函數等複雜函數的微分矩陣,進而計算梯度矩陣/偏導矩陣。下面舉幾個微分矩陣和標量對矩陣求導的例子:(我們當然可以直接根據Jacobian矩陣或梯度矩陣的定義計算,但下面利用定義7/8+上面的微分公式+微分形式不變性來推導這些結果)
【注】關於矩陣的跡的運算律參考鏈接
微分矩陣:

  • dX1=X1(dX)X1dX^{-1}=-X^{-1}(dX)X^{-1}
    證:
    X1X=IX^{-1}X=I兩邊微分,得(dX1)X+X1dX=O(dX^{-1})X+X^{-1}dX=O,用X1X^{-1}右乘式的兩端,得dX1+X1(dX)X1=OdX^{-1}+X^{-1}(dX)X^{-1}=O,即dX1=X1(dX)X1dX^{-1}=-X^{-1}(dX)X^{-1}
  • dln(X)=dXXd\ln(X)=dX \oslash X,其中ln(X)\ln(X)是將以e爲底的對數函數逐元素應用到矩陣XX
    證:
    dln(X)=(1X)dX=dXXd\ln(X)=(1\oslash X)\odot dX=dX\oslash X
  • dσ(X)=σ(X)σ(X)dXd\sigma(X)=\sigma(X)\odot\sigma(-X)\odot dX,其中σ(X)\sigma(X)是將sigmoid函數逐元素應用到矩陣XX
    【注】sigmoid函數是神經網絡中常用的激活函數,定義爲σ:RR+,σ(z)=11+ez\sigma:R\rightarrow R_+,\sigma(z)=\frac{1}{1+e^{-z}}
    證:
    只需證明zR,σ(z)=σ(z)σ(z)\forall z\in R,\sigma'(z)=\sigma(z)\sigma(-z)。由sigmoid函數的定義得(1+ez)σ(z)=1(1+e^{-z})\sigma(z)=1,兩端微分得ezσ(z)dz+(1+ez)σ(z)dz=0-e^{-z}\sigma(z)dz+(1+e^{-z})\sigma'(z)dz=0,故ezσ(z)+(1+ez)σ(z)=0-e^{-z}\sigma(z)+(1+e^{-z})\sigma'(z)=0σ(z)=ezσ(z)1+ez=σ(z)1+ez=σ(z)σ(z)\sigma'(z)=\frac{e^{-z}\sigma(z)}{1+e^{-z}}=\frac{\sigma(z)}{1+e^{z}}=\sigma(z)\sigma(-z)
  • dg(x)=1Texdiag(ex)ex(ex)T(1Tex)2dxdg(x)=\frac{1^Te^xdiag(e^x)-e^x(e^x)^T}{(1^Te^x)^2}dx,其中g(x)=ex1Tex,xRng(x)=\frac{e^x}{1^Te^x},x\in R^nexe^x是將以ee爲底的指數函數逐元素應用到向量xx
    【注】這裏定義的函數gg就是softmax函數,softmax函數是神經網絡中常用的激活函數,在分類問題中常用於輸出層得到概率分佈
    證:
    g(x)=ex1Tex,xRng(x)=\frac{e^x}{1^Te^x},x\in R^n1Texg(x)=ex1^Te^xg(x)=e^x,兩端微分得1T(exdx)g(x)+1Texdg(x)=exdx1^T(e^x\odot dx)g(x)+1^Te^xdg(x)=e^x\odot dx,又因爲1T(exdx)=tr(1T(exdx))=tr((1ex)Tdx)=(ex)Tdx1^T(e^x\odot dx)=tr(1^T(e^x\odot dx))=tr((1\odot e^x)^Tdx)=(e^x)^Tdx,故dg(x)=exdx(ex)Tdxg(x)1Tex=diag(ex)dxg(x)(ex)Tdx1Tex=1Texdiag(ex)ex(ex)T(1Tex)2dxdg(x)=\frac{e^x\odot dx-(e^x)^Tdxg(x)}{1^Te^x}=\frac{diag(e^x)dx-g(x)(e^x)^Tdx}{1^Te^x}=\frac{1^Te^xdiag(e^x)-e^x(e^x)^T}{(1^Te^x)^2}dx

梯度矩陣/Jacobian矩陣:

  • tr(X)X=I\frac{\partial tr(X)}{\partial X}=I
    證:
    dtr(X)=tr(dX)dtr(X)=tr(dX)及定義7即證。
  • tr(XTX)X=2X\frac{\partial tr(X^TX)}{\partial X}=2X
    證:
    d(tr(XTX))=tr(d(XTX))=tr((dXT)X+XTdX)=tr((dX)TX)+tr(XTdX)=2tr(XTdX)d(tr(X^TX))=tr(d(X^TX))=tr((dX^T)X+X^TdX)=tr((dX)^TX)+tr(X^TdX)=2tr(X^TdX)及定義7即證。
  • y=g(x),x,yRny=g(x),x,y\in R^n,其中gg是softmax函數,則yxT=[y1(1y1)y1y2y1yny2y1y2(1y2)y2ynyny1yny2yn(1yn)]\frac{\partial y}{\partial x^T}=\begin{bmatrix}y_1(1-y_1)&-y_1y_2&\cdots&-y_1y_n\\-y_2y_1&y_2(1-y_2)&\cdots&-y_2y_n\\\cdots&\cdots&\cdots&\cdots\\-y_ny_1&-y_ny_2&\cdots&y_n(1-y_n)\end{bmatrix}
    證:
    利用dg(x)=1Texdiag(ex)ex(ex)T(1Tex)2dxdg(x)=\frac{1^Te^xdiag(e^x)-e^x(e^x)^T}{(1^Te^x)^2}dx(這個例子也可以直接根據Jacobian矩陣的定義計算)。yxT=1Texdiag(ex)ex(ex)T(1Tex)2=1(iexi)2(iexi[ex1ex2exn][ex1ex1ex1ex2ex1exnex2ex1ex2ex2ex2exnexnex1exnex2exnexn])=[ex1iexi(1ex1iexi)ex1iexiex2iexiex1iexiexniexiex2iexiex1iexiex2iexi(1ex2iexi)ex2iexiexniexiexniexiex1iexiexniexiex2iexiexniexi(1exniexi)]=[y1(1y1)y1y2y1yny2y1y2(1y2)y2ynyny1yny2yn(1yn)]\begin{aligned}\frac{\partial y}{\partial x^T}&=\frac{1^Te^xdiag(e^x)-e^x(e^x)^T}{(1^Te^x)^2}\\&=\frac{1}{(\sum_ie^{x_i})^2}(\sum_ie^{x_i}\begin{bmatrix}e^{x_1}&&&\\&e^{x_2}&&\\&&\cdots&\\&&&e^{x_n}\end{bmatrix}-\begin{bmatrix}e^{x_1}e^{x_1}&e^{x_1}e^{x_2}&\cdots&e^{x_1}e^{x_n}\\e^{x_2}e^{x_1}&e^{x_2}e^{x_2}&\cdots&e^{x_2}e^{x_n}\\\cdots&\cdots&\cdots&\cdots\\e^{x_n}e^{x_1}&e^{x_n}e^{x_2}&\cdots&e^{x_n}e^{x_n}\end{bmatrix})\\&=\begin{bmatrix} \frac{e^{x_1}}{\sum_ie^{x_i}}(1-\frac{e^{x_1}}{\sum_ie^{x_i}})&-\frac{e^{x_1}}{\sum_ie^{x_i}}\frac{e^{x_2}}{\sum_ie^{x_i}}&\cdots&-\frac{e^{x_1}}{\sum_ie^{x_i}}\frac{e^{x_n}}{\sum_ie^{x_i}}\\-\frac{e^{x_2}}{\sum_ie^{x_i}}\frac{e^{x_1}}{\sum_ie^{x_i}}&\frac{e^{x_2}}{\sum_ie^{x_i}}(1-\frac{e^{x_2}}{\sum_ie^{x_i}})&\cdots&-\frac{e^{x_2}}{\sum_ie^{x_i}}\frac{e^{x_n}}{\sum_ie^{x_i}}\\\cdots&\cdots&\cdots&\cdots\\-\frac{e^{x_n}}{\sum_ie^{x_i}}\frac{e^{x_1}}{\sum_ie^{x_i}}&-\frac{e^{x_n}}{\sum_ie^{x_i}}\frac{e^{x_2}}{\sum_ie^{x_i}}&\cdots&\frac{e^{x_n}}{\sum_ie^{x_i}}(1-\frac{e^{x_n}}{\sum_ie^{x_i}})\end{bmatrix}\\&=\begin{bmatrix}y_1(1-y_1)&-y_1y_2&\cdots&-y_1y_n\\-y_2y_1&y_2(1-y_2)&\cdots&-y_2y_n\\\cdots&\cdots&\cdots&\cdots\\-y_ny_1&-y_ny_2&\cdots&y_n(1-y_n)\end{bmatrix}\end{aligned}

應用

線性迴歸問題的最小二乘解

機器學習中的線性迴歸問題表述如下:
設有m個樣本s1,s2,...,sms_1,s_2,...,s_m(爲表示方便,假設sis_i是行向量),每個樣本包含n個特徵(siTRns_i^T\in R^n),樣本的標籤分別是y1,y2,...,ymRy_1,y_2,...,y_m\in R。現要求得一線性模型yi=siθ+by_i=s_i\theta+b對於任意i成立,其中θRn\theta\in R^nbRb\in R是要求解的參數。該問題可寫成如下矩陣形式:設ai=[1si]a_i=\begin{bmatrix}1&s_i\end{bmatrix}A=[a1a2...am]A=\begin{bmatrix}a_1\\a_2\\...\\a_m\end{bmatrix}(A稱爲設計矩陣),x=[bθ]x=\begin{bmatrix}b\\\theta\end{bmatrix}y=[y1y2...ym]y=\begin{bmatrix}y_1\\y_2\\...\\y_m\end{bmatrix},求解參數向量x使得Ax=yAx=y。可見線性迴歸問題實質上就是求解一個線性方程組。

在前面的博客中,曾給出線性方程組最小二乘解的廣義逆解法和投影矩陣解法,並證明了這些方法的正確性。現在利用矩陣微分的方法解決這個問題:
根據最小二乘解的定義,我們要最小化f(x)=Axy2f(x)=||Ax-y||_2,這等價於最小化z=f(x)2=Axy22=(Axy)T(Axy)z=f(x)^2=||Ax-y||_2^2=(Ax-y)^T(Ax-y)dz=(Adx)T(Axy)+(Axy)TAdx=2(Axy)TAdxdz=(Adx)^T(Ax-y)+(Ax-y)^TAdx=2(Ax-y)^TAdx,得zx=2AT(Axy)\frac{\partial z}{\partial x}=2A^T(Ax-y)dzx=2ATAdxd\frac{\partial z}{\partial x}=2A^TAdx,故Hessian矩陣爲xT(zx)=2ATA\frac{\partial}{\partial x^T}(\frac{\partial z}{\partial x})=2A^TA,是對稱半正定的,故zz是凸函數。令zx=0\frac{\partial z}{\partial x}=0即得到全局最優解,得正規方程ATAx=ATyA^TAx=A^Ty,這就證明了求最小二乘解等價於解正規方程。

L2正則化情形

正則化是一種提高模型泛化能力的技術,通過“權值衰減”的方式,緩解模型的過擬合問題。在線性迴歸中討論L2正則化,不僅是因爲這項技術能夠增強模型的泛化能力,還因爲對於線性迴歸問題來說,只要進行L2正則化,那麼最優解存在且唯一。
S=[s1s2...sm]S=\begin{bmatrix}s_1\\s_2\\...\\s_m\end{bmatrix}P=[001×n0n×1In]P=\begin{bmatrix}0&0_{1\times n}\\0_{n\times 1}&I_n\end{bmatrix},則A=[1m×1S]A=\begin{bmatrix}1_{m\times 1}&S\end{bmatrix}θ=Px\theta=Px。加入正則化項λθ22,λ>0\lambda ||\theta||_2^2,\lambda>0後,我們要優化的函數爲f(x)=Axy22+λθ22=Axy22+λPx22f(x)=||Ax-y||^2_2+\lambda ||\theta||_2^2=||Ax-y||^2_2+\lambda ||Px||_2^2對該式微分得12df=(Axy)TAdx+λxTPTPdx=(Axy)TAdx+λxTPdx\begin{aligned}\frac{1}{2}df&=(Ax-y)^TAdx+\lambda x^TP^TPdx\\&=(Ax-y)^TAdx+\lambda x^TPdx\end{aligned}於是12fx=AT(Axy)+λPTx=AT(Axy)+λPx\frac{1}{2}\frac{\partial f}{\partial x}=A^T(Ax-y)+\lambda P^Tx=A^T(Ax-y)+\lambda Px再求一次微分可得Hessian矩陣,易驗證其爲對稱半正定的,於是帶有L2正則化的線性迴歸仍是凸優化問題。令fx=0\frac{\partial f}{\partial x}=0得如下方程(ATA+λP)x=ATy(A^TA+\lambda P)x=A^Ty只要ATA+λPA^TA+\lambda P可逆,則方程的解存在且唯一。爲此,我們證明如下結論:

  • 定理:ATA+λPA^TA+\lambda P是對稱正定矩陣
    證明:
    對稱性易證。現證明正定性:由A=[1m×1S]A=\begin{bmatrix}1_{m\times 1}&S\end{bmatrix}P=[001×n0n×1In]P=\begin{bmatrix}0&0_{1\times n}\\0_{n\times 1}&I_n\end{bmatrix}ATA=[m1m×1TSST1m×1STS]A^TA=\begin{bmatrix}m&1_{m\times 1}^TS\\S^T1_{m\times 1}&S^TS\end{bmatrix}ATA+λP=[m1m×1TSST1m×1STS+λIn]A^TA+\lambda P=\begin{bmatrix}m&1_{m\times 1}^TS\\S^T1_{m\times 1}&S^TS+\lambda I_n\end{bmatrix}任意0zRn+10\neq z\in R^{n+1}zTATAz=(Az)T(Az)=Az220z^TA^TAz=(Az)^T(Az)=||Az||_2^2\geqslant 0(即ATAA^TA是對稱半正定的),令z=(z1,z˜T)z=(z_1,\text{\~{z}}^T),其中z˜Rn\text{\~{z}}\in R^n,則zTATAz=zT[m1m×1TSST1m×1STS]z=mz12+2(z˜TST1m×1)z1+z˜TSTSz˜0\begin{aligned}z^TA^TAz&=z^T\begin{bmatrix}m&1_{m\times 1}^TS\\S^T1_{m\times 1}&S^TS\end{bmatrix}z\\&=mz_1^2+2(\text{\~{z}}^TS^T1_{m\times 1})z_1+\text{\~{z}}^TS^TS\text{\~{z}}\\&\geqslant 0\end{aligned}zT(ATA+λP)z=zT[m1m×1TSST1m×1STS+λIn]z=mz12+2(z˜TST1m×1)z1+z˜TSTSz˜+λz˜22=zTATAz+λz˜22\begin{aligned}z^T(A^TA+\lambda P)z&=z^T\begin{bmatrix}m&1_{m\times 1}^TS\\S^T1_{m\times 1}&S^TS+\lambda I_n\end{bmatrix}z\\&=mz_1^2+2(\text{\~{z}}^TS^T1_{m\times 1})z_1+\text{\~{z}}^TS^TS\text{\~{z}}+\lambda||\text{\~{z}}||_2^2\\&=z^TA^TAz+\lambda||\text{\~{z}}||_2^2\end{aligned}z˜=0\text{\~{z}}=0時,由z0z\neq 0z10z_1\neq 0zT(ATA+λP)z=mz12>0z^T(A^TA+\lambda P)z=mz_1^2\gt 0;當z˜0\text{\~{z}}\neq 0時,λz˜22>0\lambda||\text{\~{z}}||_2^2\gt 0,故zT(ATA+λP)z=zTATAz+λz˜22>0z^T(A^TA+\lambda P)z=z^TA^TAz+\lambda||\text{\~{z}}||_2^2\gt 0
    綜上,只要z0z\neq 0就有zT(ATA+λP)z>0z^T(A^TA+\lambda P)z>0,故ATA+λPA^TA+\lambda P是對稱正定矩陣。

因爲ATA+λPA^TA+\lambda P是對稱正定矩陣,故ATA+λPA^TA+\lambda P一定可逆。這就證明了f(x)f(x)的最優解存在且唯一,且爲x=(ATA+λP)1ATyx=(A^TA+\lambda P)^{-1}A^Ty


多層前饋網絡的反向傳播

多層前饋網絡又稱多層感知機或BP網絡,是迴歸問題/分類問題中常用的模型。
圖片來自維基百科
在推導反向傳播前,先看一下前向傳播是怎麼進行的。

單樣本:
a[l]Rnla^{[l]}\in R^{n_l}是神經網絡中第ll層的激勵值,其中nln_l是第ll層的神經元個數,g[l]g^{[l]}是第ll層的激活函數,W[l]W^{[l]}b[l]b^{[l]}是第ll層的參數。設輸入層是第0層,即對於樣本xRn0x\in R^{n_0},有a[0]=xa^{[0]}=xn0n_0即該樣本的特徵數量。輸出層是第LL層,即對於樣本xx,網絡的預測值y^=a[L]RnL\hat y=a^{[L]}\in R^{n_L}。則前向傳播的過程形式化如下:
依次對l=1,2,...,Ll=1,2,...,L計算下式:z[l]=W[l]a[l1]+b[l]a[l]=g[l](z[l])z^{[l]}=W^{[l]}a^{[l-1]}+b^{[l]}\\a^{[l]}=g^{[l]}(z^{[l]})得到神經網絡的預測值y^=a[L]\hat y=a^{[L]}後,計算損失函數的值L(y^,y)L(\hat y,y),其中yy是樣本xx的真實標籤。

多樣本:
設有mm個樣本x(1),x(2),...,x(m)x^{(1)},x^{(2)},...,x^{(m)}按列構成矩陣XX,即XRn0×mX\in R^{n_0\times m},它們的標籤y(1),y(2),...,y(m)y^{(1)},y^{(2)},...,y^{(m)}按列構成矩陣YYYRnL×mY\in R^{n_L\times m}(在分類問題中,樣本的標籤是one-hot向量,即目標概率分佈)。多樣本的情形實際上只是讓mm個樣本同時前向傳播,神經網絡的參數和單樣本時是相同的。設A[l]=[a[l](1)a[l](2)a[l](m)]A^{[l]}=\begin{bmatrix}a^{[l](1)}&a^{[l](2)}&\cdots&a^{[l](m)}\end{bmatrix},其中a[l](i)Rnla^{[l](i)}\in R^{n_l}是第ll層第ii個樣本的激勵值。多樣本情形下的前向傳播可形式化如下:
依次對l=1,2,...,Ll=1,2,...,L計算下式:Z[l]=W[l]A[l1]+b[l]1m×1TA[l]=G[l](Z[l])Z^{[l]}=W^{[l]}A^{[l-1]}+b^{[l]}1_{m\times 1}^T\\A^{[l]}=G^{[l]}(Z^{[l]})函數G[l]:Rnl×mRnl×mG^{[l]}:R^{n_l\times m}\rightarrow R^{n_l\times m}滿足G[l](Z[l])=[g[l](z[l](1))g[l](z[l](2))g[l](z[l](m))]G^{[l]}(Z^{[l]})=\begin{bmatrix}g^{[l]}(z^{[l](1)})&g^{[l]}(z^{[l](2)})&\cdots&g^{[l]}(z^{[l](m)})\end{bmatrix},其中g[l]g^{[l]}是第ll層的激活函數(實際上多數激活函數是逐元素函數(softmax等除外),此時G[l]G^{[l]}g[l]g^{[l]}可以統一定義爲一個以矩陣爲自變量的逐元素函數,不需要區分開)。神經網絡的預測值爲A[L]=Y^=[y^(1)y^(2)y^(m)]A^{[L]}=\hat Y=\begin{bmatrix}\hat y^{(1)}&\hat y^{(2)}&\cdots&\hat y^{(m)}\end{bmatrix},其中y^(i)=g[L](z[L](i))\hat y^{(i)}=g^{[L]}(z^{[L](i)}),損失函數J(Y^,Y)J(\hat Y,Y)的值一般取每個樣本的損失函數值的平均值,即J(Y^,Y)=1miL(y^(i),y(i))J(\hat Y,Y)=\frac{1}{m}\sum_iL(\hat y^{(i)},y^{(i)})
常用的損失函數:
對於迴歸問題,常用均方誤差函數MSE:L(y^,y)=y^y22L(\hat y,y)=||\hat y-y||_2^2容易推導出對於多樣本的情形有J(Y^,Y)=1mY^YF2J(\hat Y, Y)=\frac{1}{m}||\hat Y-Y||_F^2對於分類問題,常用交叉熵代價函數CrossEntropyLoss:
如果輸出層的激勵函數採用sigmoid函數的話,則L(y^,y)=i=1nL(yilny^i+(1yi)ln(1y^i))=(yTlny^+(1y)Tln(1y^))L(\hat y,y)=-\sum_{i=1}^{n_L}(y_i\ln\hat y_i+(1-y_i)\ln(1-\hat y_i))=-(y^T\ln\hat y+(1-y)^T\ln(1-\hat y))容易推導出對於多樣本的情形有J(Y^,Y)=1mtr(YTlnY^+(1Y)Tln(1Y^))J(\hat Y, Y)=-\frac{1}{m}tr(Y^T\ln\hat Y+(1-Y)^T\ln(1-\hat Y))如果輸出層的激勵函數採用softmax函數的話,則L(y^,y)=i=1nLyilny^i=yTlny^L(\hat y,y)=-\sum_{i=1}^{n_L}y_i\ln\hat y_i=-y^T\ln\hat y對於多樣本的情形有J(Y^,Y)=1mtr(YTlnY^)J(\hat Y,Y)=-\frac{1}{m}tr(Y^T\ln\hat Y)
一句話總結,前向傳播就是在計算以多個矩陣爲自變量的非線性實值函數f(X,Y,Θ)=J(Y^,Y)f(X,Y,\Theta)=J(\hat Y, Y),其中Θ\Theta是神經網絡的參數組,包含神經網絡中的所有參數W[1],b[1],W[2],b[2],...,W[L],b[L]W^{[1]},b^{[1]},W^{[2]},b^{[2]},...,W^{[L]},b^{[L]}(很多資料中前向傳播的概念是僅僅計算到輸出層的值就可以了,但由於反向傳播是從代價函數開始的,因此這裏我們把使用輸出層的值計算代價函數也視爲前向傳播的一部分)。由於計算過程是從輸入層到輸出層逐層傳遞的,因此稱爲“前向傳播”。

由凸優化的相關理論知,最小化代價函數需要找到函數的一個下降方向,而負梯度方向是一個自然存在的下降方向,因此需要一個算法求出代價函數對網絡的各個參數矩陣的梯度矩陣。反向傳播算法(BP)以複合函數的微分法則(或複合函數的鏈導法則)爲理論基礎,從輸出層(準確說是從代價函數)開始到輸入層,逐層求解代價函數對各層參數的梯度矩陣,從而得到代價函數的一個下降方向。

下面以分類問題爲例推導BP算法,輸出層激勵函數採用Softmax,代價函數採用交叉熵代價函數。由於單樣本的前向、反向傳播過程可以視爲多樣本情形的特例(即m=1m=1),因此下面只推導多樣本情形:

一些前提結論(這些結論將在推導過程中直接使用):

  • dg(x)g(x)=dx1n×1g(x)Tdx,xRndg(x)\oslash g(x)=dx-1_{n\times 1}g(x)^Tdx,x\in R^n,其中gg是softmax函數
    證:
    由於dg(x)g(x)=dlng(x)dg(x)\oslash g(x)=d\ln g(x),因此先計算lng(x)\ln g(x)lng(x)=lnex1Tex=ln(ex(1Tex1n×1))=lnexln(1Tex1n×1)=xln(1Tex1n×1)\begin{aligned}\ln g(x)&=\ln \frac{e^x}{1^Te^x}\\&=\ln(e^x\oslash(1^Te^x1_{n\times 1}))\\&=\ln e^x-\ln(1^Te^x1_{n\times 1})\\&=x-\ln(1^Te^x1_{n\times 1})\end{aligned}dlng(x)=dxdln(1Tex1n×1)=dx(1T(dex)1n×1)(1Tex1n×1)=dx1T(exdx)1n×11Tex=dx(ex)Tdx1n×11Tex=dx1n×1g(x)Tdx\begin{aligned}\begin{aligned}d\ln g(x)&=dx-d\ln(1^Te^x1_{n\times 1})\\&=dx-(1^T(de^x)1_{n\times 1})\oslash(1^Te^x1_{n\times 1})\\&=dx-\frac{1^T(e^x\odot dx)1_{n\times 1}}{1^Te^x}\\&=dx-\frac{(e^x)^Tdx1_{n\times 1}}{1^Te^x}\\&=dx-1_{n\times 1}g(x)^Tdx\end{aligned}\end{aligned}
  • [a1a2an]=ARm×n,[b1b2bn]=BRm×n\begin{bmatrix}a_1&a_2&\cdots&a_n\end{bmatrix}=A\in R^{m\times n},\begin{bmatrix}b_1&b_2&\cdots&b_n\end{bmatrix}=B\in R^{m\times n},則tr([a1Tb11n×1a2Tb21n×1anTbn1n×1])=tr(ATB)tr(\begin{bmatrix}a_1^Tb_11_{n\times 1}&a_2^Tb_21_{n\times 1}&\cdots&a_n^Tb_n1_{n\times 1}\end{bmatrix})=tr(A^TB)
    (它們的值都是ijaijbij\sum_{ij}a_{ij}b_{ij}
  • 在分類問題中有YT1nL×1=1m×1Y^T1_{n_L\times 1}=1_{m\times 1},其中YRnL×mY\in R^{n_L\times m}是m個樣本的標籤(one-hot形式)按列排成的矩陣,nLn_L是網絡的輸出層的神經元數目,即類別數
    (這是因爲概率分佈的總和是1,也可以從one-hot向量的格式看出來,one-hot向量只有一個分量是1,其他分量都是0)
  • 前面提到過的一些微分公式

推導過程:
從代價函數開始到輸出層(輸出層激勵函數g[L]g^{[L]}是softmax函數):
dJ=1mtr(YTdlnY^)=1mtr(YT(dY^Y^))\begin{aligned}dJ&=-\frac{1}{m}tr(Y^Td\ln\hat Y)\\&=-\frac{1}{m}tr(Y^T(d\hat Y\oslash \hat Y))\end{aligned}dY^Y^=dG[L](Z[L])G[L](Z[L])=[dg[L](z[L](1))dg[L](z[L](m))][g[L](z[L](1))g[L](z[L](m))]=[dg[L](z[L](1))g[L](z[L](1))dg[L](z[L](m))g[L](z[L](m))]=[dz[L](1)1nL×1g[L](z[L](1))Tdz[L](1)dz[L](m)1nL×1g[L](z[L](m))Tdz[L](m)]=dZ[L][1nL×1(y^(1))Tdz[L](1)1nL×1(y^(m))Tdz[L](m)]\begin{aligned}d\hat Y\oslash \hat Y&=dG^{[L]}(Z^{[L]})\oslash G^{[L]}(Z^{[L]})\\&=\begin{bmatrix}dg^{[L]}(z^{[L](1)})&\cdots&dg^{[L]}(z^{[L](m)})\end{bmatrix}\oslash\begin{bmatrix}g^{[L]}(z^{[L](1)})&\cdots&g^{[L]}(z^{[L](m)})\end{bmatrix}\\&=\begin{bmatrix}dg^{[L]}(z^{[L](1)})\oslash g^{[L]}(z^{[L](1)})&\cdots&dg^{[L]}(z^{[L](m)})\oslash g^{[L]}(z^{[L](m)})\end{bmatrix}\\&=\begin{bmatrix}dz^{[L](1)}-1_{n_L\times 1}g^{[L]}(z^{[L](1)})^Tdz^{[L](1)}&\cdots&dz^{[L](m)}-1_{n_L\times 1}g^{[L]}(z^{[L](m)})^Tdz^{[L](m)}\end{bmatrix}\\&=dZ^{[L]}-\begin{bmatrix}1_{n_L\times 1}(\hat y^{(1)})^Tdz^{[L](1)}&\cdots&1_{n_L\times 1}(\hat y^{(m)})^Tdz^{[L](m)}\end{bmatrix}\end{aligned}mdJ=tr(YT(dY^Y^))=tr(YT(dZ[L][1nL×1(y^(1))Tdz[L](1)1nL×1(y^(m))Tdz[L](m)]))=tr(YTdZ[L])tr([YT1nL×1(y^(1))Tdz[L](1)YT1nL×1(y^(m))Tdz[L](m)])=tr(YTdZ[L])tr([1m×1(y^(1))Tdz[L](1)1m×1(y^(m))Tdz[L](m)])=tr(YTdZ[L])tr(Y^TdZ[L])=tr((YY^)TdZ[L])\begin{aligned}-mdJ&=tr(Y^T(d\hat Y\oslash \hat Y))\\&=tr(Y^T(dZ^{[L]}-\begin{bmatrix}1_{n_L\times 1}(\hat y^{(1)})^Tdz^{[L](1)}&\cdots&1_{n_L\times 1}(\hat y^{(m)})^Tdz^{[L](m)}\end{bmatrix}))\\&=tr(Y^TdZ^{[L]})-tr(\begin{bmatrix}Y^T1_{n_L\times 1}(\hat y^{(1)})^Tdz^{[L](1)}&\cdots&Y^T1_{n_L\times 1}(\hat y^{(m)})^Tdz^{[L](m)}\end{bmatrix})\\&=tr(Y^TdZ^{[L]})-tr(\begin{bmatrix}1_{m\times 1}(\hat y^{(1)})^Tdz^{[L](1)}&\cdots&1_{m\times 1}(\hat y^{(m)})^Tdz^{[L](m)}\end{bmatrix})\\&=tr(Y^TdZ^{[L]})-tr(\hat Y^TdZ^{[L]})\\&=tr((Y-\hat Y)^TdZ^{[L]})\end{aligned}由微分和梯度矩陣的關係得JZ[L]=1m(Y^Y)\frac{\partial J}{\partial Z^{[L]}}=\frac{1}{m}(\hat Y-Y),可見梯度矩陣的形式十分簡單。這就是機器學習框架(如Tensorflow和Pytorch)中CrossEntropyLoss的實現要把softmax集成到loss函數中的原因,因爲這樣的話在反向傳播時能節省大量不必要的運算,做個矩陣減法就是導數了(還有一點就是前向傳播時log和softmax結合也可以簡化運算)。
Pytorch官方文檔
Tensorflow官方文檔
在這裏插入圖片描述
【注】當輸出層的激勵函數採用sigmoid函數,代價函數採用交叉熵代價函數時,反向傳播有類似的結果,感興趣的讀者可以自己試一下。

輸出層還沒算完:dZ[L]=(dW[L])A[L1]+W[L]dA[L1]+(db[L])1m×1TdZ^{[L]}=(dW^{[L]})A^{[L-1]}+W^{[L]}dA^{[L-1]}+(db^{[L]})1_{m\times 1}^TdJ=tr((JZ[L])TdZ[L])=tr((JZ[L])T(dW[L])A[L1])+tr((JZ[L])TW[L]dA[L1])+tr((JZ[L])T(db[L])1m×1T)=tr((JZ[L](A[L1])T)TdW[L])+tr(((W[L])TJZ[L])TdA[L1])+tr((JZ[L]1m×1)Tdb[L])\begin{aligned}dJ&=tr((\frac{\partial J}{\partial Z^{[L]}})^TdZ^{[L]})\\&=tr((\frac{\partial J}{\partial Z^{[L]}})^T(dW^{[L]})A^{[L-1]})+tr((\frac{\partial J}{\partial Z^{[L]}})^TW^{[L]}dA^{[L-1]})+tr((\frac{\partial J}{\partial Z^{[L]}})^T(db^{[L]})1_{m\times 1}^T)\\&=tr((\frac{\partial J}{\partial Z^{[L]}}(A^{[L-1]})^T)^TdW^{[L]})+tr(((W^{[L]})^T\frac{\partial J}{\partial Z^{[L]}})^TdA^{[L-1]})+tr((\frac{\partial J}{\partial Z^{[L]}}1_{m\times 1})^Tdb^{[L]})\end{aligned}故由微分與梯度矩陣的關係得JW[L]=JZ[L](A[L1])T\frac{\partial J}{\partial W^{[L]}}=\frac{\partial J}{\partial Z^{[L]}}(A^{[L-1]})^TJb[L]=JZ[L]1m×1\frac{\partial J}{\partial b^{[L]}}=\frac{\partial J}{\partial Z^{[L]}}1_{m\times 1}JA[L1]=(W[L])TJZ[L]\frac{\partial J}{\partial A^{[L-1]}}=(W^{[L]})^T\frac{\partial J}{\partial Z^{[L]}}。這就得到了代價函數對輸出層參數W[L],b[L]W^{[L]},b^{[L]}的梯度。通過將JA[L1]\frac{\partial J}{\partial A^{[L-1]}}保存下來,求導運算可以繼續傳播下去。爲了後面表示方便,我們把上面的微分式中的每一項用單個符號代替,即簡寫爲dJ=dJW[L]+dJA[L1]+dJb[L]dJ=dJ_{W^{[L]}}+dJ_{A^{[L-1]}}+dJ_{b^{[L]}},注意後面計算時只會把dJA[L1]dJ_{A^{[L-1]}}展開,dJW[L]dJ_{W^{[L]}}dJb[L]dJ_{b^{[L]}}是不會再變的。同理,對於任意變量VVdJVdJ_{V}表示JJVV的微分項。

從第ll層到第l1l-1層:
假設第ll層的梯度已得出,即已知JW[l]\frac{\partial J}{\partial W^{[l]}}Jb[l]\frac{\partial J}{\partial b^{[l]}}JA[l1]\frac{\partial J}{\partial A^{[l-1]}},則通過JA[l1]\frac{\partial J}{\partial A^{[l-1]}}可以計算第l1l-1層的梯度:dA[l1]=dG[l1](Z[l1])=[dg[l1](z[l1](1))dg[l1](z[l1](m))]=[g[l1]z[l1](1)Tdz[l1](1)g[l1]z[l1](m)Tdz[l1](m)]\begin{aligned}dA^{[l-1]}&=dG^{[l-1]}(Z^{[l-1]})\\&=\begin{bmatrix}dg^{[l-1]}(z^{[l-1](1)})&\cdots&dg^{[l-1]}(z^{[l-1](m)})\end{bmatrix}\\&=\begin{bmatrix}\frac{\partial g^{[l-1]}}{\partial z^{[l-1](1)^T}}dz^{[l-1](1)}&\cdots&\frac{\partial g^{[l-1]}}{\partial z^{[l-1](m)^T}}dz^{[l-1](m)}\end{bmatrix}\end{aligned}dJA[l1]=tr((JA[l1])TdA[l1])=tr([(JA[l1])Tg[l1]z[l1](1)Tdz[l1](1)(JA[l1])Tg[l1]z[l1](m)Tdz[l1](m)])=tr((B[l1])TdZ[l1])\begin{aligned}dJ_{A^{[l-1]}}&=tr((\frac{\partial J}{\partial A^{[l-1]}})^TdA^{[l-1]})\\&=tr(\begin{bmatrix}(\frac{\partial J}{\partial A^{[l-1]}})^T\frac{\partial g^{[l-1]}}{\partial z^{[l-1](1)^T}}dz^{[l-1](1)}&\cdots&(\frac{\partial J}{\partial A^{[l-1]}})^T\frac{\partial g^{[l-1]}}{\partial z^{[l-1](m)^T}}dz^{[l-1](m)}\end{bmatrix})\\&=tr((B^{[l-1]})^TdZ^{[l-1]})\end{aligned}其中B[l1]=[(g[l1]Tz[l1](1)JA[l1])1(g[l1]Tz[l1](m)JA[l1])m]B^{[l-1]}=\begin{bmatrix}(\frac{\partial g^{[l-1]^T}}{\partial z^{[l-1](1)}}\frac{\partial J}{\partial A^{[l-1]}})_1&\cdots&(\frac{\partial g^{[l-1]^T}}{\partial z^{[l-1](m)}}\frac{\partial J}{\partial A^{[l-1]}})_m\end{bmatrix}故由微分與梯度矩陣的關係得JZ[l1]=B[l1]\frac{\partial J}{\partial Z^{[l-1]}}=B^{[l-1]}
實際上,大多激活函數都是逐元素函數(例如sigmoid,tanh,relu等等),此時G[l1]G^{[l-1]}也是一個逐元素函數,故dA[l1]=dG[l1](Z[l1])=G[l1](Z[l1])dZ[l1]dA^{[l-1]}=dG^{[l-1]}(Z^{[l-1]})=G^{[l-1]'}(Z^{[l-1]})\odot dZ^{[l-1]}dJA[l1]=tr((JA[l1])TdA[l1])=tr((JA[l1])T(G[l1](Z[l1])dZ[l1]))=tr((JA[l1]G[l1](Z[l1]))TdZ[l1]))\begin{aligned}dJ_{A^{[l-1]}}&=tr((\frac{\partial J}{\partial A^{[l-1]}})^TdA^{[l-1]})\\&=tr((\frac{\partial J}{\partial A^{[l-1]}})^T(G^{[l-1]'}(Z^{[l-1]})\odot dZ^{[l-1]}))\\&=tr((\frac{\partial J}{\partial A^{[l-1]}}\odot G^{[l-1]'}(Z^{[l-1]}))^TdZ^{[l-1]}))\end{aligned}故由微分與梯度矩陣的關係得JZ[l1]=JA[l1]G[l1](Z[l1])\frac{\partial J}{\partial Z^{[l-1]}}=\frac{\partial J}{\partial A^{[l-1]}}\odot G^{[l-1]'}(Z^{[l-1]})。得到了JZ[l1]\frac{\partial J}{\partial Z^{[l-1]}}後,計算代價函數對第l1l-1層的參數W[l1],b[l1]W^{[l-1]},b^{[l-1]}的梯度的方法與輸出層是相同的,故不再贅述。


循環神經網絡的反向傳播(待補充)

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