GPT理解(轉)


參考:https://mp.weixin.qq.com/s/Tk7wc5aq8qaaeBz6cXRd_Q

一、概述

  NLP 領域中只有小部分標注過的數據,而有大量的數據是未標注,如何只使用標注數據將會大大影響深度學習的性能,所以為了充分利用大量未標注的原始文本數據,需要利用無監督學習來從文本中提取特征,最經典的例子莫過於詞嵌入技術。但是詞嵌入只能 word-level 級別的任務(同義詞等),沒法解決句子、句對級別的任務(翻譯、推理等)。出現這種問題原因有兩個:

  • 首先,是因為不清楚要下游任務,所以也就沒法針對性的進行行優化;
  • 其次,就算知道了下游任務,如果每次都要大改模型也會得不償失。

  為了解決以上問題,作者提出了 GPT 框架,用一種半監督學習的方法來完成語言理解任務,GPT 的訓練過程分為兩個階段:無監督Pre-training 和 有監督Fine-tuning。目的是在於學習一種通用的 Representation 方法,針對不同種類的任務只需略作修改便能適應。

接下來我們詳細介紹下 GPT。

 

二、GPT

GPT 訓練過程分為兩個階段:

第一個階段是 Pre-training 階段,主要利用大型語料庫完成非監督學習;

第二階段是 Fine-tuning,針對特定任務在相應數據集中進行監督學習,通過 Fine-tuning 技術來適配具體任務。

下圖為 GPT 的架構圖:

1) Pre-training

  從上圖我們可以看出,GPT 采用 Transformer 來代替 LSTM 作為特征提取器,並基於語言模型進行訓練(即根據前面的詞預測后面的詞)。這里只使用了 Transformer 的 Decoder 部分,並且每個子層只有一個 Masked Multi Self-Attention(768 維向量和 12 個 Attention Head)和一個 Feed Forward,共疊加使用了 12 層的 Decoder。

  這里簡單解釋下為什么只用 Decoder 部分:語言模型是利用上文預測下一個單詞的,因為 Decoder 使用了 Masked Multi Self-Attention 屏蔽了單詞的后面內容,所以 Decoder 是現成的語言模型。又因為沒有使用 Encoder,所以也就不需要 encoder-decoder attention 了。

對於給定的非監督語料庫的 Token 序列 U={u1,u2,...,un} ,基於語言模型的目標函數:

其中,k 是上下文窗口的大小,P 為條件概率,θ 為條件概率的參數,參數更新采用 SGD。

  GPT 輸入文本和位置 Embedding(采用使用 one-hot 編碼),經過 12 層的 Transformer 的 Decoder 后通過 Softmax 得到輸出:

其中, U={u-k,...,u-1}是當前單詞的前面 k 個 Token,n 為神經網絡的層數,We是 Token 的 Embedding 矩陣, Wp是位置編碼的 Embedding 矩陣,在GPT中,作者對position embedding矩陣進行隨機初始化,並讓模型自己學習,而不是采用正弦余弦函數進行計算。

舉例解釋GPT的預訓練:

比如:原文本序列是【1,2,3,4,5】,在訓練的時候就錯開一位進行訓練,輸入就是【SEP,1,2,3,4,5】,輸出就是【1,2,3,4,5,EOS】,這樣其實每一位的輸出就只依賴於前面的一位,個人理解相當於上下文窗口為1了,也就是變成bigram模型(二元模型)了。參考n-gram模型https://www.jianshu.com/p/e0598adb07ad

2)Fine-tuning

完成預訓練后,我們會得到一個訓練好的 Transformer 模型,接下來我們要用這個訓練好的模型來完成特定的監督學習的任務。

假設我們有個帶標簽的數據集 C,即每一個 Token 序列 x1,x2,...,xm 都有一個標簽 y。我們將 Token 序列輸入,並通過 Transformer 模型得到輸出的狀態 hlm,然后把這個加到線性層進行輸出並預測標簽 y:

 

其中, Wy是線性層的權重。

所以針對該監督學習,我們也有新的目標函數:

另外,將預訓練好的語言模型作為輔助目標進行 Fine-tuning 不僅可以使監督模型更具泛化性,還可以加速收斂。於是我們有:

其中, λ為權重,一般設置為0.5。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM