日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

pytorch微调bert_香侬读 | RoBERT: 没错,我就是能更强——更大数据规模和仔细调参下的最优BERT

發布時間:2024/10/14 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pytorch微调bert_香侬读 | RoBERT: 没错,我就是能更强——更大数据规模和仔细调参下的最优BERT 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章標題:RoBERTa: A Robustly Optimized BERT Pretraining Approach

文章作者:Yinhan Liu, Myle Ott, Naman Goyal, Jingfei Du, Mandar Joshi, Danqi Chen, Omer Levy, Mike Lewis, Luke Zettlemoyer, Veselin Stoyanov

文章鏈接:https://arxiv.org/pdf/1907.11692.pdf

代碼鏈接:https://github.com/pytorch/fairseq


導言

自從BERT橫空出世以來,各類預訓練模型一直在試圖“撼動”BERT的地位,如XLM、XLNet等等,然而,這些模型都異常龐大,這給調參帶來了巨大的困難, 我們往往沒有足夠的時間為一個模型找到最佳參數。這篇論文將煉丹爐火力全開,在得到以下煉丹配方后將BERT的效果再次提到SOTA:

  • 訓練更久,batch更大,數據更多
  • 丟棄NSP
  • 在更長的序列上訓練
  • 動態改變mask策略

在新的煉丹配方上訓練,RoBERT在GLUE上達到了88.5,在4/9上的任務上刷新SOTA,且在SQuAD和RACE上更新記錄。

總的來說,本論文的貢獻在于:

  • 修改了BERT原有的訓練策略
  • 引入了一個更大的新數據集CCNEWS
  • 驗證了預訓練模型合理設計的重要性

下面我們略過BERT等一些背景知識,開門見山地直奔主題。

新的調整

在這里直接列出RoBERT在原BERT上新的調整,詳情請看原論文:

  • 對學習率的峰值和warm-up更新步數作出調整(在不同任務下不同,在實驗階段說明)
  • 將Adam中改為
  • 不對序列進行截短,使用全長度序列
  • 使用更高級的煉丹爐DGX-1 each with 8*32GB NVIDIA V100 GPUs interconnected by Infiniband
  • 使用更多的煉丹原料,共160G左右,包括:
    • 原BERT的16GB原料
    • CC-NEWS的76GB原料
    • OPENWEBTEXT的38GB原料
    • STORIES的31GB原料

訓練過程分析

動態Mask

原來的BERT是靜態mask,即在數據預處理階段把所有的數據都mask了,在訓練階段保持不變,即使在不同的epoch里。但這樣顯然是有問題的, 為此,在實踐中我們把數據復制10份,然后統一進行mask,然后再保持不變,送入訓練過程,相當于每種mask一共需要被看4次,而不是原來的40 次了。那么動態mask就是訓一個mask一個,這樣基本可以保證每次看到的都不一樣。下面是BERT_base使用靜態和動態mask的結果:

看起來dynamic比static好一點(雖然好得不是那么多),所以后文我們都統一使用dynamic的方法。

輸入格式和NSP

原BERT使用了NSP,但是近期的一些文章質疑了NSP的作用,并且是把兩個句子貼在一起喂給模型,本文討論了下面的組合:

  • SEGMENT-PAIR+NSP。這就是原BERT的NSP方法,輸入的是兩個段,每個段都可能有多個句子,總長度要小于512。
  • SENTENCE-PAIR+NSP。這里從各自的文檔或段中sample一個句子即可,因為總長度小于512,所以增大了batch size使得總字符數和SEGMENT-PAIR差不多。
  • FULL-SENTENCES。直接從文檔中連續sample句子直到塞滿512的長度,且丟掉NSP。當到達一個文檔結尾時,先增加一個文檔分隔符,再從后面的文檔接著sample。
  • DOC-SENTENCES。和上面一樣,只是不得(may not)跨文檔。同樣增大batch size 使得總字符數和上面差不多。

模型使用的是BERT_base,實驗結果如下:

首先看最上面兩行,使用多個句子效果更好,因為可以捕捉句子之間的相關性。再看中間兩行,差不多,但是注意到都好于有NSP的模型,這說明NSP的確沒用。而且似乎DOC-SENTENCES比FULL-SENTENCES略好,但這難以控制batch size,所以后面我們固定使用FULL-SENTENCES。

更大的batch size

原BERT使用了bs=256和1M步的訓練方法,這等價于bs=2K和125K步或者bs=8K和31K步,下面是在BOOKCORPUS和WIKIPEDIA上的實驗結果:

好像趨勢不太明顯,只能說總的來看bs更大效果更好。

原子單位

時下流行的方法是BPE,傳統上我們使用unicode(兩個byte)作為切分基礎,Radford et al. (2019) 使用了 byte-level 方法將字典大小限制在了50K左右,所以本文使用這種方法,且不對數據進行任何預處理。

實驗

總結一下上面,RoBERT作了如下調整:

  • 使用動態mask
  • FULL-SENTENCES without NSP
  • 更大的bs
  • 更大的byte-level BPE

此外,還有兩個重要的因素有待探究:

  • 數據量大小
  • 訓練次數

所以,我們首先復現BERT_large作為基線模型,包括原來的數據集,然后在相同的結構和數據集上實現RoBERT,然后再在160G的新數據集上訓練,且增加訓練步數。下表是結果:

結果是顯然的,更多的數據和更長的訓練會提高效果,這告訴我們一個道理:大力出奇跡。

GLUE

對于GLUE,我們考慮兩種設置

  • 對不同的任務各自微調,在bs和lr之間選擇,并且對前6%的訓練步數進行線性warm-up,然后使用線性衰減。此外,用10個epoch微調與提前終止,其他保持前文所述不變。
  • 和GLUE榜上的其他模型一較高下,但是只基于單任務微調。對RTE,STS和MRPC使用MNLI單任務微調。對于QNLI和WNLI這兩個任務有獨特的微調方法,詳情參考論文及附錄。下表是結果:

對第一種比較設置,RoBERT在結構與BERT_large相同的情況下碾壓了對手,在GLUE榜上也刷新了4個任務的記錄。

SQuAD

下表是SQuAD1/2的結果:

其中,帶有? 表示引入了額外的外部數據。可以看到,即使在有外部數據的情況下,RoBERT也比BERT_large好。

RACE

下表是結果:

依舊碾壓了BERT_large和XLNet呢。

小結

RoBERT在BERT的基礎上進行了更細致的探究,包括損失函數、超參數、數據量、訓練方法等,但是,本文說是RoBERT比XLNet好,但是在GLUE上人家也只用了112G數據,這相差的50G數據量能否彌補呢?這是一個問題。

總之,神仙打架(苦笑)。

總結

以上是生活随笔為你收集整理的pytorch微调bert_香侬读 | RoBERT: 没错,我就是能更强——更大数据规模和仔细调参下的最优BERT的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。