本文首發於我的個人博客 Sui Xin’s Blog
原文:https://suixinblog.cn/2019/09/gpt.html
作者:Sui Xin
GPT(Generative Pre-Training)是一個典型的兩階段式模型:無監督預訓練+監督下游任務微調。而在 NLP 任務中,上游的無監督預訓練任務多半採用語言模型來實現,下游的監督任務直接對上游的模型進行簡單改造即可使用。
GPT 爲了能夠有效的抓取文本中的語義信息,使用了單向的 Transformer Decoder 模塊構建標準的語言模型,再使用預訓練得到的網絡架構與參數進行下游監督任務的微調,取得了不錯的效果。
論文:Improving Language Understanding by Generative Pre-Training
模型架構
無監督預訓練語言模型
對於語料 ,GPT 構建標準的語言模型:
文章中使用 Transformer Decoder 模塊加上前饋神經網絡,最後使用 softmax 輸出目標詞的分佈:
注:(不確定部分)實驗中,語言模型中的 Transformer Decoder 模塊不同於標準的 Transformer 模型,而是使用了 Transformer 的另一個版本:GENERATING WIKIPEDIA BY SUMMARIZING LONG SEQUENCES。其中,使用了名爲 Local attention 和 Memory-compressed attention 的模塊。
下游監督任務微調
對於通過第一階段的預訓練得到的語言模型,對於特定的任務進行 fine-tuning。
對於一個監督數據集 ,其中的數據爲一個序列 和一個標籤 。將序列輸入預訓練模型後得到輸出向量爲 ,接着使用一個線性層來預測標籤:
需極大化的似然函數爲:
另外,作者發現,使用語言模型來輔助監督學習的任務進行微調,有兩個好處:
- 提升監督模型的泛化性;
- 加速收斂。
所以,最終下游使用的監督模型目標函數爲:
不同類型下游任務的輸入變換
GPT 使用兩階段式模型的另外一個好處是,作者期望通過第一階段的預訓練語言模型,學習到儘可能多的自然語言信息,且對於大多數下游任務,只需要簡單的修改輸入而不需要修改模型架構即可完成微調。對於 NLP 中的幾種主流任務,GPT 分別做了如下的變換策略:
其他
模型還包括一些細節:
- Adam 優化器的學習率使用了退火策略;
- 使用了 bytepair encoding(BPE);
- 使用了 Gaussian Error Linear Unit(GELU) 激活函數;
- Position embedding 通過學習得來,而不是標準 Transformer 的正弦函數。
模型特點
優點
- 特徵抽取器使用了強大的 Transformer,能夠捕捉到更長的記憶信息,且較傳統的 RNN 更易於並行化;
- 方便的兩階段式模型。
缺點
- 標準的 LM 只對單向進行建模,不符合真實場景,建模能力受到限制。
GPT-2
論文:Language Models are Unsupervised Multitask Learners
GPT-2 是 GPT 的直接升級版,效果驚人。相比之下,GPT-2 有如下幾點改進:
- 構建了一個更加龐大的數據集 WebText,其涵蓋的領域比較廣泛,共有 8 百萬文檔,40 GB;
- 使用了更加龐大的網絡架構:最大 48 層 Transformer,1542M 參數,1600 維;
- GPT-2 提出這樣訓練得到的模型,能夠在 zero-shot 情形下也有不錯的表現,從而證明了語言模型預訓練的意義。
參考
GPT 官方網址:https://openai.com/blog/language-unsupervised/
GPT 官方 GitHub:https://github.com/openai/finetune-transformer-lm
GPT-2 官方網址:https://openai.com/blog/better-language-models/
GPT-2 官方 GitHub:https://github.com/openai/gpt-2