上篇劍客對神經網絡做了科普,還記得嘛神經網絡是長這個樣子的
我們使用韓老師的經典教科書案例,先講清楚神經元是怎么正向傳播和反向修正的。
神經元的輸出由前一網絡層的輸出乘以相應權重進行累加,加上偏倚後代入擠壓函數,這個過程主要是兩步分解動作:
第一步,由前面一層的輸出乘以相應的權重,再加上一個偏倚得出累加值
第二步,累加值可能無窮小也可能無窮大太不規範,所以把值映射到0~1之間得到。
如何反向修正?
如果我們想得到的是1,算法給出的確是0,那就需要調整權重和,這裡先給出公式。
先算輸出層的誤差,以輸出層單元j為例:
是j層擠壓後的最終結果, 是真實的輸出如1。
隱藏層的誤差公式是:
k是j的下一層,j是隱藏層k就可能是輸出層,是j正向傳播後一層k神經元計算出來的誤差,從這裡就看出來誤差及參數的傳遞是由後向前進行的。
權重的改變如下:
是的變化量,前面有講是當前層的誤差,公式裡的l是學習率是梯度下降算法裡的概念,簡單舉例子來講步子邁太大容易扯著dan,邁太小進度又太慢,學習率就是這個步子,是當上一層擠壓的結果。
同樣我們也需要對偏倚進行修正:
有了上面粗暴給出的公式,我們來做一個具體的反向推導例子:
神經網絡如上圖,x1,x2,x3是輸入層,x4,x5是隱藏層,x6是輸出層,那我們算下淨輸出和各節點誤差如下:
我們依次進行反向修正,由x4,x5到x6的權重,依次到x1,x2,x3到x4,x5的權重,結果如下:
我們先重新定義正向傳遞子過程的公式的部分變量。現在設節點和節點之間的權值為,節點的閥值為,每個節點的輸出值為,而每個節點的輸出值是根據上層所有節點的輸出值、當前節點與上一層所有節點的權值和當前節點的閥值還有激活函數來實現的。具體計算方法如下
其中為激活函數,一般選取S型函數或者線性函數。正向傳遞的過程比較簡單,按照上述公式計算即可。在BP神經網絡中,輸入層節點沒有閥值。
反向傳遞子過程
在BP神經網絡中,誤差信號反向傳遞子過程比較複雜,它是基於Widrow-Hoff學習規則的。假設輸出層的所有結果為,誤差函數如下
而BP神經網絡的主要目的是反覆修正權值和閥值,使得誤差函數值達到最小。Widrow-Hoff學習規則是通過沿著相對誤差平方和的最速下降方向,連續調整網絡的權值和閥值,根據梯度下降法,權值矢量的修正正比於當前位置上E(w,b)的梯度,對於第j個輸出節點有
假設選擇激活函數為
對激活函數求導得到
那麼接下來針對求導
求導算出的修正公式,跟我們上一層講的完全對應。
是i到j的誤差就是之前講的
同樣對於有
這就是著名的學習規則,通過改變神經元之間的連接權值來減少系統實際輸出和期望輸出的誤差,這個規則又叫做Widrow-Hoff學習規則或者糾錯學習規則。上面是對隱含層和輸出層之間的權值和輸出層的閥值計算調整量,而針對輸入層和隱含層和隱含層的閥值調整量的計算更為複雜。假設是輸入層第k個節點和隱含層第i個節點之間的權值(這裡跟上一層的順序有區別要注意),那麼有:
此處公式推導的k是輸入層/隱藏層,i是隱藏層,j是輸出層區別於上一節裡所講解的順序需要注意,其中
這樣對學習規則理解更為深刻了吧。有了上述公式,根據梯度下降法,那麼對於隱含層和輸出層之間的權值和閥值調整如下
伊塔是學習率,可以看做我們修正時邁的步子。
而對於輸入層和隱含層之間的權值和閥值調整同樣有
至此BP神經網絡公式推導講完
本次藉助的具體算法是MLPClassifier (多層感知機),MLPClassifier使用了後向傳播算法。MLP 依靠兩個數組進行訓練,數組X保存了浮點型特徵值,Y數組儲存了訓練樣本的目標值,通過 hidden_layer_sizes數組設定每個隱藏層的神經元的個數。
這裡我定義一個MLPClassifier類。
這部分的輸出為,predict1是預測值,predict2除了預測值還包含預測的概率:
依次輸出,各層神經元的連接權重:
輸出結果:
BP神經網絡一般用於分類或者逼近問題。如果用於分類,則激活函數一般選用Sigmoid函數或者硬極限函,如果用於函數逼近,則輸出層節點用線性函數,即
BP神經網絡在訓練數據時可以採用增量學習或者批量學習。
增量學習要求輸入模式要有足夠的隨機性,對輸入模式的噪聲比較敏感,即對於劇烈變化的輸入模式,訓練效果比較差,適合在線處理。批量學習不存在輸入模式次序問題,穩定性好,但是只適合離線處理。
標準BP神經網絡的缺陷:
(1)容易形成局部極小值而得不到全局最優值。
BP神經網絡中極小值比較多,所以很容易陷入局部極小值,這就要求對初始權值和閥值有要求,要使得初始權值和閥值隨機性足夠好,可以多次隨機來實現。
(2)訓練次數多使得學習效率低,收斂速度慢。
(3)隱含層的選取缺乏理論的指導。
(4)訓練時學習新樣本有遺忘舊樣本的趨勢。
BP算法的改進:
(1)增加動量項 引入動量項是為了加速算法收斂,即如下公式
動量因子一般選取0.1~0.8。
(2)自適應調節學習率
(3)引入陡度因子
部分參考資料:<數據挖掘概念與技術> <csdn BP神經網絡> <sklearn文檔>
本篇完,後續講解theano 、tensorflow 及svm 、HMM的算法,歡迎轉發
我們專注深度學習,量化投資,歡迎給予建議
分享是種美德歡迎轉發