所謂神經網絡,目前用得最廣泛的一個定義是“的神經網絡是由具有适應性簡單單元組成的廣泛并行互連的網絡,它的組織能夠模拟生物神經系統對真實世界物體所做出的交互反應”。
BP(back propagation)神經網絡一種按照誤差逆向傳播算法訓練的多層前饋神經網絡,是目前應用最廣泛的神經網絡。
神經元模型
神經網絡中最基本的單元是神經元模型(neuron)。在生物神經網絡的原始機制中,每個神經元通常都有多個樹突(dendrite),一個軸突(axon)和一個細胞體(cell body),樹突短而多分支,軸突長而隻有一個;在功能上,樹突用于傳入其它神經元傳遞的神經沖動,而軸突用于将神經沖動傳出到其它神經元,當樹突或細胞體傳入的神經沖動使得神經元興奮時,該神經元就會通過軸突向其它神經元傳遞興奮。神經元的生物學結構如下圖所示:
一直沿用至今的“M-P神經元模型”正是對這一結構進行了抽象,也稱“阈值邏輯單元“,其中樹突對應于輸入部分,每個神經元收到n個其他神經元傳遞過來的輸入信号,這些信号通過帶權重的連接傳遞給細胞體,這些權重又稱為連接權(connection weight)。細胞體分為兩部分,前一部分計算總輸入值(即輸入信号的加權和,或者說累積電平),後一部分先計算總輸入值與該神經元阈值的差值,然後通過激活函數(activation function)的處理,産生輸出從軸突傳送給其它神經元。M-P神經元模型如下圖所示:
與線性分類十分相似,神經元模型最理想的激活函數也是階躍函數,即将神經元輸入值與阈值的差值映射為輸出值1或0,若差值大于零輸出1,對應興奮;若差值小于零則輸出0,對應抑制。但階躍函數不連續,不光滑(定義域内不完全可導),故在M-P神經元模型中,采用Sigmoid函數來近似, Sigmoid函數将較大範圍内變化的輸入值擠壓到 (0,1) 輸出值範圍内,所以也稱為擠壓函數(squashing function)。
将多個神經元按一定的層次結構連接起來,就得到了神經網絡。它是一種包含多個參數的模型,比方說10個神經元兩兩連接,則有100個參數需要學習(每個神經元有9個連接權以及1個阈值),若将每個神經元都看作一個函數,則整個神經網絡就是由這些函數相互嵌套而成。
多次前饋神經網絡有三部分組成,分别是輸入層(input layer),隐藏層(hide layer),輸出層(output layer)。隐藏層可以有,也可以沒有,輸入層和輸出層必須要有。沒有隐藏層的神經網絡是線性的,隻能處理線性可分的問題(線性可分問題從二維的角度就是分界線是一條直線,多維就是存在線性超平面将其分類)。一個沒有隐藏層且輸出層隻有一個單元的神經網絡就相當于線性的Logistic模型。
感知機與多層網絡
感知機(Perceptron)是由兩層神經元組成的一個簡單模型,但隻有輸出層是M-P神經元,即隻有輸出層神經元進行激活函數處理,也稱為功能神經元(functionalneuron);輸入層隻是接受外界信号(樣本屬性)并傳遞給輸出層(輸入層的神經元個數等于樣本的屬性數目),而沒有激活函數。這樣一來,感知機與之前線性回歸的思想基本是一樣的,都是通過對屬性加權與另一個常數求和,再使用sigmoid函數将這個輸出值壓縮到0-1之間,從而解決分類問題。不同的是感知機的輸出層應該可以有多個神經元,從而可以實現多分類問題,同時兩個模型所用的參數估計方法十分不同。
給定訓練集,則感知機的n 1個參數(n個權重 1個阈值)都可以通過學習得到。阈值Θ可以看作一個輸入值固定為-1的啞結點的權重ωn 1,即假設有一個固定輸入xn 1=-1的輸入層神經元,其對應的權重為ωn 1,這樣就把權重和阈值統一為權重的學習了。簡單感知機的結構如下圖所示:
感知機權重的學習規則如下:對于訓練樣本(x,y),當該樣本進入感知機學習後,會産生一個輸出值,若該輸出值與樣本的真實标記不一緻,則感知機會對權重進行調整,若激活函數為階躍函數,則調整的方法與Logistic回歸類似(基于梯度下降法)。
感知機是通過逐個樣本輸入來更新權重,首先設定好初始權重(一般為随機),逐個地輸入樣本數據,若輸出值與真實标記相同則繼續輸入下一個樣本,若不一緻則更新權重,然後再重新逐個檢驗,直到每個樣本數據的輸出值都與真實标記相同。容易看出:感知機模型總是能将訓練數據的每一個樣本都預測正确,和決策樹模型總是能将所有訓練數據都分開一樣,感知機模型很容易産生過拟合問題。
由于感知機模型隻有一層功能神經元,因此其功能十分有限,隻能處理線性可分的問題,對于這類問題,感知機的學習過程一定會收斂(converge),因此總是可以求出适當的權值。
BP神經網絡算法
由上面可以得知:神經網絡的學習主要蘊含在權重和阈值中,多層網絡使用上面簡單感知機的權重調整規則顯然不夠用了,BP神經網絡算法即誤差逆傳播算法正是為學習多層前饋神經網絡而設計,BP神經網絡算法是迄今為止最成功的的神經網絡學習算法。
一般而言,隻需包含一個足夠多神經元的隐層,就能以任意精度逼近任意複雜度的連續函數,故下面以訓練單隐層的前饋神經網絡為例,介紹BP神經網絡的算法思想。
上圖為一個單隐層前饋神經網絡的拓撲結構,BP神經網絡算法也使用梯度下降法(gradient descent),以單個樣本的均方誤差的負梯度方向對權重進行調節。可以看出:BP算法首先将誤差反向傳播給隐層神經元,調節隐層到輸出層的連接權重與輸出層神經元的阈值;接着根據隐含層神經元的均方誤差,來調節輸入層到隐含層的連接權值與隐含層神經元的阈值。BP算法基本的推導過程與感知機的推導過程原理是相同的,下面給出調整隐含層到輸出層的權重調整規則的推導過程:
BP算法的最終目标是要最小化整個訓練集D上的累積誤差
學習率η∈(0,1)控制着沿反梯度方向下降的步長,若步長太大則下降太快容易産生震蕩,若步長太小則收斂速度太慢,一般地常把η設置為0.1,有時更新權重時會将輸出層與隐含層設置為不同的學習率。BP算法的基本流程如下所示:
BP算法的更新規則是基于每個樣本的預測值與真實類标的均方誤差來進行權值調節,即BP算法每次更新隻針對于單個樣例。需要注意的是:BP算法的最終目标是要最小化整個訓練集D上的累積誤差。
BP神經網絡matlab實現的基本步驟
1、數據歸一化
2、數據分類,主要包括打亂數據順序,抽取正常訓練用數據、變量數據、測試數據
3、建立神經網絡,包括設置多少層網絡(一般3層以内既可以,每層的節點數(具體節點數,尚無科學的模型和公式方法确定,可采用試湊法,但輸出層的節點數應和需要輸出的量個數相等),設置隐含層的傳輸函數等
4、指定訓練參數進行訓練,這步非常重要
5、完成訓練後,就可以調用訓練結果,輸入測試數據,進行測試
6、數據進行反歸一化
7、誤差分析、結果預測或分類,作圖等
應用案例
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!