前言
如果你能找到這里稽莉,真是我的幸運(yùn)~這里是藍(lán)白絳的學(xué)習(xí)筆記邀跃,本集合主要針對(duì)《百面機(jī)器學(xué)習(xí)——算法工程師帶你去面試》這本書(shū)。主要記錄我認(rèn)為重要的知識(shí)點(diǎn)小槐,希望對(duì)大家有幫助拇派。
第九章 前向神經(jīng)網(wǎng)絡(luò)
引導(dǎo)語(yǔ)
從輸入到輸出的過(guò)程中不存在于模型自身的反饋連接的模型,此類模型被稱為“前饋”凿跳。
深度前饋網(wǎng)絡(luò)是一類網(wǎng)絡(luò)模型的統(tǒng)稱件豌,有多層感知機(jī)、自編碼器拄显、限制玻爾茲曼機(jī)苟径,以及卷積神經(jīng)網(wǎng)絡(luò)等。
1躬审、多層感知機(jī)與布爾函數(shù)
- 多層感知機(jī)表示異或邏輯時(shí)最少需要幾個(gè)隱藏層(僅考慮二元輸入)棘街?
一個(gè)隱藏層即可計(jì)算異或函數(shù)。
0個(gè)隱藏層的情況(等同于邏輯回歸)無(wú)法精確學(xué)習(xí)出一個(gè)輸出為異或的模型表示承边。事實(shí)上遭殉,通用近似定理告訴我們,一個(gè)前饋神經(jīng)網(wǎng)絡(luò)如果具有線性輸出層和至少一層具有任何一種“擠壓”性質(zhì)的激活函數(shù)的隱藏層博助,當(dāng)給予網(wǎng)絡(luò)足夠數(shù)量的隱藏單元時(shí)险污,可以以任意精度近似任何從一個(gè)有限維空間到另一個(gè)有限維空間的波萊爾可測(cè)函數(shù)。我們常用的激活函數(shù)和目標(biāo)函數(shù)是通用近似定理使用的一個(gè)子集富岳,因此多層感知機(jī)的表達(dá)能力是非常強(qiáng)的蛔糯,關(guān)鍵是我們能否學(xué)習(xí)到對(duì)應(yīng)此表達(dá)式的模型參數(shù)。 - 如果只使用一個(gè)隱藏層窖式,需要多少隱節(jié)點(diǎn)能夠?qū)崿F(xiàn)包含
元輸入的任意布爾函數(shù)蚁飒?
個(gè)隱節(jié)點(diǎn)。
- 考慮多隱層的情況萝喘,實(shí)現(xiàn)包含
元輸入的任意布爾函數(shù)最少需要多少個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)和網(wǎng)絡(luò)層淮逻?
元異或函數(shù)需要包括
個(gè)節(jié)點(diǎn)(包括最終輸出節(jié)點(diǎn))琼懊。可以發(fā)現(xiàn)爬早,多隱層結(jié)構(gòu)可以將隱節(jié)點(diǎn)的數(shù)目從指數(shù)級(jí)
直接減少至線性級(jí)
哼丈。
需要的最少網(wǎng)絡(luò)層數(shù)為(向上取整)。
2筛严、深度神經(jīng)網(wǎng)絡(luò)中的激活函數(shù)
- 線性模型是機(jī)器學(xué)習(xí)領(lǐng)域中最基本也是最重要的工具醉旦,以邏輯回歸和線性回歸為例,無(wú)論通過(guò)閉解形式還是使用凸優(yōu)化脑漫,它們都能高效且可靠地?cái)M合數(shù)據(jù)髓抑。但我們往往會(huì)遇到線性不可分問(wèn)題(如XOR異或函數(shù)),需要非線性變換對(duì)數(shù)據(jù)分布進(jìn)行重新映射优幸,對(duì)于深度神經(jīng)網(wǎng)絡(luò),我們?cè)诿恳粚泳€性變換后疊加一個(gè)非線性激活函數(shù)褪猛,以避免多層網(wǎng)絡(luò)等效于單層線性函數(shù)网杆,從而獲得更強(qiáng)大的學(xué)習(xí)與擬合能力。
- 常用激活函數(shù)及其導(dǎo)數(shù):
Sigmoid激活函數(shù)的形式為:Tanh激活函數(shù)的形式為:
ReLU激活函數(shù)的形式為:
- Sigmoid和Tanh激活函數(shù)為什么會(huì)導(dǎo)致梯度消失的現(xiàn)象伊滋?
Sigmoid和Tanh激活函數(shù)曲線如下圖所示:
9-2 激活函數(shù)
Sigmoid函數(shù)的導(dǎo)數(shù)在
很大或很小時(shí)都會(huì)趨近于0碳却,造成梯度消失,同樣Tanh函數(shù)的導(dǎo)數(shù)
在
很大或很小時(shí)都會(huì)趨近于0笑旺,同樣造成梯度消失昼浦。
實(shí)際上Tanh激活函數(shù)相當(dāng)于Sigmoid的平移: - ReLU系列激活函數(shù)相對(duì)于Sigmoid和Tanh激活函數(shù)的優(yōu)點(diǎn)是什么?它們有什么局限性以及如何改進(jìn)筒主?
- 優(yōu)點(diǎn):
(1) 從計(jì)算的角度上关噪,Sigmoid和Tanh激活函數(shù)都需要計(jì)算指數(shù)函數(shù),復(fù)雜度高乌妙,而ReLU只需要一個(gè)閾值即可得到激活值使兔。
(2) ReLU的非飽和性可以有效解決梯度消失的問(wèn)題,提供相對(duì)寬的激活邊界藤韵。
(3) ReLU的單側(cè)抑制提供了網(wǎng)絡(luò)的稀疏表達(dá)能力虐沥。 - 局限性:
其訓(xùn)練過(guò)程中會(huì)導(dǎo)致神經(jīng)元死亡。函數(shù)導(dǎo)致負(fù)梯度在經(jīng)過(guò)ReLU單元時(shí)被置為0泽艘,且在之后也不被任何數(shù)據(jù)激活欲险,即流經(jīng)該神經(jīng)元的梯度永遠(yuǎn)為0,不對(duì)任何數(shù)據(jù)產(chǎn)生響應(yīng)匹涮。在實(shí)際訓(xùn)練中天试,如果學(xué)習(xí)率設(shè)置較大,會(huì)導(dǎo)致超過(guò)一定比例的神經(jīng)元不可逆死亡焕盟,進(jìn)而參數(shù)梯度無(wú)法更新秋秤,整個(gè)訓(xùn)練過(guò)程失敗宏粤。
為了解決這個(gè)問(wèn)題,人們?cè)O(shè)計(jì)了Leaky ReLU(LReLU)灼卢,其形式表達(dá)式為
一般為一個(gè)很小的正常數(shù)绍哎,LReLU既實(shí)現(xiàn)了單側(cè)抑制,又保留了部分負(fù)梯度信息以致信息不完全丟失鞋真。但是另一方面崇堰,
值的選擇增加了問(wèn)題難度,需要較強(qiáng)的人工先驗(yàn)或多次重復(fù)訓(xùn)練以確定合適的參數(shù)值涩咖。
基于此海诲,參數(shù)化的PReLU(Parametric ReLU)將負(fù)軸部分斜率作為網(wǎng)絡(luò)中一個(gè)可學(xué)習(xí)的參數(shù),進(jìn)行反向傳播訓(xùn)練檩互,與其他含參數(shù)網(wǎng)絡(luò)層聯(lián)合優(yōu)化特幔。
RReLU(Random ReLU)增加了“隨機(jī)化”機(jī)制,在訓(xùn)練過(guò)程中闸昨,斜率作為一個(gè)滿足某種分布的隨機(jī)采樣蚯斯;測(cè)試時(shí)再固定下來(lái),一定程度上能起到正則化的作用饵较。
3拍嵌、多層感知機(jī)的反向傳播算法
- 在網(wǎng)絡(luò)訓(xùn)練中,前向傳播最終產(chǎn)生一個(gè)標(biāo)量損失函數(shù)循诉,反向傳播算法則將損失函數(shù)的信息沿網(wǎng)絡(luò)層向后傳播用以計(jì)算梯度横辆,達(dá)到優(yōu)化網(wǎng)絡(luò)參數(shù)的目的。
- 多層感知機(jī)的平方誤差和交叉熵?fù)p失函數(shù)的計(jì)算公式就不寫(xiě)了茄猫,還有各層參數(shù)更新的梯度計(jì)算公式推導(dǎo)也不寫(xiě)了狈蚤,網(wǎng)上有非常多資料。
-
平方誤差損失函數(shù)和交叉熵?fù)p失函數(shù)分別適用的場(chǎng)景:
平方損失函數(shù):更適合輸出為連續(xù)募疮,并且最后一層不含Sigmoid或Softmax激活函數(shù)的神經(jīng)網(wǎng)絡(luò)炫惩;
交叉熵?fù)p失函數(shù):更適合二分類或多分類的場(chǎng)景。 - 為什么平方損失不適合最后一層含有Sigmoid或Softmax激活函數(shù)的神經(jīng)網(wǎng)絡(luò)阿浓?
平方誤差損失函數(shù)相對(duì)于輸出層的導(dǎo)數(shù)其中最后一項(xiàng)
為激活函數(shù)的導(dǎo)數(shù)他嚷,當(dāng)激活函數(shù)為Sigmoid函數(shù)時(shí),如果
的絕對(duì)值較大芭毙,函數(shù)的梯度會(huì)趨于飽和筋蓖,即
的絕對(duì)值非常小,導(dǎo)致
取值也非常小退敦,使得基于梯度的學(xué)習(xí)速度非常緩慢粘咖。
當(dāng)使用交叉熵?fù)p失函數(shù)時(shí),相對(duì)于輸出層的導(dǎo)數(shù)(也可以被認(rèn)為是殘差)為此導(dǎo)數(shù)是線性的侈百,因此不會(huì)存在學(xué)習(xí)速度過(guò)慢的問(wèn)題瓮下。
4翰铡、神經(jīng)網(wǎng)絡(luò)訓(xùn)練技巧
- 解決過(guò)擬合的方法有:數(shù)據(jù)集增強(qiáng)、參數(shù)范數(shù)懲罰/正則化讽坏、模型集成等锭魔;其中Dropout是模型集成方法中最高效與常用的技巧。
同時(shí)路呜,深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中涉及諸多手調(diào)參數(shù)迷捧,如學(xué)習(xí)率、權(quán)重衰減系數(shù)胀葱、Dropout比例等漠秋,這些參數(shù)的選擇會(huì)顯著影響模型最終的訓(xùn)練效果。批量歸一化(Batch Normalization抵屿,BN)方法有效規(guī)避了這些復(fù)雜參數(shù)對(duì)網(wǎng)絡(luò)訓(xùn)練產(chǎn)生的影響庆锦,在加速訓(xùn)練收斂的同時(shí)也提升了網(wǎng)絡(luò)的泛化能力。 - 神經(jīng)網(wǎng)絡(luò)訓(xùn)練時(shí)是否可以將全部參數(shù)初始化為0晌该?
不能肥荔。
考慮全連接的深度神經(jīng)網(wǎng)絡(luò),同一層的神經(jīng)元都是同構(gòu)的朝群,擁有相同的輸入和輸出,如果再將參數(shù)全部初始化為相同的值中符,那么無(wú)論前向傳播還是反向傳播的取值都是相同的姜胖。學(xué)習(xí)過(guò)程將永遠(yuǎn)無(wú)法打破這種對(duì)稱性,最終同一個(gè)網(wǎng)絡(luò)層中的各個(gè)參數(shù)仍然是相同的淀散。
因此需要隨機(jī)地初始化神經(jīng)網(wǎng)絡(luò)參數(shù)的值,以打破對(duì)稱性,簡(jiǎn)單來(lái)說(shuō)腐缤,我們可以初始化參數(shù)為的均勻分布搏明,其中
為神經(jīng)元接受的輸入維度,偏置可以被簡(jiǎn)單地設(shè)為0郭膛,并不會(huì)導(dǎo)致參數(shù)對(duì)稱的問(wèn)題晨抡。
- Dropout抑制過(guò)擬合的工作原理:Dropout隨機(jī)丟棄部分神經(jīng)元的機(jī)制,相當(dāng)于每次迭代都在訓(xùn)練不同結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)则剃。類比于Bagging方法耘柱,Dropout可以被認(rèn)為是一種實(shí)用的大規(guī)模深度神經(jīng)網(wǎng)絡(luò)的模型集成算法。這是由于傳統(tǒng)意義上的Bagging涉及多個(gè)模型的同時(shí)訓(xùn)練與測(cè)試評(píng)估棍现,當(dāng)網(wǎng)絡(luò)與參數(shù)規(guī)模龐大時(shí)调煎,這種集成方式需要消耗大量的運(yùn)算時(shí)間與空間。Dropout在小批量級(jí)別上的操作己肮,提供了一種輕量級(jí)的Bagging集成近似士袄,能夠?qū)崿F(xiàn)指數(shù)級(jí)數(shù)量神經(jīng)網(wǎng)絡(luò)的訓(xùn)練與評(píng)測(cè)悲关。
對(duì)于包含個(gè)神經(jīng)元節(jié)點(diǎn)的網(wǎng)絡(luò),在Dropout的作用下可以看作
個(gè)模型的集成娄柳。這
個(gè)模型可認(rèn)為是原始網(wǎng)絡(luò)的子網(wǎng)絡(luò)寓辱,它們共享部分權(quán)重,并且具有相同的網(wǎng)絡(luò)層數(shù)西土,而模型整體的參數(shù)數(shù)目不變讶舰,大大簡(jiǎn)化了運(yùn)算。對(duì)于任意神經(jīng)元需了,每次訓(xùn)練中都與一組隨機(jī)挑選的不同的神經(jīng)元集合共同進(jìn)行優(yōu)化跳昼,這個(gè)過(guò)程為減弱全體神經(jīng)元之間的聯(lián)合適應(yīng)性,減少過(guò)擬合的風(fēng)險(xiǎn)肋乍,增強(qiáng)泛化能力鹅颊。
- 批量歸一化的基本動(dòng)機(jī)與原理:神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程的本質(zhì)是學(xué)習(xí)數(shù)據(jù)分布,如果訓(xùn)練數(shù)據(jù)與測(cè)試數(shù)據(jù)的分布不同將會(huì)大大降低網(wǎng)絡(luò)的泛化能力墓造,因此我們需要在訓(xùn)練開(kāi)始前對(duì)所有輸入數(shù)據(jù)進(jìn)行歸一化處理堪伍。然而隨著網(wǎng)絡(luò)訓(xùn)練的進(jìn)行,每個(gè)隱層的參數(shù)變化使得后一層的輸入發(fā)生變化觅闽,從而每一批訓(xùn)練數(shù)據(jù)的分布也隨之變化帝雇,致使網(wǎng)絡(luò)在每次迭代中都需要擬合不同的數(shù)據(jù)分布,增大訓(xùn)練的復(fù)雜度以及過(guò)擬合的風(fēng)險(xiǎn)蛉拙。
批量歸一化方法是針對(duì)每一批數(shù)據(jù)尸闸,在網(wǎng)絡(luò)每一層輸入之間增加歸一化處理(均值為0,標(biāo)準(zhǔn)差為1)孕锄,將所有批數(shù)據(jù)強(qiáng)制性在同一的數(shù)據(jù)分布下吮廉。可以看作在每一層輸入和上一層輸出之間加入了一個(gè)新的計(jì)算層畸肆,對(duì)數(shù)據(jù)的分布進(jìn)行了額外的約束宦芦,從而增強(qiáng)模型的泛化能力。
但是批量歸一化同時(shí)也降低了模型的擬合能力轴脐,歸一化之后的輸入分被強(qiáng)制為0均值和1標(biāo)準(zhǔn)差调卑,以Sigmoid激活函數(shù)為例,批量歸一化之后數(shù)據(jù)整體處于函數(shù)的非飽和區(qū)域豁辉,只包含線性變換令野,破壞了之前學(xué)習(xí)到的特征分布,為了恢復(fù)原始數(shù)據(jù)分布徽级,具體實(shí)現(xiàn)中加入了變換重構(gòu)以及可學(xué)習(xí)參數(shù)和
:
其中
和
分別為輸入數(shù)據(jù)分布的方差和偏差气破。
對(duì)于一般的網(wǎng)絡(luò),不采用批量歸一化操作時(shí)餐抢,這兩個(gè)參數(shù)高度依賴前面網(wǎng)絡(luò)學(xué)習(xí)到的連接權(quán)重(對(duì)應(yīng)復(fù)雜的非線性)现使。而在批量歸一化操作中低匙,和
變成了該層的學(xué)習(xí)參數(shù),僅用兩個(gè)參數(shù)就可以恢復(fù)最優(yōu)的輸入數(shù)據(jù)分布碳锈,與之前網(wǎng)絡(luò)層的參數(shù)解耦顽冶,從而更加有利于優(yōu)化的過(guò)程,提高模型的泛化能力售碳。
小結(jié)
這是本章的第一部分强重,整理了多層感知機(jī)實(shí)現(xiàn)異或函數(shù)、布爾函數(shù)贸人,深度神經(jīng)網(wǎng)絡(luò)中的激活函數(shù)间景,梯度消失,損失函數(shù)艺智,Dropout倘要,批量歸一化等等。后一部分整理深度卷積神經(jīng)網(wǎng)絡(luò)和ResNet十拣。
結(jié)尾
如果您發(fā)現(xiàn)我的文章有任何錯(cuò)誤封拧,或?qū)ξ业奈恼掠惺裁春玫慕ㄗh,請(qǐng)聯(lián)系我夭问!如果您喜歡我的文章泽西,請(qǐng)點(diǎn)喜歡~*我是藍(lán)白絳,感謝你的閱讀缰趋!