机器学习——前馈神经网络
一、神經(jīng)網(wǎng)絡(luò)基礎(chǔ)
1. 神經(jīng)元模型
神經(jīng)網(wǎng)絡(luò)中最基本的單元是神經(jīng)元模型(neuron)。
細(xì)胞體分為兩部分,前一部分計(jì)算總輸入值(即輸入信號(hào)的加權(quán)和,或者說(shuō)累積電平),后一部分先計(jì)算總輸入值與該神經(jīng)元閾值的差值,然后通過(guò)激活函數(shù)(activation function)的處理,產(chǎn)生輸出從軸突傳送給其它神經(jīng)元。M-P神經(jīng)元模型如下圖所示:
2. 激活函數(shù)
與線性分類十分相似,神經(jīng)元模型最理想的激活函數(shù)也是階躍函數(shù),即將神經(jīng)元輸入值與閾值的差值映射為輸出值1或0,若差值大于零輸出1,對(duì)應(yīng)興奮;若差值小于零則輸出0,對(duì)應(yīng)抑制。但階躍函數(shù)不連續(xù),不光滑,故在M-P神經(jīng)元模型中,也采用Sigmoid函數(shù)來(lái)近似, Sigmoid函數(shù)將較大范圍內(nèi)變化的輸入值擠壓到 (0,1) 輸出值范圍內(nèi),所以也稱為擠壓函數(shù)(squashing function)。
?
更多激活函數(shù)參考: https://www.jianshu.com/p/22d9720dbf1a
3. 感知機(jī)(Perceptron)
?????? 感知機(jī)(Perceptron)是由兩層神經(jīng)元組成的一個(gè)簡(jiǎn)單模型,但只有輸出層是M-P神經(jīng)元,即只有輸出層神經(jīng)元進(jìn)行激活函數(shù)處理,也稱為功能神經(jīng)元(functional neuron);輸入層只是接受外界信號(hào)(樣本屬性)并傳遞給輸出層(輸入層的神經(jīng)元個(gè)數(shù)等于樣本的屬性數(shù)目),而沒(méi)有激活函數(shù)。這樣一來(lái),感知機(jī)與之前線性模型中的對(duì)數(shù)幾率回歸的思想基本是一樣的,都是通過(guò)對(duì)屬性加權(quán)與另一個(gè)常數(shù)求和,再使用sigmoid函數(shù)將這個(gè)輸出值壓縮到0-1之間,從而解決分類問(wèn)題。不同的是感知機(jī)的輸出層應(yīng)該可以有多個(gè)神經(jīng)元,從而可以實(shí)現(xiàn)多分類問(wèn)題,同時(shí)兩個(gè)模型所用的參數(shù)估計(jì)方法十分不同。
感知機(jī)權(quán)重學(xué)習(xí)過(guò)程
感知機(jī)的學(xué)習(xí)采用隨機(jī)梯度下降算法(SGD)該算法的說(shuō)明可以參考:http://www.cnblogs.com/NeilZhang/p/8454890.html
??????
??????? 其中 η∈(0,1)稱為學(xué)習(xí)率,可以看出感知機(jī)是通過(guò)逐個(gè)樣本輸入來(lái)更新權(quán)重,首先設(shè)定好初始權(quán)重(一般為隨機(jī)),逐個(gè)地輸入樣本數(shù)據(jù),若輸出值與真實(shí)標(biāo)記相同則繼續(xù)輸入下一個(gè)樣本,若不一致則更新權(quán)重,然后再重新逐個(gè)檢驗(yàn),直到每個(gè)樣本數(shù)據(jù)的輸出值都與真實(shí)標(biāo)記相同。容易看出:感知機(jī)模型總是能將訓(xùn)練數(shù)據(jù)的每一個(gè)樣本都預(yù)測(cè)正確,和決策樹(shù)模型總是能將所有訓(xùn)練數(shù)據(jù)都分開(kāi)一樣,感知機(jī)模型很容易產(chǎn)生過(guò)擬合問(wèn)題。
局限性:
?????? 感知機(jī)只有輸出層神經(jīng)元進(jìn)行激活函數(shù)處理,即只擁有一層功能神經(jīng)元,其學(xué)習(xí)能力非常有限。 可以證明若二類模式是線性可分的,即存在一個(gè)線性超平面能將他們分開(kāi),則感知機(jī)的學(xué)習(xí)一定會(huì)收斂(converge)而求得適當(dāng)?shù)臋?quán)向量w = (w1,w2,w3…..); 否則感知機(jī)學(xué)習(xí)過(guò)程將會(huì)發(fā)生震蕩,w難以穩(wěn)定下來(lái),不能求得合適解。
???? 要解決非線性可分問(wèn)題需要考慮使用多層功能神經(jīng)元,即神經(jīng)網(wǎng)絡(luò)。(神經(jīng)網(wǎng)絡(luò)發(fā)展史上經(jīng)典問(wèn)題:異或問(wèn)題單層網(wǎng)絡(luò)不能解決)
?
4.神經(jīng)網(wǎng)絡(luò)
多層神經(jīng)網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)如下圖所示:
在神經(jīng)網(wǎng)絡(luò)中,輸入層與輸出層之間的層稱為隱含層或隱層(hidden layer),隱層和輸出層的神經(jīng)元都是具有激活函數(shù)的功能神經(jīng)元。只需包含一個(gè)隱層便可以稱為多層神經(jīng)網(wǎng)絡(luò),常用的神經(jīng)網(wǎng)絡(luò)稱為“多層前饋神經(jīng)網(wǎng)絡(luò)”(multi-layer feedforward neural network),該結(jié)構(gòu)滿足以下幾個(gè)特點(diǎn):
* 每層神經(jīng)元與下一層神經(jīng)元之間完全互連
* 神經(jīng)元之間不存在同層連接
* 神經(jīng)元之間不存在跨層連接
根據(jù)上面的特點(diǎn)可以得知:這里的“前饋”指的是網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)中不存在環(huán)或回路,而不是指該網(wǎng)絡(luò)只能向前傳播而不能向后傳播
?
二、誤差逆?zhèn)鞑ニ惴?#xff08;BP神經(jīng)網(wǎng)絡(luò)算法)
????? 神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)主要蘊(yùn)含在權(quán)重和閾值中,多層網(wǎng)絡(luò)使用上面簡(jiǎn)單感知機(jī)的權(quán)重調(diào)整規(guī)則顯然不夠用了,BP神經(jīng)網(wǎng)絡(luò)算法即誤差逆?zhèn)鞑ニ惴?#xff08;error BackPropagation)正是為學(xué)習(xí)多層前饋神經(jīng)網(wǎng)絡(luò)而設(shè)計(jì),BP神經(jīng)網(wǎng)絡(luò)算法是迄今為止最成功的的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)算法。
?
上圖的網(wǎng)絡(luò)中有(d+l+1)*q+l個(gè)參數(shù)需要確定:輸入層到隱層的d×q個(gè)權(quán)重,隱層到輸出層q×l個(gè)權(quán)重、q個(gè)隱層神經(jīng)元的閾值、l個(gè)輸出神經(jīng)元的閾值。
?????? 上圖為一個(gè)單隱層前饋神經(jīng)網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),BP神經(jīng)網(wǎng)絡(luò)算法也使用梯度下降法(gradient descent),以單個(gè)樣本的均方誤差的負(fù)梯度方向?qū)?quán)重進(jìn)行調(diào)節(jié)(sgd算法)。
????????
?????? 學(xué)習(xí)率η∈(0,1)控制著沿反梯度方向下降的步長(zhǎng),若步長(zhǎng)太大則下降太快容易產(chǎn)生震蕩,若步長(zhǎng)太小則收斂速度太慢,一般地常把η設(shè)置為0.1,有時(shí)更新權(quán)重時(shí)會(huì)將輸出層與隱含層設(shè)置為不同的學(xué)習(xí)率。
????? 可以看出:BP算法首先將誤差反向傳播給隱層神經(jīng)元,調(diào)節(jié)隱層到輸出層的連接權(quán)重與輸出層神經(jīng)元的閾值;接著根據(jù)隱含層神經(jīng)元的均方誤差,來(lái)調(diào)節(jié)輸入層到隱含層的連接權(quán)值與隱含層神經(jīng)元的閾值。BP算法基本的推導(dǎo)過(guò)程與感知機(jī)的推導(dǎo)過(guò)程原理是相同的,下面給出調(diào)整隱含層到輸出層的權(quán)重調(diào)整規(guī)則的推導(dǎo)過(guò)程:
1. 誤差函數(shù)
?
2. 具體推導(dǎo)過(guò)程
其它參數(shù)的推算過(guò)程相似,參考《機(jī)器學(xué)習(xí)》中神經(jīng)網(wǎng)絡(luò)的介紹。
上述算法的推導(dǎo)是基于每次僅針對(duì)一個(gè)訓(xùn)練樣例更新權(quán)重和閾值(標(biāo)準(zhǔn)BP算法),這種算法參數(shù)更新十分頻繁,可能會(huì)出現(xiàn)“抵消”現(xiàn)象。累計(jì)BP算法針對(duì)累計(jì)誤差最小化,每次讀取整個(gè)數(shù)據(jù)集一遍后才對(duì)參數(shù)進(jìn)行更新,其參數(shù)更新的頻率低得多。
?
3. 過(guò)擬合
BP神經(jīng)網(wǎng)絡(luò)強(qiáng)大的學(xué)習(xí)能力常常容易造成過(guò)擬合問(wèn)題,有以下兩種策略來(lái)緩解BP網(wǎng)絡(luò)的過(guò)擬合問(wèn)題:
-
早停:將數(shù)據(jù)分為訓(xùn)練集與測(cè)試集,訓(xùn)練集用于學(xué)習(xí),測(cè)試集用于評(píng)估性能,若在訓(xùn)練過(guò)程中,訓(xùn)練集的累積誤差降低,而測(cè)試集的累積誤差升高,則停止訓(xùn)練。
-
引入正則化(regularization):基本思想是在累積誤差函數(shù)中增加一個(gè)用于描述網(wǎng)絡(luò)復(fù)雜度的部分,例如所有權(quán)值與閾值的平方和,其中λ∈(0,1)用于對(duì)累積經(jīng)驗(yàn)誤差與網(wǎng)絡(luò)復(fù)雜度這兩項(xiàng)進(jìn)行折中,常通過(guò)交叉驗(yàn)證法來(lái)估計(jì)。
?
4. 全局最小與局部最小
?
????? 要成為局部極小點(diǎn),只要滿足該點(diǎn)在參數(shù)空間中的梯度為零。局部極小可以有多個(gè),而全局最小只有一個(gè)。全局最小一定是局部極小,但局部最小卻不一定是全局最小。顯然在很多機(jī)器學(xué)習(xí)算法中,都試圖找到目標(biāo)函數(shù)的全局最小。梯度下降法的主要思想就是沿著負(fù)梯度方向去搜索最優(yōu)解,負(fù)梯度方向是函數(shù)值下降最快的方向,若迭代到某處的梯度為0,則表示達(dá)到一個(gè)局部最小,參數(shù)更新停止。因此在現(xiàn)實(shí)任務(wù)中,通常使用以下策略盡可能地去接近全局最小。
* 局部極小解:參數(shù)空間中的某個(gè)點(diǎn),其鄰域點(diǎn)的誤差函數(shù)值均不小于該點(diǎn)的誤差函數(shù)值。
* 全局最小解:參數(shù)空間中的某個(gè)點(diǎn),所有其他點(diǎn)的誤差函數(shù)值均不小于該點(diǎn)的誤差函數(shù)值。
跳出局部最小的方法:
- 以多組不同參數(shù)值初始化多個(gè)神經(jīng)網(wǎng)絡(luò),按標(biāo)準(zhǔn)方法訓(xùn)練,迭代停止后,取其中誤差最小的解作為最終參數(shù)。
- 使用“模擬退火”技術(shù)
- 使用隨機(jī)梯度下降,即在計(jì)算梯度時(shí)加入了隨機(jī)因素,使得在局部最小時(shí),計(jì)算的梯度仍可能不為0,從而迭代可以繼續(xù)進(jìn)行。
?
三、神經(jīng)網(wǎng)絡(luò)可視化
推薦一個(gè)在線測(cè)試神經(jīng)網(wǎng)絡(luò)的網(wǎng)站:http://playground.tensorflow.org/
下圖為上述網(wǎng)站通過(guò)兩個(gè)神經(jīng)元解決異或問(wèn)題:
?
?
其它機(jī)器學(xué)習(xí)算法:
監(jiān)督學(xué)習(xí)——隨機(jī)梯度下降算法(sgd)和批梯度下降算法(bgd)
監(jiān)督學(xué)習(xí)——決策樹(shù)理論與實(shí)踐(上):分類決策樹(shù)
監(jiān)督學(xué)習(xí)——決策樹(shù)理論與實(shí)踐(下):回歸決策樹(shù)(CART)
監(jiān)督學(xué)習(xí)——K鄰近算法及數(shù)字識(shí)別實(shí)踐
監(jiān)督學(xué)習(xí)——樸素貝葉斯分類理論與實(shí)踐
監(jiān)督學(xué)習(xí)——logistic進(jìn)行二分類(python)
監(jiān)督學(xué)習(xí)——AdaBoost元算法提高分類性能
無(wú)監(jiān)督學(xué)習(xí)——K-均值聚類算法對(duì)未標(biāo)注數(shù)據(jù)分組
?
參考:
《機(jī)器學(xué)習(xí)》 周志華
激活函數(shù): https://blog.csdn.net/u011826404/article/details/53767428
隨機(jī)梯度下降與批梯度下降: http://www.cnblogs.com/NeilZhang/p/8454890.html
轉(zhuǎn)載于:https://www.cnblogs.com/NeilZhang/p/9347233.html
總結(jié)
以上是生活随笔為你收集整理的机器学习——前馈神经网络的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: POST方式发起下载请求
- 下一篇: modbus tcp 入门详解