GPT-1
架構特點
- 僅解碼器架構:擯棄了傳統transformer中的編碼器層,而是直接用解碼器和自注意力,同時拋棄掉了交叉多頭注意力層,自注意力通過mask來完成計算。
- 注意力塊添加到12個,Attention的輸出維數為762維,FeedForward的升維維數增加到2048維。總參數量達1.5億(0.15B)。
- 可學習的位置編碼:位置編碼不再使用固定的公式計算,而是作為神經網絡參數的一部分進行學習。
訓練過程
無監督預訓練
給定一個句子,無監督預訓練做的就是根據之前的token預測下一個token,每個batch里面包含的是該句子的前若干個token組成的輸入,(但是實際實現中不會真的去這樣做切分,而是用注意力掩碼來控制注意力的計算)。輸出是對應的下一個token。
每一個token的注意力嵌入最后通過前饋網絡都能生成下一個token的預測,最終根據每一個token預測計算交叉熵平均損失,從而得到這個輸入的訓練損失。
有監督微調
與預訓練的方法類似,但是存在以下兩個區別:
- 訓練數據的內容是人為標注的,符合人們對模型的工具定位,要求模型必須按用戶的需求回答
- 在計算損失部分,不會把prompt部分的自損失計算上,而只會計算人為標注的輸出部分的每個token預測的損失平均值。
GPT-1的缺陷
- GPT-1使用的Transformer Decoder是單向語言模型,提取信息的能力不如Bert,但生成文本的能力很強
- GPT-1針對每一個下游任務都需要訓練一個模型,工作量大
BERT
架構特點
- BERT是僅編碼器架構,所以BERT喪失了輸出文本的能力
- BERT在對輸入進行嵌入時,除了常規的嵌入和位置編碼,BERT還會對句子的序列頭和序列為進行編碼。
在此處,我們可以看到兩個特殊的標識符[CLS]和[SEP],它們沒有自身的語義,[CLS]表示序列的開頭,[SEP]表示句子的結尾。BERT的輸入只會有1 - 2 個序列。
如果輸入是兩個序列則第二個序列的段落編碼為1,否則段落編碼為0.
序列編碼示例:
- <CLS> my dog is cute <SEP> --> 0 0 0 0 0 0
- <CLS> my dog is cute <SEP> he likes play ##ing <SEP> ---> 0 0 0 0 0 0 1 1 1 1 1
訓練過程
BERT的預訓練過程包括兩個任務:
掩碼語言模型(MLM)
以 15% 的概率隨機將句子中的某個token替換為 [MASK] , 隨后讓模型預測原位置對應的token是什么,這樣可以讓模型更好的捕捉語義。
- 存在的問題:模型過于關注[MASK]這個token,但是下游任務中并不會出現[MASK],所以可能出現過擬合的現象。
- 解決方案:選擇完token之后,有三種選擇:
- 替換為[MASK] token
- 替換為其他隨機token
- 不替換
由于模型不知道句子中對應的token是否是真的原token,所以模型會嘗試根據句子的語義來找到原token。
鄰接序列預測(NSP)
輸入兩個序列,由模型判斷兩個序列是否在語義上是相關聯的,或者說后面的序列是否在語料中與前面的序列臨近。
- 通過CLS中的向量信息來進行二分類,因為CLS本身沒有語義信息,內部的信息只能是句子整體的信息。
舉例:
Input1=[CLS] the man went to [MASK] store [SEP] he bought a gallon [MASK] milk [SEP]Label1=IsNextInput2=[CLS] the man [MASK] to the store [SEP] penguin [MASK] are flight ##less birds [SEP]Label2=NotNext
應用場景
句子分類
句子情感預測
語句問答
單句標注:標注句子中出現的每一個token的標簽
缺陷
BERT失去了文本生成的能力,換來了更強的信息提取能力