BERT 推出這一年來,除了 XLNet,其他的改進都沒帶來太多驚喜,無非是越堆越大的模型和資料,以及動輒 1024 塊 TPU,讓工程師們不知道如何落地。
ELECTRA 透過類似 GAN 的結構和新的預訓練任務,在更少的引數量和資料下,不僅吊打 BERT,而且僅用 1/4 的算力就達到了當時 SOTA 模型 RoBERTa 的效果。
簡介
ELECTRA 的全稱是 Efficiently Learning an Encoder that Classifies Token Replacements Accurately,先來直觀感受一下 ELECTRA 的效果:
右邊的圖是左邊的放大版,縱軸是 GLUE 分數,橫軸是 FLOPs (floating point operations),Tensorflow 中提供的浮點數計算量統計。從上圖可以看到,同等量級的 ELECTRA 是一直碾壓 BERT 的,而且在訓練更長的步數之後,達到了當時的 SOTA 模型——RoBERTa 的效果。從左圖曲線上也可以看到,ELECTRA 效果還有繼續上升的空間。
模型結構
NLP 式的 Generator-Discriminator
ELECTRA 最主要的貢獻是提出了新的預訓練任務和框架,把生成式的 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 是全部都計算的,所以作者又做了幾個實驗,探究哪種方式更好一些:
1. ELECTRA 15%:讓判別器只計算 15% token 上的損失
2. Replace MLM:訓練 BERT MLM,輸入不用 [MASK] 進行替換,而是其他生成器。這樣可以消除這種 pretrain-finetune 直接的 diff。
3. 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》
論文連結:https://openreview.net/pdf?id=r1xMH1BtvB