個人主頁:https://bento.me/zhengyanghou
Github:https://github.com/Jenqyang
GPT-1發表于2018年6月,比BERT早幾個月。GPT-1使用的是Transformer decoder(解碼器),而BERT使用的是Transformer encoder(編碼器)。

解碼器和編碼器最大的區別是解碼器加入了掩碼機制(Mask),這就導致在實際問題中,BERT是在做完型填空(沒有Mask就意味著同時知道歷史和未來的數據,要做的是根據歷史和未來預測當前,這當然簡單得多),而GPT-1是在續寫作文(加入Mask就意味著只知道當前和歷史數據,要做的是根據歷史預測未來,這就比BERT要難)。
這也是為什么BERT前幾年在NLP界的影響力也遠高于GPT。
GPT-1的構造分為兩個階段:Unsupervised pre-training和Supervised fine-tuning。GPT-1在預訓練階段(pre-training)使用無標注的數據進行無監督訓練,在微調(fine-tuning)階段使用有標注的數據進行監督訓練。
Unsupervised pre-training
預訓練階段器目標函數為:
其中就是GPT-1模型,通過
之前的數據計算得到
的概率。
Supervised fine-tuning
GPT-1的微調相當于一個分類任務,給定輸入序列都有標簽
(其實就是標號),將序列
放入訓練好的模型中的得到Transformer塊最后一層的輸出
,接著和一個輸出層
相乘,最后經過一層
就得到目標
的預測概率:
得到目標函數:
但實際上微調的目標函數是:
這是因為同時預測序列的下一個詞和預測序列的標簽效果最好,因此也加入了無監督訓練時的目標函數。
這點與BERT就不太一樣了,BERT微調時只使用了下游任務的目標函數。
上圖展示了幾類常見的下游任務都能夠轉換成序列-標簽的形式。原理就是將所有序列進行拼接,對每個組合情況都進行標號。在不同下游任務中Transformer的模型保持不變。這樣,不同的子任務都能轉成相同的下游任務格式,GPT-1也能以這樣的形式進行微調。
GPT-1使用spaCy分詞器(tokenizer),在包含7000本未發表書籍的BooksCorpus數據集上進行預訓練,最終得到SOTA效果。
個人主頁:https://bento.me/zhengyanghou
Github:https://github.com/Jenqyang
本文由mdnice多平臺發布