一 為什么讀這篇
這篇早在玩Doodle的時(shí)候就列進(jìn)TODO了,因?yàn)橐恢痹诳锤鞣N網(wǎng)絡(luò)架構(gòu),所以看的時(shí)候有點(diǎn)晚。在不改變數(shù)據(jù)的前提下,要想效果好其實(shí)就兩塊工作,要么試各種牛逼的網(wǎng)絡(luò)架構(gòu),要么就靠各種tricks,本篇算是各種tricks的合集。
二 截止閱讀時(shí)這篇論文的引用次數(shù)
2019.2.2 10次。有點(diǎn)可憐。
三 相關(guān)背景介紹
18年3月掛到arXiv上,作者Leslie N. Smith還是非常猛的,經(jīng)常獨(dú)自一人灌長(zhǎng)文,也是CLR的作者,一直在美國(guó)海軍研究實(shí)驗(yàn)室工作。此外,fastai創(chuàng)始人Jeremy Howard也發(fā)推肯定了本文的工作。
基于Caffe的官方實(shí)現(xiàn):https://github.com/lnsmith54/hyperParam1
四 關(guān)鍵詞
tricks
CLR
convergence
LR range test
五 論文的主要貢獻(xiàn)
1 提出幾種找最優(yōu)超參的方法論
2 test的loss也很重要,不能只看test的準(zhǔn)確率
3 增加學(xué)習(xí)率有助于減少欠擬合,學(xué)習(xí)率太小可能會(huì)表現(xiàn)出一些過(guò)擬合的行為。大的學(xué)習(xí)率有正則化效果,但過(guò)大的LR又會(huì)導(dǎo)致訓(xùn)練不能收斂
4 大學(xué)習(xí)率有兩個(gè)好處,一有正則化效應(yīng)可以避免過(guò)擬合,二是可以更快的訓(xùn)練
5 在增加學(xué)習(xí)率的同時(shí)減小動(dòng)量
6 因?yàn)楦蟮膶W(xué)習(xí)率有正則化效應(yīng),所以用更小的權(quán)重衰減更合適
六 詳細(xì)解讀
1 介紹
雖然deep learning在各領(lǐng)域都取得了很大的成功,不過(guò)如何設(shè)置超參仍是需要多年經(jīng)驗(yàn)的黑科技。本文提出了幾種設(shè)置超參的方法,可以在有效減少訓(xùn)練時(shí)間的同時(shí)提升效果。具體來(lái)說(shuō),本文展示了如何檢查訓(xùn)練時(shí)驗(yàn)證/測(cè)試損失以判斷是欠擬合還是過(guò)擬合,并指導(dǎo)如何找到最佳平衡點(diǎn)。之后討論了如何增加(減少)學(xué)習(xí)率(動(dòng)量)來(lái)加速訓(xùn)練。本文實(shí)驗(yàn)表明,對(duì)于每個(gè)數(shù)據(jù)集和架構(gòu),平衡各種正則化方法至關(guān)重要。權(quán)重衰減作為一種正則化方法,其最優(yōu)值與學(xué)習(xí)率和動(dòng)量也有緊密關(guān)系。
當(dāng)前并沒有簡(jiǎn)單容易的方式來(lái)設(shè)置超參,格網(wǎng)搜索和隨機(jī)搜索計(jì)算開銷和時(shí)間開銷都太高了。實(shí)際上,從業(yè)者經(jīng)常拿開源模型的默認(rèn)參數(shù)直接用,而這對(duì)于自己的數(shù)據(jù)來(lái)說(shuō)顯然是欠優(yōu)化的。
Part 1(本文)試驗(yàn)了學(xué)習(xí)率,batch size,動(dòng)量,權(quán)重衰減,Part 2(尚未出版)試驗(yàn)了架構(gòu),正則化,數(shù)據(jù)集和任務(wù)。所有目的就是給從業(yè)者提供行之有效的建議。
本文的基本方法就是基于眾所周知的如何平衡過(guò)擬合和欠擬合。實(shí)驗(yàn)表明學(xué)習(xí)率,動(dòng)量和正則化緊密耦合,所以必須一起才能確定最佳值。
下面是本文最貼心的部分(看圖和標(biāo)題以及帶有Remakr的段落就夠了)
2 相關(guān)工作
本文的很多工作都是基于作者本人之前的工作。特別是15年提出來(lái)的CLR(17年更新一版)。4.1節(jié)更新了17年提出的super-convergence的實(shí)驗(yàn)。并討論了以前提出的『Don’t decay the learning rate, increase the batch size』。
diss了一些人的工作,提出了不同的觀點(diǎn)。比如"使用大學(xué)習(xí)率,小batch size","不要用權(quán)重衰減和dropout作為正則化"。
3 驗(yàn)證/測(cè)試損失難以置信的有效性
在訓(xùn)練初期通過(guò)監(jiān)控驗(yàn)證損失,就會(huì)有足夠的信息用于調(diào)節(jié)架構(gòu)和超參,從而避免了沒必要的格網(wǎng)或隨機(jī)搜索。
圖1展示了Cifar數(shù)據(jù)集上殘差網(wǎng)絡(luò)的學(xué)習(xí)率范圍測(cè)試的訓(xùn)練損失(下面的橙線),驗(yàn)證準(zhǔn)確率(上面的黃線)以及驗(yàn)證損失(上面的藍(lán)線),目的是找到合理的用于訓(xùn)練的學(xué)習(xí)率。圖1a左上角的黑框暗示了學(xué)習(xí)率在0.01到0.04之間有可能過(guò)擬合,而這條信息不會(huì)出現(xiàn)在測(cè)試準(zhǔn)確率或訓(xùn)練損失的曲線中(劃重點(diǎn),說(shuō)明test的loss也很重要,不能只看test的準(zhǔn)確率)。
Remark1 測(cè)試/驗(yàn)證損失是網(wǎng)絡(luò)是否收斂的良好指標(biāo)
本文中測(cè)試/驗(yàn)證損失用來(lái)在訓(xùn)練時(shí)提供insight,最終的性能比較是測(cè)試準(zhǔn)確率。
3.1 回顧欠擬合和過(guò)擬合的平衡
Remark2 需要注意的是,調(diào)節(jié)超參的目的就是達(dá)到測(cè)試損失的水平部分(圖2中optimal指向處)
然而深度學(xué)習(xí)很難達(dá)到這個(gè)平衡點(diǎn),因?yàn)樾枰愕臇|西實(shí)在太多了,blablabla。
通過(guò)本節(jié)得到的一個(gè)insight是,在訓(xùn)練早期,測(cè)試/驗(yàn)證損失是處于欠擬合還是過(guò)擬合的跡象對(duì)于調(diào)節(jié)超參是有幫助的。訓(xùn)練過(guò)程中的測(cè)試損失可用于查找最佳網(wǎng)絡(luò)架構(gòu)和超參,而無(wú)需執(zhí)行全部的訓(xùn)練。
3.2 欠擬合
標(biāo)志就是測(cè)試損失持續(xù)下降(圖3a紅線)。增加學(xué)習(xí)率使訓(xùn)練從欠擬合走向過(guò)擬合(圖3a藍(lán)線),注意測(cè)試損失在剛開始迭代時(shí)迅速下降,之后處于水平狀態(tài)。這是早期的積極線索之一,表明最終該曲線的設(shè)置將產(chǎn)生比其他設(shè)置更好的準(zhǔn)確率(感覺是廢話。。如果換一個(gè)模型,發(fā)現(xiàn)剛開始loss就很低,那自然是很興奮的)
第二個(gè)例子就是圖3b的兩個(gè)網(wǎng)絡(luò)對(duì)比。Inception-ResNet-v2比ResNet-50更不容易欠擬合。
增加學(xué)習(xí)率有助于減少欠擬合(有意思!),找到好的學(xué)習(xí)率的一個(gè)簡(jiǎn)單辦法就是LR范圍測(cè)試(LR range test)(始于CLR這篇文章)。
3.3 過(guò)擬合
圖1a的測(cè)試損失在小的學(xué)習(xí)率時(shí)(0.01-0.04)出現(xiàn)過(guò)擬合的跡象,然而隨后在更高的學(xué)習(xí)率時(shí)測(cè)試損失持續(xù)下降,就好像欠擬合一樣。這表明學(xué)習(xí)率太小可能會(huì)表現(xiàn)出一些過(guò)擬合的行為。
圖4a,當(dāng)WD=0.0001時(shí),在lr為0.002附近時(shí)損失到最小值,之后開始過(guò)擬合,當(dāng)WD=0.004時(shí),損失在更大的學(xué)習(xí)率范圍內(nèi)保持穩(wěn)定,同時(shí)達(dá)到了更低的損失值,說(shuō)明該WD比之前的好,當(dāng)WD=0.01時(shí),lr在0.005附近時(shí)損失就開始有個(gè)尖銳的上升表明并不是過(guò)擬合,而是由于過(guò)大的學(xué)習(xí)率導(dǎo)致的訓(xùn)練不穩(wěn)定。同理,紅線在0.008的lr時(shí)也是一個(gè)意思。
第二個(gè)例子是圖4b,藍(lán)線是欠擬合,紅線是用太小的權(quán)重衰減,WD=1e-7時(shí),開始出現(xiàn)過(guò)擬合。
還有幾個(gè)過(guò)擬合的例子可以參考圖7a黃線,圖9a藍(lán)線,圖11a。
設(shè)置網(wǎng)絡(luò)超參的藝術(shù)最終會(huì)在欠擬合和過(guò)擬合之間的平衡點(diǎn)結(jié)束。
4 周期學(xué)習(xí)率,Batch Sizes,周期動(dòng)量和權(quán)重衰減
4.1 回顧周期學(xué)習(xí)率和超級(jí)收斂
如果學(xué)習(xí)率過(guò)小,也會(huì)發(fā)生過(guò)擬合。大的學(xué)習(xí)率有正則化效果,但過(guò)大的LR又會(huì)導(dǎo)致訓(xùn)練不能收斂。由2015年提出,2017年更新的周期學(xué)習(xí)率(CLR)和學(xué)習(xí)率范圍測(cè)試(LR range test)可用于選擇學(xué)習(xí)率。
要使用CLR,需要指定最小和最大學(xué)習(xí)率邊界和步長(zhǎng)。一個(gè)周期由兩步組成,一步從最小到最大線性增加學(xué)習(xí)率,另一步線性減少。作者在15年做了各種實(shí)驗(yàn)對(duì)比不同的學(xué)習(xí)率變化方式,發(fā)現(xiàn)效果都差不多,因此推薦用最簡(jiǎn)單的,線性變化。
在LR范圍測(cè)試中,訓(xùn)練始于一個(gè)小的學(xué)習(xí)率,之后通過(guò)pre-training緩慢線性增加。這一步提供了在一段區(qū)間上不同學(xué)習(xí)率訓(xùn)練的網(wǎng)絡(luò)的表現(xiàn)如何,以及最大學(xué)習(xí)率是什么的寶貴信息。當(dāng)用一個(gè)小學(xué)習(xí)率開始時(shí),網(wǎng)絡(luò)開始收斂,之后隨著學(xué)習(xí)率增加,最終變得太大而引起測(cè)試/驗(yàn)證損失的增加以及準(zhǔn)確率的下降。這個(gè)極值處的學(xué)習(xí)率可以作為周期學(xué)習(xí)率的最大邊界值,但如果是選擇恒定學(xué)習(xí)率或網(wǎng)絡(luò)不能收斂時(shí),則需要更小的值。有3種方式來(lái)選擇最小學(xué)習(xí)率的邊界:
1 比最大界限小3到4倍
2 如果只有一個(gè)周期,則比最大界限小10到20倍
3 通過(guò)對(duì)一些初始學(xué)習(xí)率進(jìn)行數(shù)百次迭代的簡(jiǎn)短測(cè)試,選擇可以收斂的最大值,并且沒有過(guò)擬合的跡象,如圖1a所示那樣。
需要注意的是,在訓(xùn)練沒有變得不穩(wěn)定之前,學(xué)習(xí)率增速(stepsize)也會(huì)影響最大最小學(xué)習(xí)率的選擇。
超級(jí)收斂是在一個(gè)學(xué)習(xí)率周期內(nèi)用非常大的學(xué)習(xí)率來(lái)加速收斂。大學(xué)習(xí)率有兩個(gè)好處,一有正則化效應(yīng)可以避免過(guò)擬合,二是可以更快的訓(xùn)練。圖5a是一個(gè)例子,用范圍從0.1到3.0的CLR只用1w個(gè)迭代就收斂了,與之相比,用值為0.1的常量初始學(xué)習(xí)率的常規(guī)做法需要8w個(gè)迭代。
"1cycle"可以在訓(xùn)練結(jié)束前就達(dá)到準(zhǔn)確率的瓶頸。
圖5b說(shuō)明權(quán)重衰減為或更小的值時(shí)能更好的用大學(xué)習(xí)率(如3.0),當(dāng)權(quán)重衰減為
時(shí)削弱了用大學(xué)習(xí)率訓(xùn)練網(wǎng)絡(luò)的能力。需要平衡各種正則化技術(shù),因?yàn)榇髮W(xué)習(xí)率的正則化效應(yīng),所以必須減小其他形式的正則化。
Remark3 通用原則:必須為每個(gè)數(shù)據(jù)集和架構(gòu)平衡正則化的總量
4.2 Batch Size
本節(jié)推薦使用1cycle學(xué)習(xí)率調(diào)度機(jī)制時(shí)使用更大的batch size。
比較batch size的一個(gè)難點(diǎn)是,保持一個(gè)固定的epochs個(gè)數(shù)與保持一個(gè)固定的迭代個(gè)數(shù)往往會(huì)得到矛盾的結(jié)果。
Remark4 從業(yè)者的目標(biāo)是在達(dá)到最好效果的同時(shí)最小化所需的計(jì)算時(shí)間
如圖6a所示,更大的batch size使用更大的學(xué)習(xí)率。
硬件不限制的話,想用多大的batch size都可以,但如果有限的話,則使用符合顯存限制的batch size以及更大的學(xué)習(xí)率。
4.3 周期動(dòng)量
動(dòng)量和學(xué)習(xí)率是緊密相關(guān)的。和學(xué)習(xí)率一樣,只要不引起訓(xùn)練不穩(wěn)定,動(dòng)量能設(shè)置多大就設(shè)置多大。
圖7a說(shuō)明動(dòng)量的重要性,顯然藍(lán)線(值為0.9)效果最好,值得注意的是黃線(值為0.99),有過(guò)擬合的跡象(在開始發(fā)散之前(學(xué)習(xí)率0.01附近),最小值之間(學(xué)習(xí)率0.006附近))。
如圖7b所示,實(shí)驗(yàn)證明動(dòng)量范圍測(cè)試對(duì)于找到最優(yōu)動(dòng)量并沒有幫助。
Remark5 最佳動(dòng)量值有助于提升網(wǎng)絡(luò)訓(xùn)練
圖7c用固定動(dòng)量和周期動(dòng)量作對(duì)比。并說(shuō)明,在增加學(xué)習(xí)率的同時(shí)減小動(dòng)量有3個(gè)好處:
1 如黃線和紫線所示,有更低的最小測(cè)試損失
2 更快的初始收斂,如黃線和紫線所示
3 在更大范圍的學(xué)習(xí)率上有更好的收斂穩(wěn)定性,如黃線所示
圖7d是固定動(dòng)量和周期動(dòng)量的對(duì)比(兩者差不多嘛。。)
當(dāng)用周期學(xué)習(xí)率的時(shí)候,使用相反方向的周期動(dòng)量是有意義的。但是固定學(xué)習(xí)率的時(shí)候,周期動(dòng)量的效果不如固定動(dòng)量(還是要配套使用)
圖8是resnet的實(shí)驗(yàn)結(jié)果。從淺層網(wǎng)絡(luò)和深層網(wǎng)絡(luò)得到的結(jié)論是一致的,只是有些具體的值不同。
4.4 權(quán)重衰減
本文實(shí)驗(yàn)說(shuō)明權(quán)重衰減還是用固定值好(不要周期變化了)。
如果不知道怎么設(shè)置權(quán)重衰減,試試和0。更小的數(shù)據(jù)集和架構(gòu)似乎需要更大的值,而更大的數(shù)據(jù)集和架構(gòu)需要更小的值。另外,如果經(jīng)驗(yàn)上
合適,那么也可以試試
(此處作者有很玄的解釋)
Remark6 因?yàn)楸仨殲槊總€(gè)數(shù)據(jù)集和架構(gòu)平衡正則化的總量,所以權(quán)重衰減的值是一個(gè)關(guān)鍵,可以根據(jù)學(xué)習(xí)率的增加來(lái)調(diào)整正則化的關(guān)系
圖10展示了同時(shí)調(diào)節(jié)權(quán)重衰減,學(xué)習(xí)率和動(dòng)量。
因?yàn)楦蟮膶W(xué)習(xí)率有正則化效應(yīng),所以用更小的權(quán)重衰減更合適。
5 基于其他架構(gòu)和數(shù)據(jù)集的實(shí)驗(yàn)
以上所有內(nèi)容都可以濃縮為以下幾條:
1 LR:對(duì)"大"學(xué)習(xí)率進(jìn)行學(xué)習(xí)率范圍測(cè)試。最大LR取決于架構(gòu)。使用通過(guò)LR范圍測(cè)試找到的最大學(xué)習(xí)率的1cycle 機(jī)制,最小學(xué)習(xí)率是最大學(xué)習(xí)率的1/10,學(xué)習(xí)率增速也需考慮(太快增加會(huì)導(dǎo)致不穩(wěn)定)
2 Total batch size(TBS):更大的batch size更好,不過(guò)受限于GPU顯存。用更大的batch size以便用更大的學(xué)習(xí)率
3 動(dòng)量:簡(jiǎn)短的跑下值為0.99,0.97,0.95和0.9的動(dòng)量值就可以很快找出最佳動(dòng)量值。當(dāng)用1cycle機(jī)制時(shí),最好也用周期動(dòng)量,其始于最大動(dòng)量,隨著學(xué)習(xí)率的增加而減少到0.8或0.85
4 權(quán)重衰減(WD):這需要網(wǎng)格搜索來(lái)確定合適的幅度,但通常不需要超過(guò)一個(gè)有效數(shù)字精度。更復(fù)雜的數(shù)據(jù)集需要更少的正則化因此測(cè)試更小的權(quán)重衰減值,如
。而淺層架構(gòu)需要更多正則化,因此測(cè)試更大的權(quán)重衰減值,如
5.1 CIFAR-10 Wide ResNet
32層,通道數(shù)從因子2改為因子4。
5.2 CIFAR-10 DenseNet
40層的DenseNet。找它的超參比Wide ResNet更有挑戰(zhàn)。
圖13c似乎說(shuō)明架構(gòu)的復(fù)雜增加了正則化效應(yīng),因此減少權(quán)重衰減是符合直覺的。
5.3 MNIST
5.4 CIFAR-100
5.5 ImageNet
很明顯,超級(jí)收斂比常規(guī)訓(xùn)練能快很多就收斂,效果還好一些。
這些實(shí)驗(yàn)說(shuō)明深度學(xué)習(xí)模型訓(xùn)練起來(lái)可以比標(biāo)準(zhǔn)訓(xùn)練方法快很多。
6 討論
因?yàn)楦鞣N訓(xùn)練深度學(xué)習(xí)模型的技巧散布于不同的論文,而且往往得到相互矛盾的結(jié)論,所以給人一種盲人摸象的感覺。本文重點(diǎn)介紹了各種remark和建議,以在加速網(wǎng)絡(luò)訓(xùn)練的同時(shí)得到最佳效果。
七 讀后感
信息密度還是非常高的一篇,讀起來(lái)沒那么容易。簡(jiǎn)直就是神文,堪稱實(shí)驗(yàn)設(shè)計(jì)指導(dǎo)手冊(cè),各種玄學(xué)調(diào)參。此外本文給人的感覺是缺少一些理論依據(jù),更多的是通過(guò)各種實(shí)驗(yàn)對(duì)比得出結(jié)論的。深度學(xué)習(xí)中這個(gè)事后找理論問題太明顯了,本文算是其中的典范。最后,全部讀完后,發(fā)現(xiàn)tricks并沒有之前預(yù)期那么多,主要內(nèi)容就是CLR和super convergence的內(nèi)容。
八 補(bǔ)充
知乎:深度學(xué)習(xí)調(diào)參有哪些技巧?
初始化就跟黑科技一樣,用對(duì)了超參都不用調(diào);沒用對(duì),跑出來(lái)的結(jié)果就跟模型有bug一樣不忍直視。
可視化與模型調(diào)試存在著極強(qiáng)的聯(lián)系。
調(diào)參就是trial-and-error. 沒有其他捷徑可以走. 唯一的區(qū)別是有些人盲目的嘗試, 有些人思考后再嘗試. 快速嘗試, 快速糾錯(cuò)這是調(diào)參的關(guān)鍵
1 剛開始,先上小規(guī)模數(shù)據(jù),模型往大了放,直接奔著過(guò)擬合去。
2 Loss設(shè)計(jì)要合理,要注意loss的錯(cuò)誤范圍(主要是回歸)。
3 觀察loss勝于觀察準(zhǔn)確率
4 確認(rèn)分類網(wǎng)絡(luò)學(xué)習(xí)充分。網(wǎng)絡(luò)慢慢從類別模糊到類別清晰的,如果網(wǎng)絡(luò)預(yù)測(cè)分布靠近中間,再學(xué)習(xí)學(xué)習(xí)。
5 Learning Rate設(shè)置合理
6 對(duì)比訓(xùn)練集和驗(yàn)證集的loss
7 清楚receptive field的大小
多尺度的圖片輸入(或網(wǎng)絡(luò)內(nèi)部可以利用多尺度下的結(jié)果)有很好的提升效果
不像有fully connection的網(wǎng)絡(luò), 好歹有個(gè)fc兜底, 全局信息都有。fc作用就是可以把整張圖的信息匯總,卷積本身一般沒這個(gè)能力。
工程上更多從顯而易見的地方入手,比如LR,比如數(shù)據(jù)本身有沒有錯(cuò)漏,這些更有效率。
從業(yè)者通用的現(xiàn)狀,80%的時(shí)間debug和tune,只有20%的時(shí)間搞數(shù)學(xué)或?qū)崿F(xiàn)東西。
數(shù)據(jù)集構(gòu)建的共同問題:
沒有足夠的數(shù)據(jù)
類別不平衡
噪聲標(biāo)簽
訓(xùn)練集,測(cè)試集分布不同
數(shù)值不穩(wěn)定(inf/NaN)經(jīng)常隨著exp, log, div操作的使用而出現(xiàn)。