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

2021-02-16 新智元

【新智元導讀】本文介紹的ELECTRA是斯坦福SAIL實驗室Manning組的工作,是作者在ICLR盲審中淘到的寶貝,也是BERT推出以來最贊的改進。ELECTRA不僅吊打BERT,而且僅用1/4的算力就達到了當時SOTA模型RoBERTa的效果。你怎麼看,來新智元 AI 朋友圈與AI大咖一起討論吧~BERT推出這一年來,除了XLNet,其他的改進都沒帶來太多驚喜,無非是越堆越大的模型和數據,以及動輒1024塊TPU,讓工程師們不知道如何落地。今天要介紹的ELECTRA是我在ICLR盲審中淘到的寶貝(9月25日已截稿),也是BERT推出以來我見過最贊的改進,通過類似GAN的結構和新的預訓練任務,在更少的參數量和數據下,不僅吊打BERT,而且僅用1/4的算力就達到了當時SOTA模型RoBERTa的效果。

論文地址:

https://openreview.net/forum?id=r1xMH1BtvB

感謝徐嘯以及SmileTM同學的補充,這是斯坦福SAIL實驗室Manning組的工作,10.31的智源大會上有簡單介紹。
ELECTRA的全稱是Efficiently Learning an Encoder that Classifies Token Replacements Accurately,先來直觀感受一下ELECTRA的效果:

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

NLP式的Generator-DiscriminatorELECTRA最主要的貢獻是提出了新的預訓練任務和框架,把生成式的Masked language model(MLM)預訓練任務改成了判別式的Replaced token detection(RTD)任務,判斷當前token是否被語言模型替換過。那麼問題來了,我隨機替換一些輸入中的字詞,再讓BERT去預測是否替換過可以嗎?可以的,因為我就這麼做過,但效果並不好,因為隨機替換太簡單了

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

於是作者就乾脆使用一個MLM的G-BERT來對輸入句子進行更改,然後丟給D-BERT去判斷哪個字被改過,如下:

於是,我們NLPer終於成功地把CV的GAN拿過來了!

Replaced Token Detection

但上述結構有個問題,輸入句子經過生成器,輸出改寫過的句子,因為句子的字詞是離散的,所以梯度在這裡就斷了,判別器的梯度無法傳給生成器,於是生成器的訓練目標還是MLM(作者在後文也驗證了這種方法更好),判別器的目標是序列標註(判斷每個token是真是假),兩者同時訓練,但判別器的梯度不會傳給生成器,目標函數如下:

因為判別器的任務相對來說容易些,RTD loss相對MLM loss會很小,因此加上一個係數,作者訓練時使用了50。

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

事實上,ELECTRA使用的Generator-Discriminator架構與GAN還是有不少差別,作者列出了如下幾點:

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

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,作者也嘗試了另外兩種訓練策略:

Adversarial Contrastive Estimation:ELECTRA因為上述一些問題無法使用GAN,但也可以以一種對抗學習的思想來訓練。作者將生成器的目標函數由最小化MLM loss換成了最大化判別器在被替換token上的RTD loss。但還有一個問題,就是新的生成器loss無法用梯度下降更新生成器,於是作者用強化學習Policy Gradient的思想,將被替換token的交叉熵作為生成器的reward,然後進行梯度下降。強化方法優化下來生成器在MLM任務上可以達到54%的準確率,而之前MLE優化下可以達到65%。

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是全部都計算的,所以作者又做了幾個實驗,探究哪種方式更好一些:

ELECTRA 15%:讓判別器只計算15% token上的損失

Replace MLM:訓練BERT MLM,輸入不用[MASK]進行替換,而是其他生成器。這樣可以消除這種pretrain-finetune直接的diff。

All-Tokens MLM:接著用Replace MLM,只不過BERT的目標函數變為預測所有的token,比較接近ELECTRA。

三種實驗結果如下:

可以看到:

對比ELECTRA和ELECTRA 15%:在所有token上計算loss確實能提升效果

對比Replace MLM和BERT:[MASK]標誌確實會對BERT產生影響,而且BERT目前還有一個trick,就是被替換的10%情況下使用原token或其他token,如果沒有這個trick估計效果會差一些。

對比All-Tokens MLM和BERT:如果BERT預測所有token 的話,效果會接近ELECTRA

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

無意中發現了這篇還在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

相關焦點

  • 完勝BERT!谷歌NLP預訓練利器:小模型也有高精度,單個GPU就能訓練 | 代碼開源
    這就意味著「小規模,也有大作用」,在單個GPU上訓練只需要4天的時間,精度還要比OpenAI的GPT模型要高。ELECTRA已經作為TensorFlow的開源模型發布,包含了許多易於使用的預訓練語言表示模型。
  • pytorch中文語言模型bert預訓練代碼
    這篇論文做了很多語言模型預訓練的實驗,系統的分析了語言模型預訓練對子任務的效果提升情況。有幾個主要結論:在目標領域的數據集上繼續預訓練(DAPT)可以提升效果;目標領域的語料與RoBERTa的原始預訓練語料越不相關,DAPT效果則提升更明顯。在具體任務的數據集上繼續預訓練(TAPT)可以十分「廉價」地提升效果。
  • 8種優秀預訓練模型大盤點,NLP應用so easy!
    模型的作者已經設計出了基準模型,這樣我們就可以在自己的NLP數據集上使用該預訓練模型,而無需從頭開始構建模型來解決類似的問題儘管需要進行一些微調,但這為我們節省了大量的時間和計算資源在本文中展示了那些助你開始NLP之旅的頂級預訓練模型,以及該領域的最新研究成果。
  • Task0.中文預訓練模型泛化能力挑戰賽(NLP)
    一、整體流程整個流程分為兩大部分1.訓練和預測生成結果:這部分就是常規的預訓練模型進行訓練和預測,比賽當然還需要一些改進提高預測效果
  • 中文最佳,哈工大訊飛聯合發布全詞覆蓋中文BERT預訓練模型
    而在中文領域,哈工大訊飛聯合實驗室也於昨日發布了基於全詞覆蓋的中文 BERT 預訓練模型,在多個中文數據集上取得了當前中文預訓練模型的最佳水平,效果甚至超過了原版 BERT、ERINE 等中文預訓練模型。基於 Transformers 的雙向編碼表示(BERT)在多個自然語言處理任務中取得了廣泛的性能提升。
  • 谷歌發布NLP最先進預訓練模型:開源BERT
    然而,現代基於深度學習的NLP模型往往需要更大量的數據,在擁有在數以百萬計甚至十億計的帶標註的訓練樣例上進行訓練時性能將會得到極大改善。為了幫助縮小數據差距,研究人員開發了各種技術用於使用網絡上海量未標註的文本(稱為預訓練)來訓練通用語言表示模型。然後,將其應用於小數據NLP任務(如問答和情感分析)微調預訓練模型,與從頭對數據集進行訓練相比,使用預訓練模型可以顯著地提高準確度。
  • NLP集大成之預訓練模型綜述
    介紹預訓練模型的出現,將自然語言處理帶入了新紀元,本論文中就此綜合地介紹了自然語言的預訓練模型。預訓練模型主要有以下三個優點:可以從巨大的語料中學習表示,從而幫助到下遊任務;提供了一個很好的模型初始化結果,有著更好的泛化能力,並且能加速下遊任務的收斂。
  • 2019: 屬於BERT預訓練語言模型之年
    核心的研究趨勢是NLP中遷移學習,即:使用大量預訓練模型,並根據特定的語言相關任務對它們進行微調。遷移學習允許人們重用以前構建的模型中的知識,這可以提高具體應用模型性能和泛化能力,同時需要更少的標註樣本。要論2019年最重要的預訓練模型,非BERT莫屬。
  • 復旦大學邱錫鵬教授:NLP預訓練模型綜述
    而預訓練模型(Pre-trained Models, PTMs)的出現將NLP帶入一個新的時代,更「深」的模型和訓練技巧的增強也使得 PTMs 由「淺」變「深」,在多項任務都達到了 SOTA 性能。這一通過 PTMs 從未標註大規模數據集中提取表示的預訓練過程在很多 NLP 任務中都取得了很好的表現。預訓練的優點可以總結為以下三點:1 在大規模語料上通過預訓練學習通用語言表示對下遊任務很有幫助;2) 預訓練提供了更好的模型初始化參數,使得在目標任務上有更好的泛化性能和更快的收斂速度;3) 預訓練是一種有效的正則化方法,能夠避免在小數據集上過擬合。
  • 支持 53 種語言預訓練模型,斯坦福發布全新 NLP 工具包 StanfordNLP
    Stanford NLP 團隊發布了包含 53 種語言預訓練模型的自然語言處理工具包 StanfordNLP,該工具包支持 Python 3.6
  • 支持53種語言預訓練模型,斯坦福發布全新NLP工具包StanfordNLP
    今日,Stanford NLP 團隊發布了包含 53 種語言預訓練模型的自然語言處理工具包 StanfordNLP,該工具包支持 Python
  • 哈工大訊飛聯合實驗室發布中文ELECTRA預訓練模型
    由谷歌與史丹福大學共同研發的最新預訓練模型ELECTRA因其小巧的模型體積以及良好的模型性能受到了廣泛關注。
  • PTMs:NLP預訓練模型
    2020年3月18日,邱錫鵬老師發表了關於NLP預訓練模型的綜述《Pre-trained Models for Natural Language Processing: A Survey》[1],這是一篇全面的綜述,系統地對PTMs進行了歸納分類。
  • 【NLP預訓練模型】你finetune BERT的姿勢可能不對哦?
    預訓練模型BERT是NLP領域如今最大的網紅,BERT的預訓練過程學習了大量的自然語言中詞、句法以及常識等泛領域的知識。因此,在運用BERT到實際的NLP任務中,通常的做法都是基於特定領域內的少量數據(幾千到幾萬)集,再進行Finetune,以適用於當前的任務和領域。通常來說,基於BERT進行Finetune效果都會還不錯。
  • 復旦邱錫鵬教授:2020最新NLP預訓練模型綜述
    新智元報導編輯:SF【新智元導讀】本文該綜述系統地介紹了nlp中的預訓練模型,深入盤點了目前主流的預訓練模型,提出了一種預訓練模型的分類體系。本篇文章主要介紹邱錫鵬老師在2020年發表的一篇預訓練模型的綜述:「Pre-trained Models for Natural Language Processing: A survey」。該綜述系統地介紹了nlp中的預訓練模型。主要的貢獻包括:1、深入盤點了目前主流的預訓練模型,如word2vec,ELMo,BERT等。
  • 【NLP】預訓練模型綜述
    第 2 節按時間順序簡要概述了預訓練語言模型的整個發展歷史;第 3 節詳細介紹自然語言處理領域的經典預訓練模型;第 4 節小結了預訓練模型的優點和其對比分類;第 5 節對自然語言處理領域的預訓練語言模型的未來發展趨勢進行展望。2 預訓練模型發展歷史 早期的 PTMs 技術的目標是學習好的詞嵌入。
  • 谷歌開源NLP模型可視化工具LIT,模型訓練不再「黑箱」
    深度學習模型的訓練就像是「黑箱操作」,知道輸入是什麼、輸出是什麼,但中間過程就像個黑匣子,這使得研究人員可能花費大量時間找出模型運行不正常的原因。假如有一款可視化的工具,能夠幫助研究人員更好地理解模型行為,這應該是件非常棒的事。
  • 中文任務全面超越BERT:百度正式發布NLP預訓練模型ERNIE
    ),並發布了基於 PaddlePaddle 的開原始碼與模型,在語言推斷、語義相似度、命名實體識別、情感分析、問答匹配等自然語言處理(NLP)各類中文任務上的驗證顯示,模型效果全面超越 BERT。ERNIE Github 項目地址:https://github.com/PaddlePaddle/LARK/tree/develop/ERNIE近年來,無監督文本的深度神經網絡預訓練模型大幅提升了各個 NLP 任務的效果。早期的工作聚焦於上下文無關的詞向量建模,而之後提出的 Cove,ELMo,GPT 等模型,構建了語句級的語義表示。
  • RoBERTa中文預訓練模型:RoBERTa for Chinese
    本項目是用TensorFlow實現了在大規模中文上RoBERTa的預訓練,也會提供PyTorch的預訓練模型和加載方式。(roberta_l24_zh),使用30G文件訓練, 9月8日2、12層RoBERTa模型(roberta_l12_zh),使用30G文件訓練, 9月8日3、6層RoBERTa模型(roberta_l6_zh), 使用30G文件訓練, 9月8日4、PyTorch版本的模型(roberta_l6_zh_pytorch) 9月8日5、30G中文語料
  • 加入Transformer-XL,這個PyTorch包能調用各種NLP預訓練模型
    為此,開發者從每一個 OP 開始重新用 PyTorch 預訓練 BERT 等模型。這個項目不僅提供預訓練 BERT、GPT 和 Transformer-XL 模型,同時還提供對應的微調示例和代碼。在 0.5 版本的更新中,它主要提供了兩個新的預訓練模型,即在 Toronto Book Corpus 上預訓練的 Open AI GPT 模型和在 WikiText 103 上預訓練的 Transformer-XL 模型。