機器學(xué)習(xí)-神經(jīng)網(wǎng)絡(luò)

積跬步以致千里,積怠惰以致深淵

注:本篇文章在整理時主要參考了 周志華 的《機器學(xué)習(xí)》。

主要內(nèi)容

神經(jīng)網(wǎng)絡(luò)是一種運算模型,由大量的節(jié)點(或稱神經(jīng)元)之間相互聯(lián)接構(gòu)成。每個節(jié)點代表一種特定的輸出函數(shù),稱為激活函數(shù)(activation function)。每兩個節(jié)點間的連接都代表一個對于通過該連接信號的加權(quán)值,稱之為權(quán)重(weight),神經(jīng)網(wǎng)絡(luò)就是通過這種方式來模擬人類的記憶。網(wǎng)絡(luò)的輸出則取決于網(wǎng)絡(luò)的結(jié)構(gòu)、網(wǎng)絡(luò)的連接方式、權(quán)重和激活函數(shù)。而網(wǎng)絡(luò)自身通常都是對自然界某種算法或者函數(shù)的逼近,也可能是對一種邏輯策略的表達(dá)。

神經(jīng)元模型

神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)單元:神經(jīng)元(neuron)

機器學(xué)習(xí)中的神經(jīng)元接收來自 n 個其它神經(jīng)元傳遞過來的輸入信號,這些輸入數(shù)據(jù)通過加權(quán)計算之后,神經(jīng)元將會判斷其是否超過神經(jīng)元閾值。如果超過閾值,神經(jīng)元將被激活,并通過“激活函數(shù)”(activation function)產(chǎn)生神經(jīng)元的輸出。

回顧我們在線性模型中學(xué)到的內(nèi)容,其實每一個神經(jīng)元就如同一個廣義線性模型一般,激活函數(shù)就是廣義線性模型中的聯(lián)系函數(shù)。

激活函數(shù)

激活函數(shù)將輸入值映射為輸出值“0”或“1”,“1”對應(yīng)于神經(jīng)元興奮,“0”對應(yīng)于神經(jīng)元抑制。階躍函數(shù)具有不連續(xù)、不光滑等不太好的性質(zhì)。因此常用Sigmoid函數(shù)作為激活函數(shù)進(jìn)行非線性轉(zhuǎn)化。

把許多個這樣的神經(jīng)元按一定的層次結(jié)構(gòu)連接起來,就得到了神經(jīng)網(wǎng)絡(luò)。

我們可以將一個神經(jīng)網(wǎng)絡(luò)視為包含了許多參數(shù)的數(shù)學(xué)模型,這個模型是若干個函數(shù),例如

相互(嵌套)代入而得。有效的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)算法大多以數(shù)學(xué)證明為支撐。

感知機與多層神經(jīng)網(wǎng)絡(luò)

感知機(perceptron)

感知機是早期的神經(jīng)網(wǎng)絡(luò)組合形式,由輸入層和輸出層兩層神經(jīng)元組成。因為感知機只擁有一層功能神經(jīng)元(functional neuron)-輸出層,只有輸出神經(jīng)元進(jìn)行激活函數(shù)處理,其學(xué)習(xí)能力有限,在處理線性可分問題(如邏輯與、非、或運算)上效果很好,但在非線性可分問題(邏輯異或)上無法求得合適解。

參數(shù)學(xué)習(xí)

一般地,給定訓(xùn)練樣本集,權(quán)重wi(i=1,2,...,n)以及閾值θ可通過學(xué)習(xí)得到。閾值θ可看作一個固定輸入為-1.0的“啞結(jié)點”(dummy node)所對應(yīng)的連接權(quán)重wn+1,這樣,權(quán)重和閾值的學(xué)習(xí)就可統(tǒng)一為權(quán)重的學(xué)習(xí)。感知機學(xué)習(xí)規(guī)則非常簡單,對訓(xùn)練例(x,y),若當(dāng)前感知機的輸出為?y,則感知機權(quán)重將這樣調(diào)整:

其中η∈(0,1)稱為學(xué)習(xí)率(learning rate)。若感知機對訓(xùn)練樣例(x,y)預(yù)測正確,即為?y=y,則感知機不發(fā)生變化,否則將根據(jù)錯誤的程度進(jìn)行權(quán)重調(diào)整。

多層網(wǎng)絡(luò)

要解決非線性可分問題,需要考慮使用多層功能神經(jīng)元,即在輸入輸出層之外再加入中間層,這個中間層也叫隱含層。隱含層可以是一到多層,當(dāng)隱含層很多時,這時的神經(jīng)網(wǎng)絡(luò)就是深度神經(jīng)網(wǎng)絡(luò)。

另外,每層神經(jīng)元與下一層神經(jīng)元全互連,神經(jīng)元之間不存在同層連接,也不存在跨層連接,這樣的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)通常稱為“多層前饋神經(jīng)網(wǎng)絡(luò)”(multi-layer feedforward neural networks)

神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)過程就是根據(jù)訓(xùn)練數(shù)據(jù)對網(wǎng)絡(luò)中神經(jīng)元之間的權(quán)重以及每個功能神經(jīng)元的閾值進(jìn)行調(diào)整的過程;換言之,神經(jīng)網(wǎng)絡(luò)“學(xué)”到的東西,蘊涵在權(quán)重和閾值中。

多層網(wǎng)絡(luò)的學(xué)習(xí)算法:誤差逆?zhèn)鞑ニ惴ǎ╡rror BackPropagation,簡稱BP算法)

多層網(wǎng)絡(luò)學(xué)習(xí)算法的目標(biāo)是通過調(diào)整網(wǎng)絡(luò)中的權(quán)重和閾值使得神經(jīng)網(wǎng)絡(luò)模型的泛化誤差最小(其實每一種機器學(xué)習(xí)算法的中心思想都是一致的,這在我們模型評估與選擇的學(xué)習(xí)中已經(jīng)了解到了,設(shè)定一個模型/算法,用訓(xùn)練數(shù)據(jù)進(jìn)行訓(xùn)練,然后用測試數(shù)據(jù)進(jìn)行測試,以找到泛化性能最高的模型結(jié)構(gòu)和參數(shù))。

BP算法也是一樣的,其目標(biāo)是要最小化訓(xùn)練集 D 上的累計誤差。對每個訓(xùn)練樣例,BP算法執(zhí)行以下操作:先將輸入示例提供給輸入層神經(jīng)元,然后逐層將信號前傳,直到產(chǎn)生輸出層的結(jié)果;然后計算輸出層的誤差,再將誤差逆向傳播至隱層神經(jīng)元;最后根據(jù)隱層神經(jīng)元的誤差來對連接權(quán)和閾值進(jìn)行調(diào)整。該循環(huán)過程重復(fù)進(jìn)行直到達(dá)到停止條件(比如訓(xùn)練誤差小于一定的值,或循環(huán)次數(shù)達(dá)到指定閾值)。

參數(shù)v的估計式
隱層到輸出層的連接權(quán)

學(xué)習(xí)率η∈(0,1)控制著算法每一輪迭代中的更新步長,若太大則容易震蕩,太小則收斂速度又會過慢。

如何設(shè)置隱含層神經(jīng)元的個數(shù)仍是個未決問題,實際應(yīng)用中通??俊霸囧e法”(trial-by-error)調(diào)整。

由于神經(jīng)網(wǎng)絡(luò)具有強大的表示能力,BP神經(jīng)網(wǎng)絡(luò)容易遭遇過擬合。目前有兩種策略常用來緩解神經(jīng)網(wǎng)絡(luò)過擬合現(xiàn)象:

[1]早停(early stopping):將數(shù)據(jù)分成訓(xùn)練集和驗證集的策略,訓(xùn)練集用來計算梯度、更新權(quán)值和閾值,驗證集用來估計誤差,若訓(xùn)練集誤差降低但驗證集誤差升高,則停止訓(xùn)練。

[2]正則化(regularization):其基本思想是在誤差目標(biāo)函數(shù)中增加一個用于描述網(wǎng)絡(luò)復(fù)雜度的部分,這樣的話訓(xùn)練過程將會偏好比較小的連接權(quán)和閾值,使網(wǎng)絡(luò)輸出更加“光滑”,從而對過擬合有所緩解。

參數(shù)學(xué)習(xí)的最優(yōu)解

神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)算法是根據(jù)誤差的導(dǎo)數(shù)來對參數(shù)進(jìn)行調(diào)優(yōu)的過程。在數(shù)學(xué)上,導(dǎo)數(shù)值代表的是一個函數(shù)的斜率,是一種傾向性,所以以目標(biāo)的負(fù)梯度方向?qū)?shù)進(jìn)行調(diào)整會使得誤差變小。

當(dāng)梯度為零時,此時的誤差達(dá)到了一個極值,即其誤差函數(shù)值小于鄰點的誤差函數(shù)值。但是這個極值只可能是一個局部極小值,而并不一定是全局極小值。我們可以根據(jù)下圖來理解一下局部極小和全局極小之間的關(guān)系:

實際上,我們所要計算的是全局最小值,在現(xiàn)實任務(wù)中,人們常采用以下策略來試圖“跳出”局部極小,從而進(jìn)一步接近全局最?。?br>

[1]以多組不同參數(shù)初始化多個神經(jīng)網(wǎng)絡(luò),取其中誤差最小的解。類似于從不同出發(fā)點開始搜索最小值,得到的多個局部最小中最小的那個更可能是全局最小。

[2]“模擬退火”(simulated annealing)技術(shù):每一步以一定概率接受次優(yōu)解。每次以一定概率接受次優(yōu)解有助于“跳出”局部極小,不過接受次優(yōu)解的概率要隨著時間的推移而逐漸降低,從而保證算法穩(wěn)定。

[3]隨機梯度下降。每次一個訓(xùn)練樣本算完后就直接調(diào)整參數(shù),而不要積累一定誤差再調(diào)整,這樣的好處在于在計算梯度時加入了隨機因素,于是即便陷入局部極小點,它計算的梯度仍可能不為零,這樣就有機會跳出局部極小繼續(xù)搜索了。

此外,遺傳算法(genetic algorithms)也常用來訓(xùn)練神經(jīng)網(wǎng)絡(luò)以更好地逼近全局最小。需注意的是,上述用于跳出局部極小的技術(shù)大多是啟發(fā)式,理論上尚缺乏保障。

注解

激活函數(shù)(activation function)

sigmoid函數(shù)(S曲線)用來作activation function:

?[1] 雙曲函數(shù)(tanh)

雙曲線函數(shù)是一類常見的三角函數(shù)(也叫圓函數(shù))類似的函數(shù)。


雙曲函數(shù)
雙曲函數(shù)的導(dǎo)數(shù)

?[2] 邏輯函數(shù)(logistic function)

邏輯函數(shù)的導(dǎo)數(shù)

總結(jié)

1)神經(jīng)元是神經(jīng)網(wǎng)絡(luò)中的基礎(chǔ)元件,其接收來自其它神經(jīng)元傳遞過來的輸入信號,這些輸入數(shù)據(jù)通過加權(quán)計算之后,神經(jīng)元將會判斷其是否超過神經(jīng)元閾值。如果超過閾值,神經(jīng)元將被激活,并通過“激活函數(shù)”(activation function)產(chǎn)生神經(jīng)元的輸出。

2)神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)過程就是根據(jù)訓(xùn)練數(shù)據(jù)對網(wǎng)絡(luò)中神經(jīng)元之間的權(quán)重以及每個功能神經(jīng)元的閾值進(jìn)行調(diào)整的過程。

3)對于分類問題,如果是2類,可以用一個輸出單元表示(0和1分別代表2類);如果多余2類,每一個類別用一個輸出單元表示。

4)神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中要加入適當(dāng)?shù)摹耙馔狻?,以避免陷入局部最?yōu)。

5)終止條件:權(quán)重的更新低于某個閾值;預(yù)測的錯誤率低于某個閾值;達(dá)到預(yù)設(shè)一定的循環(huán)次數(shù)。

6)將許多個神經(jīng)元按一定的層次結(jié)構(gòu)連接起來,就得到了神經(jīng)網(wǎng)絡(luò),而不同的神經(jīng)元結(jié)構(gòu)、不同的激活函數(shù)選擇、不同的誤差指標(biāo)選擇、不同的學(xué)習(xí)策略都會導(dǎo)致形成不同的神經(jīng)網(wǎng)絡(luò)。

7)深度學(xué)習(xí)的訓(xùn)練是基于“預(yù)訓(xùn)練+微調(diào)”的策略進(jìn)行的。

8)我們可以將深度學(xué)習(xí)理解為進(jìn)行“特征學(xué)習(xí)”的過程。

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

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

  • 一存二存,簡下如一。 文/鄧榮 編輯/鄧榮 拍攝/小白,娟兒,高娃,珊珊
    鄧榮閱讀 369評論 0 0
  • 文/心理咨詢 一般而言,恐懼是指對實體事物夸大的害怕,而對于虛擬或非實體事物夸大的害怕則稱之為恐慌。 恐懼癥的患者...
    安羽心理閱讀 2,034評論 0 0

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