終於讀上了GPT2,我覺得整體的思想對我來說高級的,一些新聞或者文章上可能給大家最多的印象就是它參數多了、訓練數據多了,然後生成的文本很牛逼,但是我讀了論文之後反而覺得模型尺寸與數據只是一方面,它的思想纔是最重要的,下面主要圍繞兩個問題展開解析:

  1. 論文題目《Language Models are Unsupervised Multitask Learners》到底是什麼意思?
  2. GPT2(單向Transformer)和BERT(雙向Transformer)到底有什麼區別?

正文分割線

1. GPT2模型

1.1 模型思想

GPT2的核心思想就是認為可以用無監督的預訓練模型去做有監督任務。GPT2模型的結構還是和GPT一樣,如上圖中間部分,它所適用的任務恰好是語言模型,即預測 p(s_n|s_1, s_2, ...,s_{n-1}) ,這是大家再熟悉不過的公式。那為什麼這個就能做有監督任務呢?平常的套路難道不是語言模型預訓練+微調嗎?反正當時我是一臉懵逼的,反覆看了兩三遍才理透這個邏輯,下面我給大家梳理一下,如果這個思想懂了,那上面的問題就不是問題了。

按照原文的思路,作者是這樣論述的:

  1. 語言模型其實也是在給序列的條件概率建模,即 p(s_{n-k}, ..., s_n|s_1, s_2, ...,s_{n-k-1})
  2. 任何的有監督任務,其實都是在估計 p(output|input) ,通常我們會用特定的網路結構去給任務建模,但如果要做通用模型,它需要對 p(output|input, task) 建模。對於NLP任務的input和output,我們平常都可以用向量表示,而對於task,其實也是一樣的。18年已經有研究對task進行過建模了,這種模型的一條訓練樣本可以表示為 (translate to french, english text, french text) ,或者表示為 (answer the question, document, question, answer) 。也就是說,已經證實了,以這種數據形式可以有監督地訓練一個single model,其實也就是對一個模型進行有監督的多任務學習
  3. 語言模型=無監督多任務學習。相比於有監督的多任務學習,語言模型只是不需要顯示地定義哪些欄位是要預測的輸出,所以,實際上有監督的輸出只是語言模型序列中的一個子集。舉個例子,比如我在訓練語言模型時,有一句話「The translation of word Machine Learning in chinese is 機器學習」,那在訓練完這句話時,語言模型就自然地將翻譯任務和任務的輸入輸出都學到了。再比如,又碰到一句話「美國的總統是特朗普」,這一句話訓練完,也就是一個小的問答了。

沒理解的話,多看幾遍或者看一下原文,解釋的更為詳細。

如果以上思想懂了,那文章開始的兩個問題就迎刃而解:第一個問題答案就是上面的三點。那單向Transformer和雙向Transformer的區別,我認為主要是目標函數的區別,因為BERT的Masked language model是對 p(s_k|s_1, .., s_{k-1}, s_{k+1}, ..., s_n) 進行建模,這個建模思想的區別,也就使得目前的BERT無法做 p(output|input, task) 這樣的任務。

上面就是GPT2的主要思想,下面講一下其他細節。

1.2 其他細節

1.2.1 Training dataset

目前大部分的數據集都是針對特定任務的,而GPT2需要的是帶有任務信息的數據,因此作者蒐集了40GB的高質量語料進行訓練。

1.2.2 Input representation

Word-level去做embedding的話需要解決OOV的問題,char-level的話又沒有word-level做出的模型好,作者選擇了一種折中的辦法,將罕見詞拆分為子詞,參考論文《Neural Machine Translation of Rare Words with Subword Units》。

1.2.3 Model

主要有以下改動:

  • Layer norm放到了每個sub-block前(我還是有些沒懂具體在哪裡,之後看下源碼)
  • 殘差層的參數初始化根據網路深度進行調節
  • 擴大了字典、輸入序列長度、batchsize

2. 總結

我覺得GPT2還是蠻驚喜的,首先是它爆出的生成文本真的寫得好,還有就是整個模型的思想,提出了「NLP通用模型」。從Word2Vec->ELMo->GPT->BERT->MT-DNN->GPT2,可以看出NLP技術越來越傾向於用更少的有監督數據+更多的無監督數據去訓練模型,而GPT2也在一定程度上解釋了為什麼用language model預訓練出的模型有更好的效果和泛化性能。

希望NLP技術越來越好~

具體的實驗結果我還沒有細看,稍後會繼續讀論文完善這篇文章,如果有問題希望大家指證鴨。


推薦閱讀:
相關文章