RoBERTa模型總結

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 任務。spa

SENTENCE-PAIR + NSP:
輸入也是包含兩部分,每一個部分是來自同一個文檔或者不一樣文檔的單個句子,這兩個句子的token 總數少於 512。因爲這些輸入明顯少於512 個tokens,所以增長batch size的大小,以使 tokens 總數保持與SEGMENT-PAIR + NSP 類似。預訓練包含 MLM 任務和 NSP 任務。code

FULL-SENTENCES:
輸入只有一部分(而不是兩部分),來自同一個文檔或者不一樣文檔的連續多個句子,token 總數不超過 512 。輸入可能跨越文檔邊界,若是跨文檔,則在上一個文檔末尾添加文檔邊界token 。預訓練不包含 NSP 任務。blog

DOC-SENTENCES:
輸入只有一部分(而不是兩部分),輸入的構造相似於FULL-SENTENCES,只是不須要跨越文檔邊界,其輸入來自同一個文檔的連續句子,token 總數不超過 512 。在文檔末尾附近採樣的輸入能夠短於 512個tokens, 所以在這些狀況下動態增長batch size大小以達到與 FULL-SENTENCES 相同的tokens總數。預訓練不包含 NSP 任務。token

​ 如下是論文中4種方法的實驗結果:unicode

​ 從實驗結果來看,若是在採用NSP loss的狀況下,將SEGMENT-PAIRSENTENCE-PAIR 進行對比,結果顯示前者優於後者。發現單個句子會損害下游任務的性能,多是如此模型沒法學習遠程依賴。接下來把重點放在沒有NSP lossFULL-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方案。

相關文章
相關標籤/搜索