GPT-1
簡介
2018年6月,OpenAI公司發表了論文"Improving Language Understanding by Generative Pretraining"(用生成式預訓練提高模型的語言理解能力), 推出了具有 1.17億個引數的GPT-1(Generative Pre-training,生成式預訓練)模型。
GPT-1 採用 傳統的語言模型方法進行預訓練,即使用單詞的上下文來預測單詞,使得GPT更擅長自然語言生成任務(NLG), 而BERT更擅長處理自然語言理解任務(NLU)
模型架構
下圖中間的就是GPT-1:
從上圖可知,GPT採用的是 單向Transformer模型。例如給定一個句子\([u_1,u_2, ..., u_n]\),GPT-1在預測單詞\(u_i\)的時候,只會利用\([u_1, u_2, ..., u_{n-1}]\) 的資訊,而BERT會同時利用上下文的資訊\([u_1, u_2, ..., u_{(i-1)}, u_{(i+1)},.., u_n]\)
訓練過程
GPT-1的訓練包括兩階段過程:1. 無監督的預訓練語言模型;2.有監督的下游任務fine-tunning
無監督的預訓練語言模型
給定句子\(U=[u_1, u_2, ..., u_n]\),GPT訓練語言模型時的目標是 最大化下面的似然函式:
上述公式含義即:預測每個詞\(u_i\) 的機率,這個機率是基於它前面\(u_{i-k}\)到\(u_{i-1}\),以及模型\(\theta\)
這裡的k表示上文的視窗大小,理論上,k取得越大,模型所能獲取的上文資訊越充足,模型的能力越強。
GPT-1是一個 單向語言模型,模型對輸入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-1語言模型是單向的
- 針對不同的任務,需要不同資料集進行模型微調,相對比較麻煩
PS:
- GPT-1的模型架構?
答:Transformer的Decoder模組(去掉中間第二個子層) - GPT-1預訓練任務?
答:1.無監督預訓練;2.有監督任務微調 - GPT-1模型基本引數?
答: 12層,12個head,768維,引數量1.17億
GPT-2
簡介
2019年2月,OpenAI推出了GPT-2,同時,發表了該模型的論文"Language Model are Unsupervised Multitask Leaners"(語言模型是無監督的多工學習者)
相比於GPT-1,GPT-2突出的思想為多工學習,其目標旨在僅採用無監督預訓練得到一個泛化能力更強的語言模型,直接應用到下游任務中。 GPT-2並沒有對GPT-1的網路結構進行過多的創新與設計,而是使用了更多的網路引數與更大的資料集:最大模型共計48層,引數量達15億
GPT-2模型架構
在模型方面,相對與GPT-1,GPT-2做了微小的改動:
-
LN層被放置在Self-Attention層和Feed Forward層前,而不是像原來那樣後置(目的:隨著模型層數不斷增加,梯度消失和梯度爆炸的風險越來越大,這些調整能夠減少預訓練過程中各層之間的方差變化,使梯度更加穩定)
-
在最後一層Transformer Block後增加了LN層
-
輸入序列的最大長度從512擴充到1024
GPT-2 訓練核心思想
GPT-2模型的學習目標:使用無監督的預訓練模型做有監督的任務
GPT-2模型目的:模型從大規模資料中學到的能力能夠直接在多個任務之間進行遷移,而不需要額外提供特定任務的資料進行Fine-Tuning
因此,GPT-2提出了新的觀點:zero-shot,透過zero-shot,在遷移到其他任務上的時候不需要額外的標註資料,也不需要額外的模型訓練
GPT-2的訓練只包括無監督的預訓練過程,和GPT-1第一階段訓練一樣,也屬於一個單項語言模型:
- 語言模型其實也是在給序列的條件機率建模,即\(p(s_n|s_1, s_2, ..., s_{n-1})\)
在zero-shot的設定下,不同任務的輸入序列應該與訓練時見到的文字長得一樣,也就是以自然語言的形式去作為輸入,例如,下面兩個任務的輸入序列是這樣改造的:
機器翻譯任務: translate to french,{english text}, {french text}
閱讀理解任務: answer the question, {document}, {question}, {answer}
為什麼上述輸入序列的改造是有效的?或者說為什麼zero-shot是有效的?這裡引用原文的一句話:
Our approach motivates building as large and diverse a dataset as possible in order to collect natural language demonstrations of tasks in as varied of domains and contexts as possible.
大致意思:從一個儘可能大且多樣化的資料集中一定能收集到不同領域不同任務相關的自然語言描述示例。
綜上,GPT-2的核心思想:當模型的容量非常大且資料量足夠豐富時,僅僅靠語言模型的學習便可以完成其他有監督學習的任務,不需要再下游任務微調。
GPT-2的資料集
- 為了保證zero-shot的效果,必須要足夠大且覆蓋面廣
- GPT-2專門爬取了大量的網路文字資料,GPT-2的文章取自Reddit上高讚的文章,命名為WebText
- 資料集共有約800萬篇文章,累積體積約40G
- 為了避免和測試集的衝突,WebText移除了涉及Wikipedia的文章
GPT-2模型的特點
與GPT-1的區別:
-
- 主推zero-shot,而GPT-1為pre-train + fine-tuning
-
- 訓練資料規模更大,GPT-2為800W 文件 40G, GPT-1為5GB
-
- 模型大小,GPT-2最大15億引數,GPT-1 為1 億引數
- 4。 模型架構調整,層歸一化
-
- 訓練引數,batch_size 從 64 增加到 512,上文視窗大小從512 增加到 1024
優點:
- 文字生成效果好,僅透過zero-shot學習,就有7個任務超過之前sota的方法
- 海量資料和大量引數訓練出來的詞向量有遷移到其他類別任務中而不需要額外訓練
缺點:
- 無監督學習能力有待提升
- 有些任務上的表現不如隨機
GPT-2表明隨著模型容量和資料量的增大,其潛能還有進一步開發的空間。也正是基於這個思想,誕生了GPT-3
PS:
-
GPT-2模型架構?
答:相較於GPT-1做了較小的改動:1) pre_LayerNorm;2) 最後一層加入LN層;3) 序列長度擴大到1024 -
GPT-2預訓練任務?
答:無監督預訓練 -
GPT-2提出的新思想?
答:zero-shot,零樣本學習,達到開箱即用的效果
GPT-3
簡介
2020年5月,OpenAI釋出了GPT-3,同時發表論文"Language Models are Few-Shot Learner"《小樣本學習者的語言模型》
GPT-3提出的核心觀點:Few-Shot思想
相比GPT-2的Zero-Shot,需要使用少量樣本在下游任務中去做微調,從而讓模型給出更準確的答案。
GPT-3模型架構
GPT-3不是一個單一的模型,而是一個模型系列。系列中的每個模型都有不同數量的可訓練引數。下表顯示了每個模型、體系結構及其對應的引數:
在模型結構上,GPT-3延續使用GPT模型架構,但引入了Sparse Transformer中的Sparse Attention模組(稀疏注意力)
Sparse Attention與傳統的Self-Attention(稱為dense Attention)的區別在於:
- dense Attention:每個token之間兩兩計算Attention,複雜度\(O(n^2)\)
- sparse attention: 每個token 只與其他token的一個子集計算Attention,複雜度\(O(n*logn)\)
具體來說,Sparse Attention除了相對距離不超過k亦即相對距離不超過k,2k,3k, ..., 的token,其他所有的token的注意力都設為0,如下圖所示:
使用sparse attention的好處主要有:
- 減少注意力層的計算複雜度,節約視訊記憶體和耗時,從而能夠處理更長的輸入序列
- 具有 "區域性緊密相關和遠端稀疏相關"的特性,對於距離較近的上下文關注更多,對於距離較遠的上下文關注較少
最大版本GPT-3 175B或"GPT-3" 模型具有175個B引數、96層的多頭Transformer、Head size為96、詞向量維度為12288、文字長度大小為2048
GPT-3 訓練核心思想
GPT-3 模型訓練的思想與GPT-2的方法相似,去除了fine-tune過程,只包括預訓練過程,不同只在於採用了引數更多的模型、更豐富的資料集和更長的訓練的過程
但 GPT-3 模型在進行下游任務評估和與預測時採用了三種方法:Few-shot、One-shot、Zero-shot
其中 Few-Shot、One-Shot 也被稱之為情境學習(in-context learning,也可稱為提示學習)。
情景學習理解:在被給定的幾個任務示例或一個任務說明的情況下,模型應該能透過簡單預測以補全任務中其他的例項,即情境學習要求預訓練模型要對任務本身進行理解
In-context learning核心思想在於 透過少量的資料尋找一個合適的初始化範圍,是的模型能夠在有限的資料集上快速你和,並獲得不錯的效果。
以"英語到法語的翻譯任務"為例,對比傳統的微調策略和GPT-3三種情境學習方式:
雖然in-context learning與fine-tuning一樣都需要一些有監督標註資料,但兩者的區別在於:
- fine-tuning基於標註資料對模型引數進行更新,而In-context learning使用標註資料時不做任何的梯度回傳,模型引數不更新
- In-context learning 依賴的資料量(10 ~ 100)遠遠小於fine-tning一般的資料量
GPT-3透過大量下游任務實驗驗證:few-shot效果最佳,one-shot效果次之,zero-shot效果最差
GPT-3資料集
一般來說,模型的引數越多,訓練模型所需要的資料就越多,GPT-3共訓練了5個不同的語料大約45TB的文字資料。
不同資料的介紹:
- Common Crawl語料庫來自網路爬蟲中的資料,如網頁資料等
- WebText2 是來自具有3+ upvotes的帖子的所有出站Reddit連結的網頁文字
- Books1 和Books2是兩個基於網際網路的圖書語料庫
- 英文維基百科頁面 也是訓練語料庫的一部分
GPT-3模型的特點
與GPT-2的區別:
- 效果上,超出了GPT-2非常多,能生成人類難以區分的新聞文章
- 主推few-shot,相比於GPT-2的zero-shot,具有很強的創新性
- 模型結構略微變化,具有sparse attention模組
- 海量訓練語料,45TB(清洗後570GB),相比於GPT-2的40GB
- 海量模型引數,最大模型為1750億,GPT-2最大為15億引數
GPT-3 模型的特點
優點:
- 整體上,GPT-3在zero-shot或one-shot設定下能取得尚可的成績,在few-shot設定下有可能超過基於fine-tunel的SOTA模型
- 去除了fine-tuning任務
缺點: - 由於40TB海量資料的存在,很難保證GPT-3生成的文章不包含一些非常敏感的內容
- 對於部分任務比如:“填空型別”等,效果具有侷限性
- 當生成文字長度較長時,GPT-3可能重複生成一段話,前後矛盾,邏輯銜接不好等
- 陳本太大
PS:
-
GPT-3模型架構?
答:和GPT-2基本一致,提出了sparse attention -
GPT-3預訓練任務?
答:無監督預訓練 -
GPT-3提出的新思想?
答:ICL:Few-shot、One-shot、zero-shot
ChatGPT
介紹
ChatGPT是一種基於GPT-3的聊天機器人模型,它旨在使用GPT-3的語言生成能力來與使用者進行自然語言對話。例如,使用者可以向ChatGPT傳送資訊,然後ChatGPT會根據資訊生成一條回覆
GPT-3是一個更大的自然語言處理模型,而ChatGPT則是使用GPT-3來構建的聊天機器人,他們之間的關係是ChatGPT依賴於Gpt-3的語言生成能力來進行對話
注:目前基於ChatGPT的論文並沒有釋出,下面是基於OpenAI官網的介紹對其原理進行解析:
ChatGPT原理
原始的 GPT-3 就是能力非一致模型, 類似GPT-3 的大型語言模型都是基於來自網際網路的大量文字資料進行訓練, 能夠生成類似人類的文字, 但它們可能並不總是產生符合人類期望的輸出.
ChatGPT 為了解決模型的不一致問題, 使用了人類反饋來指導學習過程,對其進行了進一步訓練.所使用的具體技術就是強化學習(RLHF)
強化學習
理解強化學習基本要素,這裡以flappy bird為代表,講解強化學習的基本要素:
如何讓AI實現自動打遊戲?
ChatGPT強化學習步驟
從人類反饋中進行強化學習,該方法總體包括三個步驟:
-
- 監督學習(SFT 模型), 預訓練的語言模型在少量已標註的資料上進行調優, 以學習從給定的 prompt 列表生成輸出的有監督的策略
-
- 訓練獎勵模型(reward): 標註者們對相對大量的 SFT 模型輸出進行收集和排序, 這就建立了一個由比較資料組成的新資料集. 在此資料集上訓練新模型, 被稱為訓練獎勵模型(Reward Model, RM)
-
- 強化學習(PPO演算法): 對RM 模型用於進一步調優和改進 SFT 模型, PPO 輸出結果的是策略模式
步驟1,只進行一次,步驟二和步驟三可以持續重複執行
- 強化學習(PPO演算法): 對RM 模型用於進一步調優和改進 SFT 模型, PPO 輸出結果的是策略模式
監督學習
工作原理:
訓練獎勵模型
獎勵模型的目的是為 SFT 模型輸出進行打分, 代表這些輸出對於人類來說可取程度有多大. 即模仿人類偏好的系統.
強化學習
強化學習被應用於透過最佳化 RM 模型來調優 SFT 模型. 所使用的特定演算法稱為近端策略最佳化(PPO).
ChatGPT特點
特點
- 回答理性又全面,ChatGPT更能做到多角度全方位回答
- 降低學習成本,可以快速獲取問題答案
缺點
- 由於ChatGPT服務不穩定
- 對於部分任務比如:查詢某語言系統關鍵字等,會給出沒有意義的答案
PS:
- ChatGPT模型原理?
答:有監督的微調 + 獎勵模型 + 強化學習 - 強化學習的關鍵資訊?
答:1. 一種機器學習方法;2. 關注智慧體和環境的互動;3. 目標追求最大化