【課程筆記】神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)相關(guān)的技巧

1. 參數(shù)的更新
a. 參數(shù)更新涉及三個(gè)方面:初始值,更新方向,更新步長(zhǎng)
i. 初始值:考慮到局部最小現(xiàn)象,不同的初始值開始,進(jìn)行梯度下降,收斂的結(jié)果會(huì)不一樣。
ii. 更新方向:不一定總是沿著負(fù)梯度方向更新就最好,這取決于目標(biāo)函數(shù)的形狀
iii. 更新步長(zhǎng):涉及到搜索效率和搜索的準(zhǔn)確性(有沒(méi)有遺漏極小值)的權(quán)衡
b. 與更新方向相關(guān)的策略:隨機(jī)梯度下降(Stochastic Gradient Descent, SGD)
i. 當(dāng)函數(shù)的形狀非均向時(shí),梯度的方向就沒(méi)有指向最小值的方向。此時(shí)沿著負(fù)梯度方向做參數(shù)更新,路徑非常曲折,很低效。
ii. 改進(jìn)的辦法:Momentum, AdaGrad, Adam
1) Momentum:每次梯度下降,都會(huì)有一個(gè)之前的“速度”在發(fā)揮作用(相當(dāng)于阻尼器/慣性)
a) 如果這次的方向和之前相同,則會(huì)因?yàn)橹暗乃俣壤^續(xù)加速
b) 如果這次的方向和之前相反,則會(huì)由于之前存在速度的作用不會(huì)產(chǎn)生一個(gè)"急轉(zhuǎn)彎",而是有沿著之前的路線前進(jìn)的趨勢(shì)
2) AdaGrad:學(xué)習(xí)率衰減(learning rate decay)的方法,即隨著學(xué)習(xí)的進(jìn)行,使學(xué)習(xí)率逐漸減?。ㄏ喈?dāng)于“全體”參數(shù)的學(xué)習(xí)率值儀器降低)
a) 思路:一個(gè)一個(gè)地記錄過(guò)去所有梯度的平方和(梯度能量),并將平方和的根號(hào)去除固定步長(zhǎng),來(lái)讓實(shí)際步長(zhǎng)越來(lái)越小
b) AdaGrad的缺陷:如果無(wú)止境地學(xué)習(xí),更新量就會(huì)變?yōu)?,完全不再更新。為了改善這一問(wèn)題,提出了RMSProp方法
c) 改進(jìn)方案,RMSProp:在AdaGrad的基礎(chǔ)上,采用“指數(shù)移動(dòng)平均”的思路逐漸地“遺忘”過(guò)去的梯度,將新梯度的信息更多地反映出來(lái)
d) (有不少在步長(zhǎng)上做改進(jìn)的方法)
3) Adam:融合AdaGrad和Momentum方法,目前選優(yōu)化器的時(shí)候,用的最多的就是Adam
2. 權(quán)重的初始值(優(yōu)化初始值)
a. 隱藏層激活值的分布:
i. 采樣方差為1的高斯分布:效果不太好→可以看隱藏層節(jié)點(diǎn)的激活值畫出來(lái),做統(tǒng)計(jì)。發(fā)現(xiàn)大部分激活值在0或者1附近??紤]到Sigmoid函數(shù)的函數(shù)值在接近0或者接近1附近時(shí),導(dǎo)數(shù)值是接近0的。因此,偏向0和1的數(shù)據(jù)分布會(huì)造成反向傳播中梯度的值不斷變小,最后消失。這個(gè)問(wèn)題被稱為“梯度消失(gradient vanishing)”
1) 歷史:很早人們就會(huì)意識(shí)到,深層的神經(jīng)網(wǎng)絡(luò)效果更好。但是也是由于梯度消失問(wèn)題,很長(zhǎng)的時(shí)間內(nèi),沒(méi)有人能訓(xùn)練出深層的神經(jīng)網(wǎng)絡(luò)
ii. 采用方差為0.01的高斯分布:效果也不太好→隱藏層節(jié)點(diǎn)的激活值聚焦在0.5附近,這說(shuō)明幾乎所有神經(jīng)元都輸出幾乎相同的值,那么也可以由1個(gè)神經(jīng)元來(lái)表達(dá)相同的事情。因此,激活值在分布式有所偏向會(huì)出現(xiàn)“表現(xiàn)力受限”的問(wèn)題
1) 其實(shí):各層的激活值的分布需要有適當(dāng)?shù)膹V度;最好的情況:隱藏層激活值能夠是均勻分布
iii. 經(jīng)驗(yàn)上的Trick:
1) 針對(duì)Sigmoid函數(shù)和Tanh函數(shù):Xavier初始值——使用標(biāo)準(zhǔn)差為1/sqrt(n)是高斯分布進(jìn)行初始化
a) 是根據(jù)前人的實(shí)驗(yàn)提出來(lái)的經(jīng)驗(yàn)性方法,很有可能煉丹失敗
2) 針對(duì)ReLU函數(shù):He初始值——使用標(biāo)準(zhǔn)差為1/sqrt(2/n)的高斯分布(當(dāng)前一層節(jié)點(diǎn)為n時(shí))
3. Batch Normalizatin (BN,批正則)
a. 思路:強(qiáng)制把激活值的分布拉平
b. 問(wèn)題:怎么抹平?→減去均值,除以方差(正規(guī)化)
c. 方法:(相當(dāng)于加了一個(gè)BN層)
i. 步驟1:以學(xué)習(xí)時(shí)的mini-batch為單位,按mini-batch進(jìn)行正規(guī)化;使得數(shù)據(jù)分布的均值為0,方差為1
1) 注意:如果要用BN策略,必須一個(gè)batch一個(gè)batch地去做(batch級(jí)優(yōu)化);而不能一個(gè)樣本一個(gè)樣本地去做(sample by sample,樣本級(jí)優(yōu)化)
ii. 步驟2:對(duì)正規(guī)化后的數(shù)據(jù)進(jìn)行縮放和平移的變換:乘以放縮系數(shù),加上平移系數(shù)(系數(shù)初值:放縮系數(shù)為1,平移系數(shù)0;后續(xù)通過(guò)學(xué)習(xí)調(diào)整)
d. BN層可以放在仿射變換層和ReLU層(激活層)之間;也有文章將BN層放在ReLU層(激活層)之后
i. 不要教條,實(shí)用主義原則
e. 初始化對(duì)于模型訓(xùn)練的效果是很敏感的;BN層的引入,能夠降低一些模型訓(xùn)練對(duì)參數(shù)初始化的敏感性 → 拓展了能夠訓(xùn)練成功的初始參數(shù)的范圍
4. 正則化
a. 過(guò)擬合問(wèn)題:只能擬合訓(xùn)練數(shù)據(jù),但不能很好地?cái)M合測(cè)試數(shù)據(jù)的狀態(tài)
i. 過(guò)擬合的原因:模型擁有大量參數(shù)、表現(xiàn)力強(qiáng)(這是相對(duì)而言的原因:過(guò)于強(qiáng)大的模型,遇到了很少的數(shù)據(jù),容易在實(shí)際上還沒(méi)有訓(xùn)練好的情況下,認(rèn)為自己訓(xùn)練好了(準(zhǔn)確率極高),于是之后就不再調(diào)整自己的參數(shù)了);訓(xùn)練數(shù)據(jù)少(根本原因)
ii. 判斷過(guò)擬合:訓(xùn)練精度和測(cè)試精度的差異特別大,就需要懷疑是不是過(guò)擬合的情況
iii. 兩個(gè)思路:簡(jiǎn)化模型或者增加訓(xùn)練數(shù)據(jù)。實(shí)際當(dāng)中最有效的是增加訓(xùn)練數(shù)據(jù),但通常而言,這也很可能是貴到自己無(wú)法負(fù)擔(dān)的
b. 正則化:面對(duì)過(guò)擬合問(wèn)題時(shí),一種可能會(huì)有效,但是也可能沒(méi)有效果的方式
i. 權(quán)值衰減:在原有損失函數(shù)的基礎(chǔ)上,加上權(quán)重的平方范數(shù)(L2范數(shù))(也被稱為能量項(xiàng))
1) 在過(guò)擬合現(xiàn)象中,權(quán)值衰減方法在測(cè)試集上的精度可能不能抬多少,但是能夠把訓(xùn)練集上的精度壓下來(lái):防止自己誤以為訓(xùn)練出的模型,已經(jīng)可以適應(yīng)所有的情況了
ii. Dropout方法:
1) 訓(xùn)練時(shí),隨機(jī)選出隱藏層的神經(jīng)元,然后將其刪除。被刪除的神經(jīng)元不再進(jìn)行信號(hào)的傳遞;
2) 測(cè)試時(shí),雖然會(huì)傳遞所有的神經(jīng)元信號(hào),但是對(duì)于各個(gè)神經(jīng)元的輸出,要乘上訓(xùn)練時(shí)刪除的比例相關(guān)的項(xiàng)后再輸出
3) 有很多理論來(lái)分析這個(gè)方法為什么好。一個(gè)很不嚴(yán)謹(jǐn)?shù)睦斫饩褪?,它在?xùn)練時(shí)產(chǎn)生了很多小的網(wǎng)絡(luò),來(lái)一定程度上抑制過(guò)擬合效果。如果感興趣,可以讀一些關(guān)于Dropout的純理論的文章
5. 超參數(shù)的驗(yàn)證
a. 模型里面的參數(shù)分為兩塊:一部分叫模型參數(shù)(連接權(quán),閾值);另一部分就叫超參數(shù)(網(wǎng)絡(luò)有幾層,每一層有幾個(gè)節(jié)點(diǎn)…)
i. Model parameter:用BP算法學(xué)習(xí)得到
ii. Hyper parameter:一開始是猜出來(lái)的(Pre-defined)
1) 預(yù)先定義的超參數(shù),往往都不是很好
b. 跑程序的思路:調(diào)通簡(jiǎn)單的模型 → 把模型變得表達(dá)能力更強(qiáng)一些(調(diào)超參數(shù))
c. 數(shù)據(jù)集的劃分:訓(xùn)練集,測(cè)試集和驗(yàn)證集
i. 訓(xùn)練集:用于參數(shù)(權(quán)重和偏置)的學(xué)習(xí)
ii. 測(cè)試集:確認(rèn)泛化能力,要在最后使用(比較理想的是只用一次)
iii. 驗(yàn)證集:用于超參數(shù)性能的評(píng)估(通常是在訓(xùn)練集中再劃分一個(gè)出來(lái))
d. 驗(yàn)證集的使用:窮舉法
i. 給一個(gè)超參數(shù)可能的范圍
ii. 對(duì)范圍內(nèi)的每一個(gè)取值,在訓(xùn)練集上訓(xùn)練,然后在驗(yàn)證集上測(cè)試
iii. 測(cè)試結(jié)果最好的,就是該范圍內(nèi)要找的最優(yōu)的超參數(shù)
e. 超參數(shù)的組合會(huì)造成窮舉的工作量幾何級(jí)增長(zhǎng),需要采用新的策略
i. 設(shè)置超參數(shù)的范圍(不要取得太大了)
ii. 從設(shè)定的超參數(shù)范圍中隨機(jī)采樣
iii. 使用采樣到的超參數(shù)的值進(jìn)行學(xué)習(xí),通過(guò)驗(yàn)證數(shù)據(jù)評(píng)估識(shí)別精度(但是要將epoch設(shè)置得很?。?/p>
iv. 重復(fù)上面兩個(gè)步驟(100次等),根據(jù)它們識(shí)別精度的結(jié)果,縮小超參數(shù)的范圍(←類似于鄰域搜索的思路,先粗粒度地篩,再細(xì)粒度地篩)