ELECTRA: 超越BERT, 19年最佳NLP預訓練模型

BERT推出這一年來,除了XLNet,其餘的改進都沒帶來太多驚喜,無非是越堆越大的模型和數據,以及動輒1024塊TPU,讓工程師們不知道如何落地。今天要介紹的ELECTRA是我在ICLR盲審中淘到的寶貝(9月25日已截稿),也是BERT推出以來我見過最讚的改進,經過相似GAN的結構和新的預訓練任務,在更少的參數量和數據下,不只吊打BERT,並且僅用1/4的算力就達到了當時SOTA模型RoBERTa的效果。

1. 簡介

ELECTRA的全稱是Efficiently Learning an Encoder that Classifies Token Replacements Accurately,先來直觀感覺一下ELECTRA的效果:架構

右邊的圖是左邊的放大版,縱軸是GLUE分數,橫軸是FLOPs (floating point operations),Tensorflow中提供的浮點數計算量統計。從上圖能夠看到,同等量級的ELECTRA是一直碾壓BERT的,並且在訓練更長的步數以後,達到了當時的SOTA模型——RoBERTa的效果。從左圖曲線上也能夠看到,ELECTRA效果還有繼續上升的空間。框架

2. 模型結構

NLP式的Generator-Discriminatoride

ELECTRA最主要的貢獻是提出了新的預訓練任務和框架,把生成式的Masked language model(MLM)預訓練任務改爲了判別式的Replaced token detection(RTD)任務,判斷當前token是否被語言模型替換過。那麼問題來了,我隨機替換一些輸入中的字詞,再讓BERT去預測是否替換過能夠嗎?能夠的,由於我就這麼作過,但效果並很差,由於隨機替換太簡單了svg

那怎樣使任務複雜化呢?。。。咦,我們不是有預訓練一個MLM模型嗎?函數

因而做者就乾脆使用一個MLM的G-BERT來對輸入句子進行更改,而後丟給D-BERT去判斷哪一個字被改過,以下:學習

因而,咱們NLPer終於成功地把CV的GAN拿過來了!優化

Replaced Token Detection編碼

但上述結構有個問題,輸入句子通過生成器,輸出改寫過的句子,由於句子的字詞是離散的,因此梯度在這裏就斷了,判別器的梯度沒法傳給生成器,因而生成器的訓練目標仍是MLM(做者在後文也驗證了這種方法更好),判別器的目標是序列標註(判斷每一個token是真是假),二者同時訓練,但判別器的梯度不會傳給生成器,目標函數以下:idea

[公式]
由於判別器的任務相對來講容易些,RTD loss相對MLM loss會很小,所以加上一個係數,做者訓練時使用了50。.net

另外要注意的一點是,在優化判別器時計算了全部token上的loss,而以往計算BERT的MLM loss時會忽略沒被mask的token。做者在後來的實驗中也驗證了在全部token上進行loss計算會提高效率和效果。

事實上,ELECTRA使用的Generator-Discriminator架構與GAN仍是有很多差異,做者列出了以下幾點:

3. 實驗及結論

創新老是不易的,有了上述思想以後,能夠看到做者進行了大量的實驗,來驗證模型結構、參數、訓練方式的效果。

Weight Sharing

生成器和判別器的權重共享是否能夠提高效果呢?做者設置了相同大小的生成器和判別器,在不共享權重下的效果是83.6,只共享token embedding層的效果是84.3,共享全部權重的效果是84.4。做者認爲生成器對embedding有更好的學習能力,由於在計算MLM時,softmax是創建在全部vocab上的,以後反向傳播時會更新全部embedding,而判別器只會更新輸入的token embedding。最後做者只使用了embedding sharing。

Smaller Generators

從權重共享的實驗中看到,生成器和判別器只須要共享embedding的權重就足矣了,那這樣的話是否能夠縮小生成器的尺寸進行訓練效率提高呢?做者在保持原有hidden size的設置下減小了層數,獲得了下圖所示的關係圖:

能夠看到,生成器的大小在判別器的1/4到1/2之間效果是最好的。做者認爲緣由是過強的生成器會增大判別器的難度(判別器:小一點吧,我太難了)。

Training Algorithms

實際上除了MLM loss,做者也嘗試了另外兩種訓練策略:

  1. Adversarial Contrastive Estimation:ELECTRA由於上述一些問題沒法使用GAN,但也能夠以一種對抗學習的思想來訓練。做者將生成器的目標函數由最小化MLM loss換成了最大化判別器在被替換token上的RTD loss。但還有一個問題,就是新的生成器loss沒法用梯度降低更新生成器,因而做者用強化學習Policy Gradient的思想,將被替換token的交叉熵做爲生成器的reward,而後進行梯度降低。強化方法優化下來生成器在MLM任務上能夠達到54%的準確率,而以前MLE優化下能夠達到65%。
  2. Two-stage training:即先訓練生成器,而後freeze掉,用生成器的權重初始化判別器,再接着訓練相同步數的判別器。

對比三種訓練策略,獲得下圖:

可見「隔離式」的訓練策略效果仍是最好的,而兩段式的訓練雖然弱一些,做者猜想是生成器太強了致使判別任務難度增大,但最終效果也比BERT自己要強,進一步證實了判別式預訓練的效果。

Small model? Big model?

這兩節真是吊打以前的模型,做者重申了他的主要目的是提高預訓練效率,因而作了GPU單卡就能夠愉快訓練的ELECTRA-Small和BERT-Small,接着和尺寸不變的ELMo、GPT等進行對比,結果以下:

數據簡直優秀,僅用14M參數量,之前13%的體積,在提高了訓練速度的同時還提高了效果,這裏我瘋狂點贊。

小ELECTRA的本事咱們見過了,那大ELECTRA行嗎?直接上圖:

上面是各個模型在GLUE dev/text上的表現,能夠看到ELECTRA僅用了1/4的計算量就達到了RoBERTa的效果。並且做者使用的是XLNet的語料,大約是126G,但RoBERTa用了160G。因爲時間和精力問題,做者們沒有把ELECTRA訓練更久(應該會有提高),也沒有使用各類榜單Trick,因此真正的GLUE test上表現通常(如今的T5是89.7,RoBERTa是88.5,沒看到ELECTRA)。

Efficiency Analysis

前文中提到了,BERT的loss只計算被替換的15%個token,而ELECTRA是所有都計算的,因此做者又作了幾個實驗,探究哪一種方式更好一些:

  1. ELECTRA 15%:讓判別器只計算15% token上的損失
  2. Replace MLM:訓練BERT MLM,輸入不用[MASK]進行替換,而是其餘生成器。這樣能夠消除這種pretrain-finetune直接的diff。
  3. All-Tokens MLM:接着用Replace MLM,只不過BERT的目標函數變爲預測全部的token,比較接近ELECTRA。

三種實驗結果以下:

能夠看到:

  1. 對比ELECTRA和ELECTRA 15%:在全部token上計算loss確實能提高效果
  2. 對比Replace MLM和BERT:[MASK]標誌確實會對BERT產生影響,並且BERT目前還有一個trick,就是被替換的10%狀況下使用原token或其餘token,若是沒有這個trick估計效果會差一些。
  3. 對比All-Tokens MLM和BERT:若是BERT預測全部token 的話,效果會接近ELECTRA

另外,做者還發現,ELECTRA體積越小,相比於BERT就提高的越明顯,說明fully trained的ELECTRA效果會更好。另外做者推斷,因爲ELECTRA是判別式任務,不用對整個數據分佈建模,因此更parameter-efficient

4. 總結

無心中發現了這篇還在ICLR盲審的ELECTRA,讀完摘要就以爲發現了新大陸,主要是本身也試過Replaced Token Detection這個任務,由於平時任務效果的分析和不久前看的一篇文章,讓我深入感覺到了BERT雖然對上下文有很強的編碼能力,卻缺少細粒度語義的表示,我用一張圖表示你們就明白了:

這是把token編碼降維後的效果,能夠看到sky和sea明明是天與海的區別,卻由於上下文同樣而獲得了極爲類似的編碼。細粒度表示能力的缺失會對真實任務形成很大影響,若是被針對性攻擊的話更是無力,因此當時就想辦法加上更細粒度的任務讓BERT去區分每一個token,不過同句內隨機替換的效果並很差,弱雞的我也沒有再往前想一步,否則就也ICLR了。相信這個任務不少人都想到過,不過都沒有探索這麼深刻,這也告誡咱們,idea遍地都是,往下挖纔能有SOTA。

ELECTRA是BERT推出這一年來我見過最讚的idea,它不只提出了能戰勝MLM的預訓練任務,更推出了一種十分適用於NLP的類GAN框架。畢竟GAN太牛逼了,看到deepfake的時候我就想,何時咱們也能deepcheat,但據說GAN在NLP上的效果一直不太好(只懂皮毛,要學起來了,輕拍),此次ELECTRA雖然只用了判別器,但我的認爲也在必定程度上打開了潘多拉魔盒。

另外,整篇文章都乾貨滿滿,再也不像以前的BERT+模型同樣能夠用「more data+params+steps+GPU+MONEY」簡單歸納。推薦你們去通讀正文+附錄,裏面還有一些失敗嘗試我沒有講。

若是ELECTRA去直播,我必定給它刷一輛遊艇。

參考資料

ELECTRA: PRE-TRAINING TEXT ENCODERS AS DISCRIMINATORS RATHER THAN GENERATORS


hi all!最近終於有了本身的公衆號,叫NLPCAB,原本想叫LAB,但以爲和一我的能撐起實驗室我就上天了,因此取了諧音CAB,有些可愛而且意味深長?以後會努力和小夥伴們發乾貨,也但願各位同窗投稿學習筆記~

相關文章
相關標籤/搜索