Deep Learning1:BP算法


最近開始接觸deep learning,寫一些學習心得,畢竟從0開始,理解淺薄。

關於本文,如果你想弄明白BP算法的原理,可以讀,如果你只想使用BP算法,請移步到Andrew Ng的講義:http://ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithm

從神經網絡最常用的BP算法開始。為了不使問題復雜,我們從一個三層網絡開始,下圖是來自Andrew Ng(http://ufldl.stanford.edu/wiki/index.php/Autoencoders_and_Sparsity)的講義:

約定一下符號使用規則:

層數從1開始計數,用 表示第L層第i個節點的輸入,用 表示第L層第i個節點的輸出,用

表示第L層的第i個節點與L-1層的第j個節點之間的權重,用 表示第L層第i個節點的偏置,假設激活函數用f表示,那么節點有如下關系:

神經網絡的核心就是訓練權重W和偏置b,因此我們需要一個目標來訓練神經網絡。設 表示最后一層神經網絡,假設我們有m個樣本,

樣本的維度與輸入層節點數相同;在上圖所示的神經結構中,我們希望輸出與輸入接近(隱藏層壓縮了圖像),因此定義如下損失函數(為簡單起見,

我忽略了正則項以及很常見的稀疏約束項,我們的重點是推導BP算法):

重申一下, ,其中k為輸出層節點個數。我們需要訓練所有的W和b,因此需要求得J對W,b的偏導,然后通過一種更新規則(比如梯度下降,擬牛頓法等)來迭代更新W,b。無論如何,求得梯度是第一步,注意

對於輸出層,直接使用鏈鎖規則:

對於非輸出層,偏導與L,L+1,....,n_l層的輸出相關,我們使用基於鏈鎖規則的迭代思想計算。在此之前,定義第L層第i個節點的誤差項:

 假設我們已經計算好了(比如最后輸出層的誤差項是很容易計算的,這也是需要反向傳播的原因),則:

當然,我們希望通過鏈鎖規則以及隱式求導規則給出誤差項之間的迭代公式:

補充一句,上式的求和號是因為在全連接中,第L層的節點會影響所有L+1層的節點,如果是卷積神經網絡,就不是這樣的,所以其實BP算法跟

網絡結構相關。

推導到這,原理已經講清楚了,可以去做Andrew Ng的練習了:http://ufldl.stanford.edu/wiki/index.php/Exercise:Sparse_Autoencoder


免責聲明!

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



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