BP神经网络算法学习
BP(Back Propagation)網(wǎng)絡(luò)是1986年由Rumelhart和McCelland為首的科學(xué)家小組提出,是一種按誤差逆?zhèn)鞑ニ惴ㄓ?xùn)練的多層前饋網(wǎng)絡(luò),是眼下應(yīng)用最廣泛的神經(jīng)網(wǎng)絡(luò)模型之中的一個(gè)。BP網(wǎng)絡(luò)能學(xué)習(xí)和存貯大量的輸入-輸出模式映射關(guān)系,而無需事前揭示描寫敘述這樣的映射關(guān)系的數(shù)學(xué)方程。
一個(gè)神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)示意圖例如以下所看到的。
BP神經(jīng)網(wǎng)絡(luò)模型拓?fù)浣Y(jié)構(gòu)包括輸入層(input)、隱層(hide layer)和輸出層(output layer)。輸入層神經(jīng)元的個(gè)數(shù)由樣本屬性的維度決定,輸出層神經(jīng)元的個(gè)數(shù)由樣本分類個(gè)數(shù)決定。隱藏層的層數(shù)和每層的神經(jīng)元個(gè)數(shù)由用戶指定。每一層包括若干個(gè)神經(jīng)元,每一個(gè)神經(jīng)元包括一個(gè)而閾值,用來改變神經(jīng)元的活性。網(wǎng)絡(luò)中的弧線表示前一層神經(jīng)元和后一層神經(jīng)元之間的權(quán)值。每一個(gè)神經(jīng)元都有輸入和輸出。輸入層的輸入和輸出都是訓(xùn)練樣本的屬性值。
對(duì)于隱藏層和輸出層的輸入 當(dāng)中,是由上一層的單元i到單元j的連接的權(quán);是上一層的單元i的輸出;而是單元j的閾值。
神經(jīng)網(wǎng)絡(luò)中神經(jīng)元的輸出是經(jīng)由賦活函數(shù)計(jì)算得到的。該函數(shù)用符號(hào)表現(xiàn)單元代表的神經(jīng)元活性。賦活函數(shù)一般使用simoid函數(shù)(或者logistic函數(shù))。神經(jīng)元的輸出為:
除此之外,神經(jīng)網(wǎng)絡(luò)中有一個(gè)學(xué)習(xí)率(l)的概念,通常取0和1之間的值,并有助于找到全局最小。假設(shè)學(xué)習(xí)率太小,學(xué)習(xí)將進(jìn)行得非常慢。假設(shè)學(xué)習(xí)率太大,可能出如今不適當(dāng)?shù)慕庵g擺動(dòng)。
交代清楚了神經(jīng)網(wǎng)絡(luò)中基本要素,我們來看一下BP算法的學(xué)習(xí)過程:
BPTrain(){
????? 初始化network的權(quán)和閾值。
????? while 終止條件不滿足 {
??????????? for samples中的每一個(gè)訓(xùn)練樣本X {
??????????? // 向前傳播輸入
??????????? for 隱藏或輸出層每一個(gè)單元j {
????????????????? ;// 相對(duì)于前一層i,計(jì)算單元j的凈輸入 ;// 計(jì)算單元j的輸出
??????????? }
??????????? // 后向傳播誤差
??????????? for 輸出層每一個(gè)單元j {
????????????????? ;// 計(jì)算誤差
??????????? }
??????????? for 由最后一個(gè)到第一個(gè)隱藏層,對(duì)于隱藏層每一個(gè)單元j {
?????????????????? ;// k是j的下一層中的神經(jīng)元
??????????? }
??????????? for network中每一個(gè)權(quán) {
??????????????????? ; // 權(quán)增值
??????????????????? ; // 權(quán)更新
???????????? }
???????????? for network中每一個(gè)偏差 {
????????????????????? ; // 偏差增值
????????????????????? ;// 偏差更新
???????????? }
????? }
}
算法基本流程就是:
1、初始化網(wǎng)絡(luò)權(quán)值和神經(jīng)元的閾值(最簡(jiǎn)單的辦法就是隨機(jī)初始化)
2、前向傳播:依照公式一層一層的計(jì)算隱層神經(jīng)元和輸出層神經(jīng)元的輸入和輸出。
3、后向傳播:依據(jù)公式修正權(quán)值和閾值
直到滿足終止條件。
算法中還有幾點(diǎn)是須要說明的:
1、關(guān)于,是神經(jīng)元的誤差。
對(duì)于輸出層神經(jīng)元,當(dāng)中,是單元j的實(shí)際輸 出,而是j基于給定訓(xùn)練樣本的已知類標(biāo)號(hào)的真正輸出。
對(duì)于隱藏層神經(jīng)元,當(dāng)中,是由下一較高層中單元k到單元j的連接權(quán),而是單元k的誤差。
權(quán)值增量是,閾值增量是,當(dāng)中是學(xué)習(xí)率。
對(duì)于的推導(dǎo)採(cǎi)用了梯度下降的算法。推導(dǎo)的前提是保證輸出單元的均方差最小。,當(dāng)中P是樣本總數(shù),m是輸出層神經(jīng)元個(gè)數(shù)是樣本實(shí)際輸出,是神經(jīng)網(wǎng)絡(luò)輸出。
梯度下降思路就是對(duì)求的導(dǎo)數(shù)。
對(duì)于輸出層:
當(dāng)中的就是。
對(duì)于隱藏層:
當(dāng)中=就是隱藏層的誤差計(jì)算公式。
2、關(guān)于終止條件,能夠有多種形式:
§ 前一周期全部的都太小,小于某個(gè)指定的閾值。
§ 前一周期未正確分類的樣本百分比小于某個(gè)閾值。
§ 超過預(yù)先指定的周期數(shù)。
§ 神經(jīng)網(wǎng)絡(luò)的輸出值和實(shí)際輸出值的均方誤差小于某一閾值。
一般地,最后一種終止條件的準(zhǔn)確率更高一些。
在實(shí)際使用BP神經(jīng)網(wǎng)絡(luò)的過程中,還會(huì)有一些實(shí)際的問題:
1、 樣本處理。對(duì)于輸出,假設(shè)僅僅有兩類那么輸出為0和1,僅僅有當(dāng)趨于正負(fù)無窮大的時(shí)候才會(huì)輸出0,1。因此條件可適當(dāng)放寬,輸出>0.9時(shí)就覺得是1,輸出<0.1時(shí)覺得是0。對(duì)于輸入,樣本也須要做歸一化處理。
2、 網(wǎng)絡(luò)結(jié)構(gòu)的選擇。主要是指隱藏層層數(shù)和神經(jīng)元數(shù)決定了網(wǎng)絡(luò)規(guī)模,網(wǎng)絡(luò)規(guī)模和性能學(xué)習(xí)效果密切相關(guān)。規(guī)模大,計(jì)算量大,并且可能導(dǎo)致過度擬合;可是規(guī)模小,也可能導(dǎo)致欠擬合。
3、 初始權(quán)值、閾值的選擇,初始值對(duì)學(xué)習(xí)結(jié)果是有影響的,選擇一個(gè)合適初始值也很重要。
4、 增量學(xué)習(xí)和批量學(xué)習(xí)。上面的算法和數(shù)學(xué)推導(dǎo)都是基于批量學(xué)習(xí)的,批量學(xué)習(xí)適用于離線學(xué)習(xí),學(xué)習(xí)效果穩(wěn)定性好;增量學(xué)習(xí)使用于在線學(xué)習(xí),它對(duì)輸入樣本的噪聲是比較敏感的,不適合劇烈變化的輸入模式。
5、 對(duì)于激勵(lì)函數(shù)和誤差函數(shù)也有其它的選擇。
總的來說BP算法的可選項(xiàng)比較多,針對(duì)特定的訓(xùn)練數(shù)據(jù)往往有比較大的優(yōu)化空間。
轉(zhuǎn)載于:https://www.cnblogs.com/gcczhongduan/p/3983168.html
總結(jié)
以上是生活随笔為你收集整理的BP神经网络算法学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring Boot Actuator
- 下一篇: awesomium This view