GPT 原理解析

本文首發於我的個人博客 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

模型架構

無監督預訓練語言模型

對於語料 U=(u1,,un)\mathcal{U}=\left(u_{1}, \dots, u_{n}\right),GPT 構建標準的語言模型:
L1(U)=ilogP(uiuik,,ui1;Θ) L_{1}(\mathcal{U})=\sum_{i} \log P\left(u_{i} | u_{i-k}, \ldots, u_{i-1} ; \Theta\right)
文章中使用 Transformer Decoder 模塊加上前饋神經網絡,最後使用 softmax 輸出目標詞的分佈:
h0=UWe+Wphl= transformer b1ock(hl1)l[1,n]P(u)=softmax(hnWeT) \begin{aligned} h_{0} &=U W_{e}+W_{p} \\ h_{l} &=\text { transformer }_{-} \mathrm{b} 1 \mathrm{ock}\left(h_{l-1}\right) \forall l \in[1, n] \\ P(u) &=\operatorname{softmax}\left(h_{n} W_{e}^{T}\right) \end{aligned}

注:(不確定部分)實驗中,語言模型中的 Transformer Decoder 模塊不同於標準的 Transformer 模型,而是使用了 Transformer 的另一個版本:GENERATING WIKIPEDIA BY SUMMARIZING LONG SEQUENCES。其中,使用了名爲 Local attention 和 Memory-compressed attention 的模塊。

下游監督任務微調

對於通過第一階段的預訓練得到的語言模型,對於特定的任務進行 fine-tuning。
對於一個監督數據集 C\mathcal{C},其中的數據爲一個序列 x1,,xmx^{1}, \ldots, x^{m} 和一個標籤 yy。將序列輸入預訓練模型後得到輸出向量爲 hlmh_{l}^{m},接着使用一個線性層來預測標籤:
P(yx1,,xm)=softmax(hlmWy) P\left(y | x^{1}, \ldots, x^{m}\right)=\operatorname{softmax}\left(h_{l}^{m} W_{y}\right)
需極大化的似然函數爲:
L2(C)=(x,y)logP(yx1,,xm) L_{2}(\mathcal{C})=\sum_{(x, y)} \log P\left(y | x^{1}, \ldots, x^{m}\right)
另外,作者發現,使用語言模型來輔助監督學習的任務進行微調,有兩個好處:

  1. 提升監督模型的泛化性;
  2. 加速收斂。

所以,最終下游使用的監督模型目標函數爲:
L3(C)=L2(C)+λL1(C) L_{3}(\mathcal{C})=L_{2}(\mathcal{C})+\lambda * L_{1}(\mathcal{C})

不同類型下游任務的輸入變換

GPT 使用兩階段式模型的另外一個好處是,作者期望通過第一階段的預訓練語言模型,學習到儘可能多的自然語言信息,且對於大多數下游任務,只需要簡單的修改輸入而不需要修改模型架構即可完成微調。對於 NLP 中的幾種主流任務,GPT 分別做了如下的變換策略:

其他

模型還包括一些細節:

模型特點

優點

  • 特徵抽取器使用了強大的 Transformer,能夠捕捉到更長的記憶信息,且較傳統的 RNN 更易於並行化;
  • 方便的兩階段式模型。

缺點

  • 標準的 LM 只對單向進行建模,不符合真實場景,建模能力受到限制。

GPT-2

論文:Language Models are Unsupervised Multitask Learners
GPT-2 是 GPT 的直接升級版,效果驚人。相比之下,GPT-2 有如下幾點改進:

  1. 構建了一個更加龐大的數據集 WebText,其涵蓋的領域比較廣泛,共有 8 百萬文檔,40 GB;
  2. 使用了更加龐大的網絡架構:最大 48 層 Transformer,1542M 參數,1600 維;
  3. 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章