ChatGPT 的進化史 — 從論文到實際應用的探索之路 (上)
大綱
▶︎ OpenAI-GPT系列的終極任務
▶︎ GPT3 是 GPT 系列在 LM 模型圈的一次大躍進
▶︎ InstructGPT & ChatGPT 的進化
▶︎ 從論文當中的學習與應用
▶︎ 後 ChatGPT 時代的應用+研究方向
▶︎ 參考資料們
此系列主要從論文筆記的角度出發,ChatGPT 並無 OpenAI 官方釋出的論文,僅能從網站了解模型訓練流程三步驟,李宏毅老師在 ChatGPT 可能是怎麼煉成的 — GPT社會化的過程指出:ChatGPT 跟他的前身 InstructGPT 有 87% 像,因此本系列會總結 InstructGPT 是怎麼訓練的,當中有哪些技術提升能夠幫助我們更會使用 Prompt,最後會奉上我所蒐集邁向 AI 溝通師之路的乾貨們。
由於篇幅過長,因此本系列拆為上下集,上集看完請繼續接著看下集唷 。
👉 ChatGPT 的進化史 — 從論文到實際應用的探索之路 (下)
先講結論:OpenAI 的終極目標
OpenAI 是一家 AI 研究機構,它的終極目標是創建「通用人工智慧」(Artificial General Intelligence, AGI )。
GPT ( Generative Pre-Trained Model ) 系列中的 ChatGPT 是一個生成式語言模型,它可以根據背後的機率分佈逐個生成單詞,生成與人類說話方式相似的文本。與 2018 年開始霸榜的 Transformer、BERT 不同的是,GPT 系列希望『直接』解下游任務,去掉特定下游任務需要的標注數據以及針對任務進行 fine-tuned。
在研發之路上,OpenAI 的信仰很強,從 2018 年 GPT1 的發表,中間一直是 以 BERT 為主流,直到 2022 年底一夕之間,以 ChatGPT 一舉走進大眾的生活(厲害的地方是它受到在商業圈被廣泛應用+討論)。GPT 採取的路線需要規模化+大量的數據與算力,李沐老師也提到,雖然 GPT 引用次數比 BERT 低 (~8K vs ~60K ; 2023/03),不代表它不好,正好相反,因為 GPT 要解的問題更大,所以它的技術實現比較難,學術界要做到 GPT3 or InstructGPT 的規模很難復現。
GPT-Style vs BERT
- 模型架構:都是基於 Transformer 的,但 GPT 只採用了 Transformer decoder (生成) 的部分,BERT 是基於 Encoder (編碼) 的部分,且改成雙向編碼 (Bidirectional Encoder) 。
- 訓練方式不同:GPT 模型是基於前面的文字序列來預測下一個單詞,它通過了解上下文來預測下一個可能的單詞。BERT 模型是訓練來預測一個句子中缺失的單詞,通過利用周圍的語境來推斷缺失單詞的意思。它更關注理解文本的意義。
在 ChatGPT出來以前,生成文本是 GPT 的強項、而理解文本是 BERT 的強項,但我們可以看到大型語言模型的能力,在參數量達到一定規模後,以生成文本見長的 GPT 也增長了他對文本的理解能力。
GPT3 是 GPT系列在大型語言模型的大躍進
GPT3 是一個大型語言模型,於 2020/05 發表。 (Paper: Language Models are Few-Shot learners)
模型參數量高達 1750 億,是當年大型語言模型 Turing NLG 的 10 倍,相當於是 2022 年地球總人口數的 22 倍 😳。(source: 聯合國,世界人口在 2022/11 達到 80 億)
- 訓練模型的算力很燒錢,不是一般開發者/公司能負擔的,根據估算用GPU / TPU 等顯卡上訓練出這個模型需要花 ~$12M 美金(換算後大約折合 3.6 億新台幣) ,自己造輪子不符合效益。
- 從 Modeler 的開發角度出發,很難把 GPT3 模型下載下來直接進行 fine-tuned,因為上一版本 GPT2 模型有15 億的參數量、模型大小約為 6GB;若以線性估算 GPT3 的模型大小可能超過 700GB。(但論文中也有一些 small, medium 等規模的模型,但其 generalization 的能力也就沒有最大的這個好)
Large Language Models (大型語言模型)是什麼?
以下來自 ChatGPT 老師的介紹與教導:
GPT3 怎麼被 train 的 ?
GPT3 want to solve downstream tasks directly without using lots of task-specific data with annotation; FT involves updating the weights of a pre-trained model by training on a supervised dataset specific to the desired task.
為了達到『通用』語言模型的目標,GPT3 希望直接解決多種的下游 NLP 任務們,訓練時不使用傳統的 Fine-Tuned 、也不倚賴特定任務的標注數據進行模型的參數更新。他選擇的是在 Model-Agnositic Meta Learning 的基礎之上,使用 In-Context Learning,並且搭配 Prompt Engineering 給模型提供一些特定的輸入提示 ( prompt ),來指導模型生成與這些提示相關的輸出。
Model-Agnositic Meta Learning
對於一個少樣本的任務來說,模型的初始化值非常重要,從一個好的初始化值作為起點,模型能夠往對的方向進行收斂,使得到的結果逼近全局最優解。直觀的理解,GPT3 用一組初始參數去學習多個任務,如果每個任務都學得好,則說明這組初始參數是一個不錯的初始化值,有利於模型在通用任務上的學習。outer-loop 是透過每一個送進去的 sequence 進行參數更新的迭代 (SGD — Stochastic Gradient Descent);inner-loop 則是透過在每一個 sequence 裡面進行 In-context learning 的學習,以方便模型在生成推理的時候,可以『快速適應或識別』所需的任務。
In-Context Learning
根據文本序列中前面出現過的單詞和語境來理解和預測後面生成的單詞,在上下文中進行學習與理解,可以幫助機器學習模型更好地理解自然語言,並提高其生成文本的準確性和連貫性。
Prompt Engineering
類似國小在寫照樣照句的時候,我們會被訓練如何發揮想像力做文字接龍,模型也在做類似的事情,想像你是主負責人,要叫你的機器助理幫你做事:
- (1) Few-shots learning:給予任務+若干例子,例如你說請幫我翻譯,由英文翻法文(任務說明) + 給了三個例子,接著第四個請模型翻譯,他通常就能知道這個任務要幹嘛。
- (2) One-shots learning: 給予任務+1個例子,請模型回答。
- (3) Zero-shots learning: 給予任務+0個例子,請模型直接回答。
其餘各方面就是規模化的提升:e.g. 模型大小、訓練數據數量級、還有餵進模型訓練時使用了更大的 batch_size + 更小的 learning rate 、每個輸入的文本序列 token 長度也提升到了 2048 ( ↔️ GPT2 是 1024 )。
GPT-3將文本序列的最大長度限制為2048個單詞,為了避免過長的文本序列對模型的計算造成過多的負擔,實際上,這個 2048並不是硬性限制,如果輸入的文本序列長度小於2048個單詞,模型會自動填充 0。如果長度大於2048個單詞,模型會將文本序列切分成多個長度為2048的子序列進行處理。
GPT3 在 42 個任務上(9大任務類型)的表現
在 In-context Learning 的方法訓練下,Few-shots > One-shot > Zero-shot;並且隨著模型參數越大,平均表現越好,但為了取得額外 20% Accuracy、需要增加 10 倍的模型參數,就看模型應用的業務價值是否值得。
接著我們來看看 GPT3 表現的比較好的任務:
- 新文章生成:縱軸是人類判斷文章是由 GPT3 生成與否的機率%,越接近~50%就代表人類越判斷不出來文章是由 GPT3 生成出來的。
- 新單字的運用:Prompt 輸入的是一個 ”新單字” + 造句;接著描述一個目前不存在的新字詞 “fradudddle” 是一個類似跳上跳下的活動,為這個單詞造句。
- 算術問題:在 2 位數加減法與 3 位數減法表現得較好,其他的四位數以上的問題準確率甚至都不及格。
與 SOTA 相比,表現較差的任務是 NLI ,原因也是生成式模型是根據當前以前的文本+模型自動生成的下文在生成整段內容,NLI 的任務上下文有時是矛盾 or 中立的時候,生成式語言模型就會難以生成通順且連貫的語境。
另一部分,研究者發現餵給 GPT3 的訓練資料存在 Data Contamination 的問題,也就是訓練資料摻雜了 NLP 公開測試集。但是重新訓練這個 1750 億參數的大型語言模型並不 work,於是他們在 evaluation 的階段去重新衡量測試集:橫軸是資料乾淨的程度,縱軸是模型表現準確率的變化,大部分的資料重新衡量後,其實準確率的變動都在正負 0%~5%內。(李宏毅老師還特別提到:天啊 modeler 發現這個 bug 的時候壓力該有多大啊!!! 我心裡OS: 同感 😳)