LLM本身基於Transformer架構
自2017年,Attention is all you need誕生起,原始的Transformer模型不同領域的模型提供了靈感和啟發
基於原始的Transformer框架,衍生了一系列模型,一些模型僅僅使用encode或decoder,有些模型同時使用encoder + decoder。
Transformer 模型圖:
LLM 分類一般分為三種:自編碼模型(Encoder)、**自迴歸模型(decoder) **和 序列到序列模型(Encoder-decoder)
自編碼模型(AE, AutoEncoder model)
代表模型BERT
AE模型,代表作BERT,其特點為:Encoder-Only
基本原理:在輸入中隨機MASK掉一部分單詞,更精上下文預測這個詞
AE模型通常用於內容理解任務,比如自然語言理解(NLU)中的分類任務:情感分析、提取式問答
BERT 是2018年10月由Google AI研究院提出的一種預訓練模型
- BERT全稱為:Bidirectional Encoder Representation from Transformers
- BERT在機器閱讀理解頂級水平測試SQuAD1.1 中表現出驚人的成績:全部兩個衡量標準上全面超越人類,並且在11種不同NLP測試中創出SOTA表現,包括將GLUE基準推高至80.4%(絕對改進7.6%),MultiNLI準確度達到86.7%(絕對改進5.6%),稱為NLP發展史上里程碑式的模型成就
BERT架構
總體架構:如下圖所示,最左邊的就是BERT的架構圖,一個典型的雙向編碼模型。
從上面的架構圖中可以看到,宏觀上BERT分為三個主要模組:
- 最底層黃色標記的Embedding模組
- 中間層藍色標記的Transformer模組
- 最上層綠色標記的預微調模組
Embedding模組
BERT中的該模組是由三種Embedding共同組成而成,如下圖:
- Token Embeddings: 詞嵌入向量,第一個單詞是CLS標誌,可以用於之後的分類任務
- Segment Embedding:句子分段嵌入張量,是為了服務後續的兩個句子為輸入的預訓練任務
- Position Embedding: 位置編碼張量
- 整個Embedding模組的輸出張量就是這三個張量的直接加和結果
雙向Transformer
BERT中使用了經典Transformer結構中的Encoder部分,完全捨棄了Decoder部分
兩大訓練任務也集中體現在訓練Transformer模組中
預微調模組
經過中間層Transformer的處理後,BERT的最後一層根據任務的不同需求而作不同的調整即可
比如對於sequence-level的分類任務,BERT直接取第一個[CLS] token的final hidden state,再加一個層全連線層後進行softmax來預測最終的標籤
BERT的預預測任務
-
Masked LM(帶mask的語言模型訓練),簡稱MLM
在原始訓練文字中,隨機的抽取15%的token作為參與MASK任務的物件
- 80%的機率下,用[MASK]標記替換該token
- 在10%的機率下,用一個隨機的單詞替換token
- 在10%的機率下,保持該token不變
-
Next Sentence Prediction(下一句話預測任務),簡稱NSP
輸入句子對(A, B),模型來預測句子B是不是句子A的真實的下一句話。
- 所有參與任務訓練的句子都被選中作為句子A
- 其中50%的B是原始文字中真實跟隨A的下一句話(標記為IsNext,代表正樣本)
- 其中50%的B是原始文字中隨機抽取的一句話(標記為NotNext,代表負樣本)
資料集與BERT模型的特點
資料集如下:
BooksCorpus (800M words) + English Wikipedia (2,500M words)
模型的一些關鍵引數為:
AE模型總結
- 優點
BERT使用雙向Transformer,在語言理解相關的任務重表現很好
- 缺點
- 輸入噪聲:預訓練-微調存在差異
- 更適合NLU(自然語言理解)任務,不適合用NLG(自然語言生成)任務
PS
-
什麼是自編碼?
答:在輸入中隨機MASK掉一部分單詞,根據上下文預測找個詞 -
BERT模型的核心架構?
答:Transformer的Encoder模組 -
BERT的預訓練任務?
答:MLM和NSP
自迴歸模型(AR, AutoRegresive model)
代表模型GPT
AR模型,代表作GPT,其特點為:Decoder-Only
基本原理:從左往右學習的模型,只能利用上文或者下文的資訊。
AR模型通常用於生成式任務,在長文字的生成能力很強,比如自然語言生成(NLG)領域的任務:摘要、翻譯或抽象問答
2018年6月,OpenAI公司發表論文"Improving Language Understanding by Generative Pre-training"(用生成式預訓練提高模型的語言理解力),推出了具有1.17億個引數的GPT(Generative Pre-training,生成式預訓練)模型
GPT模型架構
三個語言模型的對比架構圖,中間為GPT
從上圖可看到GPT採用的是 單向Transformer模型,例如給定一個句子\([u_1, u_2, ..., u_n]\) ,GPT在預測單詞\(u_i\)的時候只會利用\([u_1, u_2, ...,u_{(i-1)}]\) 的資訊,而BERT會同時利用上下文的資訊\([u_1, u_2, ...,u_{(i-1)}, u_{i+1},...,u_n]\)
GPT採用了Transformer的Decoder模組,但GPT的Decoder Block和經典Transformer Decoder Block 有所不同
GPT中取消了第二個encoder-decoder attention子層,只保留Masked Multi-Head Attention層和Feed Forward層
PS:
注意:對比於經典的Transformer架構,解碼器模組採用了6個Decoder Block;GPT的架構中採用了12個Decoder Block。
GPT訓練過程
GPT的訓練包括兩個階段過程:1.無監督的預訓練語言模型;2.有監督的下游任務fine-tunning
無監督的預訓練語言模型
- 給定句子\(U = [u_1, u_2, ..., u_n]\),GPT訓練語言模型時的目標是最大化下面的似然函式:
-
上述公式具體來說是要預測每個詞\(u_i\)的機率,這個機率是基於它前面\(u_{i-k}\)到\(u_{i-1}\)個詞,以及模型\(\Theta\),這裡的k代表上文的視窗大小,理論上,k取的越大,模型所能獲取的上文資訊越充足,模型的能力越強。
-
GPT是一個單向語言模型,模型對輸入U進行特徵嵌入得到Transformer第一層的輸入\(h_0\),再經過多層Transformer特徵編碼,使用最後一層的輸出即可得到當前預測的機率分佈,計算過程如下:
$W_p$代表單詞的位置編碼,形狀是[max_seq_len, embedding_dim],
$W_e$的形狀為$[vocab\_size, embedding\_dim]$
- 得到輸入張量\(h_0\)後,要將\(h_0\)傳入GPT的Decoder Block中,依次得到\(h_t\):
- 最後透過得到的\(h_t\)來預測下一個單詞:
有監督的下游任務fine-tunning
- GPT預訓練後,會針對具體的下游任務隊模型進行微調
微調採用的是 有監督學習,訓練樣本包括單詞序列\([x_1, x_2, ..., x_n]\)和label y
GPT微調的目標任務:根據單詞序列\([x_1, x_2, ..., x_n]\)預測標籤y
其中,\(W_y\)表示預測輸出的矩陣引數,微調任務的目標是最大化下面的函式:
綜合兩個階段的目標任務函式,可知GPT的最終最佳化函式為:
整體訓練過程架構圖
根據下游任務適配的過程分兩步:
-
- 根據任務定義不同輸入
-
- 對不同任務增加不同的分類層
具體定義可以參見下圖:
- 對不同任務增加不同的分類層
GTP資料集
GPT使用了BooksCorpus資料集,文字大小約5GB,包含7400W+的句子。這個資料集由7000本獨立的、不同風格型別的書籍組成,選擇該部分資料集的原因:
-
- 書籍文字包含大量高質量長句,保證模型學習長距離資訊依賴
-
- 書籍未開源公佈,所以很難在下游資料集上見到,更能體驗模型的泛化能力
GPT模型的特點
模型的一些關鍵引數為:
優點
- GPT在9個任務上的表現sota
- 更易於並行化
缺點
- GPT語言模型是單向的
- 針對不同的任務,需要不同資料集進行模型微調,相對比較麻煩
PS
-
什麼是自迴歸模型?
答:從左往右學習的模型,只能利用上文或下文的資訊 -
GPT模型的核心架構?
答:transformer 的Decoder模組(去除中間的第二個子層) -
GPT的預訓練任務?
答:無監督的預訓練 和 有監督任務的微調
序列到序列模型(Sequence to Sequence Model)
代表模型T5
encoder-decoder模型同時使用編碼器和解碼器,它將每個task視作序列到序列的轉換/生成(比如,文字到文字,文字到影像或影像到文字的多模態任務)。Encoder-decoder模型通常用於需要內容理解和生成的任務如機器翻譯
T5由谷歌提出,該模型的目的是構建任務統一框架:將所有NLP任務都視為文字轉換任務
透過這樣的方式就能將NLP任務轉換為Text-to-Text形式,也就可以用同樣的模型,同樣的損失函式,同樣的訓練過程,同樣的解碼過程來完成所有NLP任務。
T5模型架構與訓練過程
T5模型結構與原始的Transformer基本一致,除了做了以下幾點改動:
-
採用了簡化版的Layer Normalization,去除了Layer Norm的bias;將Layer Norm放在殘差連線外面
-
位置編碼:T5使用了一種簡化版的相對位置編碼,即每個位置編碼都是一個標量,被加在logits上用於計算注意力權重。各層共享位置編碼,但是在同一層內,不同的注意力頭的位置編碼都是獨立學習的。
自監督預訓練
採用類似於Bert模型的MLM預訓練任務
多工預訓練
除了使用大規模資料進行無監督預訓練,T5模型還可以利用任務的標註資料進行有監督的多工預訓練,例如SQuAD問答和機器翻譯等任務
T5資料集與模型的特點
- T5 資料集
作者對公開爬取的頁面資料集Common Crawl進行過濾,去掉一些重複的、低質量的、看起來像程式碼的文字等,並且最後只保留英文文字,得到資料集 C4:the Colossal Clean Crawled Corpus - 模型的一些關鍵引數:
PS
-
什麼是序列到序列模型?
答:同時使用編碼器和解碼器,它將每個task視作序列到序列的轉換/生成 -
T5模型的核心架構?
答: Transformer -
T5的預訓練任務?
答: 採用類似於Bert模型的MLM預訓練任務和多工預訓練