深度學習之反向傳播算法


直觀理解反向傳播

反向傳播算法是用來求那個復雜到爆的梯度的。

上一集中提到一點,13000維的梯度向量是難以想象的。換個思路,梯度向量每一項的大小,是在說代價函數對每個參數有多敏感。

如上圖,我們可以這樣里理解,第一個權重對代價函數的影響是是第二個的32倍。

 

我們來考慮一個還沒有被訓練好的網絡。我們並不能直接改動這些激活值,只能改變權重和偏置值。但記住,我們想要輸出層出現怎樣的變動,還是有用的。


我們希望圖像的最后分類結果是2,我們期望第3個輸出值變大,其余輸出值變小,並且變動的大小應該與現在值和目標值之間的差成正比。舉個例子,增大數字2神經元的激活值,就應該‘比減少數字8神經元的激活值來得重要,因為后者已經很接近它的目標了。

 

進一步,就來關注數字2這個神經元,想讓它的激活值變大,而這個激活值是把前一層所有激活值的加權和加上偏置值。

所以要增加激活值,我們有3條路可以走,一增加偏置,二增加權重,或者三改變上一層的激活值。

先來看如何調整權重,各個權重它們的影響力各不相同,連接前一層最亮的神經元的權重,影響力也最大,因為這些權重與大的激活值相乘。增大這幾個權重,對最終代價函數造成的影響,就比增大連接黯淡神經元的權重所造成的影響,要大上好多倍。

請記住,說到梯度下降的時候,我們並不只看每個參數是增大還是變小,我們還看改變哪個參數的性價比最大。

不過別忘了,從全局上看,只只不過是數字2的神經元所期待的變化,我們還需要最后一層其余的每個輸出神經元,對於如何改變倒數第二層都有各自的想法。

我們會把數字2神經元的期待,和別的輸出神經元的期待全部加起來,作為如何改變倒數第二層的指示。這些期待變化不僅是對應的權重的倍數,也是每個神經元激活值改變量的倍數。

 

我們對其他的訓練樣本,同樣的過一遍反向傳播,記錄下每個樣本想怎樣修改權重和偏置,最后再去一個平均值。

這里一系列的權重偏置的平均微調大小,不嚴格地說,就是代價函數的負梯度,至少是其標量的倍數。

 

實際操作中,我們經常使用隨機梯度下降法。

首先把訓練樣本打亂,然后分成很多組minibatch,每個minibatch就當包含了100個訓練樣本好了。然后你算出這個minibatch下降的一步,這不是代價函數真正的梯度,然而每個minibatch會給一個不錯的近似,計算量會減輕不少。

反向傳播的微積分原理

我們從一個最簡單的網絡講起,每層只有一個神經元,圖上這個網絡就是由三個權重和三個偏置決定的,我們的目標是理解代價函數對這些變量有多敏感。這樣我們就知道怎么調整這些變量,才能使代價函數下降的最快。

我們先來關注最后兩個神經元,我們給最后一個神經元一個上標L,表示它處在第L層。

給定一個訓練樣本,我們把這個最終層激活值要接近的目標叫做y,y的值為0/1。那么這個簡易網絡對於單個訓練樣本的代價就等於$(a^{(L)}-y)^2$。對於這個樣本,我們把這個代價值標記為$C_0$。

之前講過,最終層的激活值公式:$a^{(L)} = \sigma (w^{(L)}a^{(L-1)}+b^{(L)})$

換個標記方法:

$$z^{(L)} = (w^{(L)}a^{(L-1)}+b^{(L)})$$

$$a^{(L)} = \sigma (z^{(L)})$$

整個流程就是這樣的:

當然了,$a^{(L-1)}$還可以再向上推一層,不過這不重要。

這些東西都是數字,我們可以想象,每個數字都對應數軸上的一個位置。我們第一個目標是來理解代價函數對權重$w^{(L)}$的微小變化有多敏感。換句話說,求$C_0$對$w^{(L)}$的導數。

根據鏈式法則:

$$\frac{\partial C_0}{\partial w^{(L)}} = \frac{\partial z^{(L)}}{\partial w^{(L)}}\frac{\partial a^{(L)}}{\partial z^{(L)}}\frac{\partial C_0}{\partial a^{(L)}}\\\frac{\partial C_0}{\partial a^{(L)}}=2(a^{(L)}-y)\\\frac{\partial a^{(L)}}{\partial z^{(L)}}={\sigma }' (z^{(L)})\\\frac{\partial z^{(L)}}{\partial w^{(L)}}=a^{(L-1)}\\$$

所以

$$\frac{\partial z^{(L)}}{\partial w^{(L)}}\frac{\partial a^{(L)}}{\partial z^{(L)}}\frac{\partial C_0}{\partial a^{(L)}}=a^{(L-1)}{\sigma }' (z^{(L)})2(a^{(L)}-y)\\$$

$$\frac{\partial C}{\partial w^{(L)}} = \frac{1}{n}\sum _{k=0}^{n-1}\frac{\partial C_k}{\partial w^{(L)}}$$

當然了,對偏置求導數也是同樣的步驟。

$$\frac{\partial C_0}{\partial b^{(L)}} = \frac{\partial z^{(L)}}{\partial b^{(L)}}\frac{\partial a^{(L)}}{\partial z^{(L)}}\frac{\partial C_0}{\partial a^{(L)}}=1{\sigma }' (z^{(L)})2(a^{(L)}-y)\\$$

到這里,我們可以看每層不止一個神經元的情況了。


 

參考鏈接:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM