關注「深度學習衝鴨」,一起學習一起衝鴨!
設為星標,第一時間獲取更多乾貨
https://zhuanlan.zhihu.com/p/151741265https://blog.csdn.net/weixin_37995835/article/details/106994820本文的主要目的是理清時間線,關注預訓練的發展過程,進行模型間的聯繫和對比,具體原理和細節請參考原論文和代碼,不再一一贅述。ELMO 2018.03 華盛頓大學
GPT 2018.06 OpenAI
BERT 2018.10 Google
XLNet 2019.6 CMU+google
ERNIE 2019.4 百度
BERT-wwm 2019.6 哈工大+訊飛
RoBERTa 2019.7.26 Facebook
ERNIE2.0 2019.7.29 百度
BERT-wwm-ext 2019.7.30 哈工大 +訊飛
ALBERT 2019.10 Google
『各模型之間的聯繫 』
傳統word2vec無法解決一詞多義,語義信息不夠豐富,誕生了ELMO
ELMO以lstm堆積,串行且提取特徵能力不夠,誕生了GPT
GPT 雖然用transformer堆積,但是是單向的,誕生了BERT
BERT雖然雙向,但是mask不適用於自編碼模型,誕生了XLNET
BERT中mask代替單個字符而非實體或短語,沒有考慮詞法結構/語法結構,誕生了ERNIE
為了mask掉中文的詞而非字,讓BERT更好的應用在中文任務,誕生了BERT-wwm
Bert訓練用更多的數據、訓練步數、更大的批次,mask機制變為動態的,誕生了RoBERTa
ERNIE的基礎上,用大量數據和先驗知識,進行多任務的持續學習,誕生了ERNIE2.0
BERT-wwm增加了訓練數據集、訓練步數,誕生了BERT-wwm-ext
BERT的其他改進模型基本考增加參數和訓練數據,考慮輕量化之後,誕生了ALBERT
「 1.ELMO 」「Embedding from Language Models"特點:傳統的詞向量(如word2vec)是靜態的/上下文無關的,而ELMO解決了一詞多義;ELMO採用雙層雙向LSTM
缺點:lstm是串行,訓練時間長;相比於transformer,特徵提取能力不夠(ELMO採用向量拼接)
使用分為兩階段:預訓練+應用於下遊任務,本質就是根據當前上下文對Word Embedding進行動態調整的過程:
1. 用語言模型進行預訓練
左邊的前向雙層LSTM是正方向編碼器,順序輸入待預測單詞w的上文;右邊則是反方向編碼器,逆序輸入w的下文
訓練好之後,輸入一個新句子s,每個單詞都得到三個Embedding:①單詞的Word Embedding ②第一層關於單詞位置的Embedding ②第二層帶有語義信息的Embedding(上述的三個Embedding 、LSTM網絡結果均為訓練結果)
2. 做下遊任務時,從預訓練網絡中提取對應單詞的網絡各層的Word Embedding作為新特徵補充到下遊任務中。 如QA任務:輸入Q/A句子,對三個Embedding分配權重,整合生成新的Embedding
「 2.GPT 」 「Generative Pre-Training」依然兩段式:單向語言模型預訓練(無監督)+fine tuning應用到下遊任務(有監督)
自回歸模型
transformer的decoder裡面有三個子模塊,GPT只用了第一個和第三個子模塊,如下圖:
GPT只用了transformer的decoder模塊提取特徵,而不是Bi-LSTM;堆疊12個
單向(根據上文預測單詞,利用mask屏蔽下文)
GPT中的mask如下圖所示,mask之後要進行softmax: 向GPT的網絡結構看齊,把任務的網絡結構改造成和 GPT的網絡結構是一樣的。做法如下:對於分類問題,不用怎麼動,加上一個起始和終結符號即可;
對於句子關係判斷問題,比如 Entailment,兩個句子中間再加個分隔符即可;
對文本相似性判斷問題,把兩個句子順序顛倒下做出兩個輸入即可,這是為了告訴模型句子順序不重要;
對於多項選擇問題,則多路輸入,每一路把文章和答案選項拼接作為輸入即可。從上圖可看出,這種改造還是很方便的,不同任務只需要在輸入部分施工即可。
效果:在 12 個任務裡,9 個達到了最好的效果,有些任務性能提升非常明顯。 OpenAI在之後又提出了GPT-2模型,論文為《Language Models are Unsupervised Multitask Learners》,結構與GPT-1相似(依然採用transformer的encoder),但是採用多任務預訓練+超大數據集+超大規模模型,所以有更好的性能表現,但是參數也增加了更多。 如上圖所示,第一組的規模和GPT一樣,第二組和BERT一樣,最後一個是GPT-2的參數量、層數和隱層大小。由於單向地用上文預測下一個單詞,GPT比BERT更適合做文本生成的任務。「 3.BERT 」 「Bidirectional Encoder Representations from Transformers"雙向
用的是transformer的encoder(GPT用的是decoder,ELMO用的是Bi-LSTM)
多任務學習方式訓練:預測目標詞和預測下一句
Embedding
三個Embedding 求和而得,分別是:
a.Token Embeddings:詞向量,首單詞是[CLS]標誌,可用於分類任務
b.Segment Embeddings:用[SEP]標誌將句子分為兩段,因為預訓練不光做LM還要做以兩個句子為輸入的分類任務
c.Position Embeddings:和之前文章中的Transformer不同,不是三角函數而是學習出來的
預測目標詞Masked LM
隨機挑選一個句子中15%的詞,用上下文來預測。這15%中,80%用[mask]替換,10%隨機取一個詞替換,10%不變。用非監督學習的方法預測這些詞。
預測下一句 Next Sentence Prediction
選擇句子對A+B,其中50%的B是A的下一句,50%為語料庫中隨機選取
Batch Size:16 or 32
Learning Rate: 5e-5, 3e-5, 2e-5
Epochs:2, 3, 4
句子對分類任務
單句子分類任務
問答任務
單句子標註任務
『tips』:可以嘗試用BERT框架去做以上四種任務的簡單實驗,便於掌握BERT結構ELMO用Bi-LSTM,GPT用transformer的decoder,BERT用transformer的encoder
ELMO:雙向,GPT,單向,BERT:雙向
ELMO:解決一詞多義,GPT,特徵更豐富,BERT:雙向/多任務訓練/能捕捉更長距離的依賴
GPT:適合文本生成等任務(NLG任務),BERT:適合預測任務(NLU任務)
GPT-2,以及一些諸如 TransformerXL 和 XLNet 等後續出現的模型,本質上都是自回歸模型,而 BERT 則不然,雖然沒有使用自回歸機制,但 BERT 獲得了結合單詞前後的上下文信息的能力,從而取得了更好的效果。而其中XLNet雖然使用了自回歸,但引入了一種能夠同時兼顧前後的上下文信息的方法,即雙流自注意力。
「 4.XLNet 」XLNet是一個語言模型。和ELMO,GPT,BERT一脈相承,同時借鑑Transformer-XL,故稱XLNet(XL含義為衣服尺碼,意思是模型橫向更寬),其參數規模遠大於BERT採用自回歸(AR , Autoregressive)模型替代自編碼(AE , Autoencoding )模型,解決bert中mask帶來的負面影響(預訓練和微調數據的不統一)
雙流注意力機制(新的分布計算方法,來實現目標位置感知)
引入transformer-XL
該機制:1.預測當前的x時,只包含其位置信息,不包含內容信息 2.預測x後的其餘tokens時,包含x的內容信息 xlnet在長文本的閱讀理解類任務上性能提升更明顯,性能大幅超過Bert;XLNet的預訓練模式同時也天然符合序列生成任務,如文本摘要「 5.ERNIE 」「Enhanced Representation through Knowledge Integration」 這裡是指由百度提出的ERNIE。ERNIE是基於BERT做的優化,主要針對中文任務。ERNIE利用的仍然是 transformer 的encoder 部分,且結構一樣,但是並不共享權重,區別如下:Transformer: 6 encoder layers, 512 hidden units, 8 attention heads
ERNIE Base: 12 encoder layers, 768 hidden units, 12 attention heads
ERNIE Large: 24 encoder layers,1024 hidden units, 16 attention heads
三種mask:字層面、短語層面、實體層面(引入外部知識,模型可獲得更可靠的語言表示)
用大量中文數據集、異質數據集
為適應多輪的貼吧數據,引入對話語言模型(DLM ,Dialogue Language Model)的任務
(ERNIE對mask機制的改進,為BERT-wwm、SpanBERT等提供了思路)連續用大量的數據與先驗知識連續構建不同的預訓練任務(詞法級別,語法級別,語義級別)
不斷的用預訓練任務更新ERNIE 模型
第一階段,採用BERT的方式,字級別,即basic-level masking,隨機mask中文某字
第二階段,詞組級別的mask,即phrase-level masking,mask掉句子中一部分詞組(預測這些詞組的階段,詞組信息被編碼到詞向量中)
第三階段,實體級別的mask,即entity-level masking,如人名、機構名等(模型訓練完後,學到實體信息)先分析句子的實體,然後隨機mask
可以看到,BERT中只是mask了單個token,但在中文中多以短語或實體為單位,分成單字mask並不能很好地表達語義、句法等。所以ERNIE引入了三種mask方式。『DLM (Dialogue Language Model) task』:多輪對話的語料,三個句子的組合:[CLS]S1[SEP]S2[SEP]S3[SEP] ,形式為QRQ,QRR,QQR (Q:提問,R:回答 )。DLM還增加了任務來判斷這個多輪對話是真的還是假的。「 6.BERT-wwm 」 對BERT-base的改進:用[Mask]替換詞而非單字(中文的詞=詞語,英文的詞=word/字),如:BERT-wwm使用的語料:中文維基+通用數據(百科、新聞、問答等數據,總詞數達5.4B)
BERT-wwm-ext使用的語料:中文維基
不僅僅是連續mask實體詞和短語,而是連續mask所有能組成中文詞語的字。如果一個完整的詞的部分字被mask,則同屬該詞的其他部分也會被mask,即對組成同一個詞的漢字全部進行Mask,即為全詞Mask,即分詞後再mask。這樣做增加了語義信息。 (由於BERT-wwm是在BERT-base的基礎上訓練的,使用時可以無縫對接BERT,直接替換即可,不需要該文件。推薦使用在中文任務上。)「 7.RoBERTa 」「 a Robustly Optimized BERT Pretraining Approach」 RoBERTa在模型層面沒有改變BERT,改變的只是預訓練的方法。主要是在BERT的基礎上做精細化調參,可以看作是終極調參,最後性能不僅全面碾壓BERT,且在大部分任務上超越了XLNet。訓練數據更多(160G),bert是16G
batch size更大(256到8000不等),訓練時間更長
訓練序列更長
不在使用NSP(Next Sentence Prediction)任務,移除了next predict loss
動態Masking,讓數據不重複
文本編碼採用更大的字節級別的BPE詞彙表(Byte-Pair Encoding)而Bert是字符級
BERT是靜態mask,在數據處理的過程進行;而RoBERTa採用動態mask,在每次輸入數據的時候進行(每個epoch每個sequence被MASK的方式不相同,提高隨機性)SEGMENT-PAIR + NSP:輸入包含兩部分,每個部分是來自同一文檔或者不同文檔的 segment (segment 是連續的多個句子),這兩個segment 的token總數少於 512 。預訓練包含 MLM 任務和 NSP 任務。這是原始 BERT 的做法。
SENTENCE-PAIR + NSP:輸入也是包含兩部分,每個部分是來自同一個文檔或者不同文檔的單個句子,這兩個句子的token 總數少於 512 。由於這些輸入明顯少於512 個tokens,因此增加batch size的大小,以使 tokens 總數保持與SEGMENT-PAIR + NSP 相似。預訓練包含 MLM 任務和 NSP 任務。
FULL-SENTENCES:輸入只有一部分(而不是兩部分),來自同一個文檔或者不同文檔的連續多個句子,token 總數不超過 512 。輸入可能跨越文檔邊界,如果跨文檔,則在上一個文檔末尾添加文檔邊界token 。預訓練不包含 NSP 任務。
DOC-SENTENCES:輸入只有一部分(而不是兩部分),輸入的構造類似於FULL-SENTENCES,只是不需要跨越文檔邊界,其輸入來自同一個文檔的連續句子,token 總數不超過 512 。在文檔末尾附近採樣的輸入可以短於 512個tokens, 因此在這些情況下動態增加batch size大小以達到與 FULL-SENTENCES 相同的tokens總數。預訓練不包含 NSP 任務.
「 8.ERNIE2.0 」 ERNIE2.0是ERNIE的升級版。百度ERNIE2.0 的出現直接刷新了GLUE Benchmark。 對ERNIE的優化:多任務訓練(逐次增加7大任務) 引入Task Embedding,區別不同的任務。訓練方法:先訓練任務1,保存模型;加載模型,訓練任務1、任務2;以此類推,直到訓練完7個任務。相當於遞進式的學習,如ERNIE 1.0 突破完形填空ERNIE 2.0 突破選擇題,句子排序題等不斷遞進更新。效果:在ERNIE1.0的基礎上有全面的提升,尤其是在閱讀理解任務上「 9.BERT-wwm-ext 」 BERT-wwm-ext 是一個中文預訓練語言模型,BERT-wwm的升級版。BERT-wwm-ext採用了與BERT以及BERT-wwm一樣的模型結構,同屬base模型,由12層Transformers構成。其實就是增加數據量和訓練次數來提升效果。數據 :DRCD,中國臺灣臺達研究院發布的數據集
BERT-wwm-ext帶來非常顯著的性能提升:
「 10.ALBERT 」 ALBERT也是採用和BERT一樣的Transformer的encoder結果,激活函數使用的也是GELU。但ALBERT用了全新的參數共享機制,參數量相比BERT來說少了很多(小10倍+)。簡單來說,就是:參數更少,效果更好。提出了兩種減少內存的方法(因式分解、參數共享)
改進了BERT中的NSP的預訓練任務,提升了訓練速度
提升了模型效果
對Embedding進行因式分解
跨層參數共享(性能輕微降低,參數大量減少)
句間連貫性損失(SOP)
BERT中及XLNet和RoBERTa中,詞嵌入大小 E 和隱藏層大小 H 相等的,H =E=768;而ALBERT認為,詞嵌入學習單個詞的信息,而隱藏層輸出包含上下文信息,應該 H>>E。所以ALBERT的詞向量的維度小於encoder輸出值維度。而且由於詞典較大,詞嵌入維度太大會導致,反向傳播時更新的內容稀疏。由於上述兩個原因,ALBER用了因式分解的方法降低參數量。 先把one-hot向量映射到一個低維度的空間,大小為E,然後再映射到一個高維度的空間(相當於兩次線性變換),從而把參數量從O(V×H)O(V×H)O(V×H)降低到了O(V×E+E×H)O(V×E+E×H) O(V×E+E×H)。實驗效果如下:(E=128時最佳) Transformer中共享參數有:只共享全連接層;只共享attention層。ALBERT結合上述兩種,全連接層與attention層都進行參數共享。是減少參數的更主要的方法。參數減少很多,同時性能提升。如下圖: 除了訓練速度加快,網絡震蕩幅度也變小了(參數共享可以穩定網絡參數):3.句間連貫性損失(SOP,sentence-order prediction 句子順序預測) 【NSP 任務】正樣本:同一個文檔的兩個連續句子;負樣本:兩個連續句子交換順序 【SOP 任務】正樣本:同一個文檔的兩個連續句子;負樣本:不同文檔的句子 SOP能解決NSP的任務,但是NSP並不能解決SOP的任務。此任務的效果提升為一個點,如下圖: 在降低參數量的兩個方式中,參數共享的貢獻遠遠大於因式分解。減少總運算量,是一個複雜艱巨的任務,ALBERT在訓練時速度確實提升了,但在預測時仍然和BERT一樣。ELMO:
https://arxiv.org/pdf/1802.05365.pdf
GPT:
https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/languageunsupervised/language_understanding_paper.pdf
BERT:
https://arxiv.org/pdf/1810.04805.pdf
XLNet:
https://arxiv.org/pdf/1906.08237.pdf
ERNIE:
https://arxiv.org/pdf/1904.09223.pdf
ELMO:
https://github.com/allenai/allennlp
GPT:
https://github.com/openai/gpt-2
BERT:
https://github.com/guotong1988/BERT-tensorflow
XLNet:
https://github.com/zihangdai/xlnet
ERNIE:
https://github.com/PaddlePaddle/ERNIE
BERT-wwm:
https://github.com/ymcui/Chinese-BERT-wwm
RoBERTa:https://github.com/brightmart/roberta_zh(中文)
https://github.com/pytorch/fairseq(英文)
ERNIE2.0:https://github.com/PaddlePaddle/ERNIE
BERT-wwm-ext:
https://drive.google.com/file/d/1buMLEjdtrXE2c4G1rpsNGWEx7lUQ0RHi/view
ALBERT:
https://github.com/brightmart/albert_zhhttps://www.cnblogs.com/zhaopAC/p/11219600.htmlhttps://baijiahao.baidu.com/s?id=1652093322137148754&wfr=spider&for=pchttps://blog.csdn.net/ljp1919/article/details/100666563https://zhuanlan.zhihu.com/p/76912493https://www.cnblogs.com/yifanrensheng/p/13167796.htmlhttps://zhuanlan.zhihu.com/p/70257427https://www.jiqizhixin.com/articles/2020-04-283https://blog.csdn.net/u012526436/article/details/101924049https://www.sohu.com/a/330319491_657157https://www.cnblogs.com/yifanrensheng/p/13167796.html!重磅!【深度學習衝鴨技術交流二群】微信交流群已成立
額外贈送福利資源!南京大學《模式識別》PPT,2020最新版《神經網絡與深度學習》中文版pdf,李航老師《統計學習方法》(第2版)課件分享,周志華《機器學習》西瓜書手推筆記(V2.8)
獲取方式:進入群後點開群公告即可領取下載連結