ALBERT了解一下,新的輕量版BERT,參數小了18倍,性能依舊SOTA

2019-12-08     AI公園

作者:Less Wright

編譯:ronghuaiyang

導讀

這是來自Google和Toyota的新NLP模型,超越Bert,參數小了18倍。

TL;DR = 你以前的NLP模型參數效率低下,而且有些過時。祝你有美好的一天。

谷歌Research和豐田技術研究所(Toyota Technological Institute)聯合發布了一篇新論文,向全世界介紹了BERT的繼任者——ALBERT。(「ALBERT:A Lite BERT for Self-supervised Learning of Language Representations」)。

ALBERT在SQuAD和RACE測試上創造了新的SOTA,並在比賽中以+14.5%的優勢擊敗BERT。

ALBERT的最終結果(為GLUE,RACE,SQuAD創造了新的SOTA)方面給人留下了深刻的印象,但是…真正令人驚訝的是模型/參數大小的顯著減少。

兩個關鍵架構的更改和一個訓練更改的組合使ALBERT的表現都更好,並極大地減少了模型的大小。看看下面的模型大小的比較——BERT x-large有12.7億個參數,而ALBERT x-large有5900萬個參數!

同樣大小的網絡(隱藏/層),BERT的參數是12.7億,而ALBERT的參數是59M…縮小了~21.5x。

在這篇文章中有很多內容需要解釋,我將嘗試深入研究下面的所有重點。

對於NLP來說,更大的模型總是更好嗎?不…

讓我們從NLP的一個要點開始——過去的一年,NLP已經取得了進展,通過擴展transformer類型的模型,每一個較大的模型,通過簡單地構建一個越來越大的預訓練模型,逐步提高最終任務的準確性。在原始的BERT論文中,他們發現更大的隱藏尺寸、更多的隱藏層和更多的注意力頭導致了漸進的改進,並測試了多達1024大小的隱藏層。

迄今為止最大的NLP模型是NVIDIA最近發布的Megatron,這是一個巨大的80億參數模型,超過BERT的24倍,接近OpenAI的GPT-2的6倍。Megatron 在512個GPU的環境下接受了9天的訓練。

然而,存在一個臨界點或飽和點,即越大並不總是越好,ALBERT的作者表明,他們最大的模型BERT X-Large,隱藏層大小為2048以及4倍於原BERT large的參數,實際上性能下降了近20%。

越大並不總是越好——將隱藏層大小加倍,參數大小增加4倍,但是BERT在RACE數據集上的準確性降低了。

這類似於計算機視覺層深度的峰值效應。對計算機視覺來說,按比例增加層的深度可以提高到一定程度,然後下降。例如,ResNet -1000並不比ResNet152好,即使它有6.5倍數量的層。換句話說,存在一個飽和點,在這個點上,訓練的複雜性壓倒並降低了來自額外網絡能力的收益。

因此,考慮到這一點,ALBERT的創造者開始改進架構和訓練方法,以得到更好的結果,而不是僅僅構建一個「更大的BERT」。

什麼是ALBERT?

ALBERT的核心架構類似於bert,因為它使用了transformer編碼器架構,同時還有GELU激活。在論文中,他們也使用了與原BERT相同的30K的詞彙量。(V = 30000)。然而,ALBERT做了三個重要的改變:

架構改進,更有效地使用參數:

1 — 嵌入分解參數化

ALBERT的作者注意到,對於BERT、XLNet和RoBERTa,WordPiece Embedding的大小(E)直接與隱含層大小(H)聯繫在一起。

然而,ALBERT的作者指出,WordPiece Embedding是用來學習上下文獨立表示的。隱含層嵌入是為了學習上下文依賴表示的。

BERT的能力很大程度上依賴於通過隱藏層學習上下文相關的表示。如果你將H和E結合起來,並且NLP需要大V (vocab),那麼你的嵌入矩陣E,實際上是V*E,必須與H(隱藏層)一起擴展,因此你最終得到的模型可以有數十億個參數,但其中大多數在訓練中很少更新。

因此,綁定在不同目的下工作的兩個項目意味著低效的參數。

因此,將兩者分開,可以更有效地使用參數,因此H(上下文相關)應該總是大於E(上下文無關)。

為此,ALBERT將嵌入參數分成兩個更小的矩陣。因此,不是將獨熱向量直接投射到H中,而是將獨熱向量投射到一個更小、更低維的矩陣E中……然後投影到H隱藏空間。

因此,參數由大的O (V*H)簡化為小的O (V*E + E*H)。

2 — 跨層參數共享

ALBERT通過跨層共享所有參數進一步提高了參數效率。這意味著前饋網絡參數和注意力參數都是共享的。

因此,與BERT相比,ALBERT從一層到另一層的轉換更平滑,作者注意到這種權值共享有助於穩定網絡參數。

訓練的變換 — SOP,句子順序預測:

ALBERT確實使用了MLM(掩碼語言模型),就像BERT一樣,使用最多3個單詞掩碼(n-gram max 3)。

然而,BERT除了MLM,還使用了NSP,即下一句話預測。ALBERT開發了自己的訓練方法,稱為SOP。

為什麼不用NSP?值得注意的是,RoBERTa的作者指出,原BERT中使用的下一個句子預測(NSP)損失不是非常有效,所以就不用了。ALBERT作者從理論上解釋了為什麼NSP不是那麼有效,但是他們利用NSP開發了SOP -句子順序預測。

ALBERT認為,NSP(下一個句子預測)將話題預測和連貫預測混為一談。作為參考,NSP使用了兩個句子——正樣本匹配是第二個句子來自同一個文檔,負樣本匹配是第二個句子來自另一個文檔。

相比之下,ALBERT的作者認為句子間的連貫是真正需要關注的任務/損失,而不是主題預測,因此SOP是這樣做的:

使用了兩個句子,都來自同一個文檔。正樣本測試用例是這兩句話的順序是正確的。負樣本是兩個句子的順序顛倒。

這避免了主題預測的問題,並幫助ALBERT學習更細粒度的語篇或句子間銜接。

當然,結果不言自明。

如何我們把ALBERT放大呢?

根據前面提到的關於擴展大小導致收益減小的注意事項,ALBERT的作者們進行了他們自己的ALBERT擴展測試,發現了層深度和寬度(隱藏大小)的峰值點。因此,作者推薦12層模型用於ALBERT風格的交叉參數共享。

ALBERT發現刪除dropout,增加數據可以提高性能:

這個非常符合計算機視覺已經發現的結論,ALBERT的作者報告說,不使用dropout得到了性能提升,當然,使用了更多的數據進行了訓練。

總結:

ALBERT在幾個benchmarks上刷新了SOTA。這是一個驚人的突破,它建立在一年前BERT所做的偉大工作上,並在多個方面推進了NLP。尤其令人振奮的是,人工智慧的未來不僅基於添加更多的GPU和簡單地構建更大的訓練模型,而且還將從改進的架構和參數效率方面取得進展。

作者指出,ALBERT未來的工作是提高其計算效率,可能是通過分散注意力或分塊注意力。因此,希望在未來更多的來自ALBERT的進展 !

Github和ALBERT的官方來源?我找不到ALBERT的官方版本發布到github,或者通過開源方式發布,這篇文章也沒有提到。希望在不久的將來能夠實現。

非官方的TensorFlow版本:https://github.com/brightmart/albert_zh?source=post_page-----df8f7b58fa28----------------------

論文連結:https://arxiv.org/abs/1909.11942v1

英文原文:https://medium.com/@lessw/meet-albert-a-new-lite-bert-from-google-toyota-with-state-of-the-art-nlp-performance-and-18x-df8f7b58fa28

請長按或掃描二維碼關注本公眾號

文章來源: https://twgreatdaily.com/zh/aYUGAW8BMH2_cNUg6xl0.html