【DW 11月-西瓜書學(xué)習(xí)筆記】Task04:第五章 神經(jīng)網(wǎng)絡(luò)

第五章 神經(jīng)網(wǎng)絡(luò)

所謂神經(jīng)網(wǎng)絡(luò),目前用得最廣泛的一個(gè)定義是“神經(jīng)網(wǎng)絡(luò)是由具有適應(yīng)性的簡單單元組成的廣泛并行互連的網(wǎng)絡(luò),它的組織能夠模擬生物神經(jīng)系統(tǒng)對(duì)真實(shí)世界物體所做出的交互反應(yīng)”。

5.1? 神經(jīng)元模型

神經(jīng)網(wǎng)絡(luò)中最基本的單元是神經(jīng)元模型(neuron)。在生物神經(jīng)網(wǎng)絡(luò)的原始機(jī)制中,每個(gè)神經(jīng)元通常都有多個(gè)樹突(dendrite),一個(gè)軸突(axon)和一個(gè)細(xì)胞體(cell body),樹突短而多分支,軸突長而只有一個(gè);在功能上,樹突用于傳入其它神經(jīng)元傳遞的神經(jīng)沖動(dòng),而軸突用于將神經(jīng)沖動(dòng)傳出到其它神經(jīng)元,當(dāng)樹突或細(xì)胞體傳入的神經(jīng)沖動(dòng)使得神經(jīng)元興奮時(shí),該神經(jīng)元就會(huì)通過軸突向其它神經(jīng)元傳遞興奮。


一直沿用至今的“M-P神經(jīng)元模型”正是對(duì)這一結(jié)構(gòu)進(jìn)行了抽象,也稱“閾值邏輯單元“,其中樹突對(duì)應(yīng)于輸入部分,每個(gè)神經(jīng)元收到n個(gè)其他神經(jīng)元傳遞過來的輸入信號(hào),這些信號(hào)通過帶權(quán)重的連接傳遞給細(xì)胞體,這些權(quán)重又稱為連接權(quán)(connection weight)。細(xì)胞體分為兩部分,前一部分計(jì)算總輸入值(即輸入信號(hào)的加權(quán)和,或者說累積電平),后一部分先計(jì)算總輸入值與該神經(jīng)元閾值的差值,然后通過激活函數(shù)(activation function)的處理,產(chǎn)生輸出從軸突傳送給其它神經(jīng)元。M-P神經(jīng)元模型如下圖所示:

與線性分類十分相似,神經(jīng)元模型最理想的激活函數(shù)也是階躍函數(shù),即將神經(jīng)元輸入值與閾值的差值映射為輸出值1或0,若差值大于零輸出1,對(duì)應(yīng)興奮;若差值小于零則輸出0,對(duì)應(yīng)抑制。但階躍函數(shù)不連續(xù),不光滑,故在M-P神經(jīng)元模型中,也采用Sigmoid函數(shù)來近似, Sigmoid函數(shù)將較大范圍內(nèi)變化的輸入值擠壓到 (0,1) 輸出值范圍內(nèi),所以也稱為擠壓函數(shù)(squashing function)。

將多個(gè)神經(jīng)元按一定的層次結(jié)構(gòu)連接起來,就得到了神經(jīng)網(wǎng)絡(luò)。它是一種包含多個(gè)參數(shù)的模型,比方說10個(gè)神經(jīng)元兩兩連接,則有100個(gè)參數(shù)需要學(xué)習(xí)(每個(gè)神經(jīng)元有9個(gè)連接權(quán)以及1個(gè)閾值),若將每個(gè)神經(jīng)元都看作一個(gè)函數(shù),則整個(gè)神經(jīng)網(wǎng)絡(luò)就是由這些函數(shù)相互嵌套而成。

5.2 感知機(jī)和多層網(wǎng)絡(luò)

感知機(jī)(Perceptron)是由兩層神經(jīng)元組成的一個(gè)簡單模型,但只有輸出層是M-P神經(jīng)元,即只有輸出層神經(jīng)元進(jìn)行激活函數(shù)處理,也稱為功能神經(jīng)元(functional neuron);輸入層只是接受外界信號(hào)(樣本屬性)并傳遞給輸出層(輸入層的神經(jīng)元個(gè)數(shù)等于樣本的屬性數(shù)目),而沒有激活函數(shù)。這樣一來,感知機(jī)與之前線性模型中的對(duì)數(shù)幾率回歸的思想基本是一樣的,都是通過對(duì)屬性加權(quán)與另一個(gè)常數(shù)求和,再使用sigmoid函數(shù)將這個(gè)輸出值壓縮到0-1之間,從而解決分類問題。不同的是感知機(jī)的輸出層應(yīng)該可以有多個(gè)神經(jīng)元,從而可以實(shí)現(xiàn)多分類問題,同時(shí)兩個(gè)模型所用的參數(shù)估計(jì)方法十分不同。

給定訓(xùn)練集,則感知機(jī)的n+1個(gè)參數(shù)(n個(gè)權(quán)重+1個(gè)閾值)都可以通過學(xué)習(xí)得到。閾值Θ可以看作一個(gè)輸入值固定為-1的啞結(jié)點(diǎn)的權(quán)重ωn+1,即假設(shè)有一個(gè)固定輸入xn+1=-1的輸入層神經(jīng)元,其對(duì)應(yīng)的權(quán)重為ωn+1,這樣就把權(quán)重和閾值統(tǒng)一為權(quán)重的學(xué)習(xí)了。簡單感知機(jī)的結(jié)構(gòu)如下圖所示:

感知機(jī)權(quán)重的學(xué)習(xí)規(guī)則如下:對(duì)于訓(xùn)練樣本(x,y),當(dāng)該樣本進(jìn)入感知機(jī)學(xué)習(xí)后,會(huì)產(chǎn)生一個(gè)輸出值,若該輸出值與樣本的真實(shí)標(biāo)記不一致,則感知機(jī)會(huì)對(duì)權(quán)重進(jìn)行調(diào)整,若激活函數(shù)為階躍函數(shù),則調(diào)整的方法為(基于梯度下降法):

其中 η∈(0,1)稱為學(xué)習(xí)率,可以看出感知機(jī)是通過逐個(gè)樣本輸入來更新權(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ù)測正確,和決策樹模型總是能將所有訓(xùn)練數(shù)據(jù)都分開一樣,感知機(jī)模型很容易產(chǎn)生過擬合問題。

由于感知機(jī)模型只有一層功能神經(jīng)元,因此其功能十分有限,只能處理線性可分的問題,對(duì)于這類問題,感知機(jī)的學(xué)習(xí)過程一定會(huì)收斂(converge),因此總是可以求出適當(dāng)?shù)臋?quán)值。但是對(duì)于像書上提到的異或問題,只通過一層功能神經(jīng)元往往不能解決,因此要解決非線性可分問題,需要考慮使用多層功能神經(jīng)元,即神經(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ò)只能向前傳播而不能向后傳播(下節(jié)中的BP神經(jīng)網(wǎng)絡(luò)正是基于前饋神經(jīng)網(wǎng)絡(luò)而增加了反饋調(diào)節(jié)機(jī)制)。神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)過程就是根據(jù)訓(xùn)練數(shù)據(jù)來調(diào)整神經(jīng)元之間的“連接權(quán)”以及每個(gè)神經(jīng)元的閾值,換句話說:神經(jīng)網(wǎng)絡(luò)所學(xué)習(xí)到的東西都蘊(yùn)含在網(wǎng)絡(luò)的連接權(quán)與閾值中。

5.3 BP神經(jīng)網(wǎng)絡(luò)算法

由上面可以得知:神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)主要蘊(yùn)含在權(quán)重和閾值中,多層網(wǎng)絡(luò)使用上面簡單感知機(jī)的權(quán)重調(diào)整規(guī)則顯然不夠用了,BP神經(jīng)網(wǎng)絡(luò)算法即誤差逆?zhèn)鞑ニ惴ǎ╡rror BackPropagation)正是為學(xué)習(xí)多層前饋神經(jīng)網(wǎng)絡(luò)而設(shè)計(jì),BP神經(jīng)網(wǎng)絡(luò)算法是迄今為止最成功的的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)算法。

一般而言,只需包含一個(gè)足夠多神經(jīng)元的隱層,就能以任意精度逼近任意復(fù)雜度的連續(xù)函數(shù)[Hornik et al.,1989],故下面以訓(xùn)練單隱層的前饋神經(jīng)網(wǎng)絡(luò)為例,介紹BP神經(jīng)網(wǎng)絡(luò)的算法思想。


上圖為一個(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é)。可以看出:BP算法首先將誤差反向傳播給隱層神經(jīng)元,調(diào)節(jié)隱層到輸出層的連接權(quán)重與輸出層神經(jīng)元的閾值;接著根據(jù)隱含層神經(jīng)元的均方誤差,來調(diào)節(jié)輸入層到隱含層的連接權(quán)值與隱含層神經(jīng)元的閾值。BP算法基本的推導(dǎo)過程與感知機(jī)的推導(dǎo)過程原理是相同的,下面給出調(diào)整隱含層到輸出層的權(quán)重調(diào)整規(guī)則的推導(dǎo)過程:

學(xué)習(xí)率η∈(0,1)控制著沿反梯度方向下降的步長,若步長太大則下降太快容易產(chǎn)生震蕩,若步長太小則收斂速度太慢,一般地常把η設(shè)置為0.1,有時(shí)更新權(quán)重時(shí)會(huì)將輸出層與隱含層設(shè)置為不同的學(xué)習(xí)率。BP算法的基本流程如下所示:

BP算法的更新規(guī)則是基于每個(gè)樣本的預(yù)測值與真實(shí)類標(biāo)的均方誤差來進(jìn)行權(quán)值調(diào)節(jié),即BP算法每次更新只針對(duì)于單個(gè)樣例。需要注意的是:BP算法的最終目標(biāo)是要最小化整個(gè)訓(xùn)練集D上的累積誤差,即:

如果基于累積誤差最小化的更新規(guī)則,則得到了累積誤差逆?zhèn)鞑ニ惴ǎ╝ccumulated error backpropagation),即每次讀取全部的數(shù)據(jù)集一遍,進(jìn)行一輪學(xué)習(xí),從而基于當(dāng)前的累積誤差進(jìn)行權(quán)值調(diào)整,因此參數(shù)更新的頻率相比標(biāo)準(zhǔn)BP算法低了很多,但在很多任務(wù)中,尤其是在數(shù)據(jù)量很大的時(shí)候,往往標(biāo)準(zhǔn)BP算法會(huì)獲得較好的結(jié)果。另外對(duì)于如何設(shè)置隱層神經(jīng)元個(gè)數(shù)的問題,至今仍然沒有好的解決方案,常使用“試錯(cuò)法”進(jìn)行調(diào)整。

前面提到,BP神經(jīng)網(wǎng)絡(luò)強(qiáng)大的學(xué)習(xí)能力常常容易造成過擬合問題,有以下兩種策略來緩解BP網(wǎng)絡(luò)的過擬合問題:

早停:將數(shù)據(jù)分為訓(xùn)練集與測試集,訓(xùn)練集用于學(xué)習(xí),測試集用于評(píng)估性能,若在訓(xùn)練過程中,訓(xùn)練集的累積誤差降低,而測試集的累積誤差升高,則停止訓(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)行折中,常通過交叉驗(yàn)證法來估計(jì)。


5.4 全局最小和局部極小

模型學(xué)習(xí)的過程實(shí)質(zhì)上就是一個(gè)尋找最優(yōu)參數(shù)的過程,例如BP算法試圖通過最速下降來尋找使得累積經(jīng)驗(yàn)誤差最小的權(quán)值與閾值,在談到最優(yōu)時(shí),一般會(huì)提到局部極小(local minimum)和全局最?。╣lobal minimum)。

* 局部極小解:參數(shù)空間中的某個(gè)點(diǎn),其鄰域點(diǎn)的誤差函數(shù)值均不小于該點(diǎn)的誤差函數(shù)值。?

* 全局最小解:參數(shù)空間中的某個(gè)點(diǎn),所有其他點(diǎn)的誤差函數(shù)值均不小于該點(diǎn)的誤差函數(shù)值。?


要成為局部極小點(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è)神經(jīng)網(wǎng)絡(luò),按標(biāo)準(zhǔn)方法訓(xùn)練,迭代停止后,取其中誤差最小的解作為最終參數(shù)。?

* 使用“模擬退火”技術(shù),這里不做具體介紹。?

* 使用隨機(jī)梯度下降,即在計(jì)算梯度時(shí)加入了隨機(jī)因素,使得在局部最小時(shí),計(jì)算的梯度仍可能不為0,從而迭代可以繼續(xù)進(jìn)行。

5.5 深度學(xué)習(xí)

理論上,參數(shù)越多,模型復(fù)雜度就越高,容量(capability)就越大,從而能完成更復(fù)雜的學(xué)習(xí)任務(wù)。深度學(xué)習(xí)(deep learning)正是一種極其復(fù)雜而強(qiáng)大的模型。

怎么增大模型復(fù)雜度呢?兩個(gè)辦法,一是增加隱層的數(shù)目,二是增加隱層神經(jīng)元的數(shù)目。前者更有效一些,因?yàn)樗粌H增加了功能神經(jīng)元的數(shù)量,還增加了激活函數(shù)嵌套的層數(shù)。但是對(duì)于多隱層神經(jīng)網(wǎng)絡(luò),經(jīng)典算法如標(biāo)準(zhǔn)BP算法往往會(huì)在誤差逆?zhèn)鞑r(shí)發(fā)散(diverge),無法收斂達(dá)到穩(wěn)定狀態(tài)。

那要怎么有效地訓(xùn)練多隱層神經(jīng)網(wǎng)絡(luò)呢?一般來說有以下兩種方法:

無監(jiān)督逐層訓(xùn)練(unsupervised layer-wise training):每次訓(xùn)練一層隱節(jié)點(diǎn),把上一層隱節(jié)點(diǎn)的輸出當(dāng)作輸入來訓(xùn)練,本層隱結(jié)點(diǎn)訓(xùn)練好后,輸出再作為下一層的輸入來訓(xùn)練,這稱為預(yù)訓(xùn)練(pre-training)。全部預(yù)訓(xùn)練完成后,再對(duì)整個(gè)網(wǎng)絡(luò)進(jìn)行微調(diào)(fine-tuning)訓(xùn)練。一個(gè)典型例子就是深度信念網(wǎng)絡(luò)(deep belief network,簡稱DBN)。這種做法其實(shí)可以視為把大量的參數(shù)進(jìn)行分組,先找出每組較好的設(shè)置,再基于這些局部最優(yōu)的結(jié)果來訓(xùn)練全局最優(yōu)。

權(quán)共享(weight sharing):令同一層神經(jīng)元使用完全相同的連接權(quán),典型的例子是卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡稱CNN)。這樣做可以大大減少需要訓(xùn)練的參數(shù)數(shù)目。

深度學(xué)習(xí)中訓(xùn)練多隱層神經(jīng)網(wǎng)絡(luò)這兩種方法,一種是無監(jiān)督逐層訓(xùn)練,即逐層預(yù)訓(xùn)練,現(xiàn)在這種方法用得少了?,F(xiàn)在常說的預(yù)訓(xùn)練其實(shí)專指遷移學(xué)習(xí)(migration?learning)了 。

基于監(jiān)督學(xué)習(xí)的深度學(xué)習(xí)技術(shù),通過Dropout或批標(biāo)準(zhǔn)化來正則化,能夠在很多任務(wù)上達(dá)到人類級(jí)別的性能,但僅僅是在極大的標(biāo)注數(shù)據(jù)集上。

在中等大小的數(shù)據(jù)集(例如:CIFAR-10 和 MNIST,每個(gè)類大約有5,000個(gè)標(biāo)注樣本)上,這些技術(shù)的效果比無監(jiān)督預(yù)訓(xùn)練更好。

在極小的數(shù)據(jù)集,例如:選擇性剪接數(shù)據(jù)集,貝葉斯方法要優(yōu)于基于無監(jiān)督預(yù)訓(xùn)練的方法。[1]


另一種是權(quán)共享(weight sharing),典型的例子是卷積神經(jīng)網(wǎng)絡(luò)(CNN)?,可以大大減少需要訓(xùn)練的參數(shù)數(shù)目。


深度學(xué)習(xí)可以理解為一種特征學(xué)習(xí)(feature learning)或者表示學(xué)習(xí)(representation learning),無論是DBN還是CNN,都是通過多個(gè)隱層來把與輸出目標(biāo)聯(lián)系不大的初始輸入轉(zhuǎn)化為與輸出目標(biāo)更加密切的表示,使原來只通過單層映射難以完成的任務(wù)變?yōu)榭赡堋<赐ㄟ^多層處理,逐漸將初始的“低層”特征表示轉(zhuǎn)化為“高層”特征表示,從而使得最后可以用簡單的模型來完成復(fù)雜的學(xué)習(xí)任務(wù)。

傳統(tǒng)任務(wù)中,樣本的特征需要人類專家來設(shè)計(jì),這稱為特征工程(feature engineering)。特征好壞對(duì)泛化性能有至關(guān)重要的影響。而深度學(xué)習(xí)為全自動(dòng)數(shù)據(jù)分析帶來了可能,可以自動(dòng)產(chǎn)生更好的特征。

參考鏈接:

[1]版權(quán)聲明:本文為CSDN博主「沒人不認(rèn)識(shí)我」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/weixin_42555985/article/details/105063387

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容