神經(jīng)網(wǎng)絡(luò )簡(jiǎn)介
神經(jīng)網(wǎng)絡(luò )
一直沿用至今的“M-P神經(jīng)元模型”正是對這一結構進(jìn)行了抽象,也稱(chēng)“閾值邏輯單元“,其中樹(shù)突對應于輸入部分,每個(gè)神經(jīng)元收到n個(gè)其他神經(jīng)元傳遞過(guò)來(lái)的輸入信號,這些信號通過(guò)帶權重的連接傳遞給細胞體,這些權重又稱(chēng)為連接權(connection weight)。細胞體分為兩部分,前一部分計算總輸入值(即輸入信號的加權和,或者說(shuō)累積電平),后一部分先計算總輸入值與該神經(jīng)元閾值的差值,然后通過(guò)激活函數(activation function)的處理,產(chǎn)生輸出從軸突傳送給其它神經(jīng)元。M-P神經(jīng)元模型如下圖所示:
與線(xiàn)性分類(lèi)十分相似,神經(jīng)元模型最理想的激活函數也是階躍函數,即將神經(jīng)元輸入值與閾值的差值映射為輸出值1或0,若差值大于零輸出1,對應興奮;若差值小于零則輸出0,對應抑制。但階躍函數不連續,不光滑,故在M-P神經(jīng)元模型中,也采用Sigmoid函數來(lái)近似,Sigmoid函數將較大范圍內變化的輸入值擠壓到 (0,1) 輸出值范圍內,所以也稱(chēng)為擠壓函數(squashing function)。
將多個(gè)神經(jīng)元按一定的層次結構連接起來(lái),就得到了神經(jīng)網(wǎng)絡(luò )。它是一種包含多個(gè)參數的模型,比方說(shuō)10個(gè)神經(jīng)元兩兩連接,則有100個(gè)參數需要學(xué)習(每個(gè)神經(jīng)元有9個(gè)連接權以及1個(gè)閾值),若將每個(gè)神經(jīng)元都看作一個(gè)函數,則整個(gè)神經(jīng)網(wǎng)絡(luò )就是由這些函數相互嵌套而成。
感知機與多層網(wǎng)絡(luò )
感知機(Perceptron)是由兩層神經(jīng)元組成的一個(gè)簡(jiǎn)單模型,但只有輸出層是M-P神經(jīng)元,即只有輸出層神經(jīng)元進(jìn)行激活函數處理,也稱(chēng)為功能神經(jīng)元(functional neuron);輸入層只是接受外界信號(樣本屬性)并傳遞給輸出層(輸入層的神經(jīng)元個(gè)數等于樣本的屬性數目),而沒(méi)有激活函數。這樣一來(lái),感知機與之前線(xiàn)性模型中的對數幾率回歸的思想基本是一樣的,都是通過(guò)對屬性加權與另一個(gè)常數求和,再使用sigmoid函數將這個(gè)輸出值壓縮到0-1之間,從而解決分類(lèi)問(wèn)題。不同的是感知機的輸出層應該可以有多個(gè)神經(jīng)元,從而可以實(shí)現多分類(lèi)問(wèn)題,同時(shí)兩個(gè)模型所用的參數估計方法十分不同。
給定訓練集,則感知機的n+1個(gè)參數(n個(gè)權重+1個(gè)閾值)都可以通過(guò)學(xué)習得到。閾值Θ可以看作一個(gè)輸入值固定為-1的啞結點(diǎn)的權重ωn+1,即假設有一個(gè)固定輸入xn+1=-1的輸入層神經(jīng)元,其對應的權重為ωn+1,這樣就把權重和閾值統一為權重的學(xué)習了。簡(jiǎn)單感知機的結構如下圖所示:
感知機權重的學(xué)習規則如下:對于訓練樣本(x,y),當該樣本進(jìn)入感知機學(xué)習后,會(huì )產(chǎn)生一個(gè)輸出值,若該輸出值與樣本的真實(shí)標記不一致,則感知機會(huì )對權重進(jìn)行調整,若激活函數為階躍函數,則調整的方法為(基于梯度下降法):(看不懂)
其中 η∈(0,1)稱(chēng)為學(xué)習率,可以看出感知機是通過(guò)逐個(gè)樣本輸入來(lái)更新權重,首先設定好初始權重(一般為隨機),逐個(gè)地輸入樣本數據,若輸出值與真實(shí)標記相同則繼續輸入下一個(gè)樣本,若不一致則更新權重,然后再重新逐個(gè)檢驗,直到每個(gè)樣本數據的輸出值都與真實(shí)標記相同。容易看出:感知機模型總是能將訓練數據的每一個(gè)樣本都預測正確,和決策樹(shù)模型總是能將所有訓練數據都分開(kāi)一樣,感知機模型很容易產(chǎn)生過(guò)擬合問(wèn)題。
由于感知機模型只有一層功能神經(jīng)元,因此其功能十分有限,只能處理線(xiàn)性可分的問(wèn)題,對于這類(lèi)問(wèn)題,感知機的學(xué)習過(guò)程一定會(huì )收斂(converge),因此總是可以求出適當的權值。但是對于像書(shū)上提到的異或問(wèn)題,只通過(guò)一層功能神經(jīng)元往往不能解決,因此要解決非線(xiàn)性可分問(wèn)題,需要考慮使用多層功能神經(jīng)元,即神經(jīng)網(wǎng)絡(luò )。多層神經(jīng)網(wǎng)絡(luò )的拓撲結構如下圖所示:
在神經(jīng)網(wǎng)絡(luò )中,輸入層與輸出層之間的層稱(chēng)為隱含層或隱層(hidden layer),隱層和輸出層的神經(jīng)元都是具有激活函數的功能神經(jīng)元。只需包含一個(gè)隱層便可以稱(chēng)為多層神經(jīng)網(wǎng)絡(luò ),常用的神經(jīng)網(wǎng)絡(luò )稱(chēng)為“多層前饋神經(jīng)網(wǎng)絡(luò )”(multi-layer feedforward neural network),該結構滿(mǎn)足以下幾個(gè)特點(diǎn):
- 每層神經(jīng)元與下一層神經(jīng)元之間完全互連
- 神經(jīng)元之間不存在同層連接
- 神經(jīng)元之間不存在跨層連接
根據上面的特點(diǎn)可以得知:這里的“前饋”指的是網(wǎng)絡(luò )拓撲結構中不存在環(huán)或回路,而不是指該網(wǎng)絡(luò )只能向前傳播而不能向后傳播(下節中的BP神經(jīng)網(wǎng)絡(luò )正是基于前饋神經(jīng)網(wǎng)絡(luò )而增加了反饋調節機制)。神經(jīng)網(wǎng)絡(luò )的學(xué)習過(guò)程就是根據訓練數據來(lái)調整神經(jīng)元之間的“連接權”以及每個(gè)神經(jīng)元的閾值,換句話(huà)說(shuō):神經(jīng)網(wǎng)絡(luò )所學(xué)習到的東西都蘊含在網(wǎng)絡(luò )的連接權與閾值中。
BP神經(jīng)網(wǎng)絡(luò )算法
一般而言,只需包含一個(gè)足夠多神經(jīng)元的隱層,就能以任意精度逼近任意復雜度的連續函數[Hornik et al.,1989],故下面以訓練單隱層的前饋神經(jīng)網(wǎng)絡(luò )為例,介紹BP神經(jīng)網(wǎng)絡(luò )的算法思想。
上圖為一個(gè)單隱層前饋神經(jīng)網(wǎng)絡(luò )的拓撲結構,BP神經(jīng)網(wǎng)絡(luò )算法也使用梯度下降法(gradient descent),以單個(gè)樣本的均方誤差的負梯度方向對權重進(jìn)行調節??梢钥闯觯築P算法首先將誤差反向傳播給隱層神經(jīng)元,調節隱層到輸出層的連接權重與輸出層神經(jīng)元的閾值;接著(zhù)根據隱含層神經(jīng)元的均方誤差,來(lái)調節輸入層到隱含層的連接權值與隱含層神經(jīng)元的閾值。BP算法基本的推導過(guò)程與感知機的推導過(guò)程原理是相同的,下面給出調整隱含層到輸出層的權重調整規則的推導過(guò)程:
學(xué)習率η∈(0,1)控制著(zhù)沿反梯度方向下降的步長(cháng),若步長(cháng)太大則下降太快容易產(chǎn)生震蕩,若步長(cháng)太小則收斂速度太慢,一般地常把η設置為0.1,有時(shí)更新權重時(shí)會(huì )將輸出層與隱含層設置為不同的學(xué)習率。BP算法的基本流程如下所示:
BP算法的更新規則是基于每個(gè)樣本的預測值與真實(shí)類(lèi)標的均方誤差來(lái)進(jìn)行權值調節,即BP算法每次更新只針對于單個(gè)樣例。需要注意的是:BP算法的最終目標是要最小化整個(gè)訓練集D上的累積誤差,即:
如果基于累積誤差最小化的更新規則,則得到了累積誤差逆傳播算法(accumulated error backpropagation),即每次讀取全部的數據集一遍,進(jìn)行一輪學(xué)習,從而基于當前的累積誤差進(jìn)行權值調整,因此參數更新的頻率相比標準BP算法低了很多,但在很多任務(wù)中,尤其是在數據量很大的時(shí)候,往往標準BP算法會(huì )獲得較好的結果。另外對于如何設置隱層神經(jīng)元個(gè)數的問(wèn)題,至今仍然沒(méi)有好的解決方案,常使用“試錯法”進(jìn)行調整。
- 早停:將數據分為訓練集與測試集,訓練集用于學(xué)習,測試集用于評估性能,若在訓練過(guò)程中,訓練集的累積誤差降低,而測試集的
累積誤差升高,則停止訓練。 - 引入正則化(regularization):基本思想是在累積誤差函數中增加一個(gè)用于描述網(wǎng)絡(luò )復雜度的部分,例如所有權值與閾值的平方和,
其中λ∈(0,1)用于對累積經(jīng)驗誤差與網(wǎng)絡(luò )復雜度這兩項進(jìn)行折中,常通過(guò)交叉驗證法來(lái)估計。
全局最小與局部最小
模型學(xué)習的過(guò)程實(shí)質(zhì)上就是一個(gè)尋找最優(yōu)參數的過(guò)程,例如BP算法試圖通過(guò)最速下降來(lái)尋找使得累積經(jīng)驗誤差最小的權值與閾值,在談到最優(yōu)時(shí),一般會(huì )提到局部極?。╨ocal minimum)和全局最?。╣lobal minimum)。
- 局部極小解:參數空間中的某個(gè)點(diǎn),其鄰域點(diǎn)的誤差函數值均不小于該點(diǎn)的誤差函數值。
- 全局最小解:參數空間中的某個(gè)點(diǎn),所有其他點(diǎn)的誤差函數值均不小于該點(diǎn)的誤差函數值。
要成為局部極小點(diǎn),只要滿(mǎn)足該點(diǎn)在參數空間中的梯度為零。局部極小可以有多個(gè),而全局最小只有一個(gè)。全局最小一定是局部極小,但局部最小卻不一定是全局最小。顯然在很多機器學(xué)習算法中,都試圖找到目標函數的全局最小。梯度下降法的主要思想就是沿著(zhù)負梯度方向去搜索最優(yōu)解,負梯度方向是函數值下降最快的方向,若迭代到某處的梯度為0,則表示達到一個(gè)局部最小,參數更新停止。因此在現實(shí)任務(wù)中,通常使用以下策略盡可能地去接近全局最小。
- 以多組不同參數值初始化多個(gè)神經(jīng)網(wǎng)絡(luò ),按標準方法訓練,迭代停止后,取其中誤差最小的解作為最終參數。
- 使用“模擬退火”技術(shù),這里不做具體介紹。
- 使用隨機梯度下降,即在計算梯度時(shí)加入了隨機因素,使得在局部最小時(shí),計算的梯度仍可能不為0,從而迭代可以繼續進(jìn)行。
