第五章 神經(jīng)網(wǎng)絡
所謂神經(jīng)網(wǎng)絡厂置,目前用得最廣泛的一個定義是“神經(jīng)網(wǎng)絡是由具有適應性的簡單單元組成的廣泛并行互連的網(wǎng)絡,它的組織能夠模擬生物神經(jīng)系統(tǒng)對真實世界物體所做出的交互反應”也殖。
5.1? 神經(jīng)元模型
神經(jīng)網(wǎng)絡中最基本的單元是神經(jīng)元模型(neuron)。在生物神經(jīng)網(wǎng)絡的原始機制中,每個神經(jīng)元通常都有多個樹突(dendrite),一個軸突(axon)和一個細胞體(cell body)斧拍,樹突短而多分支,軸突長而只有一個杖小;在功能上饮焦,樹突用于傳入其它神經(jīng)元傳遞的神經(jīng)沖動怕吴,而軸突用于將神經(jīng)沖動傳出到其它神經(jīng)元,當樹突或細胞體傳入的神經(jīng)沖動使得神經(jīng)元興奮時县踢,該神經(jīng)元就會通過軸突向其它神經(jīng)元傳遞興奮。
一直沿用至今的“M-P神經(jīng)元模型”正是對這一結構進行了抽象伟件,也稱“閾值邏輯單元“硼啤,其中樹突對應于輸入部分,每個神經(jīng)元收到n個其他神經(jīng)元傳遞過來的輸入信號斧账,這些信號通過帶權重的連接傳遞給細胞體谴返,這些權重又稱為連接權(connection weight)。細胞體分為兩部分咧织,前一部分計算總輸入值(即輸入信號的加權和嗓袱,或者說累積電平),后一部分先計算總輸入值與該神經(jīng)元閾值的差值习绢,然后通過激活函數(shù)(activation function)的處理渠抹,產(chǎn)生輸出從軸突傳送給其它神經(jīng)元。M-P神經(jīng)元模型如下圖所示:
與線性分類十分相似闪萄,神經(jīng)元模型最理想的激活函數(shù)也是階躍函數(shù)梧却,即將神經(jīng)元輸入值與閾值的差值映射為輸出值1或0,若差值大于零輸出1败去,對應興奮放航;若差值小于零則輸出0,對應抑制圆裕。但階躍函數(shù)不連續(xù)广鳍,不光滑,故在M-P神經(jīng)元模型中吓妆,也采用Sigmoid函數(shù)來近似赊时, Sigmoid函數(shù)將較大范圍內變化的輸入值擠壓到 (0,1) 輸出值范圍內,所以也稱為擠壓函數(shù)(squashing function)耿战。
將多個神經(jīng)元按一定的層次結構連接起來蛋叼,就得到了神經(jīng)網(wǎng)絡。它是一種包含多個參數(shù)的模型剂陡,比方說10個神經(jīng)元兩兩連接狈涮,則有100個參數(shù)需要學習(每個神經(jīng)元有9個連接權以及1個閾值),若將每個神經(jīng)元都看作一個函數(shù)鸭栖,則整個神經(jīng)網(wǎng)絡就是由這些函數(shù)相互嵌套而成歌馍。
5.2 感知機和多層網(wǎng)絡
感知機(Perceptron)是由兩層神經(jīng)元組成的一個簡單模型,但只有輸出層是M-P神經(jīng)元晕鹊,即只有輸出層神經(jīng)元進行激活函數(shù)處理松却,也稱為功能神經(jīng)元(functional neuron)暴浦;輸入層只是接受外界信號(樣本屬性)并傳遞給輸出層(輸入層的神經(jīng)元個數(shù)等于樣本的屬性數(shù)目),而沒有激活函數(shù)晓锻。這樣一來歌焦,感知機與之前線性模型中的對數(shù)幾率回歸的思想基本是一樣的,都是通過對屬性加權與另一個常數(shù)求和砚哆,再使用sigmoid函數(shù)將這個輸出值壓縮到0-1之間独撇,從而解決分類問題。不同的是感知機的輸出層應該可以有多個神經(jīng)元躁锁,從而可以實現(xiàn)多分類問題纷铣,同時兩個模型所用的參數(shù)估計方法十分不同。
給定訓練集战转,則感知機的n+1個參數(shù)(n個權重+1個閾值)都可以通過學習得到搜立。閾值Θ可以看作一個輸入值固定為-1的啞結點的權重ωn+1,即假設有一個固定輸入xn+1=-1的輸入層神經(jīng)元槐秧,其對應的權重為ωn+1啄踊,這樣就把權重和閾值統(tǒng)一為權重的學習了。簡單感知機的結構如下圖所示:
感知機權重的學習規(guī)則如下:對于訓練樣本(x色鸳,y)社痛,當該樣本進入感知機學習后,會產(chǎn)生一個輸出值命雀,若該輸出值與樣本的真實標記不一致蒜哀,則感知機會對權重進行調整,若激活函數(shù)為階躍函數(shù)吏砂,則調整的方法為(基于梯度下降法):
其中 η∈(0撵儿,1)稱為學習率,可以看出感知機是通過逐個樣本輸入來更新權重狐血,首先設定好初始權重(一般為隨機)淀歇,逐個地輸入樣本數(shù)據(jù),若輸出值與真實標記相同則繼續(xù)輸入下一個樣本匈织,若不一致則更新權重浪默,然后再重新逐個檢驗,直到每個樣本數(shù)據(jù)的輸出值都與真實標記相同缀匕。容易看出:感知機模型總是能將訓練數(shù)據(jù)的每一個樣本都預測正確纳决,和決策樹模型總是能將所有訓練數(shù)據(jù)都分開一樣,感知機模型很容易產(chǎn)生過擬合問題乡小。
由于感知機模型只有一層功能神經(jīng)元阔加,因此其功能十分有限,只能處理線性可分的問題满钟,對于這類問題胜榔,感知機的學習過程一定會收斂(converge)胳喷,因此總是可以求出適當?shù)臋嘀怠5菍τ谙駮咸岬降漠惢騿栴}夭织,只通過一層功能神經(jīng)元往往不能解決吭露,因此要解決非線性可分問題,需要考慮使用多層功能神經(jīng)元摔癣,即神經(jīng)網(wǎng)絡奴饮。多層神經(jīng)網(wǎng)絡的拓撲結構如下圖所示:
在神經(jīng)網(wǎng)絡中,輸入層與輸出層之間的層稱為隱含層或隱層(hidden layer)择浊,隱層和輸出層的神經(jīng)元都是具有激活函數(shù)的功能神經(jīng)元。只需包含一個隱層便可以稱為多層神經(jīng)網(wǎng)絡逾条,常用的神經(jīng)網(wǎng)絡稱為“多層前饋神經(jīng)網(wǎng)絡”(multi-layer feedforward neural network)琢岩,該結構滿足以下幾個特點:
* 每層神經(jīng)元與下一層神經(jīng)元之間完全互連?
* 神經(jīng)元之間不存在同層連接?
* 神經(jīng)元之間不存在跨層連接?
根據(jù)上面的特點可以得知:這里的“前饋”指的是網(wǎng)絡拓撲結構中不存在環(huán)或回路,而不是指該網(wǎng)絡只能向前傳播而不能向后傳播(下節(jié)中的BP神經(jīng)網(wǎng)絡正是基于前饋神經(jīng)網(wǎng)絡而增加了反饋調節(jié)機制)师脂。神經(jīng)網(wǎng)絡的學習過程就是根據(jù)訓練數(shù)據(jù)來調整神經(jīng)元之間的“連接權”以及每個神經(jīng)元的閾值担孔,換句話說:神經(jīng)網(wǎng)絡所學習到的東西都蘊含在網(wǎng)絡的連接權與閾值中。
5.3 BP神經(jīng)網(wǎng)絡算法
由上面可以得知:神經(jīng)網(wǎng)絡的學習主要蘊含在權重和閾值中吃警,多層網(wǎng)絡使用上面簡單感知機的權重調整規(guī)則顯然不夠用了糕篇,BP神經(jīng)網(wǎng)絡算法即誤差逆?zhèn)鞑ニ惴ǎ╡rror BackPropagation)正是為學習多層前饋神經(jīng)網(wǎng)絡而設計,BP神經(jīng)網(wǎng)絡算法是迄今為止最成功的的神經(jīng)網(wǎng)絡學習算法酌心。
一般而言拌消,只需包含一個足夠多神經(jīng)元的隱層,就能以任意精度逼近任意復雜度的連續(xù)函數(shù)[Hornik et al.,1989]安券,故下面以訓練單隱層的前饋神經(jīng)網(wǎng)絡為例墩崩,介紹BP神經(jīng)網(wǎng)絡的算法思想。
上圖為一個單隱層前饋神經(jīng)網(wǎng)絡的拓撲結構侯勉,BP神經(jīng)網(wǎng)絡算法也使用梯度下降法(gradient descent)鹦筹,以單個樣本的均方誤差的負梯度方向對權重進行調節(jié)≈访玻可以看出:BP算法首先將誤差反向傳播給隱層神經(jīng)元铐拐,調節(jié)隱層到輸出層的連接權重與輸出層神經(jīng)元的閾值;接著根據(jù)隱含層神經(jīng)元的均方誤差练对,來調節(jié)輸入層到隱含層的連接權值與隱含層神經(jīng)元的閾值遍蟋。BP算法基本的推導過程與感知機的推導過程原理是相同的,下面給出調整隱含層到輸出層的權重調整規(guī)則的推導過程:
學習率η∈(0锹淌,1)控制著沿反梯度方向下降的步長匿值,若步長太大則下降太快容易產(chǎn)生震蕩,若步長太小則收斂速度太慢赂摆,一般地常把η設置為0.1挟憔,有時更新權重時會將輸出層與隱含層設置為不同的學習率钟些。BP算法的基本流程如下所示:
BP算法的更新規(guī)則是基于每個樣本的預測值與真實類標的均方誤差來進行權值調節(jié),即BP算法每次更新只針對于單個樣例绊谭。需要注意的是:BP算法的最終目標是要最小化整個訓練集D上的累積誤差政恍,即:
如果基于累積誤差最小化的更新規(guī)則,則得到了累積誤差逆?zhèn)鞑ニ惴ǎ╝ccumulated error backpropagation),即每次讀取全部的數(shù)據(jù)集一遍,進行一輪學習骡送,從而基于當前的累積誤差進行權值調整浮声,因此參數(shù)更新的頻率相比標準BP算法低了很多,但在很多任務中嘿棘,尤其是在數(shù)據(jù)量很大的時候,往往標準BP算法會獲得較好的結果。另外對于如何設置隱層神經(jīng)元個數(shù)的問題蒙保,至今仍然沒有好的解決方案,常使用“試錯法”進行調整欲主。
前面提到邓厕,BP神經(jīng)網(wǎng)絡強大的學習能力常常容易造成過擬合問題,有以下兩種策略來緩解BP網(wǎng)絡的過擬合問題:
早停:將數(shù)據(jù)分為訓練集與測試集扁瓢,訓練集用于學習详恼,測試集用于評估性能,若在訓練過程中引几,訓練集的累積誤差降低昧互,而測試集的累積誤差升高,則停止訓練她紫。
引入正則化(regularization):基本思想是在累積誤差函數(shù)中增加一個用于描述網(wǎng)絡復雜度的部分硅堆,例如所有權值與閾值的平方和,其中λ∈(0,1)用于對累積經(jīng)驗誤差與網(wǎng)絡復雜度這兩項進行折中贿讹,常通過交叉驗證法來估計渐逃。
5.4 全局最小和局部極小
模型學習的過程實質上就是一個尋找最優(yōu)參數(shù)的過程,例如BP算法試圖通過最速下降來尋找使得累積經(jīng)驗誤差最小的權值與閾值民褂,在談到最優(yōu)時茄菊,一般會提到局部極小(local minimum)和全局最猩蘅啊(global minimum)面殖。
* 局部極小解:參數(shù)空間中的某個點,其鄰域點的誤差函數(shù)值均不小于該點的誤差函數(shù)值哭廉。?
* 全局最小解:參數(shù)空間中的某個點脊僚,所有其他點的誤差函數(shù)值均不小于該點的誤差函數(shù)值。?
要成為局部極小點,只要滿足該點在參數(shù)空間中的梯度為零辽幌。局部極小可以有多個增淹,而全局最小只有一個。全局最小一定是局部極小乌企,但局部最小卻不一定是全局最小虑润。顯然在很多機器學習算法中,都試圖找到目標函數(shù)的全局最小加酵。梯度下降法的主要思想就是沿著負梯度方向去搜索最優(yōu)解拳喻,負梯度方向是函數(shù)值下降最快的方向,若迭代到某處的梯度為0猪腕,則表示達到一個局部最小冗澈,參數(shù)更新停止。因此在現(xiàn)實任務中陋葡,通常使用以下策略盡可能地去接近全局最小渗柿。
* 以多組不同參數(shù)值初始化多個神經(jīng)網(wǎng)絡,按標準方法訓練脖岛,迭代停止后,取其中誤差最小的解作為最終參數(shù)颊亮。?
* 使用“模擬退火”技術柴梆,這里不做具體介紹。?
* 使用隨機梯度下降终惑,即在計算梯度時加入了隨機因素绍在,使得在局部最小時,計算的梯度仍可能不為0雹有,從而迭代可以繼續(xù)進行偿渡。
5.5 深度學習
理論上,參數(shù)越多霸奕,模型復雜度就越高溜宽,容量(capability)就越大,從而能完成更復雜的學習任務质帅。深度學習(deep learning)正是一種極其復雜而強大的模型适揉。
怎么增大模型復雜度呢?兩個辦法煤惩,一是增加隱層的數(shù)目嫉嘀,二是增加隱層神經(jīng)元的數(shù)目。前者更有效一些魄揉,因為它不僅增加了功能神經(jīng)元的數(shù)量剪侮,還增加了激活函數(shù)嵌套的層數(shù)。但是對于多隱層神經(jīng)網(wǎng)絡洛退,經(jīng)典算法如標準BP算法往往會在誤差逆?zhèn)鞑r發(fā)散(diverge)瓣俯,無法收斂達到穩(wěn)定狀態(tài)杰标。
那要怎么有效地訓練多隱層神經(jīng)網(wǎng)絡呢?一般來說有以下兩種方法:
無監(jiān)督逐層訓練(unsupervised layer-wise training):每次訓練一層隱節(jié)點降铸,把上一層隱節(jié)點的輸出當作輸入來訓練在旱,本層隱結點訓練好后,輸出再作為下一層的輸入來訓練推掸,這稱為預訓練(pre-training)桶蝎。全部預訓練完成后,再對整個網(wǎng)絡進行微調(fine-tuning)訓練谅畅。一個典型例子就是深度信念網(wǎng)絡(deep belief network登渣,簡稱DBN)。這種做法其實可以視為把大量的參數(shù)進行分組毡泻,先找出每組較好的設置胜茧,再基于這些局部最優(yōu)的結果來訓練全局最優(yōu)。
權共享(weight sharing):令同一層神經(jīng)元使用完全相同的連接權仇味,典型的例子是卷積神經(jīng)網(wǎng)絡(Convolutional Neural Network呻顽,簡稱CNN)。這樣做可以大大減少需要訓練的參數(shù)數(shù)目丹墨。
深度學習中訓練多隱層神經(jīng)網(wǎng)絡這兩種方法廊遍,一種是無監(jiān)督逐層訓練,即逐層預訓練贩挣,現(xiàn)在這種方法用得少了『砬埃現(xiàn)在常說的預訓練其實專指遷移學習(migration?learning)了 。
基于監(jiān)督學習的深度學習技術王财,通過Dropout或批標準化來正則化卵迂,能夠在很多任務上達到人類級別的性能,但僅僅是在極大的標注數(shù)據(jù)集上绒净。
在中等大小的數(shù)據(jù)集(例如:CIFAR-10 和 MNIST见咒,每個類大約有5,000個標注樣本)上,這些技術的效果比無監(jiān)督預訓練更好疯溺。
在極小的數(shù)據(jù)集论颅,例如:選擇性剪接數(shù)據(jù)集,貝葉斯方法要優(yōu)于基于無監(jiān)督預訓練的方法囱嫩。[1]
另一種是權共享(weight sharing)恃疯,典型的例子是卷積神經(jīng)網(wǎng)絡(CNN)?,可以大大減少需要訓練的參數(shù)數(shù)目墨闲。
深度學習可以理解為一種特征學習(feature learning)或者表示學習(representation learning)今妄,無論是DBN還是CNN,都是通過多個隱層來把與輸出目標聯(lián)系不大的初始輸入轉化為與輸出目標更加密切的表示,使原來只通過單層映射難以完成的任務變?yōu)榭赡芏芰邸<赐ㄟ^多層處理犬性,逐漸將初始的“低層”特征表示轉化為“高層”特征表示,從而使得最后可以用簡單的模型來完成復雜的學習任務腾仅。
傳統(tǒng)任務中乒裆,樣本的特征需要人類專家來設計,這稱為特征工程(feature engineering)推励。特征好壞對泛化性能有至關重要的影響鹤耍。而深度學習為全自動數(shù)據(jù)分析帶來了可能,可以自動產(chǎn)生更好的特征验辞。
參考鏈接:
[1]版權聲明:本文為CSDN博主「沒人不認識我」的原創(chuàng)文章稿黄,遵循CC 4.0 BY-SA版權協(xié)議,轉載請附上原文出處鏈接及本聲明跌造。
原文鏈接:https://blog.csdn.net/weixin_42555985/article/details/105063387