albert速度
本文是我對ALBERT論文的一個總結歸納,如有理解上的偏差、錯誤歡迎大家指正批評,感謝。
前言
RoBERTa沒霸榜幾天,這不Google爸爸就又放大招,這次的新模型不再是簡單的的升級,而是采用了全新的參數共享機制,反觀其他升級版BERT模型,基本都是添加了更多的預訓練任務,增大數據量等輕微的改動。這次ALBERT的改進,不僅提升了模型的整體效果再一次拿下來各項榜單的榜首,而且參數量相比BERT來說少了很多。
對于預訓練模型來說,提升模型的大小是能對下游任務的效果有一定提升,然而如果進一步提升模型規模,勢必會導致顯存或者內存出現OOM的問題,長時間的訓練也可能導致模型出現退化的情況。為了解決這些問題,Google爸爸提出了ALBERT,該模型提出了兩種減少內存的方法,同時提升了訓練速度,其次改進了BERT中的NSP的預訓練任務。接下來就讓我們一起來看看這個新的模型到底是什么樣子的。
相比于BERT的改進
ALBERT也是采用和BERT一樣的Transformer的encoder結果,激活函數使用的也是GELU,在講解下面的內容前,我們規定幾個參數,詞的embedding我們設置為E,encoder的層數我們設置為L,hidden size即encoder的輸出值的維度我們設置為H,前饋神經網絡的節點數設置為4H,attention的head個數設置為H/64。
在ALBERT中主要有三個改進方向。
1、對Embedding因式分解(Factorized embedding parameterization)
在BERT中,詞embedding與encoder輸出的embedding維度是一樣的都是768。但是ALBERT認為,詞級別的embedding是沒有上下文依賴的表述,而隱藏層的輸出值不僅包括了詞本生的意思還包括一些上下文信息,理論上來說隱藏層的表述包含的信息應該更多一些,因此應該讓H>>E,所以ALBERT的詞向量的維度是小于encoder輸出值維度的。
在NLP任務中,通常詞典都會很大,embedding matrix的大小是E×V,如果和BERT一樣讓H=E,那么embedding matrix的參數量會很大,并且反向傳播的過程中,更新的內容也比較稀疏。
結合上述說的兩個點,ALBERT采用了一種因式分解的方法來降低參數量。首先把one-hot向量映射到一個低維度的空間,大小為E,然后再映射到一個高維度的空間,說白了就是先經過一個維度很低的embedding matrix,然后再經過一個高維度matrix把維度變到隱藏層的空間內,從而把參數量從O(V×H)O(V×H)O(V×H)O(V×H)O(V×H) O(V×H)O(V×H)O(V×H)O(V×H)O(V×E+E×H),當E<<H時參數量減少的很明顯。
下圖是E選擇不同值的一個實驗結果,尷尬的是,在不采用參數共享優化方案時E設置為768效果反而好一些,在采用了參數共享優化方案時E取128效果更好一些。
2、跨層的參數共享(Cross-layer parameter sharing)
在ALBERT還提出了一種參數共享的方法,Transformer中共享參數有多種方案,只共享全連接層,只共享attention層,ALBERT結合了上述兩種方案,全連接層與attention層都進行參數共享,也就是說共享encoder內的所有參數,同樣量級下的Transformer采用該方案后實際上效果是有下降的,但是參數量減少了很多,訓練速度也提升了很多。
下圖是BERT與ALBERT的一個對比,以base為例,BERT的參數是108M,而ALBERT僅有12M,但是效果的確相比BERT降低了兩個點。由于其速度快的原因,我們再以BERT xlarge為參照標準其參數是1280M,假設其訓練速度是1,ALBERT的xxlarge版本的訓練速度是其1.2倍,并且參數也才223M,評判標準的平均值也達到了最高的88.7
除了上述說了訓練速度快之外,ALBERT每一層的輸出的embedding相比于BERT來說震蕩幅度更小一些。下圖是不同的層的輸出值的L2距離與cosine相似度,可見參數共享其實是有穩定網絡參數的作用的。
3、句間連貫(Inter-sentence coherence loss)
BERT的NSP任務實際上是一個二分類,訓練數據的正樣本是通過采樣同一個文檔中的兩個連續的句子,而負樣本是通過采用兩個不同的文檔的句子。該任務主要是希望能提高下游任務的效果,例如NLI自然語言推理任務。但是后續的研究發現該任務效果并不好,主要原因是因為其任務過于簡單。NSP其實包含了兩個子任務,主題預測與關系一致性預測,但是主題預測相比于關系一致性預測簡單太多了,并且在MLM任務中其實也有類型的效果。
這里提一下為啥包含了主題預測,因為正樣本是在同一個文檔中選取的,負樣本是在不同的文檔選取的,假如我們有2個文檔,一個是娛樂相關的,一個是新中國成立70周年相關的,那么負樣本選擇的內容就是不同的主題,而正樣都在娛樂文檔中選擇的話預測出來的主題就是娛樂,在新中國成立70周年的文檔中選擇的話就是后者這個主題了。
在ALBERT中,為了只保留一致性任務去除主題識別的影響,提出了一個新的任務 sentence-order prediction(SOP),SOP的正樣本和NSP的獲取方式是一樣的,負樣本把正樣本的順序反轉即可。SOP因為實在同一個文檔中選的,其只關注句子的順序并沒有主題方面的影響。并且SOP能解決NSP的任務,但是NSP并不能解決SOP的任務,該任務的添加給最終的結果提升了一個點。
4、移除dropout
除了上面提到的三個主要優化點,ALBERT的作者還發現一個很有意思的點,ALBERT在訓練了100w步之后,模型依舊沒有過擬合,于是乎作者果斷移除了dropout,沒想到對下游任務的效果竟然有一定的提升。這也是業界第一次發現dropout對大規模的預訓練模型會造成負面影響。
總結
在初聞ALBERT時,以為其減少了總的運算量,但實際上是通過參數共享的方式降低了內存,預測階段還是需要和BERT一樣的時間,如果采用了xxlarge版本的ALBERT,那實際上預測速度會更慢。
ALBERT解決的是訓練時候的速度提升,如果要真的做到總體運算量的減少,的確是一個復雜且艱巨的任務,畢竟魚與熊掌不可兼得。不過話說回來,ALBERT也更加適合采用feature base或者模型蒸餾等方式來提升最終效果。
ALBERT作者最后也簡單提了下后續可能的優化方案,例如采用sparse attention或者block attention,這些方案的確是能真正降低運算量。其次,作者認為還有更多維度的特征需要去采用其他的自監督任務來捕獲。
參考文獻
ALBERT: A LITE BERT FOR SELF-SUPERVISED
LEARNING OF LANGUAGE REPRESENTATIONS
</div>
總結
- 上一篇: 深度学习概率输出
- 下一篇: Huggingface及BERT代码介绍