分布式存储图解_BERT的youxiu变体:ALBERT论文图解介绍
編譯:ronghuaiyang
正文共: 3116 字 21 圖
預計閱讀時間: 9 分鐘
原文鏈接:BERT的youxiu變體:ALBERT論文圖解介紹?mp.weixin.qq.com
ALBERT作為BERT的一個變體,在保持性能的基礎上,大大減少了模型的參數,使得實用變得更加方便,是經典的BERT變體之一。
考慮下面給出的句子。作為人類,當我們遇到“apple”這個詞時,我們可以:
- 把“apple”這個詞和我們對“apple”這個水果的表征聯系起來
- 根據上下文將“apple”與水果聯系在一起,而不是與公司聯系在一起
- 理解“he ate an apple”
- 在字符級,單詞級和句子級理解它
NLP最新發展的基本前提是賦予機器學習這些表示的能力。
2018年,谷歌發布了BERT,試圖基于一些新的想法來學習這個表示:
回顧: BERT
1. 掩碼語言建模
語言建模包括預測單詞的上下文,作為一種學習表示的方法。傳統上,這包括到當給出前面的單詞時預測句子中的下一個單詞。
相反,BERT使用了一個掩碼語言模型目標,在這個模型中,我們在文檔中隨機地對單詞進行掩碼,并試圖根據周圍的上下文來預測它們。
2. 下一個句子預測
“下一個句子預測”的目的是檢測兩個句子是否連貫。
為此,訓練數據中的連續句被用作一個正樣本。對于負樣本,取一個句子,然后在另一個文檔中隨機抽取一個句子放在它的旁邊。在這個任務中,BERT模型被訓練來識別兩個句子是否可以同時出現。
3. Transformer結構
為了解決上述兩項任務,BERT使用了多層Transformer模塊作為編碼器。單詞向量被傳遞到各個層,以捕獲其含義,并為基本模型生成大小為768的向量。
Jay Alammar有一篇非常好的文章:http://jalammar.github.io/bert/,更深入地闡述了Transformer的內部機制。
BERT的問題
BERT發布后,在排行榜上產生了許多NLP任務的最新成果。但是,模型非常大,導致了一些問題?!癆LBERT”論文將這些問題分為兩類:
1、內存限制和通信開銷:
考慮一個包含一個輸入節點、兩個隱藏節點和一個輸出節點的簡單神經網絡。即使是這樣一個簡單的神經網絡,由于每個節點的權重和偏差,也會有7個參數需要學習。
BERT-large模型是一個復雜的模型,它有24個隱含層,在前饋網絡和注意頭中有很多節點,所以有3.4億個參數。如果你想在BERT的基礎上進行改進,你需要大量的計算資源的需求來從零開始進行訓練并在其上進行迭代
這些計算需求主要涉及gpu和TPUs,但是這些設備有內存限制。所以,模型的大小是有限制的。
分布式訓練是解決這個問題的一種流行方法。我們以BERT-large上的數據并行性為例,其中訓練數據被分到兩臺機器上。模型在兩臺機器上對數據塊進行訓練。如圖所示,你可以注意到在梯度同步過程中要傳輸的大量參數,這會減慢訓練過程。同樣的瓶頸也適用于模型的并行性,即我們在不同的機器上存儲模型的不同部分。
2、模型退化
最近在NLP研究社區的趨勢是使用越來越大的模型,以獲得在排行榜上的最先進的性能。ALBERT 的研究表明,這可能會導致收益退化。
在論文中,作者做了一個有趣的實驗。
如果更大的模型可以帶來更好的性能,為什么不將最大的BERT模型(BERT-large)的隱含層單元增加一倍,從1024個單元增加到2048個單元呢?他們稱之為“BERT-xlarge”。令人驚訝的是,無論是在語言建模任務還是在閱讀理解測試(RACE)中,這個更大的模型的表現都不如BERT-large模型。
從原文給出的圖中,我們可以看到性能是如何下降的。BERT-xlarge的性能比BERT-large差,盡管它更大并且有更多的參數。
從BERT到ALBERT
ALBERT在BERT 的基礎上提出了一些新穎的想法來解決這些問題:
1、跨層參數共享
BERT-large模型有24層,而它的基礎版本有12層。隨著層數的增加,參數的數量呈指數增長。
為了解決這個問題,ALBERT使用了跨層參數共享的概念。為了說明這一點,讓我們看一下12層的BERT-base模型的例子。我們只學習第一個塊的參數,并在剩下的11個層中重用該塊,而不是為12個層中每個層都學習不同的參數。
我們可以只共享feed-forward層的參數,只共享注意力參數,也可以共享整個塊的參數。論文對整個塊的參數進行了共享。
與BERT-base的1.1億個參數相比,ALBERT模型只有3100萬個參數,而使用相同的層數和768個隱藏單元。當嵌入尺寸為128時,對精度的影響很小。精度的主要下降是由于feed-forward層的參數共享。共享注意力參數的影響是最小的。
跨層參數策略對性能的影響
2、句子順序預測 (SOP)
BERT引入了一個叫做“下一個句子預測”的二分類損失。這是專門為提高使用句子對,如“自然語言推斷”的下游任務的性能而創建的?;玖鞒虨?#xff1a;
- 從訓練語料庫中取出兩個連續的段落作為正樣本
- 從不同的文檔中隨機創建一對段落作為負樣本
像ROBERTA和XLNET這樣的論文已經闡明了NSP的無效性,并且發現它對下游任務的影響是不可靠的。在取消NSP任務之后,多個任務的性能都得到了提高。
因此,ALBERT提出了另一個任務**“句子順序預測”**。關鍵思想是:
- 從同一個文檔中取兩個連續的段落作為一個正樣本
- 交換這兩個段落的順序,并使用它作為一個負樣本
這使得模型能學習到更細粒度的關于段落級的一致性的區別。
ALBERT推測NSP是無效的,因為與掩碼語言建模相比,它并不是一項困難的任務。在單個任務中,它混合了主題預測和連貫性預測。主題預測部分很容易學習,因為它與掩碼語言建模的損失有重疊。因此,即使NSP沒有學習連貫性預測,它也會給出更高的分數。
SOP提高了下游多句編碼任務(SQUAD 1.1, 2.0, MNLI, SST-2, RACE)的性能。
在這里我們可以看到,在SOP任務上,一個經過NSP訓練的模型給出的分數只比隨機基線略好一點,但是經過SOP訓練的模型可以非常有效地解決NSP任務。這就證明SOP能帶來更好的學習表現。
3、嵌入參數分解
在BERT中,使用的embeddings(word piece embeddings)大小被鏈接到transformer塊的隱藏層大小。Word piece embeddings使用了大小為30,000的詞匯表的獨熱編碼表示。這些被直接投射到隱藏層的隱藏空間。
假設我們有一個大小為30K的詞匯表,大小為E=768的word-piece embedding和大小為H=768的隱含層。如果我們增加了塊中的隱藏單元尺寸,那么我們還需要為每個嵌入添加一個新的維度。這個問題在XLNET和ROBERTA中也很普遍。
ALBERT通過將大的詞匯表嵌入矩陣分解成兩個小的矩陣來解決這個問題。這將隱藏層的大小與詞匯表嵌入的大小分開。這允許我們在不顯著增加詞匯表嵌入的參數大小的情況下增加隱藏的大小。
我們將獨熱編碼向量投影到E=100的低維嵌入空間,然后將這個嵌入空間投影到隱含層空間H=768。
結果
- 比BERT-large模型縮小了18x的參數
- 訓練加速1.7x
- 在GLUE, RACE和SQUAD得到SOTA結果:
- RACE:89.4%[提升45.3%]
- GLUE Benchmark:89.4
- SQUAD2.0 f1 score:92.2
總結
ALBERT標志著構建語言模型的重要一步,該模型不僅達到了SOTA,而且對現實世界的應用也是可行的。
英文原文:https://amitness.com/2020/02/albert-visual-summary/
總結
以上是生活随笔為你收集整理的分布式存储图解_BERT的youxiu变体:ALBERT论文图解介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flask 获取前端form内容_fla
- 下一篇: bat循环执行带参数_wxappUnpa