跳轉到

2020 - Brown GPT-3(規模就是能力)#

案件摘要#

2020 年,Tom Brown 等 31 人(OpenAI)在 NeurIPS 發表 Language Models are Few-Shot Learners,發表 GPT-3:

\[ \boxed{\text{1750 億參數的 Transformer——只靠「看範例」就能學新任務}} \]

三大驚奇: - 規模:GPT-2 是 15 億參數,GPT-3 是 1750 億(放大 116 倍); - in-context learning(上下文學習):不更新任何權重,只在提示詞裡給幾個範例——

\[ \text{zero-shot(零範例)} \to \text{one-shot(一個範例)} \to \text{few-shot(幾個範例)} \to \text{準確率飆升}. \]
  • 訓練目標不變:仍是 2018 年 GPT-1 的自迴歸語言模型:
\[ P(x) = \prod_t P(x_t \mid x_{<t}) \quad\text{(預測下一個詞)}. \]

同一個目標、更大的規模、全新的能力—— 這是「規模法則(scaling laws)」時代的開端, 兩年後變成了 ChatGPT(見 2022-ChatGPT大型語言模型.md)。

前因 -- 為什麼會有這個案子#

  • Transformer 解碼器的王朝(2017–2019): 2017 年 Transformer(見 2017-瓦茲瓦尼Transformer.md)問世後, OpenAI 選擇了解碼器路線(自迴歸,預測下一個詞):
\[ \text{GPT-1(2018,1.17 億)} \xrightarrow{} \text{GPT-2(2019,15 億)} \xrightarrow{} \text{GPT-3(2020,1750 億)}. \]

GPT-2 的震撼(2019):15 億參數的 GPT-2 已能寫出「像樣」的段落, OpenAI 當時以「太危險」為由分階段釋出模型——媒體譁然。 - BERT 的分歧(2018): Google 的 BERT(2018) 走編碼器路線(遮罩語言模型,完形填空), 在 NLP 基準上橫掃——2019 年的共識是「BERT 式雙向最好」。

\[ \text{BERT:雙向填空} \quad vs \quad \text{GPT:單向生成}. \]

GPT-3 的回答:生成式 + 規模 + in-context learning——單向也能贏。 - Kaplan 規模法則(2020): OpenAI 的 Jared Kaplan 等同年發表 Scaling Laws for Neural Language Models: 損失隨規模按冪律平滑下降:

\[ L(N, D) \approx \left(\frac{N_c}{N}\right)^{\alpha} + \left(\frac{D_c}{D}\right)^{\beta} \]
  • \(N\) :參數量、 \(D\) :資料量、 \(\alpha \approx 0.076\) 、 \(\beta \approx 0.095\) (語言模型的實測值);
  • 冪律是跨越六個數量級的實測規律——規模與資料加大,損失可預測地下降;
  • GPT-3 是這條冪律的「驗證實驗」——先把規模推到極限,再看能力躍升。
  • 微調的瓶頸: 2019 年的主流做法是「預訓練 + 每個任務微調(fine-tuning)」—— 每個新任務都要標註資料 + 更新權重,成本高、泛化差。
\[ \text{fine-tuning:每任務一套權重} \xrightarrow{\text{GPT-3:一組權重 + 提示範例}} \text{範例即學習}. \]

Brown 等的洞察:語言模型在訓練時早已「看過」無數任務的形式—— 範例(demo)本身就是一種學習,不需要動權重。

線索與推理 -- 數學式、程式、理論#

第一條線索:自迴歸語言模型#

GPT 的訓練目標(從 GPT-1 到 GPT-3 都不變):

\[ P(x) = \prod_{t=1}^{T} P(x_t \mid x_{<t}) \]
  • 鏈式法則:一句話的機率 = 每個詞「給定前文」的機率連乘;
  • 訓練:在海量語料上最大化 \(\sum_x \log P(x \mid x_{<t})\) —— 就是「預測下一個詞」;
  • 生成:逐詞取樣 \(x_t \sim P(x_t \mid x_{<t})\) ,邊生成邊接回去。
\[ \boxed{\text{預測下一個詞 + 1750 億參數 = 看起來像「理解」}} \]

第二條線索:in-context learning(上下文學習)#

GPT-3 的三種模式(權重完全凍結): 1. zero-shot:只給指令「英譯法:cheese =>」; 2. one-shot:給一個範例「sea => mer, cheese =>」; 3. few-shot:給多個範例後再問——準確率隨範例數上升。 數學直覺:條件機率的條件集合變大了——

\[ P(\text{答} \mid \text{指令}) \quad\text{vs}\quad P(\text{答} \mid \text{指令}, \text{範例}_1, \dots, \text{範例}_k) \]

範例改變了條件分佈——模型在推理時「現學」任務的模式, 彷彿在上下文中做了隱式的梯度下降(後續研究:「implicit meta-learning」)。

第三條線索:規模法則的冪律#

Kaplan(2020)的實測:測試損失 \(L\) 對參數 \(N\) 、資料 \(D\) 、算力 \(C\) 都是冪律:

\[ L(N) \propto N^{-\alpha}, \quad L(D) \propto D^{-\beta}, \quad L(C) \propto C^{-\gamma_0} \]
  • 冪律的意義:在對數-對數圖上是直線—— 規模放大 10 倍,損失可預測地下降固定比例;
  • 投資的指南針:給定算力預算,如何分配模型大小與資料量(Kaplan 給出比例; 2022 年 Chinchilla 修正:資料要與參數等比例放大);
  • GPT-3 的賭注:1750 億參數 + 3000 億 token——賭規模能換來質變(few-shot 能力)。

Python:n-gram 語言模型(玩具語料的訓練與生成)#

# 純 Python 實作:n-gram 語言模型(自迴歸 P(x_t | x_<t) 的玩具版)
import random, math

random.seed(42)

# 玩具語料:重複結構的短句(模擬語料的模式)
corpus = [
    "貓 喝 牛奶 .",
    "狗 喝 水 .",
    "貓 追 狗 .",
    "狗 追 貓 .",
    "貓 睡 覺 .",
    "狗 睡 覺 .",
    "貓 吃 魚 .",
    "狗 吃 骨頭 .",
] * 40   # 模擬「海量」語料

# 建立詞表
words = sorted(set(w for s in corpus for w in s.split()))
vocab = {w: i for i, w in enumerate(words)}
V = len(vocab)
print("玩具語料的 n-gram 語言模型(bigram)")
print(f"詞彙數 V = {V}\n")

# 訓練:統計 bigram 計數(最大似然 = 數頻率)
counts = [[0]*V for _ in range(V)]
totals = [0]*V
for s in corpus:
    toks = s.split()
    for a, b in zip(toks, toks[1:]):
        counts[vocab[a]][vocab[b]] += 1
        totals[vocab[a]] += 1

def cond_prob(a, b):
    """P(b | a) = count(a,b) / count(a)(加一平滑)"""
    return (counts[vocab[a]][vocab[b]] + 1) / (totals[vocab[a]] + V)

# 檢查條件機率(語料模式的學習結果)
print("學到的條件機率(加一平滑):")
for a, b in [("貓","喝"), ("狗","喝"), ("貓","追"), ("貓","魚"), ("狗","骨頭"), ("貓","骨頭")]:
    print(f"  P({b} | {a}) = {cond_prob(a,b):.4f}")

def log_likelihood(s):
    toks = s.split()
    ll = 0.0
    for a, b in zip(toks, toks[1:]):
        ll += math.log(cond_prob(a, b))
    return ll

print(f"\n語料句子「貓 喝 牛奶 .」的對數似然 = {log_likelihood('貓 喝 牛奶 .'):.4f}")
print(f"亂語句子「牛奶 追 覺 .」的對數似然 = {log_likelihood('牛奶 追 覺 .'):.4f}(更低 = 模型學出模式)")

# 生成:逐詞取樣(自迴歸:邊生成邊接回去)
def generate(start, max_len=6):
    toks = [start]
    for _ in range(max_len):
        cur = toks[-1]
        probs = [cond_prob(cur, w) for w in words]
        s = sum(probs)
        r, c = random.random(), 0.0
        nxt = words[-1]
        for w, p in zip(words, probs):
            c += p/s
            if r < c:
                nxt = w
                break
        toks.append(nxt)
        if nxt == ".":
            break
    return " ".join(toks)

print("\n取樣生成的句子:")
for i in range(8):
    print(f"  {i+1}. {generate('貓' if i % 2 == 0 else '狗')}")
輸出:
玩具語料的 n-gram 語言模型(bigram)
詞彙數 V = 12

學到的條件機率(加一平滑):
  P(喝 | 貓) = 0.1934
  P(喝 | 狗) = 0.1934
  P(追 | 貓) = 0.1934
  P(魚 | 貓) = 0.0047
  P(骨頭 | 狗) = 0.0047
  P(骨頭 | 貓) = 0.0047

語料句子「貓 喝 牛奶 .」的對數似然 = -2.6889
亂語句子「牛奶 追 覺 .」的對數似然 = -8.6004(更低 = 模型學出模式)

取樣生成的句子:
  1. 貓 睡 喝 水 .
  2. 狗 睡 覺 喝 水 .
  3. 貓 .
  4. 狗 吃 骨頭 .
  5. 貓 吃 魚 .
  6. 狗 吃 魚 喝 .
  7. 貓 追 貓 吃 骨頭 追 狗
  8. 狗 .

結案 -- 後果與影響#

  • in-context learning 的震撼(2020):
\[ \boxed{\text{不動權重,只給範例——「現場學習」新任務}} \]

翻譯、問答、算術、常識推理——few-shot 準確率隨範例數與規模同步上升—— 這是 AI 史上第一次「規模帶來質變」的實證。 - 規模法則主導十年(2020–):

\[ L(N) \propto N^{-\alpha} \quad\Longrightarrow\quad \text{「再大一點,再好一點」} \]
  • 2022 Chinchilla(DeepMind):修正 Kaplan——資料要等比例放大 (700 億參數 + 1.4 兆 token 勝過 2800 億參數 + 3000 億 token);
  • 2020–2025,算力軍備競賽:訓練成本從百萬美元級漲到十億美元級;
  • 規模法則成為 AI 公司的「投資指南針」。
  • ChatGPT 前夜(2022): GPT-3 證明了能力,但不聽話——提示詞要技巧(prompt engineering)、 會胡說八道(幻覺)。
\[ \text{GPT-3(2020):能力} \xrightarrow{\text{RLHF(2022)}} \text{ChatGPT:聽話的助理}. \]

2022 年 11 月 ChatGPT 上線(見 2022-ChatGPT大型語言模型.md)—— 兩個月破億使用者。 - 工程與社會的漣漪: - 2021 Codex(GPT-3 的代碼版)→ GitHub Copilot——AI 寫代碼的時代; - 2022 DALL·E 2 / Whisper——多模態的擴張(見 2022-擴散模型影音生成.md); - 幻覺(hallucination)與偏見成為新案件——GPT-3 會「一本正經地胡說」。 - 歷史定位:GPT-3 是「規模賭注」的勝利—— Brown 等 31 人證明了:同一個目標(預測下一個詞),放大 116 倍,質變出現;

\[ \text{GPT-1(2018)} \xrightarrow{} \text{GPT-2(2019)} \xrightarrow{} \text{GPT-3(2020)} \xrightarrow{} \text{ChatGPT(2022)}. \]

「預測下一個詞」預測出了一個時代。

關鍵人物與文獻#

  • T. B. Brown 等 31 人:Language Models are Few-Shot Learners(NeurIPS 2020)。
  • J. Kaplan:Scaling Laws for Neural Language Models(2020)——規模法則。
  • A. Radford:GPT-1(2018)、GPT-2(2019)——王朝的前兩代。
  • J. Devlin:BERT(2018)——分歧路線的對照。
  • A. Vaswani 等:Transformer(2017)——GPT-3 的骨架(見 2017-瓦茲瓦尼Transformer.md)。
  • T. Hoffmann:Chinchilla(2022)——規模法則的修正。
  • 相關案件:2017-瓦茲瓦尼Transformer.md、2022-ChatGPT大型語言模型.md、2022-擴散模型影音生成.md、../資訊科學/1936-圖靈機.md。