from http://blog.sina.com.cn/s/blog_96b836170102vs2l.html MLP整體思路。 帶公式版本請見:
http://blog.csdn.net/qingyanyichen/article/details/47984373
單層感知器是最簡單的神經(jīng)網(wǎng)絡(luò),。它包含輸入層和輸出層,,輸入層和輸出層直接相連,。
單個(gè)感知器無法解決非線性問題,由多個(gè)感知器組合可以來實(shí)現(xiàn)非線性分類面。
但是簡單的組合,,得到的依舊是線性分類器,為了解決這個(gè)問題,,有了MLP,MLP是單層感知機(jī)的推廣,,與單層感知機(jī)的本質(zhì)區(qū)別是增加了隱含層,。
隱藏層的神經(jīng)元與輸入層是全連接的,假設(shè)輸入層用向量X表示,,則隱藏層的輸出就是f(W1X+b1),,W1是權(quán)重(也叫連接系數(shù)),b1是偏置,,函數(shù)f可以是常用的sigmoid函數(shù)或者tanh函數(shù),,特點(diǎn)是連續(xù)可微。,。
最后就是輸出層,,其實(shí)隱藏層到輸出層可以看成是一個(gè)多類別的邏輯回歸,也即softmax回歸,,所以輸出層的輸出就是softmax(W2X1+b2),,X1表示隱藏層的輸出f(W1X+b1)。
因此,,MLP所有的參數(shù)就是各個(gè)層之間的連接權(quán)重以及偏置,,包括W1、b1,、W2,、b2。對于一個(gè)具體的問題,,如何確定這些參數(shù),。求解最佳的參數(shù)是一個(gè)最優(yōu)化問題,解決最優(yōu)化問題,,最簡單的就是梯度下降法了(SGD):首先隨機(jī)初始化所有參數(shù),,然后迭代地訓(xùn)練,不斷地計(jì)算梯度和更新參數(shù),,直到滿足某個(gè)條件為止(比如誤差足夠小,、迭代次數(shù)足夠多時(shí))。這個(gè)過程涉及到代價(jià)函數(shù),、規(guī)則化(Regularization),、學(xué)習(xí)速率(learning
rate)、梯度計(jì)算等。
因?yàn)檫@種聯(lián)接圖沒有閉環(huán)或回路。我們可以用反向傳播法(back
propagation)來訓(xùn)練上述這個(gè)神經(jīng)網(wǎng)絡(luò)。
反向傳播算法分二步進(jìn)行,,即信號的正向傳播和誤差的反向傳播。這兩個(gè)過程的工作簡述如下,。
1.正向傳播
在逐層處理的過程中,每一層神經(jīng)元的狀態(tài)只對下一層神經(jīng)元的狀態(tài)產(chǎn)生影響,。在輸出層把現(xiàn)行輸出和期望輸出進(jìn)行比較,,如果現(xiàn)行輸出不等于期望輸出,則進(jìn)入反向傳播過程,。
2.反向傳播
反向傳播時(shí),,把誤差信號按原來正向傳播的通路反向傳回,并對每個(gè)隱層的各個(gè)神經(jīng)元的權(quán)系數(shù)進(jìn)行修改,,以望誤差信號趨向最小,。
BP算法具體流程如下:
①前向傳播:給各連接權(quán)值分別賦一個(gè)區(qū)間(-1,1)內(nèi)的隨機(jī)數(shù),,選擇一個(gè)數(shù)據(jù)輸入,,從第一層開始,計(jì)算每一層輸出并保存各層輸出,。
②反向傳播:計(jì)算最后一層輸出和目標(biāo)輸出的差e=t-a,并根據(jù)公式計(jì)算最后一層的敏感性,最后一層為線性函數(shù),,求導(dǎo)為1。按照公式計(jì)算前一層的敏感性,,直到第一層.
③調(diào)權(quán)值:可以從第一層開始,,也可以從最后一層開始進(jìn)行調(diào)權(quán),。
④選擇下一個(gè)輸入,,繼續(xù)上面的過程,直到網(wǎng)絡(luò)收斂為止,。
BP算法存在的問題:
(1)梯度越來越稀疏:從頂層越往下,,誤差校正信號越來越小,;
(2)收斂到局部最小值:尤其是從遠(yuǎn)離最優(yōu)區(qū)域開始的時(shí)候(隨機(jī)值初始化會導(dǎo)致這種情況的發(fā)生),;
(3)一般,我們只能用有標(biāo)簽的數(shù)據(jù)來訓(xùn)練:但大部分的數(shù)據(jù)是沒標(biāo)簽的,,而大腦可以從沒有標(biāo)簽的的數(shù)據(jù)中學(xué)習(xí),。
由此提出改進(jìn)算法:
基于動量的BP學(xué)習(xí)算法
由于BP算法的收斂速度比較慢,可能有多個(gè)局部極小點(diǎn),,有不穩(wěn)定性,,故提出基于動量的BP算法。它能平滑振蕩提高收斂性能。故引入一個(gè)動量系數(shù) ,當(dāng)動量系數(shù)增加時(shí),,振蕩減小,,從而有利于減少振蕩數(shù)目,保持平均值,。
動量可以維持算法穩(wěn)定的前提下使用更高的學(xué)習(xí)速度,。動量法降低了網(wǎng)絡(luò)對于誤差曲面局部細(xì)節(jié)的敏感性,有效的抑制網(wǎng)絡(luò)陷入局部最小,。
可變學(xué)習(xí)速度的BP算法
它試圖在較平坦的曲面提高學(xué)習(xí)速度,,而在斜率增大時(shí)減小學(xué)習(xí)速度。它的規(guī)則如下:
1)如果誤差平方(在整個(gè)訓(xùn)練集上)在權(quán)值更新后增加了百分?jǐn)?shù)z (典型值為1%至5%),,則取消權(quán)值更新,,學(xué)習(xí)速度乘上一個(gè)因子 (1 > r >
0),并且動量系數(shù) g
置為 0,。
2)如果誤差平方在權(quán)值更新后減少,,則接受權(quán)值更新,并且學(xué)習(xí)速度乘上一個(gè)因子
h>1,,如果動量系數(shù)
g 先前被置為0,,則恢復(fù)到先前的值。
3)如果誤差平方的增加少于z,,則接受權(quán)值更新,,但是學(xué)習(xí)速度和動量系數(shù)不變。
改進(jìn)的BP算法也有些缺點(diǎn):需要設(shè)置一些額外的參數(shù),,并且算法性能對參數(shù)變化很敏感,,參數(shù)的選擇還和問題有關(guān)。容易使一些能收斂的數(shù)據(jù)變得不可收斂,。目前還有許多的改進(jìn)算法,,這些方法中應(yīng)用最廣的是增加了沖量(動量)項(xiàng)的改進(jìn)BP算法。
|