2020 - Brown GPT-3(規模就是能力)#
案件摘要#
2020 年,Tom Brown 等 31 人(OpenAI)在 NeurIPS 發表 Language Models are Few-Shot Learners,發表 GPT-3:
三大驚奇: - 規模:GPT-2 是 15 億參數,GPT-3 是 1750 億(放大 116 倍); - in-context learning(上下文學習):不更新任何權重,只在提示詞裡給幾個範例——
- 訓練目標不變:仍是 2018 年 GPT-1 的自迴歸語言模型:
同一個目標、更大的規模、全新的能力—— 這是「規模法則(scaling laws)」時代的開端, 兩年後變成了 ChatGPT(見 2022-ChatGPT大型語言模型.md)。
前因 -- 為什麼會有這個案子#
- Transformer 解碼器的王朝(2017–2019): 2017 年 Transformer(見
2017-瓦茲瓦尼Transformer.md)問世後, OpenAI 選擇了解碼器路線(自迴歸,預測下一個詞):
GPT-2 的震撼(2019):15 億參數的 GPT-2 已能寫出「像樣」的段落, OpenAI 當時以「太危險」為由分階段釋出模型——媒體譁然。 - BERT 的分歧(2018): Google 的 BERT(2018) 走編碼器路線(遮罩語言模型,完形填空), 在 NLP 基準上橫掃——2019 年的共識是「BERT 式雙向最好」。
GPT-3 的回答:生成式 + 規模 + in-context learning——單向也能贏。 - Kaplan 規模法則(2020): OpenAI 的 Jared Kaplan 等同年發表 Scaling Laws for Neural Language Models: 損失隨規模按冪律平滑下降:
- \(N\) :參數量、 \(D\) :資料量、 \(\alpha \approx 0.076\) 、 \(\beta \approx 0.095\) (語言模型的實測值);
- 冪律是跨越六個數量級的實測規律——規模與資料加大,損失可預測地下降;
- GPT-3 是這條冪律的「驗證實驗」——先把規模推到極限,再看能力躍升。
- 微調的瓶頸: 2019 年的主流做法是「預訓練 + 每個任務微調(fine-tuning)」—— 每個新任務都要標註資料 + 更新權重,成本高、泛化差。
Brown 等的洞察:語言模型在訓練時早已「看過」無數任務的形式—— 範例(demo)本身就是一種學習,不需要動權重。
線索與推理 -- 數學式、程式、理論#
第一條線索:自迴歸語言模型#
GPT 的訓練目標(從 GPT-1 到 GPT-3 都不變):
- 鏈式法則:一句話的機率 = 每個詞「給定前文」的機率連乘;
- 訓練:在海量語料上最大化 \(\sum_x \log P(x \mid x_{<t})\) —— 就是「預測下一個詞」;
- 生成:逐詞取樣 \(x_t \sim P(x_t \mid x_{<t})\) ,邊生成邊接回去。
第二條線索:in-context learning(上下文學習)#
GPT-3 的三種模式(權重完全凍結): 1. zero-shot:只給指令「英譯法:cheese =>」; 2. one-shot:給一個範例「sea => mer, cheese =>」; 3. few-shot:給多個範例後再問——準確率隨範例數上升。 數學直覺:條件機率的條件集合變大了——
範例改變了條件分佈——模型在推理時「現學」任務的模式, 彷彿在上下文中做了隱式的梯度下降(後續研究:「implicit meta-learning」)。
第三條線索:規模法則的冪律#
Kaplan(2020)的實測:測試損失 \(L\) 對參數 \(N\) 、資料 \(D\) 、算力 \(C\) 都是冪律:
- 冪律的意義:在對數-對數圖上是直線—— 規模放大 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):
翻譯、問答、算術、常識推理——few-shot 準確率隨範例數與規模同步上升—— 這是 AI 史上第一次「規模帶來質變」的實證。 - 規模法則主導十年(2020–):
- 2022 Chinchilla(DeepMind):修正 Kaplan——資料要等比例放大 (700 億參數 + 1.4 兆 token 勝過 2800 億參數 + 3000 億 token);
- 2020–2025,算力軍備競賽:訓練成本從百萬美元級漲到十億美元級;
- 規模法則成為 AI 公司的「投資指南針」。
- ChatGPT 前夜(2022): GPT-3 證明了能力,但不聽話——提示詞要技巧(prompt engineering)、 會胡說八道(幻覺)。
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 倍,質變出現;
「預測下一個詞」預測出了一個時代。
關鍵人物與文獻#
- 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。