ChildTuning:试试把Dropout加到梯度上去?
?PaperWeekly 原創(chuàng) ·?作者 |蘇劍林
單位 |追一科技
研究方向 |NLP、神經(jīng)網(wǎng)絡(luò)
Dropout 是經(jīng)典的防止過擬合的思路了,想必很多讀者已經(jīng)了解過它。有意思的是,最近 Dropout 有點(diǎn)“老樹發(fā)新芽”的感覺,出現(xiàn)了一些有趣的新玩法,比如最近引起過熱議的 SimCSE [1] 和 R-Drop,尤其是在文章《又是 Dropout兩次!這次它做到了有監(jiān)督任務(wù)的 SOTA》中,我們發(fā)現(xiàn)簡單的 R-Drop 甚至能媲美對抗訓(xùn)練,不得不說讓人意外。
一般來說,Dropout 是被加在每一層的輸出中,或者是加在模型參數(shù)上,這是 Dropout 的兩個經(jīng)典用法。不過,最近筆者從論文《Raise a Child in Large Language Model: Towards Effective and Generalizable Fine-tuning》[2] 中學(xué)到了一種新穎的用法:加到梯度上面。
梯度加上 Dropout?相信大部分讀者都是沒聽說過的。那么效果究竟如何呢?讓我們來詳細(xì)看看。
方法大意
簡單來說,這篇論文主要提出了一種名為“ChildTuning”的思路,來提高預(yù)訓(xùn)練模型在 finetune 時的效果,其中“Child”是“Children Network”的意思,指的是從預(yù)訓(xùn)練模型中選擇一個子網(wǎng)絡(luò)進(jìn)行優(yōu)化,緩解優(yōu)化整個模型所帶來的過擬合風(fēng)險。其中,在子網(wǎng)絡(luò)的選擇上,又分為兩種方式:ChildTuning-D 和 ChildTuning-F。
ChildTuning-D
ChildTuning-D(Task-Dependent)是任務(wù)相關(guān)的選擇方式,它需要下游任務(wù)的訓(xùn)練數(shù)據(jù)來參與計(jì)算。具體來說,假設(shè)訓(xùn)練數(shù)據(jù)為?,模型為?,其中?? 是模型的所有參數(shù),而??????????????????? 則是其中的第 i 個參數(shù),那么我們計(jì)算如下形式的 Fisher 信息作為該參數(shù)的重要性:
有了重要性指標(biāo)后,我們就可以對每個參數(shù)進(jìn)行排序,然后選出最重要的? 部分(比如前 20%,即?),然后在模型更新的時候只優(yōu)化這些參數(shù)。由于優(yōu)化的參數(shù)變少了,所以過擬合的風(fēng)險也就降低了。在實(shí)際使用時,ChildTuning-D 在 finetune 之前就把要優(yōu)化的參數(shù)確定下來,然后就一直保持不變了。
要注意的是,這里的參數(shù)選擇是以每個分量為單位的,也就是說,可能一個參數(shù)矩陣?yán)镞?#xff0c;只有一部分被選擇中,所以不能說單獨(dú)挑出哪些參數(shù)矩陣不優(yōu)化,而是要通過構(gòu)建對應(yīng)的 0/1 矩陣??來將對應(yīng)的梯度 mask 掉,即,其中除以??是保持整理的更新量級不變。這樣沒被選中的參數(shù)梯度一直是 0,所以也就沒有更新了。這樣一來,雖然理論上更新的參數(shù)少了,但它也不能節(jié)約計(jì)算量,所以作者只是將它定位為提高 finetune 效果的方法。
ChildTuning-F
ChildTuning-F(Task-Free)是任務(wù)無關(guān)的選擇方式,其實(shí)它可以更形象地稱為“梯度 Dropout”。對于 ChildTuning-D 來說,我們就是根據(jù)任務(wù)數(shù)據(jù)來構(gòu)建了固定的 0/1 矩陣?,然后將梯度修改為?,而 ChildTuning-F 既然希望與任務(wù)無關(guān),那么它每步更新就隨機(jī)構(gòu)建一個 0/1 矩陣?,其中 1 的比例為 p,然后將梯度修改為?。可以看到,這本質(zhì)就是對梯度進(jìn)行 Dropout。
要注意,某個參數(shù)當(dāng)前的梯度為 0,也不代表該參數(shù)當(dāng)前的更新量為 0,因?yàn)槲覀兺ǔS玫亩际菐в袆恿康膬?yōu)化器如 SGDM 和 Adam,對于此類優(yōu)化器,更新量是正比于動量,而動量是歷史梯度滑動平均過來的,即?,所以如果該參數(shù)的歷史梯度不為 0,那么即便當(dāng)前梯度為 0,動量依然很可能不會為 0,所以更新量也不為 0。
所以在這里筆者就有個疑問,按照 ChildTuning 的設(shè)計(jì)思路,它應(yīng)該是想要每步只選擇一個子網(wǎng)絡(luò)進(jìn)行更新,說白了就是每一步只更新??比例的參數(shù),但根據(jù)上面的分析,對梯度進(jìn)行 Dropout 其實(shí)達(dá)不到這個目的,而要實(shí)現(xiàn)這個目的,應(yīng)該要對每步更新量??????進(jìn)行 Dropout 才對。但筆者反復(fù)看了原論文,甚至對照了論文開源的代碼,最終確認(rèn)論文的意思確實(shí)是對梯度進(jìn)行 Dropout。
實(shí)驗(yàn)結(jié)果
從原論文給出的實(shí)驗(yàn)結(jié)果來看,ChildTuning的“戰(zhàn)績”是相當(dāng)耀眼了,幾乎都有提升,而且最高提升達(dá)到 8%~
▲ ChildTuning的“戰(zhàn)績”-1?
▲ ChildTuning的“戰(zhàn)績”-2?
從表中可以看出,對于 ChildTuning-D 來說,幾乎所有任務(wù)上都取得了提升,而 ChildTuning-F 也在不少任務(wù)上有效。另外,看論文描述可以知道上面給出的都是 large 版本模型的結(jié)果,而私下跟作者交流的時候,作者表示 base 版本的效果也有提升,只是限于論文篇幅,沒有貼出來。
原理思考
ChildTuning-D 基于 Fisher 信息來對進(jìn)行參數(shù)排序,該思路由來已久,它有效并不讓人意外,類似的工作還有《Training Neural Networks with Fixed Sparse Masks》[3] 等。反倒是任務(wù)無關(guān)的 ChildTuning-F,也就是梯度 Dropout,居然也有這么效果,值得我們細(xì)細(xì)思考。
無獨(dú)有偶,對梯度進(jìn)行 Dropout 的工作,去年也有一篇,名為《Regularizing Meta-Learning via Gradient Dropout》[4]。這表明,Gradient Dropout 應(yīng)該確實(shí)能起到一定效果的。那它究竟為什么有效呢?
論文推導(dǎo)
原論文給出一個基于 SGD 的理解,它指出梯度 Dropout 能擴(kuò)大更新過程中的方差,從而有助于模型逃離不那么好的局部最優(yōu)點(diǎn)。
具體來說,因?yàn)槲覀兪怯昧?SGD,所以每步所計(jì)算的梯度有一定的隨機(jī)性,假設(shè)它服從均值為?、方差為??的高斯分布;對于 ChildTuning-F 來說,引入一個隨機(jī)變量?,有??????????????????????的概率為 1,剩下? 的概率為 0。那么我們將有:
所以:
也就是說,梯度 Dropout 能保持梯度的均值不變,但能擴(kuò)大方差,而在 SGD 中,更新量正比于梯度,因此梯度 Dropout 擴(kuò)大了更新量的方差,論文認(rèn)為這有助于模型達(dá)到更好的收斂結(jié)果。
答非所問
這個解釋看上去挺合理的,也符合很多人的直覺,因?yàn)楹芏嗳说臐撘庾R里覺得隨機(jī)梯度下降比全量梯度下降好的原因就是因?yàn)橛性肼暋H欢?#xff0c;只要我們稍微深入思考一下,就能發(fā)現(xiàn)上述解釋其實(shí)是“答非所問”。
原因很簡單,上面分析的是 SGD,但實(shí)際上在 NLP 中我們用的都是 Adam(或者是它的變種),上述結(jié)論還能在 Adam 中保持嗎?很遺憾,不能,甚至剛好相反。在 Adam 中,長期來看,更新量可以近似看成( 是學(xué)習(xí)率)
于是加了梯度 Dropout 后,更新量變?yōu)?#xff1a;
可以看到,長期來看,Adam 加上梯度 Dropout 后,僅僅相當(dāng)于學(xué)習(xí)率降低為原來的?????倍!而且由于降低了學(xué)習(xí)率,也即降低了更新量,從而更新量的方差也隨之降低。也就是說,如果你用了 Adam 優(yōu)化器,那么實(shí)際情況跟論文的解釋剛好相反,更新量的方差不僅沒有增加,反而是降低了。
出現(xiàn)這個現(xiàn)象的根本原因就是,當(dāng)我們使用了帶有滑動平均的優(yōu)化器時,更新量通常已經(jīng)不在正比于梯度了,所以梯度如何變化,跟更新量如何變化,并沒有必然的關(guān)聯(lián)。這就回到了筆者前面的疑問了:為什么作者不干脆直接對更新量進(jìn)行 Dropout?如果是更新量 Dropout,那么前面基于 SGD 的推導(dǎo)也能搬過來了。
個人理解
不過,筆者認(rèn)為,就算把優(yōu)化器限制為 SGD,或者直接對更新量進(jìn)行 Dropout,原論文的推導(dǎo)也不能完全解釋它的有效性。理由也很簡單,能夠達(dá)到“均值不變、方差擴(kuò)大”的操作太多了,比如直接往梯度里邊加點(diǎn)高斯噪聲也可以,難道所有的這些操作都能達(dá)到同樣的效果?個人感覺不大可能。筆者認(rèn)為,要解釋梯度 Dropout 或者更新量 Dropout 的有效性,得著眼于 Dropout 帶來的稀疏性。
在這個問題上,筆者聯(lián)想到了之前寫過的文章《從動力學(xué)角度看優(yōu)化算法(七):SGD ≈ SVM?》,這篇文章告訴我們,所有 SGD 出來的模型,其解本質(zhì)上都類似于 SVM 模型:
其中 是第 個訓(xùn)練樣本。它有什么特點(diǎn)呢? 的表現(xiàn)類似一個“相似度函數(shù)”,上述形式意味著模型實(shí)際上會以某種形式把訓(xùn)練集“背”下來了,然后預(yù)測的時候會以 為相似度取檢索訓(xùn)練集,然后給出預(yù)測結(jié)果。當(dāng)然,這只是一個原理性的解釋,我們并不是主動將模型設(shè)計(jì)成這樣的形式,我們只是從這個角度看出,梯度下降實(shí)際上也是在背樣本,然后以類似于 KNN 的形式給出預(yù)測結(jié)果,這就不難理解為什么通常來說“訓(xùn)練樣本越多,效果越好”的結(jié)論了。
回到 ChildTuning-F 上,我們每次采樣一個 batch,然后對算出來的梯度或更新量進(jìn)行 Dropout,結(jié)合上面的“背樣本”解釋,我們可以直觀地想象,這本質(zhì)上就是“只用一小部分參數(shù)來背誦一小部分樣本”,而不是每次都要用全體參數(shù)來背誦那一小批樣本。所以,這跟“不要將雞蛋放在同一個籃子里”應(yīng)該是相似的,將樣本更均勻分散在每一個參數(shù)中,從而降低了過擬合風(fēng)險。
嘗試一下
對于 ChildTuning-F 來說,如果自己懂得改優(yōu)化器的話,不管是對梯度 Dropout 還是對更新量 Dropout,都只是一行代碼的工作量,因此還是值得嘗試一下的。萬一真的有用呢?
這里筆者在 CLUE 的幾個任務(wù)上做了測試,結(jié)果如下表。其中,baseline 代碼來自《bert4keras 在手,baseline 我有:CLUE 基準(zhǔn)代碼》,“grad drop”是對梯度進(jìn)行 Dropout,“incre drop”是對更新量進(jìn)行 Dropout,綠色表示相比 baseline 有提升,紅色則表示下降。時間算力都有限,所有結(jié)果都只跑了一次,存在一定的隨機(jī)波動。
從表格中,我們大致可以看出:
1. 對梯度 Dropout 和對更新量進(jìn)行 Dropout,大致上各有優(yōu)劣;
2. 在 BERT 上的效果明顯一些,在 RoBERTa 上的效果幾乎沒有,這跟論文給出的英文實(shí)驗(yàn)結(jié)果相似。
這結(jié)果挺讓人無語的,不能說它沒效,但正常來說,誰會用速度一樣、效果更差的 BERT 而不用效果更好的 RoBERTa 呢?那么,如果 RoBERTa 不怎么 work 的話,似乎就沒啥嘗試的價值了?當(dāng)然,原論文提升最大的是 Electra,這個我沒嘗試過,有興趣的讀者嘗試了把結(jié)果告訴我一下哈。
文章總結(jié)
本文介紹了往梯度里邊加入 Dropout 來提高 finetune 效果的做法,并給出了自己的理論分析。總的來說,個人的感覺是:可以嘗試,可能有效,但不要期望太高。
參考文獻(xiàn)
[1] https://kexue.fm/archives/8348
[2] https://arxiv.org/abs/2109.05687
[3] https://arxiv.org/abs/2111.09839
[4] https://kexue.fm/archives/8764
特別鳴謝
感謝 TCCI 天橋腦科學(xué)研究院對于 PaperWeekly 的支持。TCCI 關(guān)注大腦探知、大腦功能和大腦健康。
更多閱讀
#投 稿?通 道#
?讓你的文字被更多人看到?
如何才能讓更多的優(yōu)質(zhì)內(nèi)容以更短路徑到達(dá)讀者群體,縮短讀者尋找優(yōu)質(zhì)內(nèi)容的成本呢?答案就是:你不認(rèn)識的人。
總有一些你不認(rèn)識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學(xué)者和學(xué)術(shù)靈感相互碰撞,迸發(fā)出更多的可能性。?
PaperWeekly 鼓勵高校實(shí)驗(yàn)室或個人,在我們的平臺上分享各類優(yōu)質(zhì)內(nèi)容,可以是最新論文解讀,也可以是學(xué)術(shù)熱點(diǎn)剖析、科研心得或競賽經(jīng)驗(yàn)講解等。我們的目的只有一個,讓知識真正流動起來。
📝?稿件基本要求:
? 文章確系個人原創(chuàng)作品,未曾在公開渠道發(fā)表,如為其他平臺已發(fā)表或待發(fā)表的文章,請明確標(biāo)注?
? 稿件建議以?markdown?格式撰寫,文中配圖以附件形式發(fā)送,要求圖片清晰,無版權(quán)問題
? PaperWeekly 尊重原作者署名權(quán),并將為每篇被采納的原創(chuàng)首發(fā)稿件,提供業(yè)內(nèi)具有競爭力稿酬,具體依據(jù)文章閱讀量和文章質(zhì)量階梯制結(jié)算
📬?投稿通道:
? 投稿郵箱:hr@paperweekly.site?
? 來稿請備注即時聯(lián)系方式(微信),以便我們在稿件選用的第一時間聯(lián)系作者
? 您也可以直接添加小編微信(pwbot02)快速投稿,備注:姓名-投稿
△長按添加PaperWeekly小編
🔍
現(xiàn)在,在「知乎」也能找到我們了
進(jìn)入知乎首頁搜索「PaperWeekly」
點(diǎn)擊「關(guān)注」訂閱我們的專欄吧
·
·
總結(jié)
以上是生活随笔為你收集整理的ChildTuning:试试把Dropout加到梯度上去?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cad2019怎么测量角度(用CAD如何
- 下一篇: 直播 | NeurIPS 2021:基于