ELECTRA演算法真的在吊打BERT的同時,算力能節約一半以上嗎?


簡單說下我的理解吧。

ELECTRA和BERT最大的不同應該是在於兩個方面:

  • masked(replaced) tokens的選擇
  • training objective

第一個,token的選擇BERT是隨機的,這意味著什麼呢?比如句子「我想吃蘋果」,BERT可以mask為「我想吃蘋[MASK]」,這樣一來實際上去學它就很簡單,如果mask為「我[MASK]吃蘋果」,那麼去學這個「想」就相對困難了。換句話說,BERT的mask可能會有很多簡單的token,去學這些token就算是簡單的bilstm都可以做的。這樣一來,一個簡單的想法就是,不隨機mask,去專門選那些對模型來說學習困難的token。怎麼做呢?這就是ELECTRA非常牛逼的地方了,train一個簡單的MLM,當做模型對訓練難度的先驗,簡單的自動過濾(在這裡就是sample出來的和原句子一樣),複雜的後面再學。還是舉「我想吃蘋果」這個例子。比如我這裡還是mask為「我想吃蘋[MASK]」,MLM這個生成器可以以很高的概率sample到「果」,但是對「我[MASK]想吃蘋果」,MLM就很難說大概率採樣到「想」了,也可能是「不」、「真」等等……總的來說,MLM的作用就是為自動選擇masked tokens提供了一種非常有效的方法

第二個,既然MLM選擇了一些token,那麼該怎麼去學呢?當然這個地方也可以像BERT那樣,如果MLM採樣的保持不變,就相當於原BERT中不mask;如果變了,就mask,然後再用BERT的方法去train。然而ELECTRA另闢蹊徑,用一個二分類去判斷每個token是否已經被換過了。這就把一個DAE(或者LM)任務轉換為了一個分類任務(或者序列標註)。這有兩個好處:(1)每個token都能contribute to some extent;(2)緩解distribution的問題。第一點是和MLM聯繫起來的(這也是ELECTRA精妙的地方了)。如果MLM牛逼,那麼discriminate的難度就很大,從而就可以看作是hard example。第二點是,如果我們像BERT那樣去預測真正的token,也即通過一個classifier [公式] 的話,那麼它相比二分類器 [公式] 而言就需要更多的計算量,而且還要suffer 由於 [公式] 較大導致的分布問題。

以上兩點總結起來就是:

[公式]

編輯於 2019-11-07繼續瀏覽內容知乎發現更大的世界打開Chrome繼續李rumor李rumor公眾號「李rumor」,AI演算法小姐姐,朋克且極客,有貓

推一下自己寫的小解讀:

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

zhuanlan.zhihu.com圖標

有些小遺憾,論文中只講了能達到RoBERTa的效果,但現在已經有T5了,我有點想看到ELECTRA的極限在哪裡。其實還有很多想像的空間,也有很多待研究的地方,比如我們用wwm、spanBERT去做generator能不能提升效果,可不可以任務數據上用這種方式精調等等。希望後續的研究越來越精彩。


推一下自己寫的小解讀:

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

zhuanlan.zhihu.com圖標

有些小遺憾,論文中只講了能達到RoBERTa的效果,但現在已經有T5了,我有點想看到ELECTRA的極限在哪裡。其實還有很多想像的空間,也有很多待研究的地方,比如我們用wwm、spanBERT去做generator能不能提升效果,可不可以任務數據上用這種方式精調等等。希望後續的研究越來越精彩。


各位大神總結的很好,作為小弱的我來補充幾點,歡迎大家吐槽和討論:

問題一:ELECTRA中,預訓練採用的是RTD(replaced token detection),那個generator的訓練目標是什麼?

答:採用MLE(最大似然估計)的方法,預測被mask掉的token原來的樣子。也就是句子被mask掉一些token後,恢復(或者說還原)句子本來的樣子。

問題二:RTD中,為什麼generator採用MLE訓練而不是強化學習的訓練方式?

答:兩個原因,首先強化學習在生成負樣本時的採樣效率非常低。其次,採用強化學習訓練到的generator,其得到的負樣本多樣性太低了,負樣本多樣性的降低導致discriminator很容易區分出正樣本和負樣本,用通俗一點的話說,採用強化學習訓練到的generator丟出的負樣本套路太單一,discriminator容易「一猜一個準」。從而導致學習效果不佳(其實關於第一點我不是很懂)。原文如下:

We believe the worse accuracy is mainly due to the poor sample efficiency

of reinforcement learning when working in the large action space of generating text. Secondly, the adversarially trained generator produces a low-entropy output distribution where most of the probability mass is on a single token, which means there is not much diversity in the generator samples.

問題三:RTD中,generator的作用是?

答:1,選擇性的過濾(或者說篩選)負樣本,generator還原錯誤的token當成負樣本,丟給discriminator,增加discriminator的學習難度。也就是選擇性的負採樣

2,避免discriminator的輸入樣本中有[MASK],從而緩解bert中出現的mismatch問題(mismatch問題指的是bert中預訓練方式masked LM中,模型的輸入有[MASK],但是下游任務並沒有[MASK])。

問題四:ELECTRA相比bert,性能提升的主要原因是什麼?

答:來源於兩點,其中貢獻最大的是discriminator可以learn from all tokens,也就是discriminator可以計算所有token的loss。其次就是上一個問題說的,緩解了bert中出現的mismatch問題。論文是這麼說的:

In total, these results suggest a large amount of ELECTRA』s improvement can be attributed to learning from all tokens and a smaller amount can be attributed to alleviating the pre-train fine-tune mismatch.

問題五:ELECTRA為啥不試一下bert用過的,NSP(next sentence prediction)預訓練方式?

答:因為作者說:

Also, we did not use the next sentence prediction objective proposed in the original BERT paper, as recent work has suggested it does not improve scores

也就是NSP沒卵用。。

問題六:generator性能越牛逼越好嗎?

答:錯。generator如果太過強大,那麼大部分被mask掉的token會被正確的預測,造成discriminator的負樣本比例太少,且負樣本難度較大,學習效果不好。因此作者建議generator的關鍵參數量(比如多頭注意力的頭數,hidden的維度等)是discriminator的四分之一到二分之一最好。

問題七:RTD預訓練中,generator和discriminator的哪些參數共享的?為什麼?

答:generator和discriminator的token embedding是共享的,原因在於discriminator自己每次只能更新generator送過來的負樣本+原有正樣本的token embedding,更新數量太有限,但是generator可以更新整個詞表的 token embedding,因此共享token embedding可以讓generator幫助discriminator加快更新token embedding

問題八:RTD預訓練中,梯度為什麼不能由discriminator回傳給generator?

答(個人猜想,有待驗證 ):如果generator產生的token和原來的token一模一樣(也就是相當於discriminator的輸入和generator的輸入一樣),那麼這種情況下梯度回傳是沒有問題的,因為他們的輸入是一樣的。然而在實際的RTD預訓練中,generator會產生負樣本,與原來的token不一致,比如:the chef cooked the meal變成了the chef ate the meal,判別器接受輸入的時候,他不知道哪個token被generator換過了,即generator在此時有一個sample過程,也就是說discriminator接受的有些token不是原來的token,那麼此時如果咱們硬要把梯度回傳過去,就會造成ate的梯度傳給cooked,這樣的話不是就錯了嗎?所以這就是作者說的由於sample step的原因,原文如下:

We don』t back-propagate the discriminator loss through the generator (indeed, we can』t because of the sampling step)


@香儂慧語科技 的回答很透徹,講明白了ELECTRA和BERT的區別,看了很有收穫。不過問題問的是演算法的表現以及算力上是否真的節省,這裡我基於原文描述,簡要回答一下問題並分享自己的淺見。

ELECTRA 與現有的生成式的語言表示學習方法相比,判別式的預訓練任務具有更高的計算效率參數效率

  • 計算效率:訓練判別器分辨每一個 token 是否被替換,而不是 MLM 那樣訓練網路作為生成器預測被損壞的 15% token 的原始 token,從而使模型從所有的輸入 token 中學習而不是 MLM 中那樣僅從 masked 的部分 token 學習。此外,生成器與判別器共享token embedding以及判別器使用的二分類而非V分類任務也有效提升了訓練效率。
  • 參數效率:最終得到的判別式分類器不必對完整的數據分布進行建模

那麼ELECTRA演算法真的在吊打BERT的同時,算力能節約一半以上嗎?我們來原文 3.3 和 3.4 的實驗。

首先是對小模型的表現。觀察第二列中的Train / Infer FLOPs 以及最後一列的 GLUE 均分,同等計算成本下,效果超過 BERT-Small,甚至略高於計算成本更高的GPT,而且參數量極小。而且ELECTRA-Base 模型也優於 BERT-Base ,甚至優於 BERT-Large (GLUE得分84.0)。這正是ELECTRA所追求的以較少的計算量獲得出色的結果,從而擴大在 NLP 中開發和應用預訓練模型的可行性

再看大模型的表現(此時用的 XLNet 使用的數據集)。同樣觀察第二列與最後一列,ELECTRA與當前 RoBERTa 的性能相匹配,但是計算時間僅為其 1 / 4。

綜上,與 MLM 相比,ELECTRA 的預訓練目標具有更高的計算效率,並且可以在下游任務上實現更好的性能。尤其是在小模型上,其表現相當亮眼。

最後分享一個原文作者對模型的理解:論文第四節中提到,本文的工作可以看做是帶有負採樣的 CBOW 的大規模版本,將 CBOW 的 BOW encoder 換成 Transformer,將基於 unigram 的負採樣換成了基於小型 MLM 生成器的負採樣,並且將任務重新定義為關於輸入令牌是否來自數據的二分類任務

這個解釋很有意思,MLM 完成負採樣,transformer 作為判別器,對所有 token 做二分類任務,這樣不僅能從所有 token 中學習,而且二分類任務相比直接生成 token 的 [公式] 分類任務要簡單,計算量也小,實在是精妙。

自行硬廣:ELECTRA 的粗淺筆記,感興趣的朋友可以看一下~

徐嘯:ELECTRA: 更具計算效率與參數效率的文本編碼器?

zhuanlan.zhihu.com圖標


我個人對Electra的理解就是用Bert"欺騙"Bert,當然這和GAN還是有區別的,文中作者也對此作了解釋。

那麼Electra到底是做了一件什麼事情呢?首先我們從Bert談起,Bert使用MLM任務進行預訓練,其中有15%的Token會被Mask掉,Bert會對著15%的Token進行預測。因此Bert所關注的也就只有這15%的輸入,而其他信息全都成為了空氣。Electra說:不行,我們要看剩下的85%里有什麼。那麼Electra怎麼做的呢?

首先Electra使用生成器對Mask掉的文本進行預測,這裡MASK的概率和Bert相同都是15%。例如:

the chef cooked the meal -&> [MASK] chef [MASK] the meal

經過Generator進行預測,這句話可能變成:

the chef ate the meal

然後我們把這句話輸入到Discriminator中,Discriminator判斷這些Token中那些被替換了,這裡理想的結果應該是:

1 1 0 1 1

1表示是原始文本,0表示被替換了。

這樣做效果如何呢,我們先看Small Electra,效果可以說是一騎絕塵。同等規模的情況下效果遠超其他模型,Small Electra的Glue score要比Bert small高4.8個點,但是當規模變大,Electra Base的效果比Bert Base高2.9個點。沒有Electra small那麼亮眼,但也足夠激動人心。畢竟Bert縮小版Albert也只是在xxLarge的情況下打敗了Bert,但是Electra卻贏得毫不費力。

小學生已經如此優秀,那麼高中生呢?我們來看Electra Large的效果,是否如Small一樣激動人心呢?結果依然不負眾望,在SST, MRPC任務中Electra Large略遜於RoBERTa,其他任務都取得了很不錯的成績。需要注意的是在Electra之用了1/4的計算量就打敗了RoBERTa。

如果用兩個字來形容那就是牛逼!

Electra為什麼會有這樣的效果呢?文中做了一些對比實驗:

  • ELECTRA 15%:使用Electra計算15%的loss
  • Replace MLM: 使用Bert訓練在預訓練的時候輸入不用MASK而是用其他生成器的輸出替換
  • All-TokensMLM:結合了Bert和Electra,Bert的預測變成了預測所有Token

他們的效果是這樣的:

可以看到Electra 15%的效果和Bert相似,因此Bert之前只學習15%的Token的做法對於輸入是有很大的信息損失的,而Electra的做法也彌補了這一損失。這也證明了之前作者的看法:Bert只學習15%的Token是不夠的。Replace MLM的效果和Electra 15%的效果相差不大,這說明MASK的內容其實並不重要,重要的是要學習全部的輸入序列。All-Tokens MLM的效果也解釋了這一點。

通過這些實驗結果,我想我們也可以理解為什麼作者認為分辨器的任務比生成器複雜,分辨器的規模也要比生成器大。因為Input is all.(這句話是我加的)

當然Electra有讓人疑惑的地方嗎,也有。例如文章中討論了其他實驗方法,使用了最大化分辨器被替換的Token的RTD Loss,雖然如此但我個人還是不是特別滿意。因為我認為為了保證分辨器的效果,生成器要給他儘可能複雜的替換效果。但是這裡的RTD Loss關注的是分辨器,生成器在整個過程中所受到的關注並不多。當然文中實驗也提到過,生成器規模變大,分辨器的效果會相對變差。那麼文中此時也沒有提到生成器規模變大,是否會導致生成器的loss降低,預測效果提高?而如果證明這一點,那麼我也可以確定我之前的猜測並沒有錯:分辨器還是需要足夠的噪音以提高效果

有關於Electra的實現和其他問題我在我的文章中有部分討論,有興趣可以一起研究~

lynne阿黎:ElECTRA:NLPER也可以使用GAN了?[Part-1]?

zhuanlan.zhihu.com圖標lynne阿黎:ElECTRA:NLPER也可以使用GAN了?[Part-2]?

zhuanlan.zhihu.com圖標

提幾個insight上的疑問吧。

1 訓練難度增加了,生成器把簡單的mask給生成好了,只留下複雜的mask。但問題是,語言建模這個任務難道不是比二分類更難嗎?如果用lm作為判別器的loss,會怎樣呢?

2 所有的位置都能參與到loss中,而mlm只有15%的位置參與。作者文中的實驗也表明,二分類任務中參與loss的比例越多,最後的效果也越高,這個提升很明顯。我的疑問是,一定要所有的位置都參與到loss中嗎?重要的會不會是參與到loss中的token數量?從roberta的實驗來看,增大batch size,可以取得很大的提升,batch size大了,參與到loss中的token不也多了嗎?既然如此,我可不可以猜測electra帶來的提高可以部分被batch size的增大覆蓋掉?

一點疑問,望指教。


我理解的是ELECTRA相比於BERT性能的提升和算力的節省主要來自於 相對於BERT系列模型隨機MASK的策略,ELECTRA的策略實際上是去找縮小版BERT(generator)的易錯的樣本(或者直接說是 對抗樣本或者負樣本 我覺得也行),這應該也能解釋為什麼訓練一個BERT當generator效果會差一些,因為BERT訓練的比較好(參數多),雖然生成的負樣本質量高了,但是相對的數量也少了,如果能補充一個實驗,要求測試generator的大小和最終discriminator的性能的關係時,保證訓練時用於discriminator的負樣本數維持在一定水平,而不是隨著generator越來越好負樣本越來越少,我覺得結果應該會顯示generator的大小比現在大一些效果會更好。至於文章中利用率的說法我不確定有沒有效,畢竟LM雖然用得少但做的是詞表大小的分類,序列標註說到底還是個二分類任務。

所以節約算力肯定是有的,簡單粗暴的想法如果像累積梯度一樣累積負樣本,我覺得generator不用特別大也能訓練一個還不錯的discriminator


首先electra預訓練任務難度是大於bert的。

比如小時候學習語文,老師為了加深你對漢語的理解,總是給出一段話,把一些詞去掉(當然老師會有目的性的選詞,bert是隨機的),讓你根據上下文來填寫空缺詞。我們可能會很快的根據上下文或者常識填好空缺詞。

這時,語文老師加大了難度,會給你一段話,讓你挑出這段話中哪裡用詞不當。這就是electra 判別器的預訓練任務。

但是根據最近放出的源碼自己實驗效果來看,預訓練任務的難度與模型抽取的特徵是否成正比,就值得商榷了。


哈哈哈,Manning這ELECTRA模型一下子怎麼火了?

Generator-Discriminator機制

論文還在盲審階段,不知會不會受到影響?

讀了論文後,感覺ELECTRA的表現提升大概可以歸結兩點:

1. All Tokens Prediction

在ELECTRA中巧妙的加入了Discriminator,由Bert中預測15% [mask] , 變為了對All Tokens的二分類問題 。直觀上看就是 Bert利用了15%,而ELECTRA利用了100%。 在論文中,也提到了這種改進的提升會在有限的、小規模數據上更加顯著。

在論文中,也進行了一系列的實驗來證明 Input Tokens 利用率由15%到100% 所帶來的收益非常可觀。

2. Loss函數
ELECTRA Loss

在Bert中,我們是通過將hidden dimension 向vocab_size dimension(大約20000~30000) 進行映射,然後加上Softmax函數,找到最大概率的那個Token,再進行損失函數的計算。

而ELECTRA巧妙的加入了Generator-Discriminator機制,將損失模型直接轉換為了簡單的Real / Fake 二分類問題,沒有了向vocab_size dimension映射的步驟(這裡可能理解有誤,文中 [公式] 的計算還不清楚具體操作,還是等源碼吧,不過 [公式] 設置的是50,可以看出主要的還是 [公式] ),使得Loss的計算更加的高效。 速度上的提升,算力上的節省顯而易見。

總結:

Input Tokens的高利用率高效的損失函數計算 的加持下,ELECTRA的表現超過Bert(尤其是在有限/相同資源的情況下),應該是不成問題。 但是否等達到節約一半算力,這個不好回答。還是等源碼公開吧,但節約資源是肯定的。


推薦閱讀:
相关文章