BP神經網絡

轉自:BP神經網絡,保存在此以學習。

BP(Back Propagation)網絡是1986年由Rumelhart和McCelland爲首的科學家小組提出,是一種按誤差逆傳播算法訓練的多層前饋網絡,是目前應用最廣泛的神經網絡模型之一。BP網絡能學習和存貯大量的輸入-輸出模式映射關係,而無需事前揭示描述這種映射關係的數學方程。

一個神經網絡的結構示意圖如下所示。

clip_image002

BP神經網絡模型拓撲結構包括輸入層(input)、隱層(hide layer)和輸出層(output layer)。輸入層神經元的個數由樣本屬性的維度決定,輸出層神經元的個數由樣本分類個數決定。隱藏層的層數和每層的神經元個數由用戶指定。每一層包含若干個神經元,每個神經元包含一個而閾值clip_image004,用來改變神經元的活性。網絡中的弧線clip_image006表示前一層神經元和後一層神經元之間的權值。每個神經元都有輸入和輸出。輸入層的輸入和輸出都是訓練樣本的屬性值。

對於隱藏層和輸出層的輸入clip_image008 其中,clip_image006[1]是由上一層的單元i到單元j的連接的權;clip_image010是上一層的單元i的輸出;而clip_image004[1]是單元j的閾值。

神經網絡中神經元的輸出是經由賦活函數計算得到的。該函數用符號表現單元代表的神經元活性。賦活函數一般使用simoid函數(或者logistic函數)。神經元的輸出爲:

clip_image012

除此之外,神經網絡中有一個學習率(l)的概念,通常取0和1之間的值,並有助於找到全局最小。如果學習率太小,學習將進行得很慢。如果學習率太大,可能出現在不適當的解之間擺動。

交代清楚了神經網絡中基本要素,我們來看一下BP算法的學習過程:

BPTrain(){

      初始化network的權和閾值。

      while 終止條件不滿足 {

            for samples中的每個訓練樣本X {

            // 向前傳播輸入

            for 隱藏或輸出層每個單元j {

                  clip_image014;// 相對於前一層i,計算單元j的淨輸入 clip_image016;// 計算單元j的輸出

            }

            // 後向傳播誤差

            for 輸出層每個單元j {

                  clip_image018;// 計算誤差

            }

            for 由最後一個到第一個隱藏層,對於隱藏層每個單元j {

                   clip_image020;// k是j的下一層中的神經元

            }

            for network中每個權clip_image006[2] {

                    clip_image022 ; // 權增值

                    clip_image024 ; // 權更新

             }

             for network中每個偏差clip_image004[2] {

                      clip_image027; // 偏差增值

                      clip_image029;// 偏差更新

             }

      }

}

算法基本流程就是:

1、初始化網絡權值和神經元的閾值(最簡單的辦法就是隨機初始化)

2、前向傳播:按照公式一層一層的計算隱層神經元和輸出層神經元的輸入和輸出。

3、後向傳播:根據公式修正權值和閾值

直到滿足終止條件。

算法中還有幾點是需要說明的:

1、關於clip_image031clip_image031[1]是神經元的誤差。

對於輸出層神經元clip_image018[1],其中,clip_image010[1]是單元j的實際輸 出,而clip_image035是j基於給定訓練樣本的已知類標號的真正輸出。

對於隱藏層神經元clip_image037,其中,clip_image039是由下一較高層中單元k到單元j的連接權,而clip_image041是單元k的誤差。

權值增量是clip_image022[1],閾值增量是clip_image027[1],其中clip_image043是學習率。

對於clip_image031[2]的推導採用了梯度下降的算法。推導的前提是保證輸出單元的均方差最小。clip_image046,其中P是樣本總數,m是輸出層神經元個數clip_image048是樣本實際輸出,clip_image050是神經網絡輸出。

梯度下降思路就是對clip_image052clip_image039[1]的導數。

對於輸出層:

clip_image054

clip_image056

其中的clip_image058就是clip_image018[2]

對於隱藏層:

clip_image060

clip_image062

其中clip_image064=clip_image066就是隱藏層的誤差計算公式。

2、關於終止條件,可以有多種形式:

§ 前一週期所有的clip_image068都太小,小於某個指定的閾值。

§ 前一週期未正確分類的樣本百分比小於某個閾值。

§ 超過預先指定的週期數。

§ 神經網絡的輸出值和實際輸出值的均方誤差小於某一閾值。

一般地,最後一種終止條件的準確率更高一些。

在實際使用BP神經網絡的過程中,還會有一些實際的問題:

1、 樣本處理。對於輸出,如果只有兩類那麼輸出爲0和1,只有當clip_image070趨於正負無窮大的時候纔會輸出0,1。因此條件可適當放寬,輸出>0.9時就認爲是1,輸出<0.1時認爲是0。對於輸入,樣本也需要做歸一化處理。

2、 網絡結構的選擇。主要是指隱藏層層數和神經元數決定了網絡規模,網絡規模和性能學習效果密切相關。規模大,計算量大,而且可能導致過度擬合;但是規模小,也可能導致欠擬合。

3、 初始權值、閾值的選擇,初始值對學習結果是有影響的,選擇一個合適初始值也非常重要。

4、 增量學習和批量學習。上面的算法和數學推導都是基於批量學習的,批量學習適用於離線學習,學習效果穩定性好;增量學習使用於在線學習,它對輸入樣本的噪聲是比較敏感的,不適合劇烈變化的輸入模式。

5、 對於激勵函數和誤差函數也有其他的選擇。

總的來說BP算法的可選項比較多,針對特定的訓練數據往往有比較大的優化空間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章