GPT原理介紹

2021-09-25 13:55:59 字數 3115 閱讀 2886

前面我們介紹了elmo演算法的思想,通過在大量的語料上預訓練語言模型,然後再將預訓練好的模型遷移到具體的下游nlp任務,從而提高模型的能力。但是elmo預訓練的語言模型結構和下游的nlp任務的模型經常會不一致,因此,做遷移學習時經常沒法將兩者的模型直接進行融合,因此,本文將介紹openai在2023年提出來的乙個方法——gpt,該模型在預訓練語言模型的基礎上,只需要做一些微改即可直接遷移到各種nlp任務中,因此,其遷移能力更強。

gpt模型主要包含兩個階段,第乙個階段,先利用大量未標註的語料預訓練乙個語言模型,接著,在第二個階段對預訓練好的語言模型進行微改,將其遷移到各種有監督的nlp任務,並對引數進行fine-tuning。

給定乙個沒有標註的大語料,記每乙個序列為u

=\mathcal=\left\, \dots, u_\right\}

u=,gpt通過最大化以下似然函式來訓練語言模型:

l 1(

u)=∑

ilog⁡p

(ui∣

ui−k

,…,u

i−1;

θ)l_(\mathcal)=\sum_ \log p\left(u_ | u_, \ldots, u_ ; \theta\right)

l1​(u)

=i∑​

logp(u

i​∣u

i−k​

,…,u

i−1​

;θ)其中,k

kk表示上下文視窗的大小,這裡計算每個單詞的**概率時,只考慮左側視窗大小的詞彙資訊,在gpt中,作者採用的是乙個12層的transformer decoder作為語言模型的結構,其計算過程如下:

h 0=

uwe+

wphl

=transformer_block (h

l−1)

∀i∈[

1,n]

p(u)

=softmax⁡(

hnwe

t)\begin h_ &=u w_+w_ \\ h_ &=\text \left(h_\right) \forall i \in[1, n] \\ p(u) &=\operatorname\left(h_ w_^\right) \end

h0​hl​

p(u)

​=uw

e​+w

p​=transformer_block (h

l−1​

)∀i∈

[1,n

]=so

ftma

x(hn

​wet

​)​其中,u=(

u−k,

…,u−

1)u=\left(u_, \ldots, u_\right)

u=(u−k

​,…,

u−1​

)表示左側視窗的詞彙向量,n

nn表示transformer的層數,wew_

we​表示詞向量矩陣,wpw_

wp​表示position embedding矩陣,在gpt中,作者對position embedding矩陣進行隨機初始化,並讓模型自己學習,而不是採用正弦余弦函式進行計算。

從gpt的計算公式來看,其實跟transformer基本是一樣的,只是對每個時間步,都只考慮左側視窗大小的上下文資訊。

當語言模型訓練結束後,就可以將其遷移到具體的nlp任務中,假設將其遷移到乙個文字分類任務中,記此時的資料集為c

\mathcal

c,對於每乙個樣本,其輸入為x1,

…,xm

x^, \ldots, x^

x1,…,x

m,輸出為y

yy。對於每乙個輸入,經過預訓練後的語言模型後,可以直接選取最後一層transformer最後乙個時間步的輸出向量hlm

h_^hl

m​,然後在其後面接一層全連線層,即可得到最後的**標籤概率:

p (y

∣x1,

…,xm

)=softmax⁡(

hlmw

y)p\left(y | x^, \ldots, x^\right)=\operatorname\left(h_^ w_\right)

p(y∣x1

,…,x

m)=s

oftm

ax(h

lm​w

y​)其中,wyw_

wy​為新引入的全連線層的引數矩陣。因此,可以得到在分類任務中的目標函式:

l 2(

c)=∑

(x,y

)log⁡p

(y∣x

1,…,

xm)l_(\mathcal)=\sum_ \log p\left(y | x^, \ldots, x^\right)

l2​(c)

=(x,

y)∑​

logp(y

∣x1,

…,xm

)在具體的nlp任務中,作者在fine-tuning時也把語言模型的目標引入到目標函式中,作為輔助函式,作者發現這樣操作可以提高模型的通用能力,並且加速模型收斂,其形式如下:

l 3(

c)=l

2(c)

+λ∗l

1(c)

l_(\mathcal)=l_(\mathcal)+\lambda * l_(\mathcal)

l3​(c)

=l2​

(c)+

λ∗l1

​(c)

其中,λ

\lambda

λ一般取0.5。

可以發現,在fine-tuning階段,此時新增的引數只有最後一層全連線層的引數wyw_

wy​,這比elmo演算法要容易得多。

不過,上面這個例子只是對於文字分類任務,如果是對於其他任務,比如文字蘊涵、問答、文字相似度等,那麼gpt該如何進行微改呢?針對這幾種情況,作者提出了以下的修改方法:

具體的方法可以檢視下圖,可以發現,對這些任務的微改主要是新增線性層的引數以及起始符、結束符和分隔符三種特殊符號的向量引數。

最後總結一下:

MBR與GPT區別介紹

參考鏈結 主引導記錄 ibm提出 存在於磁碟驅動器開始部分的乙個特殊的啟動扇區。包含已安裝的作業系統系統資訊,並用一小段 來啟動系統。mbr分割槽最多支援2t磁碟。guid partition table,全域性唯一標識磁碟分割槽表,一種使用uefi啟動的磁碟組織方式。gpt沒有分割槽的概念,所有c...

MBR和GPT基本原理

mbr mbr結構圖mbr結構圖主引導扇區由三個部分組成 共占用512個位元組 第一部分mbr main boot record 主引導記錄區 位於整個硬碟的0磁軌0柱面1扇區。mbr只占用該扇區的前446個位元組 主引導程式 偏移位址0000h 0088h 它負責從活動分割槽中裝載,並執行系統引導...

GPT分割槽詳解

本文作者是一位開源理念的堅定支持者,所以本文雖然不是軟體,但是遵照開源的精神發布。本文作者十分願意與他人分享勞動成果,如果你對我的其他翻譯作品或者技術文章有興趣,可以在如下位置檢視現有的作品集 由於作者水平有限,因此不能保證作品內容準確無誤。如果你發現了作品中的錯誤 哪怕是錯別字也好 請來信指出,任...