上篇主要討論了決策樹算法。首先從決策樹的基本概念出發(fā)眶明,引出決策樹基于樹形結(jié)構(gòu)進(jìn)行決策谒主,進(jìn)一步介紹了構(gòu)造決策樹的遞歸流程以及其遞歸終止條件,在遞歸的過程中也拜,劃分屬性的選擇起到了關(guān)鍵作用,因此緊接著討論了三種評(píng)估屬性劃分效果的經(jīng)典算法趾痘,介紹了剪枝策略來解決原生決策樹容易產(chǎn)生的過擬合問題慢哈,最后簡述了屬性連續(xù)值/缺失值的處理方法。本篇將討論現(xiàn)階段十分熱門的另一個(gè)經(jīng)典監(jiān)督學(xué)習(xí)算法--神經(jīng)網(wǎng)絡(luò)(neural network)永票。
5卵贱、神經(jīng)網(wǎng)絡(luò)
在機(jī)器學(xué)習(xí)中,神經(jīng)網(wǎng)絡(luò)一般指的是“神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)”侣集,是機(jī)器學(xué)習(xí)與神經(jīng)網(wǎng)絡(luò)兩個(gè)學(xué)科的交叉部分键俱。所謂神經(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)元傳遞興奮叠穆。神經(jīng)元的生物學(xué)結(jié)構(gòu)如下圖所示少漆,不得不說高中的生化知識(shí)大學(xué)忘得可是真干凈...
一直沿用至今的“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)和全局最形选(global 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í)可以理解為一種特征學(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)生更好的特征灶似。