最近看到一篇博客,將最新的LookAhead和RAdam優(yōu)化器結(jié)合,產(chǎn)生了一個(gè)新的算法——Ranger,獲得了比單獨(dú)使用RAdam要好的效果。后來有人將LARS與Ranger結(jié)合,效果取得了進(jìn)一步提升。最近,Ranger的提出者又將GC(Gradient Centralization)方法與Ranger結(jié)合,也取得了比Ranger好的效果。這里我會(huì)分四篇文章分享在閱讀這四個(gè)方法的論文時(shí)我個(gè)人的總結(jié)和體會(huì)。由于LookAhead優(yōu)化器與SWA比較相似,所以還會(huì)開辟一篇文章介紹SWA和Fast SWA優(yōu)化器。本篇文章為該系列文章第一篇。
LARS (Layer-wise Adaptive Rate Scaling)
問題
常用的對(duì)網(wǎng)絡(luò)訓(xùn)練進(jìn)行加速的方法之一是使用更大的batch size在多個(gè)GPU上訓(xùn)練。但是當(dāng)訓(xùn)練周期數(shù)不變時(shí),增大batch size將會(huì)導(dǎo)致網(wǎng)絡(luò)權(quán)重更新的迭代次數(shù)減少。為了彌補(bǔ)該問題,很多研究者建議當(dāng)batch size增加k倍時(shí),也相應(yīng)地將學(xué)習(xí)率增加k倍。但是當(dāng)batch size很大的時(shí)候,學(xué)習(xí)率增加太大會(huì)導(dǎo)致學(xué)習(xí)不穩(wěn)定,尤其是在訓(xùn)練早期階段,如果學(xué)習(xí)率太大,則參數(shù)可能在錯(cuò)誤的方向上更新很多,從而導(dǎo)致模型最終的表現(xiàn)很差。另外,學(xué)習(xí)率太大的話也可能導(dǎo)致學(xué)習(xí)發(fā)散。
解決方法
之前主流的用來緩解該問題的方法是學(xué)習(xí)率warm-up,在訓(xùn)練的前幾個(gè)周期,從一個(gè)比較小的學(xué)習(xí)率開始,線性增加到最終使用的學(xué)習(xí)率(也就是k倍增加后的學(xué)習(xí)率)。作者從自己的實(shí)驗(yàn)觀察出發(fā),提出了可以替代warm-up的方法——分層自適應(yīng)學(xué)習(xí)率縮放(Layer-wise Adaptive Rate Scaling),從一個(gè)新穎的方向緩解學(xué)習(xí)率過大的問題。
我們知道,網(wǎng)絡(luò)參數(shù)的更新公式為:,當(dāng)學(xué)習(xí)率太大的話,
的值將會(huì)大于
,這時(shí)便可能造成發(fā)散。作者通過分析訓(xùn)練時(shí)網(wǎng)絡(luò)每層的權(quán)重L2范數(shù)和對(duì)應(yīng)梯度的L2范數(shù)的比值(
,后面簡(jiǎn)稱為ratio)發(fā)現(xiàn),每層的ratio差異很大(如下圖table 2所示),而且ratio在訓(xùn)練早期都比較大,經(jīng)過幾個(gè)周期后整體迅速減小。作者指出,如果在學(xué)習(xí)的早期階段學(xué)習(xí)率太大的話,對(duì)某些ratio較小的層,
的值將會(huì)大于
,也就是說很有可能存在
的值大于權(quán)重
,從而造成訓(xùn)練不穩(wěn)定。warm-up的目的便是以較小的學(xué)習(xí)率開始訓(xùn)練來緩解該問題。

作者從以上觀察出發(fā)得出結(jié)論,既然并不是所有層的ratio比較小,那么各個(gè)層的更新參數(shù)使用的學(xué)習(xí)率應(yīng)該根據(jù)自己的情況有所調(diào)整,而不是所有層使用相同的學(xué)習(xí)率。由此,作者引入了局部學(xué)習(xí)率(local LR)的概念,從而在全局學(xué)習(xí)率的基礎(chǔ)上根據(jù)每層的情況進(jìn)行適當(dāng)?shù)卣{(diào)整。局部學(xué)習(xí)率的計(jì)算方式如下:
其中,表示層數(shù),
是超參(
),表示一次更新時(shí)每層會(huì)改變參數(shù)的置信度(trust),作者的實(shí)驗(yàn)中該值為0.001。局部學(xué)習(xí)率可以很方便的替換每層的全局學(xué)習(xí)率,從而參數(shù)的更新大小為:
其中,為全局學(xué)習(xí)率。而且,局部學(xué)習(xí)率也可以輕易擴(kuò)展到帶參數(shù)衰減
的參數(shù)更新中:
由于局部學(xué)習(xí)率引入了對(duì)梯度的歸一化(
),所以參數(shù)更新的幅度不再依賴梯度的大小,梯度只起到了權(quán)重更新方向的作用,從而起到了緩解梯度爆炸和消失的作用。
引入局部學(xué)習(xí)率后,由于且很?。ɡ?,作者實(shí)驗(yàn)中使用的0.001),對(duì)于ratio比較小的層,
也是個(gè)很小的值,這樣便能將全局學(xué)習(xí)率減小很多,參數(shù)更新時(shí)便比較穩(wěn)定;對(duì)于ratio比較大的層,權(quán)重本身比梯度大很多,可以使用較大的梯度進(jìn)行更新也不會(huì)造成發(fā)散,此時(shí)局部學(xué)習(xí)率
會(huì)自適應(yīng)地調(diào)整到接近1,從而使用接近全局學(xué)習(xí)率的學(xué)習(xí)率進(jìn)行參數(shù)更新。
下圖是將LARS與SGD結(jié)合的算法流程:

實(shí)驗(yàn)效果
作者將warm-up作為新方法的baseline,在使用LARS后將batch size擴(kuò)展到8k,獲得了與baseline(batch size為512)相當(dāng)?shù)男Ч?/p>

結(jié)合warm-up和LARS后,使用32K batch size訓(xùn)練的ResNet在ImageNet數(shù)據(jù)集上的測(cè)試集表現(xiàn)和不使用warm-up且batch size為256的baseline效果相當(dāng),如下圖所示:

評(píng)價(jià)
作者提出的LARS可以有效緩解較大batch size訓(xùn)練前期由于學(xué)習(xí)率太大導(dǎo)致的不穩(wěn)定問題。另外,個(gè)人認(rèn)為對(duì)于遷移學(xué)習(xí)來說,網(wǎng)絡(luò)不同層應(yīng)該使用不同的學(xué)習(xí)率,因?yàn)檩^淺層參數(shù)通常用來提取細(xì)粒度的特征,而這些特征往往比較通用,所以較淺層的學(xué)習(xí)率應(yīng)該較小,只對(duì)參數(shù)做微調(diào),這也相當(dāng)于在對(duì)相似數(shù)據(jù)集進(jìn)行微調(diào)時(shí)固定(freeze)較淺層參數(shù)的作用;相反,深層參數(shù)表達(dá)的是全局特征,需要更好地?cái)M合新任務(wù)數(shù)據(jù),所以需要進(jìn)行較大調(diào)整。因此,也許LARS最適宜的應(yīng)用場(chǎng)景是在遷移學(xué)習(xí)中。當(dāng)然,這也不排除在finetuen時(shí),較淺層參數(shù)的梯度本身就比較小,從而減小對(duì)較淺層參數(shù)更新的可能。
另外,文中也存在以下缺陷:
- 該方法是否對(duì)超參數(shù)
敏感,作者沒有給出進(jìn)一步的實(shí)驗(yàn)數(shù)據(jù);
- 實(shí)驗(yàn)對(duì)比不全面,LARS的提出是為了替代warm-up策略,但是在ImageNet數(shù)據(jù)集上,作者只給出了warm-up+LARS的實(shí)驗(yàn)效果,不得不讓人懷疑該方法的廣泛有效性。