微调也重要:探究参数初始化、训练顺序和提前终止对结果的影响
論文標題:
Fine-Tuning Pretrained Language Models: Weight Initializations, Data Orders, and Early Stopping
論文作者:
Jesse Dodge, Gabriel Ilharco, Roy Schwartz, Ali Farhadi, Hannaneh Hajishirzi, Noah Smith
論文鏈接:
https://arxiv.org/abs/2002.06305
當前的預訓練模型如BERT都分為兩個訓練階段:預訓練和微調。但很多人不知道的是,在微調階段,隨機種子不同會導致最終效果呈現巨大差異。
本文探究了在微調時參數初始化、訓練順序和提前終止對最終效果的影響,發現:參數初始化和訓練順序在最終結果上方差巨大,而使用提前終止可以節省訓練開銷。
這啟示我們去進一步探索更健壯、穩定的微調方式。?
預訓練模型中的微調
當前所有的預訓練模型都分為兩個訓練階段:預訓練和微調。
預訓練就是在大規模的無標注文本上,用掩碼語言模型(MLM)或其他方式無監督訓練。
微調,就是在特定任務的數據集上訓練,比如文本分類。
然而,盡管微調使用的參數量僅占總參數量的極小一部分(約0.0006%),但是,如果對參數初始化使用不同的隨機數種子,或者是用不同的數據訓練順序,其會對結果產生非常大的影響——一些隨機數直接導致模型無法收斂,一些隨機數會取得很好的效果。
比如,下圖是在BERT上實驗多次取得的結果,遠遠高于之前BERT的結果,甚至逼近更先進的預訓練模型。似乎微調階段會對最終效果產生巨大的方差。
為此,我們想知道有哪些因素會導致模型最終效果的巨大不確定性。
本文研究了兩個因素:(微調的)參數初始化和數據的訓練順序。結果表明,不同的初始化和不同的訓練順序會導致最后在具體任務上效果的差異。
為此,本文提出使用提前終止的策略,降低搜索最佳模型的訓練開銷。
總的來說,本文貢獻如下:
本文表明,微調階段的不同的隨機數種子會導致最終結果的巨大差異;
權重初始化和數據的訓練順序是影響差異的因素之一;
使用提前終止的方法可以減少訓練開銷。
在閱讀完本文之后,可以思考:
你認為健壯的模型應該是怎樣的?它應該對隨機數種子非常敏感嗎?如果大規模調整隨機數種子來找到表現(驗證集上)最好的模型,這是不是一種“擬合隨機數”?
你認為導致微調階段模型對隨機數種子敏感的原因有哪些?
研究方法
為了探究微調階段對最終結果的影響,本文在四個分類數據集上實驗:MRPC,RTE,CoLA和SST。前三個比較小,SST比較大。
所有的實驗都基于預訓練好的BERT,每次微調都運行三個epoch。
微調的參數既包括BERT主體,即原來預訓練的部分,也包括最后一層分類層(下稱這一層為“微調層”)。微調層都按照標準正態分布采樣初始化。
對每一個隨機數,它都會產生一個對應的微調層初始化和數據的訓練順序,所以,對個不同的隨機數,一共有個不同的組合。本文設。
為了量化隨機數種子對最終結果的影響,本文采取了“期望驗證集效果”的方法。簡單來說,就是多次實驗中在驗證集上取得最好的結果的期望值。
隨機數種子的影響
首先來看看總體隨機數種子的影響。下圖是期望效果隨著試驗次數增加(每次實驗的種子都不同)的變化曲線。
可以看到,隨著實驗次數的增加,模型總的效果是不斷上升的,而且,在試驗次數較少的時候,模型效果的方差特別大,后來漸漸變小。
綠色的線是在三輪結束后再測評,橙色的是每一輪都測評一次,而藍色是每一輪測評十次。
這三者都具有相同的增長模式。這就說明了不同的隨機數種子的確會導致迥然不同的效果差異。
權重初始化和訓練順序的影響
隨機數種子的改變會影響什么的變化呢?
因為模型預訓練部分的參數是不變的、超參數是不變的,那么最明顯的改變就是微調層參數的初始化值,和數據訓練的順序(因為在微調之前一般需要shuffle,這涉及到隨機數種子)了。
我們可以猜想,這二者是導致模型效果差異的因素。
下面首先來看二者對結果的影響,如下圖所示。橫軸是不同的訓練順序,縱軸是不同的參數初始化值。
可以看到,在四個數據集上,最后效果的差異都非常大,這說明不同隨機種子導致的不同的參數初始化、不同的訓練順序對結果的方差是比較大的。
而且,就算是同一個種子,在不同的數據集上表現也有可能不一樣。
那么,有沒有一些種子,它產生的初始化參數和訓練順序在所有數據集上都有比較好的效果呢?
下圖畫出了實現最好(壞)效果的參數初始化和訓練順序的種子的核密度估計。
可以看到,那些表現好的種子分布比較集中,在四個數據集上都能實現比較好的效果;而表現差的種子在各個數據集上表現不一,有好有壞,而且結果的方差也更大。
這說明,的確存在一些種子,它能產生在四個數據集上都表現較好的初始化參數和訓練順序。
使用提前終止減少訓練開銷
那么一個問題是,一定要等到訓練結束之后才能判斷當前模型產生的結果是好是壞嗎?一個簡單的想法是,我們可以提前結束那些在一開始就表現不好的模型。
但是,一開始表現不好的模型不一定就意味著它在訓練結束的時候也表現不好,我們需要知道它們有多大的相關性,如下圖所示。
可以看到,大多數一開始就壞掉的模型有極大可能在最后也無法收斂,而一開始就不錯的模型很有可能會收斂,那么,這就啟示我們一開始就停掉那些表現不好的模型。
那么,怎么去提前終止呢?本文給出的方法是:首先同時跑個模型,然后訓練到總體的的時候(比如),分別評估這個模型的效果,保留其中個最好的,丟掉其他的。
這個算法的總體運行開銷是,是訓練一個完整模型的開銷,其相對完整訓練所有模型的開銷是。
實驗表明,在同樣的計算資源預算下,使用提前終止方法可以有效提高最好模型的結果,或者說提高了訓練找到最好模型的效率。
小結
本文從一個預訓練模型普遍存在的現象出發——微調階段產生的結果方差很大,研究預訓練模型BERT對隨機數種子的敏感程度。
大量實驗表明,預訓練模型,至少BERT的最終結果非常容易受到隨機數種子的影響。
而隨機數種子影響最明顯的就是微調層的參數初始化和數據的訓練數據,因此,參數初始化和訓練順序是影響模型最終結果比較重要的因素。
本文還提出了一種簡單的提前終止的方法,用于減少無謂的訓練開銷,更快尋找最佳模型(隨機數種子)。
思考討論
你認為健壯的模型應該是怎樣的?它應該對隨機數種子非常敏感嗎?如果大規模調整隨機數種子來找到表現(驗證集上)最好的模型,這是不是一種“擬合隨機數”?見仁見智。
筆者認為健壯的模型不應該是對隨機數種子如此敏感的,單從本文的論述和方法上講,有“擬合隨機數”的嫌疑,或者說BERT在健壯性上是有缺陷的。
你認為導致微調階段模型對隨機數種子敏感的原因有哪些?
筆者認為,可以把預訓練想象成一個搭積木的過程,這個過程就是把積木搭得比較高但是有些錯落;而微調就是繼續在這之上搭積木,如果一開始搭得太歪,就會導致積木垮塌,而放的位置比較好,就可以保持平衡。
那么,隨機種子的作用就是給你一樣放積木的起點,它對結果的影響(平衡或崩塌)可以從三個方面解釋:(1)基底不夠穩定(健壯),也就是預訓練結果不夠穩定;(2)隨機放置的方差太大,也就是初始化的方差太大,需要調整初始化策略;(3)先預訓練后微調的方法不夠健壯。
????
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的微调也重要:探究参数初始化、训练顺序和提前终止对结果的影响的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 欧盟最高法院整顿“精准投放广告”行为,社
- 下一篇: 跨境电商 SHEIN 广州希音湾区供应链