SWITCH TRANSFORMER:Transformer類的萬億級別模型
2021年1月,谷歌大腦團隊發布了一篇文章“SWITCH TRANSFORMERS: SCALING TO TRILLION PARAMETER MODELS WITH SIMPLE AND EFFICIENT SPARSITY”,文章提出了號稱擁有萬億級別的Transformer類模型,命名為Switch Transformer,以下為本文的主要邏輯結構:
- 簡述預訓練語言模型的發展脈絡
- 介紹文章的研究成果介紹Switch Transformer的模型結構
- 補充說明文章所用Tricks
- 其他
預訓練語言模型
所謂預訓練,即首先在大量的資料上進行訓練,對于得到的模型進行微調,應用于下游任務上,第一代預訓練語言模型包括經典的Word2Vec、Glove、Fasttext,第二代預訓練語言模型囊括了許多如今常見且新穎的模型,包括
- ELMO(2018, BiLSTM)
- Transformer(2017)
- BERT(Transformer Encoder, base-110M, 2018)
- GPT(Transformer Decoder, 2018)
- GPT-2( 1.5B的引數量)、GPT-3(175B的引數量)
- T5(Text-to-Text Transfer Transformer, 11B的引數量, 使用了 C4 大規模資料集)
尤其在2018年Bert被提出后,NLP的各領域從原先的單打獨斗,逐漸產生了Bert通吃的局面,Bert類模型的研究熱度也愈發高漲,下圖截取了GLUE榜單上,預訓練語言模型的排名情況,時間截止于2021年4月7日,

研究成果
Baseline中,谷歌團隊選取了自家的T5模型作為對比模型,其中FLOPS表示每秒浮點運算次數,是機器算力的量化表現,

下游任務上,團隊選取了包括GLUE、SuperGLUE、翻譯、文本摘要在內的多個任務的資料集,Fine-tuning表現如下:

此外,實驗中Switch模型的引數被大幅增加,達到了1.6萬億:

其中,Switch-C就是萬億級別的模型,衡量指標為負log困惑度,困惑度是衡量語言模型好壞的性能指標,困惑度數值越小表示模型對語言文本越不困惑,由結果可知,Switch-C的表現不如Switch-XXL,證明并不是引數量越大,模型的性能就一定越好,更多的是一種權衡,
模型結構
首先分析Switch Transformer的模型結構,與標準的Transformer Encoder類似,輸入token依次經過self-Attention、Layer Normalization、FNN、Layer Normalization,

但是,不同于標準Transformer的一個FNN,Switch使用了一組FNN(最多使用了2048個,即Switch-C),下方輸入的token首先經過一個名叫Router路由的可學習的權重矩陣,Router得到每個token的概率值,概率最大的那一個(對應于Router中的直方圖),被映射到第幾個FNN,圖中,Router直方圖的第二列概率值最大,因此下層的輸入被路由到第二個FNN中,
此程序的數學形式表達如下圖所示:

相應偽代碼如下:

Tricks
想要訓練如此大的模型,絕非易事,此處截取文章提到的并行訓練策略:

此程序比較繁瑣,在此不做贅述,也歡迎大家私信,
代碼
對于最重要的代碼部分,谷歌發布的官方代碼使用了Mesh Tensorfolw框架,作為一款面向分布式訓練模型的框架,并不適合個人使用,在此推薦大家Github上Pytorch版本的實作,可在單GPU下運行,
結語
Switch Transformer作為當前最大的預訓練語言模型,選取Transformer 的Encoder部分進行修改,引入了多個FNN,正因如此,大大擴展了引數量,但計算量并未因此增加,因為最終只會路由到一個FNN上,這種思想值得學習借鑒,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/274887.html
標籤:其他
上一篇:SpringBoot快速整合Mybatis、MybatisPlus(代碼生成器)實作資料庫訪問
下一篇:小程式 基本常識(一)
