矩陣論專欄:專欄(文章按照順序排序)
做機器學習的幾乎避免不了矩陣求導,尤其是神經網絡方面的,反向傳播算法說白了就是在做矩陣求導,拿到代價函數對模型中每個參數矩陣的導數,才能找到一個下降方向,進而更新這些參數來降低損失。雖然實際編程時大可不必考慮這些繁瑣的數學計算,但是要真正理解凸優化中的一些方法,掌握這個基本的數學工具還是有必要的。
【1】下面的探討均在實數域內進行。
【2】雖然Rn定義爲實數域R中的n個數組成的有序數組(x1,x2,...,xn)的集合,但當我們討論Rn中向量時,總是約定它是列向量的形式,即總是一個n×1矩陣。這樣更符合一般的習慣,比如線性方程組的表達:Ax=b,A∈Rm×n,x∈Rn,b∈Rm。
【3】我們討論三種情形。向量對向量求導、矩陣對標量求導、標量對矩陣求導。標量對標量求導、標量對向量求導、向量對標量求導都可以看作是向量對向量求導的特例,而向量對矩陣求導、矩陣對向量求導和矩陣對矩陣求導涉及到高階張量的運算,可以通過把矩陣向量化,從而把高階運算用低階運算代替。這樣的方法需要向量化運算vec和kronecker積的基礎,本篇博客不引入這兩個概念,後面的博客探討矩陣函數的微分時再引入。
【4】符號∂x∂y表示偏導,本文爲表示方便,用∂x∂y(a)表示在點a處的偏導的值(原本的表示應爲∂x∂y∣x=a或∂x∂f(x)∣x=a)
- 矩陣微分與矩陣求導
- 佈局約定
- 向量對向量求導
- 可微與可導的關係
- 複合函數的鏈式求導法則
- 微分的形式不變性
- 例子
- 矩陣對標量求導
- 標量對矩陣求導
- 應用
- 線性迴歸問題的最小二乘解
- 多層前饋網絡(BP網絡)的反向傳播
- 循環神經網絡(RNN)的反向傳播
矩陣微分與矩陣求導
佈局約定
詳細請見數學-矩陣計算(4)兩種佈局。在本文中,多數情況下采用分子佈局。分子佈局和分母佈局實際上無需刻意區分,只要兩種佈局採用不同的符號就可以了。然而,有時候有些作者對分子佈局和分母佈局採用相同的符號,這時候就必須事先知道作者採用的是什麼樣的佈局,才能確定該符號表達的佈局是怎樣的。例如,設有m維向量y和n維向量x,∂x∂y如果採用的是分子佈局,則是m×n矩陣,而如果採用的是分母佈局,則是n×m矩陣。在本文中,我們通過符號來區分分子佈局和分母佈局(實際上,有了符號的約定以後,可以拋卻這兩個概念不談)。
首先,正如文章開頭所提,我們默認一個未顯式指出究竟是行還是列的向量爲列的形式,即任取x∈Rn,我們默認x是列向量。接下來,導數的佈局通過微商符號的分子和分母的形式推定。以向量對向量的偏導爲例,∂xT∂y分子上(即y)是列向量,分母上(即xT)是行向量,則在該矩陣的佈局中,y的分量y1,y2,...,ym是按列排布的,x的分量x1,x2,...,xn是按行排布的(這裏真不知道怎麼表達纔好,實際上我是想說∂y1,∂y2,...∂ym這樣的順序總是出現在矩陣的一列上,∂x1,∂x2,...∂xn總是出現在矩陣的一行上),即∂xT∂y=⎣⎢⎢⎢⎡∂x1∂y1∂x1∂y2...∂x1∂ym∂x2∂y1∂x2∂y2...∂x2∂ym............∂xn∂y1∂xn∂y2...∂xn∂ym⎦⎥⎥⎥⎤
這就是所謂的分子佈局。而∂x∂yT=⎣⎢⎢⎢⎡∂x1∂y1∂x2∂y1...∂xn∂y1∂x1∂y2∂x2∂y2...∂xn∂y2............∂x1∂ym∂x2∂ym...∂xn∂ym⎦⎥⎥⎥⎤就是所謂的分母佈局。這兩種佈局間的關係是∂x∂yT=(∂xT∂y)T。總結一下就是,我們可以通過符號推定導數的佈局是什麼樣的,在符號(微商)中,一個向量本來是什麼形式,它在導數中就是怎樣的排布,矩陣也同理。例如設有標量x∈R和矩陣Y=[Yij]∈Rm×n,則∂Y∂x=⎣⎢⎢⎡∂Y11∂x∂Y21∂x...∂Ym1∂x∂Y12∂x∂Y22∂x...∂Ym2∂x............∂Y1n∂x∂Y2n∂x...∂Ymn∂x⎦⎥⎥⎤而∂YT∂x=⎣⎢⎢⎡∂Y11∂x∂Y12∂x...∂Y1n∂x∂Y21∂x∂Y22∂x...∂Y2n∂x............∂Ym1∂x∂Ym2∂x...∂Ymn∂x⎦⎥⎥⎤
向量對向量求導
在談求導前,有必要談一下微分的概念。一方面在後面可以看到可微是比可導更強的概念,在可微的條件下運用一階微分的形式不變性可以簡化複合函數的求導運算;另一方面,凸優化中的很多結論都是以可微爲前提的,僅僅可導是遠遠不夠的。
可微的定義:
- 定義1:設c∈Rn,函數f:D→Rm在c的某個半徑爲r>0的鄰域U(c)內有定義。若存在矩陣A∈Rm×n,使得對於任意的u∈U˚(0)(0∈Rn是零向量,去心鄰域U˚(0)的半徑爲r)有如下關係成立:f(c+u)−f(c)=Au+ο(∣∣u∣∣2),其中ο(∣∣u∣∣2)是當u→0時的一個高階無窮小,則稱f在點c處是可微的,稱u的線性函數Au(又叫f在點c處的線性主部)爲f在點c處的微分,記作df(c)=Au,並稱A是f在點c處的一階導數矩陣,簡稱一階導數。
【注1】“f在c的某個半徑爲r>0的鄰域U(c)內有定義”中“某個”的意思是指存在一個鄰域U(c),它在f的定義域內
【注2】當點c給定後,A就是一個常矩陣,即要求A與u是無關的,A可以看做是c的函數A(c)
【注3】微分的基本思想是將非線性函數局部線性化。f(c+u)−f(c)可以看做是f在點c處,自變量改變量爲u時的函數值改變量(因變量改變量),若忽略高階無窮小項ο(∣∣u∣∣2)則得到f(c+u)−f(c)=Au,即在點c的某個鄰域內(即“局部”的意思)將f用一個線性函數Au替代
【注4】符號df(c)直觀上可以理解爲f在點c處的一個微小改變量,相應地u則是f的自變量的一個微小改變量,常記作dc,故微分的式子可以寫作df(c)=Adc(爲什麼自變量的改變量要採用微分符號d,實際上後面證明了一階微分的形式不變性後就知道了)
【注5】高階無窮小ο(∣∣u∣∣2)在u=0處是無定義的,常補充定義ο(0)=0,這樣定義中的關係式無論u是否爲零都成立
可微是比可導更強的概念,我們在說一個多元向量值函數可導時,往往是指它的每個分量對自變量的每個分量的偏導都存在。再嚴格一點的,就是指函數的每個分量對自變量的任意方向導數都存在。可微一定可導,可導不一定可微(在一元數量值函數的情形下,這個結論退化成可微與可導等價)。下面給出偏導的概念並證明可微與可導間的關係。
偏導的定義:
- 定義2:設c∈Rn,函數f:D→Rm在c的某個半徑爲r>0的鄰域U(c)內有定義。設0=t<r,稱極限(若存在的話)t→0limtfi(c+tej)−fi(c)(其中ej是第j個標準向量,其第j個分量爲1,其他分量爲零)爲f的分量fi在點c處對自變量x∈Rn的第j個分量的偏導,記作∂xj∂fi(c)。
- 定義3(Jacobian矩陣):函數f:D→Rm(D⊆Rn)在點c處對自變量x的Jacobian矩陣定義如下∂xT∂f(c)=⎣⎢⎢⎢⎡∂x1∂f1(c)∂x1∂f2(c)...∂x1∂fm(c)∂x2∂f1(c)∂x2∂f2(c)...∂x2∂fm(c)............∂xn∂f1(c)∂xn∂f2(c)...∂xn∂fm(c)⎦⎥⎥⎥⎤
【注1】當f是數量值函數時,Jacobian矩陣退化爲一維行向量,即f的梯度的轉置(梯度常常寫作列向量);需要注意的是,Jacobian矩陣的第i行就是f的第i個分量fi的梯度的轉置;當f是一元數量值函數時,Jacobian矩陣退化爲一元情形下的導數的概念。
【注2】需要區分Jacobian矩陣和梯度矩陣的概念:梯度矩陣是Jacobian矩陣的轉置
可微與可導間的關係:
- 定理1:設c∈Rn,若f在點c處可微,則f在c處的Jacobian矩陣存在,且導數矩陣A(c)=∂xT∂f(c)。
證明:
根據可微的定義,存在r>0,對任意u滿足0<∣∣u∣∣2<r,有f(c+u)−f(c)=A(c)u+ο(∣∣u∣∣2),故u→0lim∣∣u∣∣2f(c+u)−f(c)−A(c)u=0令u=tej,t<r,則t→0limtf(c+tej)−f(c)−tA(c)ej=0故對任意i=1,2,...,m及j=1,2,...,n有∂xj∂fi∣c=t→0limtfi(c+tej)−fi(c)=eiTA(c)ej=aij其中aij是導數矩陣A(c)的(i,j)元素。得證。
這個定理告訴我們,可微一定可導,且導數矩陣就是Jacobian矩陣。可導不一定可微,有很多反例,這裏不再列舉。反向傳播算法是以複合函數鏈式求導法則爲基礎的,實際上,鏈導法是複合函數微分法則的一個附帶結果,下面給出複合函數微分法則,並導出複合函數的鏈導法則。
- 定理2:若函數f:Df→Rm(Df⊆Rn)在點a處可微,函數g:Dg→Rr(Dg⊇R(f))在點b=f(a)處可微,則複合函數g∘f在點a處可微,且dg(f(a))=B(b)A(a)da,其中B(b)是g在點b處的導數,A(a)是f在點a處的導數
證明:(下面涉及到的所有高階無窮小都在點0處補充定義ο(0)=0)
由可微的定義,存在半徑爲r1>0的鄰域U(a),使得任意∣∣u∣∣2<r1有f(a+u)−f(a)=A(a)u+ο1(∣∣u∣∣2)(1)存在半徑爲r2>0的鄰域U(b),其中b=f(a),使得任意∣∣v∣∣2<r2有g(b+v)−g(b)=B(b)v+ο2(∣∣v∣∣2)(2)令Δf=f(a+u)−f(a),令(1)式兩端u→0得到Δf→0,故∣∣Δf∣∣2→0,由極限的定義知存在r3>0使得任意∣∣u∣∣2<r3有∣∣Δf∣∣2<r2。由(2)知可將v=Δf代入,得g(b+Δf)−g(b)=B(b)Δf+ο2(∣∣Δf∣∣2),即g(f(a+u))−g(f(a))=B(b)A(a)u+α對任意∣∣u∣∣2<min{r1,r3}成立,其中α=B(b)ο1(∣∣u∣∣2)+ο2(∣∣Δf∣∣2)。要證明g∘f在點a處可微,只需證明limu→0∣∣u∣∣2α=0即可。由於limu→0B(b)∣∣u∣∣2ο1(∣∣u∣∣2)=0,故只需證明limu→0∣∣u∣∣2ο2(∣∣Δf∣∣2)=0。引入函數Q(u)={∣∣Δf∣∣2ο2(∣∣Δf∣∣2)0Δf=0Δf=0,其中∣∣u∣∣2<min{r1,r3},可以證明當u→0時Q(u)→0,此處略去,證明見註釋。由於∣∣u∣∣2ο2(∣∣Δf∣∣2)=Q(u)∣∣u∣∣2∣∣Δf∣∣2,∣∣u∣∣2∣∣Δf∣∣2⩽∣∣u∣∣2∣∣A(a)u∣∣2+∣∣u∣∣2∣∣ο1(∣∣u∣∣2)∣∣2,由矩陣不等式A(a)TA(a)⩽λ(a)I,其中λ(a)是A(a)TA(a)的最大特徵值,得到∣∣u∣∣2∣∣A(a)u∣∣2⩽λ(a),又由limu→0∣∣u∣∣2∣∣ο1(∣∣u∣∣2)∣∣2=0,得到∣∣u∣∣2∣∣ο1(∣∣u∣∣2)∣∣2是局部有界的,故∣∣u∣∣2∣∣Δf∣∣2是局部有界的。綜上有limu→0∣∣u∣∣2ο2(∣∣Δf∣∣2)=0,證畢。
【注1】矩陣不等式見矩陣的正定性
【注2】limu→0Q(u)=0的證明:
利用limu→0Δf=0以及limv→0∣∣v∣∣2ο2(∣∣v∣∣2)=0這兩個條件即可。∀ϵ>0,∃δ>0,∀v滿足0<∣∣v∣∣2<δ都有∣∣∣∣v∣∣2ο2(∣∣v∣∣2)∣∣2<ϵ,∃δ1>0,∀u滿足0<∣∣u∣∣2<δ1都有∣∣Δf∣∣2<δ,故由如下結論:∀ϵ>0,∃δ1>0,∀u滿足0<∣∣u∣∣2<δ1,若Δf=0,則∣∣Q(u)∣∣2=0<ϵ,若0<∣∣Δf∣∣2<δ,則∣∣Q(u)∣∣2=∣∣∣∣Δf∣∣2ο2(∣∣Δf∣∣2)∣∣2<ϵ,即無論∣∣Δf∣∣2是否爲零都有∣∣Q(u)∣∣2<ϵ,故limu→0Q(u)=0。
下面由複合函數的微分法則導出複合函數的鏈式求導法則:
- 推論:若函數y=f(x)(Df⊆Rn,y∈Rm)在點a處可微,函數z=g(y)(Dg⊇R(f),z∈Rr)在點b=f(a)處可微,則複合函數g∘f在點a處可微,且其在點a處的導數∂xT∂z(a)=∂yT∂z(b)∂xT∂y(a)
通過一階微分的形式不變性,我們可以通過求微分來計算複合函數的導數,這在很多情況下是有用的,例如,在矩陣求導中通過計算微分,可以一次性得到多個參變量矩陣的導數。下面給出一階微分的形式不變性:
- 一階微分的形式不變性:
設函數f:Df→Rm(Df⊆Rn)在點a處可微,其微分爲df(a)=A(a)da,函數g:Dg→Rr(Dg⊇R(f))在點b=f(a)處可微,其微分爲dg(b)=B(b)db,則由複合函數的微分法則知,函數g∘f在點a處的微分爲dg(f(a))=B(b)A(a)da。注意到df(a)=A(a)da,於是dg(f(a))=B(b)A(a)da=B(b)df(a),即dg(b)=B(b)db,這恰好就是g在b處的微分的形式。這說明無論函數g的變量是自變量還是中間變量,其微分形式就和g只有自變量時一樣(這裏可以這樣理解:給定一個函數,其微分是一個線性函數,即一個線性映射,即使該函數與其他函數複合,這並不影響該函數本身的微分這個線性映射)。
【注】一階微分的形式不變性說明了爲什麼自變量的微小增量也用微分符號d表示:df(a)=A(a)da中,da既能表示f在a處的微分這個線性函數的自變量(這是人爲規定的),又能表示把f的自變量當成因變量(中間變量),其取值爲a時的微小增量(這是由形式不變性決定的)。
對於函數有多個自變量的情況,例如y=f(x1,x2,...,xn),其中x1,x2,...,xn分別是m1,m2,...,mn維向量,實際上可以看成只有一個自變量x,其中x=(x1T,x2T,...,xnT)T∈R∑i=1nmi,f的微分的定義仍適用。實際上,可以把f的微分的定義等價地拆開寫成=f(x1+u1,x2+u2,...,xn+un)−f(x1,x2,...,xn)A1u1+A2u2+...+Anun+ο(∣∣u1∣∣22+∣∣u2∣∣22+...+∣∣un∣∣22)相應地微分寫成dy=A1dx1+A2dx2+...+Andxn=Adx,其中Ai是y對xi的導數,A=[A1A2...An],dx=(dx1T,dx2T,...,dxnT)T。
對於函數有多箇中間變量的情況,複合函數的微分法則與一階微分的形式不變性仍適用。例如z=g(y1,y2,...,ym),yi=fi(x1,x2,...,xn),若f1,f2,...,fm都在點x0=(c1T,c2T,..,cnT)T可微,g在點(f1T(x0),f2T(x0),...,fmT(x0))T可微,那麼複合函數z=g(f1(x),f2(x),...,fm(x)),x=(x1T,x2T,..,xnT)T是否在點x0可微呢?答案是肯定的,有如下定理保證:
- 定理3:函數f:Df→Rm(Df⊆Rn)在點a處可微的充要條件爲f的每個分量都在點a處可微(證明略)
【注】比較f的微分df和分量fi的微分dfi可知,df=(df1,df2,...,dfm)T
對於上述情形,利用該定理可知fi的任意分量都在x0可微(i=1,2,..,m),再利用該定理知f=(f1T,f2T,...,fmT)T在x0可微,於是由複合函數微分法則得到上述結論。由於多箇中間變量可以看成只有一箇中間變量,故一階微分的形式不變性仍成立。
例1:設z=f(x,y)=xTAy,x∈Rm,y∈Rn,求∂x∂z和∂y∂z。
法1:根據梯度矩陣(梯度)的定義
∂x∂z=⎣⎢⎡∂x1∂z⋮∂xm∂z⎦⎥⎤=⎣⎢⎢⎡∂x1∂∑iaiyxi⋮∂xm∂∑iaiyxi⎦⎥⎥⎤=⎣⎢⎡a1y⋮amy⎦⎥⎤=Ay式中ai是矩陣A的第i行。同理可得∂y∂z=ATx。
法2:利用一階微分的形式不變性
根據一階微分的形式不變性容易證明以下幾個微分公式:
- d(xTy)=yTdx+xTdy
- d(Ax)=Adx
所以d(xTAy)=(Ay)Tdx+xTd(Ay)=(Ay)Tdx+xTAdy=(Ay)Tdx+(ATx)Tdy,由微分與導數的關係和梯度與導數的關係得∂x∂z=Ay和∂y∂z=ATx。
例2:設z=f(x,y)=(Ax)⊙(By),x∈Rm,y∈Rn,z∈Rt,求∂xT∂z和∂yT∂z
【注】⊙是Hardamard積,即逐元素乘積
法1:根據Jacobian矩陣(導數)的定義
∂xT∂z=⎣⎢⎡∂x1∂z1⋮∂x1∂zt⋯⋱⋯∂xm∂z1⋮∂xm∂zt⎦⎥⎤=⎣⎢⎢⎡∂x1∂(a1x)(b1y)⋮∂x1∂(atx)(bty)⋯⋱⋯∂xm∂(a1x)(b1y)⋮∂xm∂(atx)(bty)⎦⎥⎥⎤=⎣⎢⎡a11(b1y)⋮at1(bty)⋯⋱⋯a1m(b1y)⋮atm(bty)⎦⎥⎤=diag(By)A其中ai,bi分別是A,B的第i行。同理可得∂yT∂z=diag(Ax)B。
法2:利用一階微分的形式不變性
根據一階微分的形式不變性可以證明如下微分公式:
- d(x⊙y)=y⊙dx+x⊙dy=diag(y)dx+diag(x)dy
所以dz=(By)⊙d(Ax)+(Ax)⊙d(By)=(By)⊙(Adx)+(Ax)⊙(Bdy)=diag(By)Adx+diag(Ax)Bdy,故由微分與導數的關係得∂xT∂z=diag(By)A和∂yT∂z=diag(Ax)B。
矩陣對標量求導
矩陣對標量求導用的不多,只簡單提一下。
仿照定義1,我們可以寫出以標量爲自變量的矩陣函數的微分的定義,但由定理3啓發,我們可以給出一個等價的定義:
-
定義4:若矩陣函數A(t)的每個元素aij(t)在點t0∈R處可微,則稱A(t)在t0處可微,且其在該點的導數爲∂t∂A(t0)=⎣⎢⎡∂t∂a11(t0)⋮∂t∂am1(t0)⋯⋱⋯∂t∂a1n(t0)⋮∂t∂amn(t0)⎦⎥⎤
【注】A(t)在t0處的微分寫作dA(t0)=(dt0)∂t∂A(t0)
-
定理4(鏈式法則):設A=A(α)在α=α0處可微,標量α(t)在t0處可微,α0=α(t0),則A(α(t))在t0可微,且∂t∂A∘α(t0)=∂t∂α(t0)∂t∂A(α(t0))。
矩陣對標量求導有一些簡單的公式,在此作爲例子:
設A(t),B(t)在t0處可微,則有
- 若A,B可加,則∂t∂(A+B)(t0)=∂t∂A(t0)+∂t∂B(t0)
- 若A,B可乘,則∂t∂AB(t0)=∂t∂A(t0)B(t0)+A(t0)∂t∂B(t0)
- 設標量函數α(t)在t0處可微,則∂t∂αA(t0)=∂t∂α(t0)B(t0)+α(t0)∂t∂B(t0)
標量對矩陣求導
這部分內容纔是機器學習中需要用到的矩陣微分的核心內容。神經網絡往往以一個標量值的代價函數作爲優化目標,網絡參數往往是矩陣形式的,前向傳播的過程可以視爲計算一個以多個矩陣爲自變量的複合函數的值,反向傳播的過程可以視爲運用鏈式法則(或複合函數的微分法則)計算該標量函數對各個矩陣參數的導數。
鑑於以(多個)矩陣爲自變量的標量函數本質上是多元數量值函數,我們先研究多元數量值函數的微分和導數的定義,然後將它們推廣。由於多元數量值函數的微分可以視作多元向量值函數的微分的特例,因此在定義1中令m=1,就得到了多元數量值函數微分的概念:
- 定義5:設c∈Rn,函數f:D→R在c的某個半徑爲r>0的鄰域U(c)內有定義。若存在向量a∈Rn,使得對於任意的u∈U˚(0)(0∈Rn是零向量,去心鄰域U˚(0)的半徑爲r)有如下關係成立:f(c+u)−f(c)=aTu+ο(∣∣u∣∣2)=i∑aiui+ο(i∑ui2),其中ο(∣∣u∣∣2)是當u→0時的一個高階無窮小,則稱f在點c處是可微的,稱u的線性函數aTu爲f在點c處的微分,記作df(c)=aTu,並稱a是f在點c處的梯度向量,簡稱梯度。
注意到微分的本質是把函數局部線性化,得到函數在某一點的鄰域內的線性主部,故很容易將定義5推廣到以矩陣爲自變量的標量函數的情形:
- 定義6:設(aij)m×n=A∈Rm×n,存在r>0,數量值函數y=f(X)當∣∣X−A∣∣F<r時有定義。若存在(bij)m×n=B∈Rm×n,使得對於任意的(uij)m×n=U∈Rm×n滿足0<∣∣U∣∣F<r有如下關係成立:f(A+U)−f(A)=ij∑bijuij+ο(ij∑uij2)=tr(BTU)+ο(∣∣U∣∣F),則稱f在點A處是可微的,稱U的m×n個元素的線性函數tr(BTU)爲f在點A處的微分,記作df(A)=tr(BTU),並稱B是f在點A處的梯度矩陣,簡稱梯度。U是自變量在A處的增量,常記作U=dA,即df(A)=tr(BTdA)
【注】tr(∙)是指矩陣的跡;∣∣∙∣∣F是指矩陣的Frobenius範數,當矩陣爲行向量或列向量時,∣∣∙∣∣F就是向量的Frobenius範數,即2範數,矩陣範數的內容見矩陣的條件數
用類似定理1的證明方法,可以證明B=∂X∂f(A)=(∂xij∂f(A))m×n即梯度矩陣與f對X的偏導相等(需要注意的是,以矩陣爲自變量的實值函數也有Jacobian矩陣的定義,Jacobian矩陣是梯度矩陣的轉置)
利用該結論可以證明如下微分公式:
- d∣X∣=tr(X∗dX),其中∣X∣是方陣X(階數大於等於2)的行列式,X∗是X的伴隨矩陣
證:
由行列式的定義,∣X∣=∑jxijAij對任意i=1,2,...,n成立,其中Aij是xij的代數餘子式(注意xij不是Aij的自變量,即Aij的取值與xij無關),則∂xij∂∣X∣=Aij,故∂X∂∣X∣=(X∗)T,d∣X∣=tr(X∗dX)
還可以證明如下導數公式:
設f(X),g(X)是以矩陣X爲自變量的數量值函數,若f和g在A處可微,則f(X)g(X),f(X)+g(X)在A處可微,且:
- ∂X∂f(X)g(X)=∂X∂f(X)g(X)+f(X)∂X∂g(X)
- ∂X∂f(X)±g(X)=∂X∂f(X)±∂X∂g(X)
現在我們依次考慮兩種複合函數的情形:
- 內層函數是以矩陣爲自變量的數量值函數,外層函數是一元數量值函數
- 內層函數是以矩陣爲自變量的矩陣值函數(稱爲矩陣函數),外層函數是以矩陣爲自變量的數量值函數
第一種情形:
- 定理5:設y=f(X),y∈R,X∈Rm×n在點A處可微,z=g(y),z∈R,y∈R在點b=f(A)處可微,則z=g(f(X))在點A處可微,且在點A處的微分爲dg(f(A))=tr((g′(b)∂X∂f(A))TdX)
證明思路與定理2是類似的,證明的關鍵在於limΔX→O∣∣ΔX∣∣Fο(∣Δy∣)=0,基本思路是改寫爲limΔX→O∣Δy∣ο(∣Δy∣)∣∣ΔX∣∣F∣Δy∣=0,證明limΔX→O∣Δy∣ο(∣Δy∣)=0且∣∣ΔX∣∣F∣Δy∣局部有界即可。利用絕對值不等式放縮,∣Δy∣⩽∣tr((∂X∂f(A))TΔX)∣+∣ο(∣∣ΔX)∣∣F)∣,∣∣ΔX∣∣F∣ο(∣∣ΔX)∣∣F)∣局部有界是顯然的,而∣∣ΔX∣∣F∣tr((∂X∂f(A))TΔX)∣⩽∑ij∣∣ΔX∣∣F∣(∂Xij∂f(Aij)∣∣ΔXij∣⩽∑ij∣(∂Xij∂f(Aij)∣,也是局部有界的。
第二種情形:
需要考慮矩陣函數的微分,下面給出矩陣函數的微分的定義。
這裏不引入向量化和kronecker積的運算,在定義6的基礎上仿照定義4的方式給出矩陣函數的微分的定義:
- 定義7:設有矩陣函數Y=F(X),X∈Rm×n,Y∈Rp×q,若F(X)的每個元素fij(X),i=1,2,...,p,j=1,2,...,q都在點A處可微,則稱F(X)在點A處可微,且點A處的微分爲dF(A)=⎣⎢⎡df11(A)⋮dfp1(A)...⋱⋯df1q(A)⋮dfpq(A)⎦⎥⎤該矩陣稱爲微分矩陣
複合矩陣函數的微分法則是成立的(從而微分的形式不變性也是成立的),但在不使用vec+kronecker計算的情況下應該是無法證明的,這個在後面的博客中再說(vec+kronecker可以參考數學-矩陣計算(2)矩陣函數微積分前奏)
下面考慮有多個矩陣自變量的情況:
- 定義8:設Ai∈Rmi×ni,i=1,2,...,k,存在r>0,數量值函數y=f(X1,X2,...,Xk),Xi∈Rmi×ni當∑i∣∣Xi−Ai∣∣F2<r時有定義。若存在Bi∈Rmi×ni,i=1,2,...,k,使得對於任意的Ui∈Rmi×ni,i=1,2,...,k滿足0<∑i∣∣Ui∣∣F2<r有如下關係成立:f(A1+U1,A2+U2,...,Ak+Uk)−f(A1,A2,...,Ak)=i∑tr(BiTUi)+ο(i∑∣∣Ui∣∣F2),則稱f在(A1,A2,...,Ak)處是可微的,記作df(A1,...Ak)=∑itr(BiTdAi)
可以證明定義中的Bi恰好是f對Xi在Ai處的偏導∂Xi∂f(Ai),微分形式不變性等仍成立,不再贅述。
下面根據定義7以及一階微分的形式不變性證明若干常用的微分矩陣的計算公式,前面的例子中出現的微分公式都可以視作下面的公式的特例:(以下設α∈R爲常數,β∈R爲變量,A=(aij)爲常矩陣,X=(xij),Y=(yij)爲變量,這三個矩陣的大小視公式中出現的運算而定)
- dA=O
證:
dA=⎣⎢⎡da11⋮dam1⋯⋱⋯da1n⋮damn⎦⎥⎤=O
- d(αX)=αdX
證:
d(αX)=⎣⎢⎡d(αx11)⋮d(αxm1)⋯⋱⋯d(αx1n)⋮d(αxmn)⎦⎥⎤=⎣⎢⎡αdx11⋮αdxm1⋯⋱⋯αdx1n⋮αdxmn⎦⎥⎤=αdX
- d(βX)=(dβ)X+βdX
證:
d(βX)=⎣⎢⎡d(βx11)⋮d(βxm1)⋯⋱⋯d(βx1n)⋮d(βxmn)⎦⎥⎤=⎣⎢⎡x11dβ+βdx11⋮xm1dβ+βdxm1⋯⋱⋯x1ndβ+βdx1n⋮xmndβ+βdxmn⎦⎥⎤=(dβ)X+βdX
- dXT=(dX)T
證:
dXT=⎣⎢⎡dx11⋮dx1n⋯⋱⋯dxm1⋮dxmn⎦⎥⎤=(dX)T
- dtr(X)=tr(dX)
證:
dtr(X)=d∑ixii=∑idxii=tr(dX)
- 設F是一個逐元素函數,即F(X)=⎣⎢⎡f(x11)⋮f(xm1)⋯⋱⋯f(x1n)⋮f(xmn)⎦⎥⎤,f:R→R,則dF(X)=F′(X)⊙dX,其中F′也是逐元素函數
證:
dF(X)=⎣⎢⎡df(x11)⋮df(xm1)⋯⋱⋯df(x1n)⋮df(xmn)⎦⎥⎤=⎣⎢⎡f′(x11)dx11⋮f′(xm1)dxm1⋯⋱⋯f′(x1n)dx1n⋮f′(xmn)dxmn⎦⎥⎤=F′(X)⊙dX
- d(X±Y)=dX±dY
證:
d(X±Y)=⎣⎢⎡d(x11±y11)⋮d(xm1±ym1)...⋱...d(x1n±y1n)⋮d(xmn±ymn)⎦⎥⎤=⎣⎢⎡dx11±dy11⋮dxm1±dym1...⋱...dx1n±dy1n⋮dxmn±dymn⎦⎥⎤=dX±dY
- d(XY)=(dX)Y+XdY
證:
由於(d(XY))ij=d∑kxikykj=∑k(ykjdxik+xikdykj)=((dX)Y)ij+(XdY)ij,故d(XY)=(dX)Y+XdY。
- d(X⊙Y)=dX⊙Y+X⊙dY
證:
由於(d(X⊙Y))ij=d(xijyij)=yijdxij+xijdyij=(dX⊙Y)ij+(X⊙dY)ij,故d(X⊙Y)=dX⊙Y+X⊙dY。
【注】⊙是逐元素乘積
- d(X⊘Y)=(dX⊙Y−X⊙dY)⊘(Y⊙Y)
證:
由於(d(X⊘Y))ij=dyijxij=yij2yijdxij−xijdyij=Zij,其中Z=(dX⊙Y−X⊙dY)⊘(Y⊙Y),故d(X⊘Y)=Z=(dX⊙Y−X⊙dY)⊘(Y⊙Y)。
【注】⊘是逐元素除法
上面的公式基本就夠用了,這些公式可以用來計算複合函數等複雜函數的微分矩陣,進而計算梯度矩陣/偏導矩陣。下面舉幾個微分矩陣和標量對矩陣求導的例子:(我們當然可以直接根據Jacobian矩陣或梯度矩陣的定義計算,但下面利用定義7/8+上面的微分公式+微分形式不變性來推導這些結果)
【注】關於矩陣的跡的運算律參考鏈接。
微分矩陣:
- dX−1=−X−1(dX)X−1
證:
對X−1X=I兩邊微分,得(dX−1)X+X−1dX=O,用X−1右乘式的兩端,得dX−1+X−1(dX)X−1=O,即dX−1=−X−1(dX)X−1。
- dln(X)=dX⊘X,其中ln(X)是將以e爲底的對數函數逐元素應用到矩陣X上
證:
dln(X)=(1⊘X)⊙dX=dX⊘X
- dσ(X)=σ(X)⊙σ(−X)⊙dX,其中σ(X)是將sigmoid函數逐元素應用到矩陣X上
【注】sigmoid函數是神經網絡中常用的激活函數,定義爲σ:R→R+,σ(z)=1+e−z1
證:
只需證明∀z∈R,σ′(z)=σ(z)σ(−z)。由sigmoid函數的定義得(1+e−z)σ(z)=1,兩端微分得−e−zσ(z)dz+(1+e−z)σ′(z)dz=0,故−e−zσ(z)+(1+e−z)σ′(z)=0,σ′(z)=1+e−ze−zσ(z)=1+ezσ(z)=σ(z)σ(−z)。
- dg(x)=(1Tex)21Texdiag(ex)−ex(ex)Tdx,其中g(x)=1Texex,x∈Rn,ex是將以e爲底的指數函數逐元素應用到向量x上
【注】這裏定義的函數g就是softmax函數,softmax函數是神經網絡中常用的激活函數,在分類問題中常用於輸出層得到概率分佈
證:
由g(x)=1Texex,x∈Rn得1Texg(x)=ex,兩端微分得1T(ex⊙dx)g(x)+1Texdg(x)=ex⊙dx,又因爲1T(ex⊙dx)=tr(1T(ex⊙dx))=tr((1⊙ex)Tdx)=(ex)Tdx,故dg(x)=1Texex⊙dx−(ex)Tdxg(x)=1Texdiag(ex)dx−g(x)(ex)Tdx=(1Tex)21Texdiag(ex)−ex(ex)Tdx。
梯度矩陣/Jacobian矩陣:
- ∂X∂tr(X)=I
證:
由dtr(X)=tr(dX)及定義7即證。
- ∂X∂tr(XTX)=2X
證:
由d(tr(XTX))=tr(d(XTX))=tr((dXT)X+XTdX)=tr((dX)TX)+tr(XTdX)=2tr(XTdX)及定義7即證。
- 設y=g(x),x,y∈Rn,其中g是softmax函數,則∂xT∂y=⎣⎢⎢⎡y1(1−y1)−y2y1⋯−yny1−y1y2y2(1−y2)⋯−yny2⋯⋯⋯⋯−y1yn−y2yn⋯yn(1−yn)⎦⎥⎥⎤
證:
利用dg(x)=(1Tex)21Texdiag(ex)−ex(ex)Tdx(這個例子也可以直接根據Jacobian矩陣的定義計算)。∂xT∂y=(1Tex)21Texdiag(ex)−ex(ex)T=(∑iexi)21(i∑exi⎣⎢⎢⎡ex1ex2⋯exn⎦⎥⎥⎤−⎣⎢⎢⎡ex1ex1ex2ex1⋯exnex1ex1ex2ex2ex2⋯exnex2⋯⋯⋯⋯ex1exnex2exn⋯exnexn⎦⎥⎥⎤)=⎣⎢⎢⎢⎡∑iexiex1(1−∑iexiex1)−∑iexiex2∑iexiex1⋯−∑iexiexn∑iexiex1−∑iexiex1∑iexiex2∑iexiex2(1−∑iexiex2)⋯−∑iexiexn∑iexiex2⋯⋯⋯⋯−∑iexiex1∑iexiexn−∑iexiex2∑iexiexn⋯∑iexiexn(1−∑iexiexn)⎦⎥⎥⎥⎤=⎣⎢⎢⎡y1(1−y1)−y2y1⋯−yny1−y1y2y2(1−y2)⋯−yny2⋯⋯⋯⋯−y1yn−y2yn⋯yn(1−yn)⎦⎥⎥⎤
應用
線性迴歸問題的最小二乘解
機器學習中的線性迴歸問題表述如下:
設有m個樣本s1,s2,...,sm(爲表示方便,假設si是行向量),每個樣本包含n個特徵(siT∈Rn),樣本的標籤分別是y1,y2,...,ym∈R。現要求得一線性模型yi=siθ+b對於任意i成立,其中θ∈Rn和b∈R是要求解的參數。該問題可寫成如下矩陣形式:設ai=[1si],A=⎣⎢⎢⎡a1a2...am⎦⎥⎥⎤(A稱爲設計矩陣),x=[bθ],y=⎣⎢⎢⎡y1y2...ym⎦⎥⎥⎤,求解參數向量x使得Ax=y。可見線性迴歸問題實質上就是求解一個線性方程組。
在前面的博客中,曾給出線性方程組最小二乘解的廣義逆解法和投影矩陣解法,並證明了這些方法的正確性。現在利用矩陣微分的方法解決這個問題:
根據最小二乘解的定義,我們要最小化f(x)=∣∣Ax−y∣∣2,這等價於最小化z=f(x)2=∣∣Ax−y∣∣22=(Ax−y)T(Ax−y)。dz=(Adx)T(Ax−y)+(Ax−y)TAdx=2(Ax−y)TAdx,得∂x∂z=2AT(Ax−y)。d∂x∂z=2ATAdx,故Hessian矩陣爲∂xT∂(∂x∂z)=2ATA,是對稱半正定的,故z是凸函數。令∂x∂z=0即得到全局最優解,得正規方程ATAx=ATy,這就證明了求最小二乘解等價於解正規方程。
L2正則化情形
正則化是一種提高模型泛化能力的技術,通過“權值衰減”的方式,緩解模型的過擬合問題。在線性迴歸中討論L2正則化,不僅是因爲這項技術能夠增強模型的泛化能力,還因爲對於線性迴歸問題來說,只要進行L2正則化,那麼最優解存在且唯一。
令S=⎣⎢⎢⎡s1s2...sm⎦⎥⎥⎤,P=[00n×101×nIn],則A=[1m×1S],θ=Px。加入正則化項λ∣∣θ∣∣22,λ>0後,我們要優化的函數爲f(x)=∣∣Ax−y∣∣22+λ∣∣θ∣∣22=∣∣Ax−y∣∣22+λ∣∣Px∣∣22對該式微分得21df=(Ax−y)TAdx+λxTPTPdx=(Ax−y)TAdx+λxTPdx於是21∂x∂f=AT(Ax−y)+λPTx=AT(Ax−y)+λPx再求一次微分可得Hessian矩陣,易驗證其爲對稱半正定的,於是帶有L2正則化的線性迴歸仍是凸優化問題。令∂x∂f=0得如下方程(ATA+λP)x=ATy只要ATA+λP可逆,則方程的解存在且唯一。爲此,我們證明如下結論:
- 定理:ATA+λP是對稱正定矩陣
證明:
對稱性易證。現證明正定性:由A=[1m×1S]及P=[00n×101×nIn]知ATA=[mST1m×11m×1TSSTS]ATA+λP=[mST1m×11m×1TSSTS+λIn]任意0=z∈Rn+1,zTATAz=(Az)T(Az)=∣∣Az∣∣22⩾0(即ATA是對稱半正定的),令z=(z1,z˜T),其中z˜∈Rn,則zTATAz=zT[mST1m×11m×1TSSTS]z=mz12+2(z˜TST1m×1)z1+z˜TSTSz˜⩾0zT(ATA+λP)z=zT[mST1m×11m×1TSSTS+λIn]z=mz12+2(z˜TST1m×1)z1+z˜TSTSz˜+λ∣∣z˜∣∣22=zTATAz+λ∣∣z˜∣∣22當z˜=0時,由z=0知z1=0,zT(ATA+λP)z=mz12>0;當z˜=0時,λ∣∣z˜∣∣22>0,故zT(ATA+λP)z=zTATAz+λ∣∣z˜∣∣22>0。
綜上,只要z=0就有zT(ATA+λP)z>0,故ATA+λP是對稱正定矩陣。
因爲ATA+λP是對稱正定矩陣,故ATA+λP一定可逆。這就證明了f(x)的最優解存在且唯一,且爲x=(ATA+λP)−1ATy。
多層前饋網絡的反向傳播
多層前饋網絡又稱多層感知機或BP網絡,是迴歸問題/分類問題中常用的模型。
在推導反向傳播前,先看一下前向傳播是怎麼進行的。
單樣本:
設a[l]∈Rnl是神經網絡中第l層的激勵值,其中nl是第l層的神經元個數,g[l]是第l層的激活函數,W[l]和b[l]是第l層的參數。設輸入層是第0層,即對於樣本x∈Rn0,有a[0]=x,n0即該樣本的特徵數量。輸出層是第L層,即對於樣本x,網絡的預測值y^=a[L]∈RnL。則前向傳播的過程形式化如下:
依次對l=1,2,...,L計算下式:z[l]=W[l]a[l−1]+b[l]a[l]=g[l](z[l])得到神經網絡的預測值y^=a[L]後,計算損失函數的值L(y^,y),其中y是樣本x的真實標籤。
多樣本:
設有m個樣本x(1),x(2),...,x(m)按列構成矩陣X,即X∈Rn0×m,它們的標籤y(1),y(2),...,y(m)按列構成矩陣Y,Y∈RnL×m(在分類問題中,樣本的標籤是one-hot向量,即目標概率分佈)。多樣本的情形實際上只是讓m個樣本同時前向傳播,神經網絡的參數和單樣本時是相同的。設A[l]=[a[l](1)a[l](2)⋯a[l](m)],其中a[l](i)∈Rnl是第l層第i個樣本的激勵值。多樣本情形下的前向傳播可形式化如下:
依次對l=1,2,...,L計算下式:Z[l]=W[l]A[l−1]+b[l]1m×1TA[l]=G[l](Z[l])函數G[l]:Rnl×m→Rnl×m滿足G[l](Z[l])=[g[l](z[l](1))g[l](z[l](2))⋯g[l](z[l](m))],其中g[l]是第l層的激活函數(實際上多數激活函數是逐元素函數(softmax等除外),此時G[l]與g[l]可以統一定義爲一個以矩陣爲自變量的逐元素函數,不需要區分開)。神經網絡的預測值爲A[L]=Y^=[y^(1)y^(2)⋯y^(m)],其中y^(i)=g[L](z[L](i)),損失函數J(Y^,Y)的值一般取每個樣本的損失函數值的平均值,即J(Y^,Y)=m1i∑L(y^(i),y(i))
常用的損失函數:
對於迴歸問題,常用均方誤差函數MSE:L(y^,y)=∣∣y^−y∣∣22容易推導出對於多樣本的情形有J(Y^,Y)=m1∣∣Y^−Y∣∣F2對於分類問題,常用交叉熵代價函數CrossEntropyLoss:
如果輸出層的激勵函數採用sigmoid函數的話,則L(y^,y)=−i=1∑nL(yilny^i+(1−yi)ln(1−y^i))=−(yTlny^+(1−y)Tln(1−y^))容易推導出對於多樣本的情形有J(Y^,Y)=−m1tr(YTlnY^+(1−Y)Tln(1−Y^))如果輸出層的激勵函數採用softmax函數的話,則L(y^,y)=−i=1∑nLyilny^i=−yTlny^對於多樣本的情形有J(Y^,Y)=−m1tr(YTlnY^)
一句話總結,前向傳播就是在計算以多個矩陣爲自變量的非線性實值函數f(X,Y,Θ)=J(Y^,Y),其中Θ是神經網絡的參數組,包含神經網絡中的所有參數W[1],b[1],W[2],b[2],...,W[L],b[L](很多資料中前向傳播的概念是僅僅計算到輸出層的值就可以了,但由於反向傳播是從代價函數開始的,因此這裏我們把使用輸出層的值計算代價函數也視爲前向傳播的一部分)。由於計算過程是從輸入層到輸出層逐層傳遞的,因此稱爲“前向傳播”。
由凸優化的相關理論知,最小化代價函數需要找到函數的一個下降方向,而負梯度方向是一個自然存在的下降方向,因此需要一個算法求出代價函數對網絡的各個參數矩陣的梯度矩陣。反向傳播算法(BP)以複合函數的微分法則(或複合函數的鏈導法則)爲理論基礎,從輸出層(準確說是從代價函數)開始到輸入層,逐層求解代價函數對各層參數的梯度矩陣,從而得到代價函數的一個下降方向。
下面以分類問題爲例推導BP算法,輸出層激勵函數採用Softmax,代價函數採用交叉熵代價函數。由於單樣本的前向、反向傳播過程可以視爲多樣本情形的特例(即m=1),因此下面只推導多樣本情形:
一些前提結論(這些結論將在推導過程中直接使用):
- dg(x)⊘g(x)=dx−1n×1g(x)Tdx,x∈Rn,其中g是softmax函數
證:
由於dg(x)⊘g(x)=dlng(x),因此先計算lng(x)。lng(x)=ln1Texex=ln(ex⊘(1Tex1n×1))=lnex−ln(1Tex1n×1)=x−ln(1Tex1n×1)dlng(x)=dx−dln(1Tex1n×1)=dx−(1T(dex)1n×1)⊘(1Tex1n×1)=dx−1Tex1T(ex⊙dx)1n×1=dx−1Tex(ex)Tdx1n×1=dx−1n×1g(x)Tdx
- 設[a1a2⋯an]=A∈Rm×n,[b1b2⋯bn]=B∈Rm×n,則tr([a1Tb11n×1a2Tb21n×1⋯anTbn1n×1])=tr(ATB)
(它們的值都是∑ijaijbij)
- 在分類問題中有YT1nL×1=1m×1,其中Y∈RnL×m是m個樣本的標籤(one-hot形式)按列排成的矩陣,nL是網絡的輸出層的神經元數目,即類別數
(這是因爲概率分佈的總和是1,也可以從one-hot向量的格式看出來,one-hot向量只有一個分量是1,其他分量都是0)
- 前面提到過的一些微分公式
推導過程:
從代價函數開始到輸出層(輸出層激勵函數g[L]是softmax函數):
dJ=−m1tr(YTdlnY^)=−m1tr(YT(dY^⊘Y^))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)]−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((Y−Y^)TdZ[L])由微分和梯度矩陣的關係得∂Z[L]∂J=m1(Y^−Y),可見梯度矩陣的形式十分簡單。這就是機器學習框架(如Tensorflow和Pytorch)中CrossEntropyLoss的實現要把softmax集成到loss函數中的原因,因爲這樣的話在反向傳播時能節省大量不必要的運算,做個矩陣減法就是導數了(還有一點就是前向傳播時log和softmax結合也可以簡化運算)。
【注】當輸出層的激勵函數採用sigmoid函數,代價函數採用交叉熵代價函數時,反向傳播有類似的結果,感興趣的讀者可以自己試一下。
輸出層還沒算完:dZ[L]=(dW[L])A[L−1]+W[L]dA[L−1]+(db[L])1m×1TdJ=tr((∂Z[L]∂J)TdZ[L])=tr((∂Z[L]∂J)T(dW[L])A[L−1])+tr((∂Z[L]∂J)TW[L]dA[L−1])+tr((∂Z[L]∂J)T(db[L])1m×1T)=tr((∂Z[L]∂J(A[L−1])T)TdW[L])+tr(((W[L])T∂Z[L]∂J)TdA[L−1])+tr((∂Z[L]∂J1m×1)Tdb[L])故由微分與梯度矩陣的關係得∂W[L]∂J=∂Z[L]∂J(A[L−1])T,∂b[L]∂J=∂Z[L]∂J1m×1,∂A[L−1]∂J=(W[L])T∂Z[L]∂J。這就得到了代價函數對輸出層參數W[L],b[L]的梯度。通過將∂A[L−1]∂J保存下來,求導運算可以繼續傳播下去。爲了後面表示方便,我們把上面的微分式中的每一項用單個符號代替,即簡寫爲dJ=dJW[L]+dJA[L−1]+dJb[L],注意後面計算時只會把dJA[L−1]展開,dJW[L]和dJb[L]是不會再變的。同理,對於任意變量V,dJV表示J對V的微分項。
從第l層到第l−1層:
假設第l層的梯度已得出,即已知∂W[l]∂J,∂b[l]∂J,∂A[l−1]∂J,則通過∂A[l−1]∂J可以計算第l−1層的梯度:dA[l−1]=dG[l−1](Z[l−1])=[dg[l−1](z[l−1](1))⋯dg[l−1](z[l−1](m))]=[∂z[l−1](1)T∂g[l−1]dz[l−1](1)⋯∂z[l−1](m)T∂g[l−1]dz[l−1](m)]dJA[l−1]=tr((∂A[l−1]∂J)TdA[l−1])=tr([(∂A[l−1]∂J)T∂z[l−1](1)T∂g[l−1]dz[l−1](1)⋯(∂A[l−1]∂J)T∂z[l−1](m)T∂g[l−1]dz[l−1](m)])=tr((B[l−1])TdZ[l−1])其中B[l−1]=[(∂z[l−1](1)∂g[l−1]T∂A[l−1]∂J)1⋯(∂z[l−1](m)∂g[l−1]T∂A[l−1]∂J)m]故由微分與梯度矩陣的關係得∂Z[l−1]∂J=B[l−1]。
實際上,大多激活函數都是逐元素函數(例如sigmoid,tanh,relu等等),此時G[l−1]也是一個逐元素函數,故dA[l−1]=dG[l−1](Z[l−1])=G[l−1]′(Z[l−1])⊙dZ[l−1]dJA[l−1]=tr((∂A[l−1]∂J)TdA[l−1])=tr((∂A[l−1]∂J)T(G[l−1]′(Z[l−1])⊙dZ[l−1]))=tr((∂A[l−1]∂J⊙G[l−1]′(Z[l−1]))TdZ[l−1]))故由微分與梯度矩陣的關係得∂Z[l−1]∂J=∂A[l−1]∂J⊙G[l−1]′(Z[l−1])。得到了∂Z[l−1]∂J後,計算代價函數對第l−1層的參數W[l−1],b[l−1]的梯度的方法與輸出層是相同的,故不再贅述。
循環神經網絡的反向傳播(待補充)