通俗理解神经网络BP反向传播算法
轉(zhuǎn)載自???通俗理解神經(jīng)網(wǎng)絡(luò)BP反向傳播算法
通俗理解神經(jīng)網(wǎng)絡(luò)BP反向傳播算法
在學(xué)習(xí)深度學(xué)習(xí)相關(guān)知識,無疑都是從神經(jīng)網(wǎng)絡(luò)開始入手,在神經(jīng)網(wǎng)絡(luò)對參數(shù)的學(xué)習(xí)算法bp算法,接觸了很多次,每一次查找資料學(xué)習(xí),都有著似懂非懂的感覺,這次趁著思路比較清楚,也為了能夠讓一些像我一樣疲于各種查找資料,卻依然懵懵懂懂的孩子們理解,參考了梁斌老師的博客BP算法淺談(Error Back-propagation)(為了驗證梁老師的結(jié)果和自己是否正確,自己python實現(xiàn)的初始數(shù)據(jù)和梁老師定義為一樣!),進(jìn)行了梳理和python代碼實現(xiàn),一步一步的幫助大家理解bp算法!
為了方便起見,這里我定義了三層網(wǎng)絡(luò),輸入層(第0層),隱藏層(第1層),輸出層(第二層)。并且每個結(jié)點沒有偏置(有偏置原理完全一樣),激活函數(shù)為sigmod函數(shù)(不同的激活函數(shù),求導(dǎo)不同),符號說明如下:
對應(yīng)網(wǎng)絡(luò)如下:
?
其中對應(yīng)的矩陣表示如下:
首先我們先走一遍正向傳播,公式與相應(yīng)的數(shù)據(jù)對應(yīng)如下:
那么:
同理可以得到
那么最終的損失為
我們當(dāng)然是希望這個值越小越好。這也是我們?yōu)槭裁匆M(jìn)行訓(xùn)練,調(diào)節(jié)參數(shù),使得最終的損失最小。這就用到了我們的反向傳播算法,實際上反向傳播就是梯度下降法中(為什么需要用到梯度下降法,也就是為什么梯度的反方向一定是下降最快的方向,我會再寫一篇文章解釋,這里假設(shè)是對的,關(guān)注bp算法)鏈?zhǔn)椒▌t的使用。
?
下面我們看如何反向傳播
根據(jù)公式,我們有:
這個時候我們需要求出C對w的偏導(dǎo),則根據(jù)鏈?zhǔn)椒▌t有
上面插入sigmod函數(shù)求導(dǎo)公式:
(在這里我們可以看到不同激活函數(shù)求導(dǎo)是不同的,所謂的梯度消失,梯度爆炸如果了解bp算法的原理,也是非常容易理解的!)
同理有
到此我們已經(jīng)算出了最后一層的參數(shù)偏導(dǎo)了.我們繼續(xù)往前面鏈?zhǔn)酵茖?dǎo):
我們現(xiàn)在還需要求
下面給出其中的一個推到,其它完全類似
同理可得到其它幾個式子:
則最終的結(jié)果為:
再按照這個權(quán)重參數(shù)進(jìn)行一遍正向傳播得出來的Error為0.165
而這個值比原來的0.19要小,則繼續(xù)迭代,不斷修正權(quán)值,使得代價函數(shù)越來越小,預(yù)測值不斷逼近0.5.我迭代了100次的結(jié)果,Error為5.92944818e-07(已經(jīng)很小了,說明預(yù)測值與真實值非常接近了),最后的權(quán)值為:
好了,bp過程可能差不多就是這樣了,可能此文需要你以前接觸過bp算法,只是還有疑惑,一步步推導(dǎo)后,會有較深的理解。
?
分享鏈接:
中文版資料:鏈接:http://pan.baidu.com/s/1mi8YVri 密碼:e7do
下面給出我學(xué)習(xí)bp時候的好的博客
Backpropagation (里面的插圖非常棒,不過好像有點錯誤,歡迎討論~)
A Neural Network in 11 lines of Python (Part 1)(非常贊的博客,每個代碼一行一行解釋)
Neural networks and deep learning ? ? (很好的深度學(xué)習(xí)入門書籍,實驗室力推!我有中文翻譯版,歡迎留言)
?
上面實現(xiàn)的python代碼如下:
源文件下載鏈接如下:http://pan.baidu.com/s/1slpmYPR
?
我也是在學(xué)習(xí)過程中,歡迎大家提出錯誤問題。真心希望加深大家對bp算法的理解。
參考自梁斌老師博客.
總結(jié)
以上是生活随笔為你收集整理的通俗理解神经网络BP反向传播算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的狼人杀程序
- 下一篇: 为什么梯度反方向是函数下降最快的方向