BP原理推导
?? ? 相信每位剛接觸神經(jīng)網(wǎng)絡(luò)的時候都會先碰到BP算法的問題,如何形象快速地理解BP神經(jīng)網(wǎng)絡(luò)就是我們學(xué)習(xí)的高級樂趣了(畫外音:樂趣?你在跟我談樂趣?)
本篇博文就是要簡單粗暴地幫助各位童鞋快速入門采取BP算法的神經(jīng)網(wǎng)絡(luò)。
BP神經(jīng)網(wǎng)絡(luò)是怎樣的一種定義?看這句話:一種按“誤差逆?zhèn)鞑ニ惴ㄓ?xùn)練”的多層前饋網(wǎng)絡(luò)。
? ? ? ? BP的思想就是:利用輸出后的誤差來估計輸出層前一層的誤差,再用這層誤差來估計更前一層誤差,如此獲取所有各層誤差估計。這里的誤差估計可以理解為某種偏導(dǎo)數(shù),我們就是根據(jù)這種偏導(dǎo)數(shù)來調(diào)整各層的連接權(quán)值,再用調(diào)整后的連接權(quán)值重新計算輸出誤差。直到輸出的誤差達到符合的要求或者迭代次數(shù)溢出設(shè)定值。
說來說去,“誤差”這個詞說的很多嘛,說明這個算法是不是跟誤差有很大的關(guān)系?
沒錯,BP的傳播對象就是“誤差”,傳播目的就是得到所有層的估計誤差。
它的學(xué)習(xí)規(guī)則是:使用最速下降法,通過反向傳播(就是一層一層往前傳)不斷調(diào)整網(wǎng)絡(luò)的權(quán)值和閾值,最后使全局誤差系數(shù)最小。
它的學(xué)習(xí)本質(zhì)就是:對各連接權(quán)值的動態(tài)調(diào)整。
? ? ? ? ??
拓撲結(jié)構(gòu)如上圖:輸入層(input),隱藏層(hide layer),輸出層(output)
BP網(wǎng)絡(luò)的優(yōu)勢就是能學(xué)習(xí)和儲存大量的輸入輸出的關(guān)系,而不用事先指出這種數(shù)學(xué)關(guān)系。那么它是如何學(xué)習(xí)的?
BP利用處處可導(dǎo)的激活函數(shù)來描述該層輸入與該層輸出的關(guān)系,常用S型函數(shù)δ來當(dāng)作激活函數(shù)。
? ? ? ? ??????
我們現(xiàn)在開始有監(jiān)督的BP神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)算法:
1、正向傳播得到輸出層誤差e
=>輸入層輸入樣本=>各隱藏層=>輸出層
2、判斷是否反向傳播
=>若輸出層誤差與期望不符=>反向傳播
3、誤差反向傳播
=>誤差在各層顯示=>修正各層單元的權(quán)值,直到誤差減少到可接受程度。
? ? 算法闡述起來比較簡單,接下來通過數(shù)學(xué)公式來認識BP的真實面目。
? ? 假設(shè)我們的網(wǎng)絡(luò)結(jié)構(gòu)是一個含有N個神經(jīng)元的輸入層,含有P個神經(jīng)元的隱層,含有Q個神經(jīng)元的輸出層。
? ? ??這些變量分別如下:
認識好以上變量后,開始計算:
一、用(-1,1)內(nèi)的隨機數(shù)初始化誤差函數(shù),并設(shè)定精度ε,最多迭代次數(shù)M
二、隨機選取第k個輸入樣本及對應(yīng)的期望輸出
重復(fù)以下步驟至誤差達到要求:
三、計算隱含層各神經(jīng)元的輸入和輸出
四、計算誤差函數(shù)e對輸出層各神經(jīng)元的偏導(dǎo)數(shù),根據(jù)輸出層期望輸出和實際輸出以及輸出層輸入等參數(shù)計算。
五、計算誤差函數(shù)對隱藏層各神經(jīng)元的偏導(dǎo)數(shù),根據(jù)后一層(這里即輸出層)的靈敏度(稍后介紹靈敏度)δo(k),后一層連接權(quán)值w,以及該層的輸入值等參數(shù)計算
六、利用第四步中的偏導(dǎo)數(shù)來修正輸出層連接權(quán)值
七、利用第五步中的偏導(dǎo)數(shù)來修正隱藏層連接權(quán)值
八、計算全局誤差(m個樣本,q個類別)
比較具體的計算方法介紹好了,接下來用比較簡潔的數(shù)學(xué)公式來大致地概括這個過程,相信看完上述的詳細步驟都會有些了解和領(lǐng)悟。
假設(shè)我們的神經(jīng)網(wǎng)絡(luò)是這樣的,此時有兩個隱藏層。
我們先來理解靈敏度是什么?
看下面一個公式:
這個公式是誤差對b的一個偏導(dǎo)數(shù),這個b是怎么?它是一個基,靈敏度δ就是誤差對基的變化率,也就是導(dǎo)數(shù)。
因為?u/?b=1,所以?E/?b=?E/?u=δ,也就是說bias基的靈敏度?E/?b=δ等于誤差E對一個節(jié)點全部輸入u的導(dǎo)數(shù)?E/?u。
也可以認為這里的靈敏度等于誤差E對該層輸入的導(dǎo)數(shù),注意了,這里的輸入是上圖U級別的輸入,即已經(jīng)完成層與層權(quán)值計算后的輸入。
每一個隱藏層第l層的靈敏度為:
這里的“?”表示每個元素相乘,不懂的可與上面詳細公式對比理解
而輸出層的靈敏度計算方法不同,為:
而最后的修正權(quán)值為靈敏度乘以該層的輸入值,注意了,這里的輸入可是未曾乘以權(quán)值的輸入,即上圖的Xi級別。
對于每一個權(quán)值(W)ij都有一個特定的學(xué)習(xí)率ηIj,由算法學(xué)習(xí)完成。
http://blog.csdn.net/lzhalan2016/article/details/52332657
總結(jié)
- 上一篇: NumPy简明教程(二、数组2)
- 下一篇: Widows核心编程第一章:错误处理