本文轉載自:http://blog.csdn.net/acdreamers/article/details/44657439
今天來講BP神經網絡,神經網絡在機器學習中應用比較廣泛,比如函數逼近,模式識別,分類,數據壓縮,數據
挖掘等領域。接下來介紹BP神經網絡的原理及實現。
Contents
1. BP神經網絡的認識
2. 隱含層的選取
3. 正向傳遞子過程
4. 反向傳遞子過程
5. BP神經網絡的注意點
6. BP神經網絡的C++實現
1. BP神經網絡的認識
BP(Back Propagation)神經網絡分爲兩個過程
(1)工作信號正向傳遞子過程
(2)誤差信號反向傳遞子過程
在BP神經網絡中,單個樣本有個輸入,有個輸出,在輸入層和輸出層之間通常還有若干個隱含層。實際
上,1989年Robert Hecht-Nielsen證明了對於任何閉區間內的一個連續函數都可以用一個隱含層的BP網
絡來逼近,這就是萬能逼近定理。所以一個三層的BP網絡就可以完成任意的維到維的映射。即這三層分
別是輸入層(I),隱含層(H),輸出層(O)。如下圖示
2. 隱含層的選取
在BP神經網絡中,輸入層和輸出層的節點個數都是確定的,而隱含層節點個數不確定,那麼應該設置爲多少
才合適呢?實際上,隱含層節點個數的多少對神經網絡的性能是有影響的,有一個經驗公式可以確定隱含層
節點數目,如下
其中爲隱含層節點數目,爲輸入層節點數目,爲輸出層節點數目,爲之間的調節常數。
3. 正向傳遞子過程
現在設節點和節點之間的權值爲,節點的閥值爲,每個節點的輸出值爲,而每個節點的輸出
值是根據上層所有節點的輸出值、當前節點與上一層所有節點的權值和當前節點的閥值還有激活函數來實現
的。具體計算方法如下
其中爲激活函數,一般選取S型函數或者線性函數。
正向傳遞的過程比較簡單,按照上述公式計算即可。在BP神經網絡中,輸入層節點沒有閥值。
4. 反向傳遞子過程
在BP神經網絡中,誤差信號反向傳遞子過程比較複雜,它是基於Widrow-Hoff學習規則的。假設輸出層
的所有結果爲,誤差函數如下
而BP神經網絡的主要目的是反覆修正權值和閥值,使得誤差函數值達到最小。Widrow-Hoff學習規則
是通過沿着相對誤差平方和的最速下降方向,連續調整網絡的權值和閥值,根據梯度下降法,權值矢量
的修正正比於當前位置上E(w,b)的梯度,對於第個輸出節點有
假設選擇激活函數爲
對激活函數求導,得到
那麼接下來針對有
其中有
同樣對於有
這就是著名的學習規則,通過改變神經元之間的連接權值來減少系統實際輸出和期望輸出的誤差,這個規
則又叫做Widrow-Hoff學習規則或者糾錯學習規則。
上面是對隱含層和輸出層之間的權值和輸出層的閥值計算調整量,而針對輸入層和隱含層和隱含層的閥值調
整量的計算更爲複雜。假設是輸入層第k個節點和隱含層第i個節點之間的權值,那麼有
其中有
這樣對學習規則理解更爲深刻了吧。
有了上述公式,根據梯度下降法,那麼對於隱含層和輸出層之間的權值和閥值調整如下
而對於輸入層和隱含層之間的權值和閥值調整同樣有
至此BP神經網絡的原理基本講完。
5. BP神經網絡的注意點
BP神經網絡一般用於分類或者逼近問題。如果用於分類,則激活函數一般選用Sigmoid函數或者硬極限函
數,如果用於函數逼近,則輸出層節點用線性函數,即。
BP神經網絡在訓練數據時可以採用增量學習或者批量學習。
增量學習要求輸入模式要有足夠的隨機性,對輸入模式的噪聲比較敏感,即對於劇烈變化的輸入模式,訓
練效果比較差,適合在線處理。批量學習不存在輸入模式次序問題,穩定性好,但是隻適合離線處理。
標準BP神經網絡的缺陷:
(1)容易形成局部極小值而得不到全局最優值。
BP神經網絡中極小值比較多,所以很容易陷入局部極小值,這就要求對初始權值和閥值有要求,要使
得初始權值和閥值隨機性足夠好,可以多次隨機來實現。
(2)訓練次數多使得學習效率低,收斂速度慢。
(3)隱含層的選取缺乏理論的指導。
(4)訓練時學習新樣本有遺忘舊樣本的趨勢。
BP算法的改進:
(1)增加動量項
引入動量項是爲了加速算法收斂,即如下公式
動量因子一般選取。
(2)自適應調節學習率
(3)引入陡度因子
通常BP神經網絡在訓練之前會對數據歸一化處理,即將數據映射到更小的區間內,比如[0,1]或[-1,1]。
6. BP神經網絡的C++實現
BP神經網絡的C++文件如下