預訓練模型的梳理總結
摘要
本報告將從以下幾個方面梳理預訓練模型,陳述預訓練(特指nlp領域)的what和how,總結預訓練加微調模式的好處和弊端。通過時間線的方式梳理最近兩年來預訓練模型的發展脈絡,重點闡述幾個典型的預訓練模型的做法和創新點。
chap1:預訓練模型
預訓練模型一開始是在CV中流行起來的,在圖像領域,由於有些任務可能面臨這數據量匱乏這一難題,直接在此任務上進行神經網絡的訓練非常容易導致過擬合。因此人們通常是在一些大的圖像數據集上進行通用神經網絡的訓練,因為在神經網絡中,越靠前邊的網絡層學到的特征越抽象,對於不同的圖像數據集來說,他們之間的一些抽象特征可能是相似或者相同的,因此,通過在大的數據集上進行預訓練,然后在根據特定的任務進行微調,能夠加速網絡的訓練,緩解過數據量不足而帶來的過擬合問題,預訓練微調模式可以看成遷移學習的一種特定手段。
而在NLP方面,預訓練手段則發展的比較晚,但是預訓練的思想其實早就有了,比如最早的word2vec,其實就可以看成特殊的預訓練,只不過我們的下游任務直接把學得的詞向量拿來作為自己任務的初始化了,而不是進行某種方式的微調。我認為預訓練模型發展較晚的原因由以下幾個方面構成。
第一,NLP沒有像CV一樣的大型通用的數據集,由於自然語言的復雜性,很難定義合適的通用的監督型任務供預訓練模型進行學習。
第二,如上所述,沒有合適的標注數據集,那么進行監督學習就是不太的可能的了,大家都沒有意願去摸索如何利用無監督數據的方法。
第三,在transformer之前,NLP最常用的特征提取模塊都是rnn-based,這類的特征提取模塊不太適合作為預訓練模型的backbone。原因是,他們都是循環遞歸結構,預訓練追求的在大規模數據上學習通用的語言特征,而rnn-based特征提取模塊作為backbone訓練時時間復雜度是非常高的。大多數研究人員和研究公司都不太願意嘗試。
chap2:各類預訓練模型
2.1 語言模型
語言模型是指這樣的一個映射函數:
該映射可以建模一個句子的可能性,通常在機器翻譯中應用較多。機器翻譯中一般將其作為候選結果集的篩選器。
通常該函數是通過在給定預料上通過最大似然學得的。一般的,考慮單向的語言模型,通過鏈式法則以及最大化如下似然函數,來學習模型:
上述建模方法是預訓練模型中最常用的訓練手段,稱之為單向正向語言模型。與之相對的,下面是單向反向預訓練模型:
\(P_\theta\)一般用LSTM來建模,后來逐漸演變為Transformer模塊,因為Transformer包含多層的Self-Attention運算,而語言模型恰恰就需要提取這種序列內部交互特征。
基於語言模型的預訓練模型子18年以來層出不窮,儼然成了各大公司中的亂斗場,頻繁的刷新着以NLU為核心的各類NLP任務。下表就是我根據所看的論文總結出比較典型的預訓練模型的近兩年的發展脈絡。
模型名稱 | 特征提取 模塊 | 預訓練任務 | 語言 模型 | 特點 |
---|---|---|---|---|
ELMO | BiLSTM | LM | 單向拼接 | 首次真正的將預訓練的思想進行了實踐 |
GPT | Transformer | LM | 單向 | 統一下游微調任務的形式,證明了transformer結構在預訓練任務中的有效性 |
BERT | Transformer | MLM,NSP | 雙向 | 創新性的提出MSM任務,首次事先了雙向的語言模型 |
GPT2.0 | Transformer | LM | 單向 | 在生成任務中取的良好的結果 |
MASS | Transformer | LM,MLM | 單向,雙向 | 將序列任務引入到預訓練過程 |
UNILM | Transformer | LM,MLM,S2SLM | 單向,雙向 | 靈活的運用mask矩陣,實現僅僅用Encoder來作序列任務 |
MTDNN | Transformer | MLM | 雙向 | 在下游階段引入了多任務學習 |
Transformer-XL | Transformer-XL | |||
XLNET | Transformer-XL | Perm-LM | 雙向 | 排列語言模型,雙注意流 |
ALBERT | Transformer | MLM | 雙向 | 對BERT進行了針對性的模型壓縮,保留了盡可能大的性能同時精簡了模型 |
RoBERTa | Transformer | |||
DistillBERT | Transformer | 對BERT進行了模型蒸餾,從而達到模型壓縮的目的 |
2.2 ELMo:Deep contextualized word representations
ELMo(Embeddings from Langauge Model)的思想非常簡單,通過雙向拼接的LSTM結構作為模型的特征提取表示模塊,然后使用LM作為預訓練第一個階段的任務,為了將下游不同的任務融合進去,論文在上層融合了不同的NLP任務,需要注意的是,作者在融合不同任務的時候,並沒有統一的使用最頂層的向量表示,而是針對不同的任務使用了不同層的向量表示。
elmo的優點在於初步解決了之前的詞向量表示中所不能解決的一詞多義的問題,因為每個詞向量表示都是根據其周圍的詞在句子中動態獲得的。
2.3 GPT:Improving Language Understandingby Generative Pre-Training
GPT是Open AI的工作,開創性的使用了Transformer來作為預訓練模型的特征提取模塊,在NLU相關的下游任務中取得了非常好的效果。模型也是十分簡潔的,預訓練部分使用單向的LM,微調階段也是十分簡潔,將一些非序列而任務融合到了一個框架中去,采用了分隔符標記拼接的方式來統一處理。
2.4 GPT2.0:Language Models are Unsupervised Multitask Learners
由於GPT2.0在GPT基礎上做的,除了使用了多任務以及超大預訓練數據集以及超大的模型之外,在思想上並沒有很大的創新,這里就不詳細展開了。
2.5 BERT: Pre-training of Deep Bidirectional Transformers for Lanuage Understanding
BERT這篇論文在組會上已經多次討論了,其中模型結構以及預訓練任務大家都早已非常熟悉,這里不再贅述。
這里稍微說下BERT用於預訓練中的MLM任務,以及為什么可以稱之為雙向的語言模型。理想情況下,我們都希望一個詞的語義特征表示是由其上下文共同編碼決定的。顯然上面基於鏈式法則的單向語言模型是不能夠學習到雙向語義表示的,因為在預測\(x_t\)時,無論是正向的語言模型還是反向的語言模型,都只由該時刻一側的序列決定,所以模型自然不能將雙向的信息編碼到中心詞中去。而BERT通過借鑒close-test這樣的任務思想,借助Self-Attention Mask,巧妙的解決了上述問題。BERT可以形式化最大如下似然函數:
其中
\(H_\theta(x) = [H_\theta(x)_1,H_\theta(x)_2,。。。,H_\theta(x)_T]\),這里的\(H_\theta\)是Transformer結構的編碼器。
具體的\(\overline x\)是通過Transformer的Encoder部分來完成特征提取的,在預測當前單詞t時刻單詞時,通過Attention Mask保證\(x_t\)時刻的信息不泄露。由於Self-Attention計算是對整個句子進行query操作,所以就把雙向的信息編碼進去了。通過這樣的任務轉化,BERT就建模到了雙向的語義表示信息,但是BERT也面臨着如下的為解決問題:
- 如果在Transformer不加入Position Encoding這一操作,那么該特征提取模塊實際上就是One-Hot表示而已,不能建模句子內部的相對位置信息。這也是為什么需要加入額外的位置嵌入信息這一操作。
- 可以看出在進行序列預測時,上述的建模實際上有默認被Mask掉的部分各自相互獨立,顯然這是不合理的。
- 同時,在單步預測被mask掉位置的單詞時,將其他位置的mask信息信息也編碼了進來,這樣做有優點,也有弊端,優點是相當於人為的引進了噪聲,可以增強模型的魯棒性,缺點只能通過啟發式的方法設置MASK的數量占比。無法確定究竟引入多少的MASK是合適的。
- MASS:Masked Sequence to Sequence Pre-training for Language Generation
要注意的是,包括BERT在內的預訓練模型大多都在一些NLU任務上表現優異,這些任務的基本都是一些序列分類任務,當然,也有很多人在一些序列標注任務上做過一些嘗試,但是像機器翻譯,文本摘要或者其他的序列生成任務,這些預訓練模型便顯的力不從心了。根本的原因是:這些模型都只是由一個Encoder結構組成,對於標注任務單獨一個Encoder還是可以解決的,但是像序列生成這樣的任務便無能為力了。
MASS就是為了解決這一問題而提出的預訓練模型。實際上MASS的思想很簡單,既然一個單獨的Encoder不能解決,那么再疊加一個Decoder作為解碼部分不就可以了,因此MASS在預訓練模型部分添加了Decoder結構,並將最優化目標設為如下形式:
建模這樣的最大似然有兩個好處,一個是BERT時各Mask位置相互獨立這一假設消失了,另外一個就是不用再引入這么多Mask信息了。
2.6 UniLM:Unified Language Model Pre-training
UniLM的巧妙之處在於將上面提到的三種語言模型都集成到了一個模型中去,而且僅僅用了Encoder結構。
預訓練采用了1/3的雙向語言模型,1/3的序列到序列語言模型、各占1/6的從左到右的以及從右到左的單向語言模型。同時也像BERT一樣集成了NSP任務。
具體的,UniLM采用了如下方式來統一的集成上述預訓練過程:
引用:
Improving Language Understandingby Generative Pre-Training
GPT:Improving Language Understandingby Generative Pre-Training
BERT:Pre-training of Deep Bidirectional Transformers for Lanuage Understanding
MASS:Masked Sequence to Sequence Pre-training for Language Generation
Unified Language Model Pre-training for Natural Language Understanding and Generation
XLNet: Generalized Autoregressive Pretrainingfor Language Understanding