BP神經網路的學習

2021-07-14 08:39:30 字數 2017 閱讀 9304

神經網路模型由輸入層、隱藏層和輸出層組成。每一層都能夠看作是上一層(如果有)的輸出層和下一層(如果有)的輸入層。

先來介紹一下向前傳遞演算法。如圖1所示即為簡單的三層神經網路模型向前傳遞演算法的計算過程。我們可以a(

l)表示第l層單元的資料,與邏輯回歸類似,a(

l)=g

(z (

l)) 

這樣可以很容易看出哪乙個分類是可能性最大的。需要注意的是,每一層的a(

l)在計算下一層的z 

(l+1

) 時,應該加上偏移單元(bias unit),這和線性回歸的常數項有些類似。

在神經網路每一層之間的計算時,我覺得難點在於對矩陣各行列意義的理解,如果理解不好的話,code的時候很容易產生矩陣大小不匹配相乘或想相加的問題。常見的問題是由於每一層θ 

的矩陣形式都不一樣,必須很小心的注意每一層θ 

矩陣行列大小,由圖也能看出,第l層θ(

l)矩陣的維數為(s

l+1)

∗sl+

1 ,因為行代表了下一層單元的個數,列代表上一層單元個數(由於存在偏移單元,因此+1)。

理解了如何向前傳遞引數之後,就能通過輸出層資料來得到costfunction了。如圖2所示。

式子看上去很複雜,實際上並不難,兩個求和符號最裡面實際上就是邏輯函式的costfunction,只不過二分類問題變成了k分類問題。第乙個求和符號就是將輸出層(**的結果)與實際分類每一位的差進行求和,例如:假設實際分類為5,即y=

[0,0

,0,0

,1,0

,0,0

,0]t

,而輸出層為ou

t=[0.1

,0.2

,0.1

,0.1

,0.9

,0.1

,0.1

,0.1

,0.1] 

,那麼求和結果就是su

m(y−

out)

,這是對y和out向量誤差的乙個綜合量。 第二個求和符號則是對m個訓練集的誤差進行求和,這和邏輯函式表達的方式一樣,就不在此贅述了。

為了防止過擬合,可以通過正則化(regularized)的方法修改costfunction,然後進行模型訓練。對於神經網路模型,正則化後的costfunction為:

正則化項就是將每層的θ 

的每一項都平方求和(對每一項都懲罰的原因是,不能判斷哪一項影響過大),需要注意的是,計算時要將偏移單元排除在外(一種約定)。

上述為向前傳遞演算法的基本過程,下面開始介紹bp神經網路(backpropagation neural networks )的過程,bp神經網路利用向前傳遞的演算法得到的結果與訓練值的誤差,反向得到每一層的誤差向量,最後根據每一層的誤差向量確定梯度下降的方向。下面第乙個式子代表最後一層的誤差(此例為3層神經網路),第二個式子則代表誤差向量反向的傳播,具體推導暫時還沒有學到。得到了每一層的誤差向量δ 

(l) 

以及向前傳遞演算法中得到的a(

l)後,根據第三和第四個式子可以計算出整個模型的梯度方向。

bp神經網路下降梯度

得到了梯度方向,之後便是關於正則化、利用數值方法進行梯度的檢查、以及matlab自帶的fmincg函式求最值的方法,以後有時間再介紹了。

bp神經網路學習

import numpy as np 使用邏輯回歸進行分類 defnonlin x,deriv false if deriv true return x 1 x return 1 1 np.exp x 待分類的資料 x np.array 0,0,1 0,1,1 1,0,1 1,1,1 print x...

BP神經網路

基本bp神經網路演算法包括 訊號的前向傳播 誤差的反向傳播 也即計算實際輸出時按照輸入到輸出的方向進行,權值閾值調整則相反。bp是一種多層前饋神經網路,由輸入層 隱含層和輸出層組成。層與層之間有兩種訊號在流動 一種是從輸入流向輸出的工作訊號,是輸入和權值的函式 另一種是輸入流向輸出的訊號,即誤差。隱...

BP神經網路

x 為輸入向量,y為隱藏層的神經元,z 為輸出層,d為目標真實值,本文預設 z 不經過sigmod處理。x y的權重為 w,y z的權重為 v yj ix iwij 1 oyi f y j 2 其中激勵函式f x 1 1 e x f x f x 1 f x 3 z k j f yj vjk 此時系統...