RoBERTa模型總結
前言
RoBERTa是在論文《RoBERTa: A Robustly Optimized BERT Pretraining Approach》中被提出的。此方法屬於BERT的強化版本,也是BERT模型更為精細的調優版本。RoBERTa主要在三方面對之前提出的BERT做了該進,其一是模型的具體細節層面,改進了優化函數;其二是訓練策略層面,改用了動態掩碼的方式訓練模型,證明了NSP(Next Sentence Prediction)訓練策略的不足,采用了更大的batch size;其三是數據層面,一方面使用了更大的數據集,另一方面是使用BPE(Byte-Pair Encoding )來處理文本數據。
1. RoBERTa對一般BERT的模型細節進行了優化
Optimization
原始BERT優化函數采用的是Adam默認的參數,其中\(\beta_1=0.9, \beta_2 = 0.999\),在RoBERTa模型中考慮采用了更大的batches,所以將\(\beta_2\)改為了0.98。
2. RoBARTa對一般BERT的訓練策略進行了優化
(1)動態掩碼與靜態掩碼
原始靜態mask:
BERT中是准備訓練數據時,每個樣本只會進行一次隨機mask(因此每個epoch都是重復),后續的每個訓練步都采用相同的mask,這是原始靜態mask,即單個靜態mask,這是原始 BERT 的做法。
修改版靜態mask:
在預處理的時候將數據集拷貝 10 次,每次拷貝采用不同的 mask(總共40 epochs,所以每一個mask對應的數據被訓練4個epoch)。這等價於原始的數據集采用10種靜態 mask 來訓練 40個 epoch。
動態mask:
並沒有在預處理的時候執行 mask,而是在每次向模型提供輸入時動態生成 mask,所以是時刻變化的。
不同模式的實驗效果如下表所示。其中 reference 為BERT 用到的原始靜態 mask,static 為修改版的靜態mask。

(2)對NSP訓練策略的探索
為了探索NSP訓練策略對模型結果的影響,將一下4種訓練方式及進行對比:
SEGMENT-PAIR + NSP:
這是原始 BERT 的做法。輸入包含兩部分,每個部分是來自同一文檔或者不同文檔的 segment (segment 是連續的多個句子),這兩個segment 的token總數少於 512 。預訓練包含 MLM 任務和 NSP 任務。
SENTENCE-PAIR + NSP:
輸入也是包含兩部分,每個部分是來自同一個文檔或者不同文檔的單個句子,這兩個句子的token 總數少於 512。由於這些輸入明顯少於512 個tokens,因此增加batch size的大小,以使 tokens 總數保持與SEGMENT-PAIR + NSP 相似。預訓練包含 MLM 任務和 NSP 任務。
FULL-SENTENCES:
輸入只有一部分(而不是兩部分),來自同一個文檔或者不同文檔的連續多個句子,token 總數不超過 512 。輸入可能跨越文檔邊界,如果跨文檔,則在上一個文檔末尾添加文檔邊界token 。預訓練不包含 NSP 任務。
DOC-SENTENCES:
輸入只有一部分(而不是兩部分),輸入的構造類似於FULL-SENTENCES,只是不需要跨越文檔邊界,其輸入來自同一個文檔的連續句子,token 總數不超過 512 。在文檔末尾附近采樣的輸入可以短於 512個tokens, 因此在這些情況下動態增加batch size大小以達到與 FULL-SENTENCES 相同的tokens總數。預訓練不包含 NSP 任務。
以下是論文中4種方法的實驗結果:

從實驗結果來看,如果在采用NSP loss的情況下,將SEGMENT-PAIR與SENTENCE-PAIR 進行對比,結果顯示前者優於后者。發現單個句子會損害下游任務的性能,可能是如此模型無法學習遠程依賴。接下來把重點放在沒有NSP loss的FULL-SENTENCES上,發現其在四種方法中結果最好。可能的原因:原始 BERT 實現采用僅僅是去掉NSP的損失項,但是仍然保持 SEGMENT-PARI的輸入形式。最后,實驗還發現將序列限制為來自單個文檔(doc-sentence)的性能略好於序列來自多個文檔(FULL-SENTENCES)。但是 DOC-SENTENCES 策略中,位於文檔末尾的樣本可能小於 512 個 token。為了保證每個 batch 的 token 總數維持在一個較高水平,需要動態調整 batch-size。出於處理方便,后面采用DOC-SENTENCES輸入格式。
(3)Training with large batches
雖然在以往的經驗中,當學習速率適當提高時,采用非常 大mini-batches的訓練既可以提高優化速度,又可以提高最終任務性能。但是論文中通過實驗,證明了更大的batches可以得到更好的結果,實驗結果下表所示。

論文考慮了並行計算等因素,在后續的實驗中使用batch size=8k進行訓練。
3. RoBARTa在數據層面對模型進行了優化
(1)使用了更大的訓練數據集
將16G的數據集提升到160G數據集,並改變多個steps,尋找最佳的超參數。

(2)Text Encoding
字節對編碼(BPE)(Sennrich et al.,2016)是字符級和單詞級表示的混合,該編碼方案可以處理自然語言語料庫中常見的大量詞匯。BPE不依賴於完整的單詞,而是依賴於子詞(sub-word)單元,這些子詞單元是通過對訓練語料庫進行統計分析而提取的,其詞表大小通常在 1萬到 10萬之間。當對海量多樣語料建模時,unicode characters占據了該詞表的大部分。Radford et al.(2019)的工作中介紹了一個簡單但高效的BPE, 該BPE使用字節對而非unicode characters作為子詞單元。
總結下兩種BPE實現方式:
-
基於 char-level :原始 BERT 的方式,它通過對輸入文本進行啟發式的詞干化之后處理得到。
-
基於 bytes-level:與 char-level 的區別在於bytes-level 使用 bytes 而不是 unicode 字符作為 sub-word 的基本單位,因此可以編碼任何輸入文本而不會引入 UNKOWN 標記。
當采用 bytes-level 的 BPE 之后,詞表大小從3萬(原始 BERT 的 char-level )增加到5萬。這分別為 BERT-base和 BERT-large增加了1500萬和2000萬額外的參數。之前有研究表明,這樣的做法在有些下游任務上會導致輕微的性能下降。但是本文作者相信:這種統一編碼的優勢會超過性能的輕微下降。且作者在未來工作中將進一步對比不同的encoding方案。
