GPT-3 可以將12萬字小說濃縮成200字摘要,還寫了一篇有關於自己的論文,什麼是 GPT-3? 先來看看它怎麼用文字自動生成 CNN 的程式碼。
ーー 作者稱這是 No-Code(無程式碼)的開始。出處
除了寫程式,GPT-3 還可以回答,翻譯,畫圖,創作新曲...。
這個 GPT-3 就是今天要介紹的 NLP 預訓練模型。
GPT-3 已經有一點 強AI(AGI) 的味道,不再只是一個好用的工具,可以通用的做很多事情。
之前有提過轉移學習就是將大規模資料預先訓練好的模型,也能根據任務目標轉移到不同種類的小規模資料上,例如圖像分類的 ResNet18,VGG16 等。自然語言處理(NLP)也能做到一樣的事情,Day 18 提過的詞嵌入 ElMo 就是預訓練好的模型。
而今天要介紹的 GPT 系列和 BERT 則是透過 Transformer,不只做預訓練,還可以在這個模型的基礎上加上微調(Fine Tuning)達到轉移學習。
2018年 6月由 Open AI 發表的預訓練模型,架構採用 Transformer 的 解碼器部分。GPT 主要是透過大規模的語料庫做語言模型的預訓練(不須給標籤的無監督式),再透過微調(監督式)做轉移學習。還記得解碼器嗎,就是透過輸入逐一生成輸出,所以叫做生成式預訓練。
ーー左:預訓練,右:微調。出處:GPT 論文
上圖左邊是預訓練的架構,使用 Transformer 的解碼器。
上圖右邊透過一樣架構再加上微調可以運用在不同的任務上,論文針對下面幾個監督式任務作測試:
這些任務稱為語言理解(Natural Language Understanding,NLU)任務,透過語言理解評價(GLUE,General Language Understanding Evaluation) 的資料集做基準評分。
GPT 整體而言還不錯,但高興沒多久隨即被同年10月發表的 BERT 刷榜刷下來。
Google 開發的預訓練模型, 如同字面上所寫,採用 Transformer 的編碼器,和 GPT一樣也是採用預訓練 + 微調的方式,不過和 GPT 的單向不同,是採用雙向的架構。
ーー出處:BERT 論文
預訓練由下面兩個任務執行。
Mask LM(Masked Language Model)
做單詞的雙向學習。
把某個單詞用遮罩遮起來預測該單字(類似填空)。需要知道該單詞的前後文才有辦法做正確預測。
我去 [Mask] 加了汽油
根據前後文作預測,[Mask] 的答案是加油站。
NSP(Next Sentence Prediction)
學習句子層級的相關性,判斷兩個句子是不是連續的句子。上圖的 [CLS] 表示句子起始位置,[SEP] 為句子交接處。
當時 BERT 的成績非常漂亮,刷新了 11 項 NLP 任務的 SOTA 結果(state-of-the-art result,該任務當下最好的性能),包含語言理解的 GLUE,史丹佛的 SQuAD 問答,和 SWAG 常識推論等。
在 BERT 論文的有效因子比對中,可以看到雙向學習比單向學習提升很多(紅框),而 NSP 對特定任務上也有提升的幫助(綠框)。
ーー原圖出處:BERT 論文
大致上理解了 BERT 和 GPT 的運作,這邊做個兩邊差異的小總結。
ーー 左: BERT(Self-Attention),右:GPT (Msked Self-Attention)。出處:The Illustrated GPT-2
BERT 會將整個輸入做自注意,而因為用了雙向,在語意理解處理上更加突出。而 GPT 為了能夠更加適應各種任務(泛化能力,Generalization)使用 Mask 掩蓋了未來的訊息。在生成方面比較突出。
2019年2月發布的 GPT-2,其核心思想如同論文的標題:「語言模型是非監督多工學習者」,試著驗證只要非監督式的預訓練範圍夠大,資料夠豐富,就可以遷移到各種任務上而不需要額外的訓練。因此 GPT-2 在 GPT 基礎上加大了非監督式學習的規模,並且試著不做微調,在完全零樣本(Zero shot)也就是第一次看到的資料上也得到了不錯的準確率。
比如說預訓練完的模型針對第一次出現的問題
"Who is the founder of the ubuntu project?"(ubuntu 專案的創始人是誰?)
可以正確地回答 "Mark Shuttleworth"
而 GPT-2 在短文生成方面表現也十分出色,具體的手法如下:
ーー 機器人第一法則「機器人不得傷害人類」(A robot may not injure a human being),出處:The Illustrated GPT-2
上圖的範例,GPT-2 藉由輸入一次生成一個單詞,生成的單詞會加到原本的輸入當作新的輸入再預測下一個最有可能的單詞。這種手法叫做自循環(Auto-regression)。
所以只要我們給一個起頭,剩下的 GPT-2 會從他學習完的單詞(50,257 個)自動把剩下的部分完成。
GPT-2 為了能夠強化在各種任務上的通用能力,因此所有 NLP 任務都像上面範例一樣一次只輸出一個詞,而為了分辨是何種任務會添加一些描述,譬如文本分類任務,會在文章結尾加上「TL;DR:」作為識別,問答則是結尾有問號 「?」。
附帶一提,GPT-2 在 GPT 的架構上調整了正規化的順序和一些參數設定,實際上沒有太創新的更動。藉由 GPT-2 已經證實規模加大的預訓練模型是可行的,也因此有了 GPT-3 的誕生。
2020年5月發布的 GPT-3 就非常簡單粗暴,直接將錢砸下去把規模堆上去,有錢人就是任性。GPT-3的規模誇張地大,連論文作者的人數也從一開始的 4 位暴增到 31 位。1750 億的參數,45 TB的資料量,訓練費用 1200 萬美金,這個花費成本多到開發者發現一個 bug 都沒錢重新訓練的地步。
ーー 因為成本考量所以不能重新訓練,出處:GPT-3 論文
項目 | GPT | GPT-2 | GPT-3 |
---|---|---|---|
作者數 | 4 | 6 | 31 |
參數量 | 1.17 億 | 15 億 | 1750 億 |
預訓練資料量 | 5 GB | 40 GB | 45 TB |
論文核心 | 預訓練生成 | 泛化、非監督式 | Few-Shot |
※ GPT-3 訓練花了約 1200萬美金,附帶一提 BERT 的參數量是3億。 |
關於開發 GPT 系列的 OpenAI ,雖然最初是非營利組織,但是實在太燒錢了,經由一次公司轉型加上微軟投資的10億美元,目前已經變成混合營利和非營利性質的企業。
2020年7月,OpenAI 開放了商用的 API(應用程式介面),讓更多程式開發者使用 GPT-3 的預訓練模型,至此許多不可思議的應用就此衍生了。
2021年11月取消了訪問 API 的等候名單制度,現在已經可以直接到 OpenAI 申請 API-Key,透過 API-Key 的權限可以直接寫程式做測試。
而透過 OpenAI 的 Playground 可以不寫程式直接感受其威力,下面隨意作測試,基本上都是1秒內回應:
最後讓我們看一些其他有趣的應用。
生成一個網頁界面,並貼心附上 Html 碼給你(比方說生成一個像西瓜的按鈕)
ーー 出處
生成數學式
ーー 出處
透過 API 開發的 google 表格的 gpt3 函式,雖然是同一個函式卻會根據給的資料回饋出相對應的資訊:
12/6補充: 12/1 OPEN AI 發布了 ChatGPT,變成了專門的奇摩知識家 XD,詳細測試可以看這篇 當魔法成為現實 - ChatGPT 的詠唱咒文