「NLP」ALBERT 告訴了我們什麼?

知乎專欄:NLP與深度學習

研究方向:自然語言處理





前言

在忙畢業論文之前,恰逢ALBERT剛剛出來,當時想著要聊一聊這篇文章的,但實在是懶,畢業不易啊。最近諸事已經告一段落,已經進入佛系畢業狀態,盡人事,知天命啊。

本文依據論文本身的順序,按照模塊進行描述,並對一些細節展開討論,最後針對模型效果提一些自己的看法。

需要注意的一點是:ALBERT降低了模型參數量從而降低了模型的訓練時間(通信開銷降低),但是,模型的預測推理時間並沒有降低。這點需要牢記,並貫穿全文。

ALBERT 的目的

論文開篇就提到,在預訓練語言模型領域,增大模型往往能夠到來不錯的效果提升,但這種提升是無止境的嗎?[2]中進行了詳細的實驗,相當程度上解答了這一問題。這裡先埋一個坑,過幾天再填。

預訓練語言模型已經很大了,大到絕大多數的實驗室和公司都沒有資格參與這場遊戲,對於大模型而言,一個很淺的idea就是:如何對大模型進行壓縮? ALBERT 本質就是對 BERT 模型壓縮後的產物。

如果對模型壓縮有了解的同學肯定知道,模型壓縮有很多手段,包括剪枝,參數共享,低秩分解,網絡結構設計,知識蒸餾等(這是另外一個坑,先埋下)。ALBERT 也沒能逃出這一框架,它其實是一個相當工程化的思想,它的兩大 壓縮Trick 也很容易想到,下面就細聊一下。

三大創新

1. Factorized embedding parameterization

該 Trick 本質上就是一個低秩分解的操作,其通過對Embedding 部分降維來達到降低參數的作用。在最初的BERT中,以Base為例,Embedding層的維度與隱層的維度一樣都是768,但是我們知道,對於詞的分佈式表示,往往並不需要這麼高的維度,比如在Word2Vec時代就多采用50或300這樣的維度。那麼一個很簡單的思想就是,通過將Embedding部分分解來達到降低參數量的作用,其以公式表示如下:

O(V * H) --> O(V*E + E * H)

  • V:詞表大小;H:隱層維度;E:詞向量維度

我們以 BERT-Base 為例,Base中的Hidden size 為768, 詞表大小為3w,此時的參數量為:768 * 3w = 23040000。如果將 Embedding 的維度改為 128,那麼此時Embedding層的參數量為:128 * 3w + 128 * 768 = 3938304。二者的差為19101696,大約為19M。我們看到,其實Embedding參數量從原來的23M變為了現在的4M,似乎變化特別大,然而當我們放到全局來看的話,BERT-Base的參數量在110M,降低19M也不能產生什麼革命性的變化。因此,可以說Embedding層的因式分解其實並不是降低參數量的主要手段。

注意,我在這裡特意忽略了Position Embedding的那部分參數量, 主要是考慮到512相對於3W顯得有點微不足道。

文章在4.4中,對詞向量維度的選擇做了詳細的探討:

「NLP」ALBERT 告訴了我們什麼?

從上圖中,我們可以看出,增大詞向量維度所帶來的收益在128之後十分少,這也呼應了上面的觀點。

2. Cross-layer parameter sharing

該Trick本質上就是對參數共享機制在Transformer內的探討。在Transfor中有兩大主要的組件:FFN與多頭注意力機制。ALBERT主要是對這兩大組件的共享機制進行探討。

「NLP」ALBERT 告訴了我們什麼?

論文裡採用了四種方式: all-shared,shared-attention,shared-FFN以及 not-shared。我們首選關注一下參數量,not-shared與all-shared的參數量相差極為明顯,因此可以得出共享機制才是參數量大幅減少的根本原因。然後,我們看到,只共享Attention參數能夠獲得參數量與性能的權衡。最後,很明顯的就是,隨著層數的加深,基於共享機制的 ALBERT 參數量與BERT參數量相比下降的更加明顯。

此外,文章還說道,通過共享機制,能夠幫助模型穩定網絡的參數。這點是通過L2距離與 cosine similarity 得出的,俺也不太懂,感興趣的可以找其他文章看看:

「NLP」ALBERT 告訴了我們什麼?

3. SOP 替代 NSP

SOP 全稱為 Sentence Order Prediction,其用來取代 NSP 在 BERT 中的作用,畢竟一些實驗表示NSP非但沒有作用,反而會對模型帶來一些損害。SOP的方式與NSP相似,其也是判斷第二句話是不是第一句話的下一句,但對於負例來說,SOP並不從不相關的句子中生成,而是將原來連續的兩句話翻轉形成負例。

很明顯的就可以看出,SOP的設計明顯比NSP更加巧妙,畢竟NSP任務的確比較簡單,不相關句子的學習不要太容易了。論文也比較了二者:

「NLP」ALBERT 告訴了我們什麼?

BERT vs ALBERT

1. 從參數量級上看

「NLP」ALBERT 告訴了我們什麼?

首先,參數量級上的對比如上表所示,十分明顯。這裡需要提到的是ALBERT-xxlarge,它只有12層,但是隱層維度高達4096,這是考慮到深層網絡的計算量問題,其本質上是一個淺而寬的網絡。

2. 從模型表現上看

「NLP」ALBERT 告訴了我們什麼?

首先,我們看到 ALBERT-xxlarge的表現完全超過了BERT-large的表現,但是BERT-large的速度是要比ALBERT-xxlarge快3倍左右的。

其次,BERT-xlarge的表現反而變差,這點在[2]中有詳細探討,先略過不表。

Tricks

其實,最近很多預訓練語言模型文章中都相當程度上提到了調參以及數據處理等Trick的重要性,可惜我等沒有資源去訓,本來想在結尾將本文的Trick都提一下,但由於無法形成對比,因此作罷。等過段時間將各大預訓練語言模型中的Trick‘彙總一下再說吧。

最後

其實,從模型創新的角度來看,ALBERT其實並沒有什麼很大的創新,如果是一個輕量級的任務,相信這種模型壓縮的方式早就做爛了。可惜的是,計算資源限制了絕大多數的實驗室和公司,只能看頭部公司笑傲風雲。

此外,這篇文章本質上就是一個工程性質的文章,我覺得其中的一些Trick都十分的有借鑑意義,等我有時間再搞搞吧。

Reference

如何看待瘦身成功版BERT——ALBERT?

[1] ALBERT: A Lite BERT for Self-supervised Learning of Language Representations

[2] T5 - Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer


The End


分享到:


相關文章: