本文是深度學(xué)習(xí)總結(jié)系列的第一篇站绪,主要內(nèi)容是神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)知識,最初版本翻譯自:Feedforward Nets and Conv Nets (lecturer: Dario Garcia)。
本系列更多文章傳送門:第二篇 [Deep Learning] 卷積神經(jīng)網(wǎng)絡(luò) CNNs;第三篇 [Deep Learning] 集成學(xué)習(xí)Ensemble Learning&遷移學(xué)習(xí)Transfer Learning ;第四篇 [ [Deep Learning] 遞歸神經(jīng)網(wǎng)絡(luò)RNN ](http://www.reibang.com/p/5c22b41e9f07)论咏。
本文對人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Networks)的基礎(chǔ)內(nèi)容進(jìn)行介紹,主要內(nèi)容包括:
- 神經(jīng)網(wǎng)絡(luò)發(fā)展史
1.1 感知器
1.2 反向傳播和梯度下降 - 激活函數(shù)
- 常用參數(shù)
- 優(yōu)化方法
- 正則化方法
1. 神經(jīng)網(wǎng)絡(luò)發(fā)展史 A Bit of History
人工神經(jīng)網(wǎng)絡(luò)領(lǐng)域的第一篇論文誕生于1943年颁井,由Warren McCulloch和Walter Pitts發(fā)表[1]。在這篇論文中兩人試圖解釋大腦是如何使用神經(jīng)元這一簡單的處理單元來計(jì)算高度復(fù)雜的行為蠢护,并設(shè)計(jì)了多輸入權(quán)重的單個(gè)神經(jīng)元模型來模擬人類神經(jīng)元雅宾。
1.1 感知器 Rosenblatt’s Perceptron
1958年,F(xiàn)rank Rosenblatt基于McCulloch和Walter Pitts的神經(jīng)元理論提出感知器算法[2]葵硕,感知器是一個(gè)將實(shí)值輸入映射為0/1輸出的二元分類器眉抬。
-
(其中贯吓,w是權(quán)重向量,b是偏移常量)
Rosenblatt在 “Mark I Perceptron”[3]中首次實(shí)踐采用了感知器算法蜀变∏男常“Mark I Perceptron”是一個(gè)由400個(gè)光敏感受器組成的視覺分類器,與512個(gè)步進(jìn)電機(jī)相關(guān)聯(lián)库北,輸出8個(gè)神經(jīng)元[3]爬舰。它僅僅包含一層可訓(xùn)練的參數(shù),關(guān)于這一感知器的更多細(xì)節(jié)可參考[4][5]寒瓦。
Rosenblatt在一系列出版物中承認(rèn)他的感知器存在局限性情屹,與此同時(shí),Minsky和Papert出版了“Perceptrons: an introduction to computational geometry”一書杂腰,詳細(xì)介紹了感知器的局限性[6]垃你。 Minsky和Papert的工作對公眾產(chǎn)生了巨大影響,盡管很少有人真正理解他們研究的本質(zhì)喂很。 簡言之惜颇,Minsky和Papert認(rèn)為對于某些基本問題,例如異或問題少辣,單層網(wǎng)絡(luò)不能滿足需求凌摄,然而當(dāng)時(shí)并沒有適合多層網(wǎng)絡(luò)進(jìn)行訓(xùn)練的算法,因此70年代人工神經(jīng)網(wǎng)絡(luò)的資金開始大幅減少直至80年代中期毒坛,在人工神經(jīng)網(wǎng)絡(luò)幾乎被放棄之后望伦,人工智能研究的重點(diǎn)開始轉(zhuǎn)向“專家系統(tǒng)”,雖然這些系統(tǒng)在90年代也將遭遇自己的“人工智能寒冬”煎殷。
1.2 反向傳播和隨機(jī)梯度下降 Backpropagation and Stochastic Gradient Descent
1974年屯伞,Werbos提出了針對多層神經(jīng)網(wǎng)絡(luò)訓(xùn)練的反向傳播算法[7]。1985年豪直,Rumelhart劣摇,Geoffrey E. Hinton和Williams重新發(fā)現(xiàn)該算法[8]并使其獲得廣泛關(guān)注,重新引發(fā)了人們對于人工神經(jīng)網(wǎng)絡(luò)的研究興趣弓乙,“AI寒冬”時(shí)期結(jié)束末融。
要訓(xùn)練多層神經(jīng)網(wǎng)絡(luò),首先從輸入開始正向傳遞直至到達(dá)網(wǎng)絡(luò)的最后一層暇韧,然后將神經(jīng)網(wǎng)絡(luò)預(yù)測的輸出標(biāo)簽與標(biāo)定正確的真實(shí)數(shù)據(jù)標(biāo)簽(the ground truth label)進(jìn)行比較勾习,并使用損失函數(shù)計(jì)算誤差,通過找到損失函數(shù)最小化的最佳梯度(盡管是偏導(dǎo)數(shù))更新網(wǎng)絡(luò)最末端一層的權(quán)重懈玻。然后巧婶,應(yīng)用鏈?zhǔn)揭?guī)則反向傳播,通過將前一層本地計(jì)算的梯度與向前傳遞的梯度相乘,得出那些不直接與輸出層相連的隱層的輸入值使得損失函數(shù)最小化的梯度艺栈,如下面的計(jì)算圖所示英岭。當(dāng)需要手動(dòng)推導(dǎo)計(jì)算反向傳播算法時(shí),簡單實(shí)用的方法是繪制計(jì)算圖(computing graph)再代入數(shù)值湿右。
權(quán)重根據(jù)梯度方向進(jìn)行優(yōu)化诅妹,具體調(diào)整的變化值使用梯度下降計(jì)算。
目前常用的隨機(jī)梯度下降(SGD)的“隨機(jī)”性主要體現(xiàn)在:SGD使用整個(gè)數(shù)據(jù)集的子集(mini-batch SGD)而不是完整的數(shù)據(jù)集迭代估計(jì)優(yōu)化的最佳方向毅人,因?yàn)檎麄€(gè)數(shù)據(jù)集可能非常大吭狡,因而是隨機(jī)的梯度下降并不能保證每一步都是最優(yōu)方向。除SGD算法外堰塌,現(xiàn)在已有更多改進(jìn)方案可用于計(jì)算權(quán)重的變化值進(jìn)行權(quán)重優(yōu)化赵刑,我們將在“優(yōu)化方法”一節(jié)中進(jìn)一步介紹。
對感知器和反向傳播算法等神經(jīng)網(wǎng)絡(luò)的系統(tǒng)學(xué)習(xí)有興趣可進(jìn)一步閱讀其他相關(guān)文章資源[9]场刑,包括反向傳播算法的詳細(xì)數(shù)學(xué)解釋[10]般此、以一組數(shù)據(jù)為例計(jì)算反向傳播算法各步驟執(zhí)行結(jié)果[11]以及了解反向傳播算法背后實(shí)現(xiàn)原理對解決梯度消失、死亡ReLU單元和RNN梯度爆炸等問題的幫助[12]牵现,關(guān)于算法的一步步導(dǎo)數(shù)的數(shù)學(xué)推導(dǎo)解釋可參考[13]铐懊,也可學(xué)習(xí)Stanford CS231n:Convolutional Neural Networks for Visual Recognition課程的相關(guān)內(nèi)容。
伴隨著新的訓(xùn)練方法的出現(xiàn)瞎疼,ANN的研究重新活躍起來科乎。1989年,Yann LeCun贼急,現(xiàn)任Facebook人工智能研究院院長茅茂,使用美國郵政局提供的數(shù)據(jù)開發(fā)了一個(gè)數(shù)字識別系統(tǒng)[14],首次展示了如何使用人工神經(jīng)網(wǎng)絡(luò)解決復(fù)雜的實(shí)際問題太抓。LeCun的系統(tǒng)包含一層卷積神經(jīng)元空闲,基于1980年Fukushima提出的用于視覺模式識別的層次神經(jīng)網(wǎng)絡(luò)[15],這是目前卷積神經(jīng)網(wǎng)絡(luò)的雛形走敌。
2. 激活函數(shù) Activation Functions
人工神經(jīng)網(wǎng)絡(luò)的每個(gè)神經(jīng)元使用激活函數(shù)來確定多個(gè)權(quán)重輸入對應(yīng)的輸出結(jié)果碴倾。Rosenblatt的感知器使用最簡單的二元函數(shù),如果則激活掉丽,輸出1跌榔,否則不激活。如今我們可以選擇其他更復(fù)雜的非線性激活函數(shù)捶障,非線性激活函數(shù)使得神經(jīng)網(wǎng)絡(luò)能夠?qū)Ψ蔷€性模式進(jìn)行學(xué)習(xí)僧须。常用的激活函數(shù)包括[16]:
- Sigmoid函數(shù):
- Tanh函數(shù):
- 修正線性單元/整流線性單元(The Rectified Linear Unit):
目前,ReLU是大多數(shù)情況下默認(rèn)使用的激活函數(shù)项炼,它使用固定的斜率避免了梯度消失問題[17]皆辽,梯度消失的主要問題是當(dāng)使用Sigmoid和Tanh這類將大范圍的輸入擠到[0,1]或[-1,1]小范圍輸出區(qū)間的激活函數(shù)時(shí)柑蛇,隨著神經(jīng)網(wǎng)絡(luò)誤差的反向傳播,前層的權(quán)重變化對輸出結(jié)果的影響越來越小直至梯度為零終止學(xué)習(xí)驱闷。
劃分指數(shù)級空間 具有足夠的表達(dá)能力
然而,ReLU單位在訓(xùn)練期間可能“死亡”空免。例如空另,流過ReLU神經(jīng)元的大梯度可能導(dǎo)致權(quán)重的更新使得神經(jīng)元無法在任何數(shù)據(jù)上激活。如果發(fā)生這種情況蹋砚,那么流經(jīng)該單元的梯度將從該點(diǎn)開始永遠(yuǎn)為零扼菠。也就是說,ReLU單元在訓(xùn)練期間不可逆轉(zhuǎn)地死亡坝咐,可以從數(shù)據(jù)流中被淘汰循榆。例如,如果學(xué)習(xí)率設(shè)置得太高墨坚,可能會發(fā)現(xiàn)多達(dá)網(wǎng)絡(luò)中40%的神經(jīng)元可能“死亡”秧饮。通過適當(dāng)設(shè)置學(xué)習(xí)率可以解決該問題。關(guān)于激活函數(shù)可進(jìn)一步學(xué)習(xí)Stanford CS231n課程的相關(guān)內(nèi)容[18]泽篮。神經(jīng)網(wǎng)絡(luò)的優(yōu)化的研究思路可從激活函數(shù)優(yōu)化入手盗尸,例如針對手機(jī)應(yīng)用ReLU激活函數(shù)時(shí)對非飽和區(qū)進(jìn)行優(yōu)化以大幅提升神經(jīng)網(wǎng)絡(luò)性能。
- Leaky ReLU:
Leaky ReLU試圖解決dying ReLU問題帽撑,當(dāng)x <0時(shí)泼各,函數(shù)不是零,而將具有小的負(fù)斜率(大約為0.01)亏拉。
- Maxout:
ReLU和Leaky ReLU都是這一函數(shù)的特例扣蜻,例如ReLU對應(yīng)w1,b1=0。
3. 訓(xùn)練參數(shù) Training Parameters
3.1 訓(xùn)練次數(shù)(Epochs)和批次大小(Batch Size)
Epoch對應(yīng)訓(xùn)練集的所有圖像都訓(xùn)練被一次的階段及塘,通常莽使,ANN訓(xùn)練需要許多次,因?yàn)槊總€(gè)輸入實(shí)例將網(wǎng)絡(luò)參數(shù)指引向不同方向磷蛹,并且網(wǎng)絡(luò)能夠在受到其他實(shí)例訓(xùn)練影響后對之前訓(xùn)練過的實(shí)例再次訓(xùn)練吮旅,從同一示例中不止一次地學(xué)習(xí)。通常味咳,當(dāng)epoch次數(shù)過多庇勃,網(wǎng)絡(luò)最終將過擬合。過擬合可以通過訓(xùn)練集上的損失降低同時(shí)測試集上損失開始上升來識別槽驶。
批次大小定義了在單次網(wǎng)絡(luò)前向和反向傳播過程中的輸入實(shí)例的數(shù)量责嚷,是網(wǎng)絡(luò)能夠“一起看到”的輸入數(shù)量。批次大小的范圍從1到完整數(shù)據(jù)集大小掂铐。較大的批次大小能夠更快地訓(xùn)練罕拂,但可能會降低精確度[19]揍异。批次大小太小可以通過損失函數(shù)的噪聲[20]來識別,即某一批次的損失與下一批次是否顯著不同爆班。當(dāng)批次大小越小時(shí)擺動(dòng)越明顯衷掷,當(dāng)批次大小等于數(shù)據(jù)集大小時(shí)噪聲損失函數(shù)方差最小(除非學(xué)習(xí)率太高柿菩,在這種情況下網(wǎng)絡(luò)無法收斂)戚嗅。最常用的批次大小為16和32。
3.2 學(xué)習(xí)率
- 學(xué)習(xí)率定義了每一步權(quán)重優(yōu)化時(shí)的調(diào)整比例懦胞。通常,使用完全導(dǎo)數(shù)(學(xué)習(xí)率為1)會導(dǎo)致過度修正凉泄,學(xué)習(xí)率太大可能使得神經(jīng)元在定義的高維空間內(nèi)產(chǎn)生大的“跳躍”躏尉,從而無法收斂。學(xué)習(xí)率太小會使朝著最佳權(quán)重調(diào)整的步幅太小后众,訓(xùn)練時(shí)間過長[21]胀糜。較好的選擇是從較小的學(xué)習(xí)速率開始使權(quán)重調(diào)整走向正確的方向,然后逐漸增大以加快收斂吼具。在訓(xùn)練期間跟蹤的首先是loss僚纷,因?yàn)樗谇跋騻鬟f期間在各個(gè)批次上被評估。繪制不同學(xué)習(xí)率下loss隨時(shí)間的變化可以幫助我們更好地了解學(xué)習(xí)率的選擇拗盒。
3.3 其他參數(shù)
還有許多其他參數(shù)可能會影響學(xué)習(xí)過程怖竭,包括:
- 權(quán)重衰減:每次更新后,權(quán)重會乘以一個(gè)0到1之間的因子陡蝇。這是一種正則化的式痊臭。
- 權(quán)重初始化:訓(xùn)練開始前的初始權(quán)重和偏差值bias是訓(xùn)練結(jié)果的關(guān)鍵。針對ReLU激活函數(shù)的神經(jīng)元登夫,其權(quán)重初始化通常使用隨機(jī)數(shù)并使用
來平衡方差[22]广匙,而bias通常直接初始化為零。
w = np.random.randn(n) * sqrt(2.0/n)
- 改進(jìn)優(yōu)化方法中的其他參數(shù)恼策,例如動(dòng)量
4. 優(yōu)化方法
一階方法
梯度下降二階方法
Hessian 矩陣
牛頓法
用hessian矩陣替代學(xué)習(xí)率->自適應(yīng)
但計(jì)算量太大->近似算法共軛牛頓法
偽牛頓法
動(dòng)量:增加動(dòng)量項(xiàng)能夠使得SGD能夠跳出局部最小值(local minima)和鞍點(diǎn)(saddle point)鸦致,加快在鞍點(diǎn)附近梯度緩慢處的前進(jìn)。此外涣楷,增加動(dòng)量項(xiàng)還能解決使用SGD時(shí)的Poor Conditioning:當(dāng)損失函數(shù)在一個(gè)方向上改變很快而在另一方向改變很慢分唾,使用普通SGD會出現(xiàn)在變化敏感方向上的鋸齒跳動(dòng),這種情況在高維下很常見狮斗。動(dòng)量項(xiàng)將先前權(quán)重更新的一小部分添加到當(dāng)前權(quán)重更新中绽乔。如果兩次更新在同一方向則會加快收斂,而更新在不同方向上時(shí)則會平滑方差碳褒,從而能夠盡快結(jié)束這種情況下的曲折前進(jìn)(Zigzagging)折砸。
- 普通SGD(Vanilla update):
(梯度為損失函數(shù)下降的方向)- 動(dòng)量SGD(Momentum update):增加速度值(velocity)初始化為0
(rho表示摩擦friction看疗,通常設(shè)為0.9或0.99)
![]()
- Nesterov動(dòng)量:
動(dòng)量方法對比
關(guān)于如何優(yōu)化這些參數(shù)的幾個(gè)技巧,可參考Stanford cs231n超參數(shù)優(yōu)化部分[20]睦授。
適應(yīng)性學(xué)習(xí)方法 Adaptative Learning Methods
SGD學(xué)習(xí)方法對學(xué)習(xí)率两芳,動(dòng)量,權(quán)量衰減等諸多參數(shù)的調(diào)參挑戰(zhàn)促使了其他自動(dòng)化調(diào)參學(xué)習(xí)方法的出現(xiàn)睹逃。其中盗扇,廣受歡迎的方法有Adagrad,Adadelta沉填,RMSprop和Adam。關(guān)于這些適應(yīng)性學(xué)習(xí)方法的詳細(xì)介紹參見梯度下降的優(yōu)化[23]佑笋。
最早的牛頓法中通過計(jì)算Hessian矩陣可以反映坡度的陡緩翼闹,但計(jì)算量太大,需要使用full batch蒋纬。
- Adagrad: 記錄所有梯度的平方和猎荠,使得能夠在較緩的維度上除以一個(gè)較小值進(jìn)行加速而在較陡的維度上除以一個(gè)較大值從而減速。但由于梯度的平方和越來越大蜀备,步幅會越來越小关摇,可能會停在鞍點(diǎn)處無法出來,因而Adagrad只適用于卷積層的學(xué)習(xí)碾阁。
其中eps防止
- RMSprop: RMSprop在Adagrad基礎(chǔ)上進(jìn)行小幅改動(dòng)输虱,對梯度的平方和進(jìn)行衰減,衰減率(decay rate)通常設(shè)為0.9或0.99脂凶。實(shí)現(xiàn)了指數(shù)移動(dòng)平均宪睹,類似于lstm的遺忘門。
-
Adam: Adam結(jié)合了上述兩種方法和動(dòng)量項(xiàng)蚕钦,最為常用亭病。
Adam算法
5. 正則化方法 Regularization Methods
網(wǎng)絡(luò)的學(xué)習(xí)能力由其權(quán)重?cái)?shù)量和深度定義。深層架構(gòu)通常有數(shù)百萬參數(shù)(AlexNet有60M參數(shù)嘶居,VGG16有138M參數(shù))罪帖,其中大量參數(shù)來自全連接層,因?yàn)榫矸e層通過權(quán)重共享能夠大大減少它們的數(shù)量邮屁。一個(gè)具有4,096個(gè)神經(jīng)元的全連接層加上輸入層的4,096個(gè)神經(jīng)元就將包含16M參數(shù)(4,096 x 4,096)整袁。具有如此多參數(shù)的模型對任何訓(xùn)練數(shù)據(jù)集都很容易過擬和,因?yàn)樗哂泻軓?qiáng)的記憶它的能力樱报。為避免過擬合問題葬项,用于深度架構(gòu)的正則化方法被提出,常用的正則化方法包括:
- L1 / L2正則化:該方法試圖通過對每個(gè)權(quán)重的平方增加懲罰(將
項(xiàng)加入到loss函數(shù)中)來避免權(quán)重尖峰值的影響迹蛤。
- Dropout [24]:該方法在訓(xùn)練期間以一定的概率設(shè)置部分神經(jīng)元為0民珍,在全連接層上簡單有效襟士。Dropping概率p通常設(shè)為0.5,但dropout會導(dǎo)致輸出結(jié)果隨機(jī)嚷量,因此在測試時(shí)陋桂,根據(jù)概率計(jì)算的平均結(jié)果我們需要將激活函數(shù)乘以dropping概率進(jìn)行伸縮作為最終結(jié)果,或在訓(xùn)練時(shí)的dropout mask步驟直接除以dropping概率蝶溶。
- 批標(biāo)準(zhǔn)化[25]:該方法對每批次輸入的均值和方差進(jìn)行標(biāo)準(zhǔn)化嗜历,通常用在全連接層之后。它既可以作為正則化方法抖所,也可以解決與權(quán)重初始化相關(guān)的問題梨州,同時(shí)也可以加速收斂。
- 層標(biāo)準(zhǔn)化[26]:該方法類似于批標(biāo)準(zhǔn)化田轧,但均值和方差是在每層計(jì)算的暴匠。這對于批標(biāo)準(zhǔn)化不能直接應(yīng)用的RNN和完全連接層十分有用,但不適用卷積層傻粘。它可以比批標(biāo)準(zhǔn)化更快地加速收斂每窖。
- Data Augmentation數(shù)據(jù)增量:對同一張圖片進(jìn)行隨機(jī)剪切、伸縮旋轉(zhuǎn)弦悉、水平變換窒典、改變亮度對比度、透鏡畸變等操作后作為輸入數(shù)據(jù)對網(wǎng)絡(luò)進(jìn)行訓(xùn)練稽莉。
- Dropconnect:將權(quán)重矩陣中的某些值隨機(jī)設(shè)為0瀑志,丟棄某些連接。
- Fractional Max Pooling:采用不同的pooling區(qū)域并在測試時(shí)固定平均肩祥。
- Stochastic Depth:在訓(xùn)練深度非常深的網(wǎng)絡(luò)時(shí)隨機(jī)丟棄某些層后室,在測試時(shí)再恢復(fù)全部使用。
批標(biāo)準(zhǔn)化和層標(biāo)準(zhǔn)化混狠、Dropout方法以及數(shù)據(jù)增量本質(zhì)都是通過在訓(xùn)練階段增加某些隨機(jī)性然后在測試時(shí)進(jìn)行估計(jì)將隨機(jī)性平均化從而實(shí)現(xiàn)正則化[27]岸霹。
參考文獻(xiàn)
-
McCulloch, Warren S., and Walter Pitts. “A logical calculus of the ideas immanent in nervous activity.” The bulletin of mathematical biophysics 5.4 (1943): 115-133. ?
-
Rosenblatt, Frank. “The perceptron: A probabilistic model for information storage and organization in the brain.” Psychological review 65.6 (1958): 386 ?
-
Kurzweil, Ray. How to create a mind: The secret of human thought revealed. Penguin, 2013. ?
-
http://www.andreykurenkov.com/writing/a-brief-history-of-neural-nets-and-deep-learning/ ?
-
Webos, Paul John. “Beyond regression: New tools for prediction and analysis in the behavioral sciences.” Doctoral Dissertation, Applied Mathematics, Harvard University (1974) ?
-
Rumelhart, David E., Geoffrey E. Hinton, and Ronald J. Williams. Learning internal representations by error propagation. No. ICS-8506. California Univ San Diego La Jolla Inst for Cognitive Science, 1985. ?
-
http://www.andreykurenkov.com/writing/a-brief-history-of-neural-nets-and-deep-learning/ ?
-
https://becominghuman.ai/back-propagation-is-very-simple-who-made-it-complicated-97b794c97e5c ?
-
https://medium.com/@karpathy/yes-you-should-understand-backprop-e2f06eab496b ?
-
https://medium.com/@erikhallstrm/backpropagation-from-the-beginning-77356edf427d ?
-
LeCun, Yann, et al. “Backpropagation applied to handwritten zip code recognition.” Neural computation 1.4 (1989): 541-551. ?
-
Fukushima, Kunihiko. “Neocognitron: A hierarchical neural network capable of visual pattern recognition.” Neural networks 1.2 (1988): 119-130. ?
-
https://medium.com/the-theory-of-everything/understanding-activation-functions-in-neural-networks-9491262884e0 ?
-
https://www.quora.com/What-is-the-vanishing-gradient-problem ?
-
https://www.linkedin.com/pulse/gradient-descent-simple-words-parth-jha ?
-
Srivastava Nitish, Geoffrey E. Hinton, Alex Krizhevsky, Ilya Sutskever, and Ruslan Salakhutdinov. “Dropout: a simple way to prevent neural networks from overfitting.” Journal of Machine Learning Research 15.1 (2014): 1929-1958. ?
-
Ioffe, Sergey, and Christian Szegedy. “Batch normalization: Accelerating deep network training by reducing internal covariate shift.” International Conference on Machine Learning. 2015. ?
-
Ba, Jimmy Lei, Jamie Ryan Kiros, and Geoffrey E. Hinton. “Layer normalization.” arXiv preprint arXiv:1607.06450 (2016). ?