NewBeeNLP原創出品node
公衆號專欄做者@山竹小果 git
今天分享來自微軟最近關於語言模型和對抗訓練的工做:
github
-
論文: Adversarial Training for Large Neural Lang Uage Models -
源碼:https://github.com/namisan/mt-dnn
Arxiv訪問困難的同窗能夠後臺回覆『0001』可便捷獲取論文喔 web
TL;DR
本文把對抗訓練用到了預訓練和微調兩個階段,對抗訓練的方法是針對embedding space,經過最大化對抗損失、最小化模型損失的方式進行對抗,在下游任務上取得了一致的效果提高。算法
有趣的是,這種對抗訓練方法不只可以在BERT上有提升,並且在RoBERTa這種已經預訓練好的模型上也能有所提升,說明對抗訓練的確能夠幫助模型糾正易錯點。微信
-
方法: ALUM(大型神經語言模型的對抗性訓練) -
實現:在embedding space添加擾動,最大化對抗損失 -
應用:任何基於Transformer的語言模型的預訓練或微調
預備知識
BPE編碼
爲了解決詞彙表外單詞的問題,使用Byte-Pair Encoding(BPE)(Sennrich et al.,2015)或其變體(Kudo and Richardson,2018)將標記劃分爲子詞單元,生成固定大小的子詞詞彙,以便在訓練文本語料庫中緊湊地表示單詞。app
BPE詞表既存在char-level級別的字符,也存在word-level級別的單詞。經過BPE獲得了更加合適的詞表,這個詞表可能會出現一些不是單詞的組合,可是這個自己是有意義的一種形式。編輯器
流程:svg
肯定subword詞表大小 統計每個連續字節對的出現頻率,並保存爲code_file。這個是git中learn-bpe完成 將單詞拆分爲字符序列並在末尾添加後綴「 」,然後按照code_file合併新的subword,首先合併頻率出現最高的字節對。例如單詞birthday,分割爲['b', 'i', 'r', 't', 'h', 'd', 'a', 'y'],查code_file,發現'th'出現的最多,那麼合併爲['b', 'i', 'r', 'th', 'd', 'a', 'y'],最後,字符序列合併爲['birth', 'day']。而後去除'',變爲['birth', 'day'],將這兩個詞添加到詞表。這個是apply-bpe完成。 重複第3步直到達到第2步設定的subword詞表大小或下一個最高頻的字節對出現頻率爲1
模型:ALUM
基於幾個關鍵想法:
-
擾動embedding空間,優於直接對輸入文本應用擾動。 -
經過 虛擬對抗訓練爲標準目標添加正則化項。
其中預訓練階段 ,微調階段 性能
由於有最大化操做,因此訓練昂貴。有利於embedding鄰域的標籤平滑。
文中觀點:
虛擬對抗訓練優於傳統對抗訓練,特別是當標籤可能有噪聲時。
例如,BERT pretraining使用masked words做爲自監督的標籤,但在許多狀況下,它們能夠被其餘詞取代,造成徹底合法的文本。但BERT中,給到被替換的word的標籤均爲負。
算法
首先使用標準目標(1)訓練模型;而後使用虛擬對抗訓練(3)繼續訓練。
![](http://static.javashuo.com/static/loading.gif)
第4-6行爲求最大梯度步驟,以找到使對抗性損失最大化的擾動(反局部平滑性)。K越大的近似值越高,但成本更高。爲了在速度和性能之間取得良好的平衡,本文實驗K=1.
泛化與魯棒性
文中表示,經過使用ALUM進行對抗性的預訓練,可以提升普遍的NLP任務的泛化和魯棒性(如後述實驗結論所示)。以前的研究較多發現,對抗訓練會損害泛化能力。
先前關於泛化和魯棒性之間衝突的工做一般集中在有監督的學習環境中。調和二者的一些初顯成果也利用了未標記的數據,例如自訓練(Raghunathan等人,2020年)。
此外,假設經過擾動embedding空間而不是輸入空間,NLP中的對抗訓練可能無心中偏向於流形擾動而不是規則擾動。
什麼是流形
流形學習的觀點:認爲咱們所觀察到的數據其實是由一個低維流形映射到高維空間的。因爲數據內部特徵的限制,一些高維中的數據會產生維度上的冗餘,實際上這些數據只要比較低的維度的維度就能惟一的表示。
因此直觀上來說,一個流形比如是一個d維的空間,在一個m維的空間中(m>d)被扭曲以後的結果。須要注意的是流形不是一個形狀,而是一個空間。舉個例子,好比說一塊布,能夠把它當作一個二維的平面,這是一個二維的空間,如今咱們把它扭一扭(三維空間),它就變成了一個流形,固然不扭的時候,它也是一個流形,歐氏空間是流形的一種特殊狀況。
實驗
提高泛化能力
-
BERT BASE是使用與Devlin等人相同的設置訓練的標準BERT base模型。(即1M步,batch size = 256)。 -
BERT+BASE與BERT BASE類似,不一樣之處在於其訓練步數爲1.6M,與對抗預訓練所需時間大體相同(ALUM BERT-BASE)。 -
ALUM BERT-BASE是一個BERT模型,使用與BERT BASE相同的設置進行訓練, 但最後的500K步驟使用ALUM。每個對抗訓練步驟大約比標準訓練步驟 長1.5倍。
![](http://static.javashuo.com/static/loading.gif)
能夠觀察到後500k加了ALUM後提高明顯。
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
提高魯棒性
![](http://static.javashuo.com/static/loading.gif)
結合對抗預訓練和對抗微調
以前都是在預訓練階段作的對抗,ALUM RoBERTa-LARGE-SMART在預訓練和微調階段均作對抗。
![](http://static.javashuo.com/static/loading.gif)
結論
提出了一種通用的對抗性訓練算法ALUM:
-
對抗預訓練能夠顯著 提升泛化能力和魯棒性。 -
ALUM大大提升了BERT和RoBERTa在各類NLP任務中的準確性,而且能夠與對抗微調相結合以得到進一步的收益。 -
將來的發展方向: -
進一步研究對抗性預訓練在提升泛化和魯棒性方面的做用; -
對抗性訓練加速; -
將ALUM應用於其餘領域。
- END -
![](http://static.javashuo.com/static/loading.gif)
記得把NewBeeNLP設爲星標哦
等你在看
本文分享自微信公衆號 - NewBeeNLP(NewBeeNLP)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。