寫在最前面
如今機(jī)器學(xué)習(xí)和深度學(xué)習(xí)如此火熱,相信很多像我一樣的普通程序猿或者還在大學(xué)校園中的同學(xué),一定也想?yún)⑴c其中。不管是出于好奇,還是自身充電,跟上潮流,我覺得都值得試一試。對(duì)于自己,經(jīng)歷了一段時(shí)間的系統(tǒng)學(xué)習(xí)(參考《機(jī)器學(xué)習(xí)/深度學(xué)習(xí)入門資料匯總》),現(xiàn)在計(jì)劃重新閱讀《機(jī)器學(xué)習(xí)》[周志華]和《深度學(xué)習(xí)》[Goodfellow et al]這兩本書,并在閱讀的過程中進(jìn)行記錄和總結(jié)。這兩本是機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的入門經(jīng)典。筆記中除了會(huì)對(duì)書中核心及重點(diǎn)內(nèi)容進(jìn)行記錄,同時(shí),也會(huì)增加自己的理解,包括過程中的疑問,并盡量的和實(shí)際的工程應(yīng)用和現(xiàn)實(shí)場(chǎng)景進(jìn)行結(jié)合,使得知識(shí)不只是停留在理論層面,而是能夠更好的指導(dǎo)實(shí)踐。記錄筆記,一方面,是對(duì)自己先前學(xué)習(xí)過程的總結(jié)和補(bǔ)充。 另一方面,相信這個(gè)系列學(xué)習(xí)過程的記錄,也能為像我一樣入門機(jī)器學(xué)習(xí)和深度學(xué)習(xí)同學(xué)作為學(xué)習(xí)參考。
章節(jié)目錄
- 神經(jīng)元模型
- 感知機(jī)與多層網(wǎng)絡(luò)
- 誤差逆?zhèn)鞑ニ惴?/li>
- 全局最小與局部最小
- 其他常見神經(jīng)網(wǎng)絡(luò)
- 深度學(xué)習(xí)
(一)神經(jīng)元模型
神經(jīng)網(wǎng)絡(luò)(neural networks)方面的研究很早就已出現(xiàn),其中最基本的元素是神經(jīng)元(neuron)模型。1943年,McCulloch 和Pitts提出一直沿用至今的“M-P神經(jīng)元模型”,如下圖所示,

在這個(gè)模型中,神經(jīng)元接收到來自n個(gè)其他神經(jīng)元傳遞過來的輸入信息,這些輸入信號(hào)通過帶權(quán)重的連接(connection)進(jìn)行傳遞,神經(jīng)元接收到的總輸入值將與神經(jīng)元的閾值進(jìn)行比較,然后通過“激活函數(shù)”(activation function)處理以產(chǎn)生神經(jīng)元的輸出。
理想激活函數(shù)是階躍函數(shù)(下圖所示)。然而,階躍函數(shù)具有不連續(xù)、不光滑等不太好的性質(zhì),因此實(shí)際常用sigmoid函數(shù)作為激活函數(shù)。

把神經(jīng)元按一定的層次結(jié)構(gòu)連接起來,就得到了神經(jīng)網(wǎng)絡(luò)。
(二)感知機(jī)與多層網(wǎng)絡(luò)
感知機(jī)(perceptron)由兩層神經(jīng)元組成,如下圖所示,

感知機(jī)只有輸出層神經(jīng)元進(jìn)行激活函數(shù)處理,即只擁有一層功能神經(jīng)元(function neuron),其學(xué)習(xí)能力非常有限??梢宰C明,若兩類模式是線性可分(linearly separable)的問題,即存在一個(gè)線性超平面將它們分開,則感知機(jī)學(xué)習(xí)過程一定會(huì)收斂(converge)。否則,感知機(jī)學(xué)習(xí)過程將發(fā)生震蕩(fluctuation),不能求得合適解。
要解決非線性可分問題,需考慮使用多層神經(jīng)元功能,

輸入層與輸出層之間的一層神經(jīng)元被稱為隱層或隱含層(hidden layer),隱含層和輸出層神經(jīng)元都是擁有激活函數(shù)的功能神經(jīng)元。
神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)過程,就是根據(jù)訓(xùn)練數(shù)據(jù)來調(diào)整神經(jīng)元之間的“連接權(quán)”(connection weight)以及每個(gè)功能神經(jīng)元的閾值;換言之,神經(jīng)網(wǎng)絡(luò)“學(xué)”到的東西,蘊(yùn)含在連接權(quán)和閾值中。
(三)誤差逆?zhèn)鞑ニ惴?/h2>
誤差傳播(erro BackPropagation,簡(jiǎn)稱BP)算法是求解多層網(wǎng)絡(luò)算法中最杰出的代表,它是迄今最成功的神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)算法?,F(xiàn)實(shí)任務(wù)中使用神經(jīng)網(wǎng)絡(luò)時(shí),大多是使用BP算法進(jìn)行訓(xùn)練。值得指出的是,BP算法不僅可用于多層前饋神經(jīng)網(wǎng)絡(luò),還可以用于其他類型的神經(jīng)網(wǎng)絡(luò),如遞歸神經(jīng)網(wǎng)絡(luò)。
BP算法基于梯度下降(gradient)策略,以目標(biāo)的負(fù)梯度方向?qū)?shù)進(jìn)行調(diào)整。(數(shù)學(xué)推到過程省略)
[Hornik et al. 1989]證明,只需一個(gè)包含足夠神經(jīng)元的隱層,多層前饋網(wǎng)絡(luò)就能以任意精度逼近任意復(fù)雜度的連續(xù)函數(shù)。然而,如何設(shè)置隱層神經(jīng)元的個(gè)數(shù)仍是個(gè)未決問題,實(shí)際應(yīng)用中通??俊霸囧e(cuò)法”(trial-by-error)調(diào)整。
BP神經(jīng)網(wǎng)絡(luò)經(jīng)常遭遇過擬合,其訓(xùn)練誤差持續(xù)降低,但測(cè)試誤差卻可能上升。有兩種策略常用來緩解BP網(wǎng)絡(luò)的過擬合。
- “早停”(early stopping)
將數(shù)據(jù)分成訓(xùn)練集和驗(yàn)證集,訓(xùn)練集用來計(jì)算梯度、更新連接權(quán)和閾值,驗(yàn)證集用來估計(jì)誤差。若訓(xùn)練集誤差降低但驗(yàn)證集誤差升高,則停止訓(xùn)練,同時(shí),返回具有最小驗(yàn)證集誤差的連接權(quán)和閾值。 -
正則化(regularization)
基本思想是在誤差目標(biāo)函數(shù)中增加一個(gè)用于描述網(wǎng)絡(luò)復(fù)雜度的部分,例如連接權(quán)與閾值的平方和。令Ek表示第k個(gè)訓(xùn)練樣例上的誤差,wi表示連接權(quán)和閾值,則誤差目標(biāo)函數(shù)改寫為,
5.17
其中,λ∈(0,1)用于對(duì)經(jīng)驗(yàn)誤差與網(wǎng)絡(luò)復(fù)雜度這兩項(xiàng)進(jìn)行折中,通過交叉驗(yàn)證來估計(jì)。
(四)全局最小與局部極小
若用E表示神經(jīng)網(wǎng)絡(luò)在訓(xùn)練集上的誤差,則它顯然是關(guān)于連接權(quán)w和閾值θ的函數(shù)。此時(shí),神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程可看做一個(gè)參數(shù)尋優(yōu)過程,即在參數(shù)空間中,尋找一組最優(yōu)參數(shù)使得E最小。
直觀地看,局部極小解是參數(shù)空間的某個(gè)點(diǎn),其鄰域點(diǎn)的誤差函數(shù)值均不小于該點(diǎn)的函數(shù)值;全局最小解則是指參數(shù)空間中的所有點(diǎn)誤差均不小于該點(diǎn)的誤差函數(shù)值。兩者對(duì)應(yīng)的E(w,θ)分別稱為誤差函數(shù)的局部極小值和全局最小值。
基于梯度的搜索是使用最為廣泛的參數(shù)尋優(yōu)方法。在此類方法中,我們從某些初始解出發(fā),迭代尋找最優(yōu)參數(shù)值。每次迭代中,我們先計(jì)算誤差函數(shù)在當(dāng)前點(diǎn)的梯度,然后根據(jù)梯度確定搜索方向。若誤差函數(shù)在當(dāng)前點(diǎn)的梯度為零,則已達(dá)到局部極小,更新量將為零,這意味著參數(shù)的迭代更新將在此停止。顯然,如果誤差函數(shù)僅有一個(gè)局部極小,那么此時(shí)找到的局部極小就是全局最下。然而,如果誤差函數(shù)具有多個(gè)局部極小,則不能保證找到的解釋全局最小。對(duì)后一種情形,我們稱參數(shù)尋優(yōu)陷入局部極小,這顯然不是我們所希望的。
在現(xiàn)實(shí)任務(wù)中,人們常采用以下策略來試圖“跳出”局部極小,從而進(jìn)一步接近全局最?。?/p>
- 以多組不同參數(shù)值初始化多個(gè)神經(jīng)網(wǎng)絡(luò),按標(biāo)準(zhǔn)方法訓(xùn)練后,取其中誤差最小的解作為最終參數(shù)。
- 使用“模擬退火”(simulated annealing)技術(shù)
模擬退火在每一步都以一定的概率接受比當(dāng)前解更差的結(jié)果,從而有助于“跳出”局部極小。 - 使用隨機(jī)梯度下降
與標(biāo)準(zhǔn)梯度下降法精確計(jì)算梯度不同,隨機(jī)梯度下降法在計(jì)算梯度時(shí)加入隨機(jī)因素。于是,即使陷入局部極小點(diǎn),它計(jì)算出的梯度仍可能不為零,這樣就有機(jī)會(huì)跳出局部極小繼續(xù)搜索。
此外,遺傳算法(genetic algorithms)也常用來訓(xùn)練神經(jīng)網(wǎng)絡(luò)更好的逼近全局最小。需要注意的是,上述用于跳出局部極小的技術(shù)大多是啟發(fā)式,理論上尚缺乏保障。
(五)其他常見神經(jīng)網(wǎng)絡(luò)
1. RBF網(wǎng)絡(luò)
RBF(Radial Basis Function,徑向基函數(shù))網(wǎng)絡(luò)是一種單隱層前饋神經(jīng)網(wǎng)絡(luò),它使用徑向基函數(shù)作為隱藏層神經(jīng)元激活函數(shù),而輸出層則是對(duì)隱層神經(jīng)元輸出的線性組合。
2. ART網(wǎng)絡(luò)
競(jìng)爭(zhēng)型學(xué)習(xí)(competitive learning)是神經(jīng)網(wǎng)絡(luò)中一種常用的無監(jiān)督學(xué)習(xí)策略,使用該策略時(shí),網(wǎng)絡(luò)的輸出神經(jīng)元相互競(jìng)爭(zhēng),每一時(shí)刻僅有一個(gè)競(jìng)爭(zhēng)獲勝的神經(jīng)元被激活,其他神經(jīng)元狀態(tài)被抑制。這種機(jī)制亦稱為“勝者通吃”(winner-take-all)原則。
ART(Adaptive Resonance Theory,自適應(yīng)諧振理論)網(wǎng)絡(luò)是競(jìng)爭(zhēng)型學(xué)習(xí)的重要代表。ART比較好地緩解了競(jìng)爭(zhēng)型學(xué)習(xí)中的“可塑性-穩(wěn)定性窘境”(stability-plasticity dilemma)。
3. SOM網(wǎng)絡(luò)
SOM(Self-Organizing Map,自組織映射)網(wǎng)絡(luò)是一種競(jìng)爭(zhēng)學(xué)習(xí)型的無監(jiān)督神經(jīng)網(wǎng)絡(luò),他能將高維輸入數(shù)據(jù)映射到低維空間(通常為二維),同時(shí)保持輸入數(shù)據(jù)在高維空間的拓?fù)浣Y(jié)構(gòu),即將高維空間中相似的樣本點(diǎn)映射到網(wǎng)絡(luò)輸出層中的鄰近神經(jīng)元。
4. 級(jí)聯(lián)相關(guān)網(wǎng)絡(luò)
一般的神經(jīng)網(wǎng)絡(luò)模型通常假定網(wǎng)絡(luò)結(jié)構(gòu)是事先固定的,訓(xùn)練的目的是利用訓(xùn)練樣本來確定合適的連接權(quán)、閾值等參數(shù)。與此不同,結(jié)構(gòu)自適應(yīng)網(wǎng)絡(luò)則將網(wǎng)絡(luò)結(jié)構(gòu)也當(dāng)做學(xué)習(xí)目標(biāo)之一,并希望能在訓(xùn)練過程中能找到最符合數(shù)據(jù)特點(diǎn)的網(wǎng)絡(luò)結(jié)構(gòu)。級(jí)聯(lián)相關(guān)(cascade-Correlation)網(wǎng)絡(luò)是結(jié)構(gòu)自適應(yīng)網(wǎng)絡(luò)的重要代表。
5. Elman網(wǎng)絡(luò)
與前饋神經(jīng)網(wǎng)絡(luò)不同,“遞歸神經(jīng)網(wǎng)絡(luò)”(recurrent neural networks)允許網(wǎng)絡(luò)中出現(xiàn)環(huán)形結(jié)構(gòu),從而可讓一些神經(jīng)元的輸出反饋回來作為輸入信號(hào)。這樣的結(jié)構(gòu)與信息反饋過程,使得網(wǎng)絡(luò)在t時(shí)刻的輸出狀態(tài)不僅與t時(shí)刻的輸入有關(guān),還與t-1時(shí)刻的網(wǎng)絡(luò)狀態(tài)有關(guān),從而能處理與時(shí)間有關(guān)的動(dòng)態(tài)變化。Elman網(wǎng)絡(luò)是最常用的遞歸神經(jīng)網(wǎng)絡(luò)之一,結(jié)構(gòu)如下圖所示,

6. Boltzmann機(jī)
神經(jīng)網(wǎng)絡(luò)中有一類模型是為網(wǎng)絡(luò)狀態(tài)定義一個(gè)“能量”(energy),能量最小化時(shí)網(wǎng)絡(luò)達(dá)到理想狀態(tài),而網(wǎng)絡(luò)的訓(xùn)練就是在最小化這個(gè)能量函數(shù)。Boltzmann機(jī)就是一種“基于能量的模型”(energy-based model)。
(六)深度學(xué)習(xí)
典型的深度學(xué)習(xí)模型就是很深的神經(jīng)網(wǎng)絡(luò)。顯然,對(duì)神經(jīng)網(wǎng)絡(luò)模型,提高容量的一個(gè)簡(jiǎn)單辦法是增加隱層的數(shù)目。隱層多了,相應(yīng)的神經(jīng)元連接權(quán)、閾值等參數(shù)就會(huì)更多。模型復(fù)雜度也可通過單純?cè)黾与[層神經(jīng)元的數(shù)目來實(shí)現(xiàn),前面我們談到過,單隱層的多層前饋網(wǎng)絡(luò)已具有很強(qiáng)大的學(xué)習(xí)能力;但從增加模型復(fù)雜度的角度來看,增加隱層數(shù)目顯然比增加隱層神經(jīng)元的數(shù)目更有效,因?yàn)樵黾与[層數(shù)不僅增加了擁有激活函數(shù)的神經(jīng)元數(shù)目,還增加了激活函數(shù)嵌套的層數(shù)。然而,多隱層神經(jīng)網(wǎng)絡(luò)難以直接用經(jīng)典算法(例如標(biāo)準(zhǔn)BP算法)進(jìn)行訓(xùn)練,因?yàn)檎`差在多隱層內(nèi)逆?zhèn)鞑r(shí),往往會(huì)“發(fā)散”(diverge)而不能收斂到穩(wěn)定狀態(tài)。
無監(jiān)督逐層訓(xùn)練(unsupervised layer-wise training)是多隱層網(wǎng)絡(luò)訓(xùn)練的有效手段。例如,在深度信念網(wǎng)絡(luò)(deep belief network,檢查DBN)中,每層都是一個(gè)受限Boltzmann機(jī),即整個(gè)網(wǎng)絡(luò)可視為若干個(gè)RBM堆疊而成。
另一種節(jié)省訓(xùn)練開銷的策略是“權(quán)共享”(weigh sharing),即讓一組神經(jīng)元使用相同的連接權(quán)。這個(gè)策略在卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡(jiǎn)稱CNN)中發(fā)揮重要作用。
無論是DBN還是CNN,其多隱層堆疊、每層對(duì)上一層輸出進(jìn)行處理的機(jī)制,可看做是在輸入信號(hào)進(jìn)行逐層加工,從而把初始的、與輸出目標(biāo)之間聯(lián)系不太密切的輸入表示,轉(zhuǎn)化成與輸出目標(biāo)聯(lián)系更密切的表示,使得原來僅基于最后一層輸出映射難以完成的任務(wù)成為可能。換言之,通過多層處理,逐漸將初始的“低層”特征表示轉(zhuǎn)化為“高層”特征表示后,用“簡(jiǎn)單模型”即可完成復(fù)雜的分類等學(xué)習(xí)任務(wù)。因此可將深度學(xué)習(xí)理解為進(jìn)行“特征學(xué)習(xí)”(feature Learning)或“表示學(xué)習(xí)”(representation learning)。
以往在機(jī)器學(xué)習(xí)用于現(xiàn)實(shí)任務(wù)時(shí),描述樣本的特征通常需由人類專家來設(shè)計(jì),這稱為“特征工程”(feature engineering)。眾所周知,特征好壞對(duì)泛化性能有至關(guān)重要的影響,人類專家設(shè)計(jì)出好特征也并非易事;特征學(xué)習(xí)則通過機(jī)器學(xué)習(xí)技術(shù)自身來產(chǎn)生好特征,這使機(jī)器學(xué)習(xí)向“全自動(dòng)數(shù)據(jù)分析”又前進(jìn)了一步。
