天天看點

Bert與GPT的差別Bert與GPT的差別

Bert與GPT的差別

1. 網絡結構上的差別

Bert與GPT的差別Bert與GPT的差別

上圖是Transformer的一個網絡結構圖,Bert的網絡結構類似于Transformer的Encoder部分,而GPT類似于Transformer的Decoder部分。單從網絡的組成部分的結構上來看,其最明顯的在結構上的差異為Multi-Head-Attention和Masked Multi-Head-Attention。

為了解釋清楚這兩個的差別,先來看看self-attention

Self-Attention

Bert與GPT的差別Bert與GPT的差別

Self-Attention的Input,它就是一串的Vector,我們用 a a a來表示它,代表它有可能是前面已經做過一些處理,它是某個隐藏層的輸出,輸入一排a這個向量以後,Self-Attention要輸出另外一排b這個向量。下面來看看如何輸出 b 1 b 2 b 3 b 4 b^1 b^2 b^3 b^4 b1b2b3b4

用最簡單的點積方式來計算q為例子:

Bert與GPT的差別Bert與GPT的差別

把 a 1 a^1 a1乘上$W^q 得 到 得到 得到q1$,然後,把$a1 乘 上 乘上 乘上Wk$,得到$k$這個Vector,把這個$q1 , 跟 這 個 ,跟這個 ,跟這個k^2$相乘就得到α

這邊用 α 1 , 2 α_{1,2} α1,2​來代表說,Query是1提供的,Key是2提供的時候,這個α這個關聯性叫做Attention的分數。

接下來也要跟 a 3 a 4 a^3 a^4 a3a4來計算

Bert與GPT的差別Bert與GPT的差別

把 a 3 a_3 a3​乘上 W k W^k Wk,得到另外一個Key也就是 k 3 k^3 k3, a 4 a^4 a4乘上 W k W^k Wk得到 k 4 k^4 k4,然後再把 k 3 k^3 k3這個Key,跟 q 1 q^1 q1這個Query做Inner-Product,得到1跟3之間的關聯性,得到1跟3的Attention,把 k 4 k^4 k4跟 q 1 q^1 q1做點積,得到 α 1 , 4 α_{1,4} α1,4​(1跟4之間的關聯性)

計算出a1跟每一個向量的關聯性以後,接下來這邊會接入一個SoftMax

Bert與GPT的差別Bert與GPT的差別

通過Soft-Max就得到 α ′ α' α′

Bert與GPT的差別Bert與GPT的差別
  • 首先把 a 1 a^1 a1到 a 4 a^4 a4這邊每一個向量,乘上$W^v 得 到 新 的 向 量 , 這 邊 分 别 就 是 用 得到新的向量,這邊分别就是用 得到新的向量,這邊分别就是用v^1 v^2 v^3 v^4$來表示
  • 接下來把這邊的 v 1 v^1 v1到 v 4 v^4 v4,每一個向量都去乘上Attention的分數,都去乘上 α ′ α' α′
  • 然後再把它加起來,得到 b 1 b^1 b1

b 1 = ∑ i α 1 , i ′ v i b^1=\sum_i\alpha'_{1,i}v^i b1=i∑​α1,i′​vi

這就是Self-Attention的過程

Multi-Head-Attention

Self-attention 有一個進階的版本,叫做 Multi-head Self-attention, 顧名思義,Multi-head Self-attention,相比較于Self-attention自然是使用了較多的head,需要用多少的 head,這個又是另外一個 超參數也是需要調的

為什麼會需要比較多的 head 呢?

在做這個 Self-attention 的時候,我們就是用 q 去找相關的 k,但是相關這件事情有很多種不同的形式,有很多種不同的定義,是以也許我們不能隻有一個 q,我們應該要有多個 q,不同的 q 負責不同種類的相關性。

其具體操作為(以一個兩個head為例):

Bert與GPT的差別Bert與GPT的差別
  • 先把 a 乘上一個矩陣得到 q
  • 再把 q 乘上另外兩個矩陣,分别得到 q 1 q^1 q1 跟 q 2 q^2 q2,那這邊還有 這邊是用兩個上标,i 代表的是位置,然後這個 1 跟 2 代表是,這個位置的第幾個 q,是以這邊有 q i , 1 q^{i,1} qi,1 跟 q i , 2 q^{i,2} qi,2,代表說我們有兩個 head

既然 q 有兩個,那 k 也就要有兩個,那 v 也就要有兩個,從 q 得到 q 1 q 2 q^1 q^2 q1q2,從 k 得到 k 1 k 2 k^1 k^2 k1k2,從 v 得到 v 1 v 2 v^1 v^2 v1v2,那其實就是把 q 把 k 把 v,分别乘上兩個矩陣,得到這個不同的 head。

Bert與GPT的差別Bert與GPT的差別
  • 是以 q i , 1 q_{i,1} qi,1​ 就跟 k i , 1 k^{i,1} ki,1 算 attention
  • q i , 1 q_{i,1} qi,1​ 就跟 k j , 1 k^{j,1} kj,1 算 attention,也就是算這個點積,然後得到這個 attention 的分數
  • 把 attention 的分數乘 v i , 1 v^{i,1} vi,1,把 attention 的分數乘 v j , 1 v^{j,1} vj,1
  • 然後接下來就得到 b i , 1 b^{i,1} bi,1

這邊隻用了其中一個 head,對于另一個 head,也做一模一樣的事情

Bert與GPT的差別Bert與GPT的差別

是以 q 2 q^2 q2 隻對 k 2 k^2 k2 做 attention,它們在做 weighted sum 的時候,隻對 v 2 v^2 v2 做 weighted sum,然後就得到 b i , 2 b^{i,2} bi,2

如果有多個 head,有 8 個 head 有 16 個 head,那也是一樣的操作,那這邊是用兩個 head 來當作例子

然後把 b i , 1 b^{i,1} bi,1 跟 b i , 2 b^{i,2} bi,2,把它接起來,然後再通過一個 transform

Bert與GPT的差別Bert與GPT的差別

也就是再乘上一個矩陣,然後得到 bi,然後再送到下一層去,那這個就是 Multi-head attention

Masked Multi-Head-Attention

使用mask的原因是因為在預測句子的時候,目前時刻是無法擷取到未來時刻的資訊的。也就是Multi-Head-Attention可以看到Input的整個句子,而Masked Multi-Head-Attention隻能看到目前輸入之前的内容,無法看到之後的内容

Bert與GPT的差別Bert與GPT的差別

例如,在本例子中,輸入的時候,不會看到後面的資訊,輸入台的時候,我們也沒法看到“灣大學”的字樣。這就是Masked Multi-Head-Attention和Multi-Head-Attention的主要差別。

2.預訓練任務差別

在Bert與GPT的預訓練任務的選取上,Bert與GPT所用的模型也存在着較大的差異。

Bert——Masking Input

在Bert的預訓練任務中,Bert主要使用“填空題"的方式來完成預訓練:

随機蓋住一些輸入的文字,被mask的部分是随機決定的,當我們輸入一個句子時,其中的一些詞會被随機mask。

Bert與GPT的差別Bert與GPT的差別

mask的具體實作有兩種方法。

Bert與GPT的差別Bert與GPT的差別
  • 第一種方法是,用一個特殊的符号替換句子中的一個詞,我們用 "MASK "标記來表示這個特殊符号,可以把它看作一個新字,這個字完全是一個新詞,它不在字典裡,這意味着mask了原文。
  • 另外一種方法,随機把某一個字換成另一個字。中文的 "灣"字被放在這裡,然後可以選擇另一個中文字來替換它,它可以變成 "一 "字,變成 "天 "字,變成 "大 "字,或者變成 "小 "字,我們隻是用随機選擇的某個字來替換它

兩種方法都可以使用。使用哪種方法也是随機決定的。是以,當BERT進行訓練時,向BERT輸入一個句子,先随機決定哪一部分的漢字将被mask。

mask後,一樣是輸入一個序列,我們把BERT的相應輸出看作是另一個序列,接下來,我們在輸入序列中尋找mask部分的相應輸出,然後,這個向量将通過一個Linear transform,輸入向量将與一個矩陣相乘,然後做softmax,輸出一個分布。。

Bert與GPT的差別Bert與GPT的差別

這與我們在Seq2Seq模型中提到的使用transformer進行翻譯時的輸出分布相同。輸出是一個很長的向量,包含我們想要處理的每個漢字,每一個字都對應到一個分數。

在訓練過程中。我們知道被mask的字元是什麼,而BERT不知道,我們可以用一個one-hot vector來表示這個字元,并使輸出和one-hot vector之間的交叉熵損失最小。

Bert與GPT的差別Bert與GPT的差別

BERT要做的是,預測什麼被蓋住。被掩蓋的字元,屬于 "灣"類。

在訓練中,我們在BERT之後添加一個線性模型,并将它們一起訓練,嘗試去預測被覆寫的字元是什麼。

GPT——Predict Next Token

GPT要做的任務是,預測接下來,會出現的token是什麼

舉例來說,假設訓練資料裡面,有一個句子是台灣大學,那GPT拿到這一筆訓練資料的時候,選取BOS這個Token所對應的輸出,作為Embedding的結果,用這個embedding去預測下一個應該出現的token是什麼

Bert與GPT的差別Bert與GPT的差別

那在這個句子裡面,根據這筆訓練資料,下一個應該出現的token是"台",要訓練模型,根據第一個token,根據BOS給的embedding,那它要輸出"台"這個token

這個部分,有一個embedding,這邊用h來表示,然後通過一個Linear Transform,再通過一個softmax,得到一個機率分布,我們希望這個輸出的機率分布,跟正确答案的交叉熵越小越好。

接下來要做的事情,就是以此類推了,輸入BOS跟"台",它産生embedding,接下來它會預測,下一個出現的token是什麼,以此類推來訓練模型。

Bert與GPT的差別Bert與GPT的差別

3.使用方法的差別

對于Bert和GPT,其本意是提供一個預訓練模型,使得人們可以友善的将其運用于下流(downstream)任務當中去。當然,這兩種模型最後使用的方法也是有一些差別的。

Bert的使用方法——以情感分類為例

Bert與GPT的差別Bert與GPT的差別

隻要給它一個句子,也就是你想用它來判斷情緒的句子,然後把CLS标記放在這個句子的前面,扔到BERT中,這4個輸入實際上對應着4個輸出。然後,我們隻看CLS的部分。CLS在這裡輸出一個向量,我們對它進行Linear transform,也就是将它乘以一個Linear transform的矩陣,然後進行Softmax,就可以得到情感分類的結果。

Bert的使用大多如此,用CLS對應的Output作為Embedding的結果,然後根據不同的任務進行對應的操作來fine-turing,從某方面而言,更像是利用深度學習對文本進行特征表示的過程。

GPT的使用方法

對于GPT使用,由于GPT的參數是Bert的4倍有餘,使得去fine-turing一個模型需要更長,更大的訓練時間。是以GPT提出了一個更加“瘋狂”的使用方式,一種更接近于人類的使用方式。

沒有進行梯度下降的"Few short leaning",也就GPT論文所提到的“In-context learning”

舉例來說假設要GPT這個模型做翻譯

Bert與GPT的差別Bert與GPT的差別
  • 先打Translate English to French,這個句子代表問題的描述
  • 然後給它幾個範例
  • 最後接下來給一個Cheese的詞,讓他翻譯成法語。

“One-shot” Learning “Zero-shot” Learning

例如我們在考聽力測驗的時候,都隻給一個例子而已,那GPT可不可以隻看一個例子,就知道它要做翻譯,這個叫One-shot Learning

還有更厲害的是Zero-shot Learning,直接給它一個叙述,說現在要做翻譯了,來看GPT能不能夠自己就看得懂,就自動知道說要來做翻譯這件事情。

Bert與GPT的差別Bert與GPT的差別

GPT在沒有微調的情況下,這種使用方法雖然準确率不夠高,但是随着GPT參數量的增加,在一定程度上仍然有着一定的準确率。

Bert與GPT的差別Bert與GPT的差別

PT參數量的增加,在一定程度上仍然有着一定的準确率。

Bert與GPT的差別Bert與GPT的差別

這就是GPT相比較于Bert更加獨特的一種使用方式。

繼續閱讀