跳轉到

2019 - GPT-2 危險模型#

案件摘要#

2019 年 2 月,OpenAI 宣布訓練出 GPT-2:15 億參數、在 800 萬網頁(WebText,40GB)上訓練的 Transformer 解碼器語言模型。隨附一紙驚人的公告:「由於擔心惡意使用,我們不發布完整模型」(too dangerous to release)——先釋出 1.24 億參數的小版本,分六個月逐步放大。這是 AI 史上第一次有模型以「太危險」為由拒絕開源。技術上的核心主張更震撼:

\[ p(\text{任務的輸出}) = p(\text{下一個 token} \mid \text{把任務描述也寫進上下文}) \]

零樣本(zero-shot)多任務:不需要微調、不需要標註,把翻譯、問答、摘要全部寫成「續寫題」。語言模型第一次被證明是無監督多任務學習器。

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

  • 2018-BERT與GPT預訓練典範.md 中,GPT-1(117M)仍需微調才能做任務;BERT 靠雙向 + 微調稱霸理解榜。OpenAI 的意識形態反擊:堅持純自回歸,證明「規模」能取代「微調」。
  • GPT-1 的遺憾:微調是每任務一次訓練——與「一個模型通吃」的 AGI 想像矛盾。
  • 線索:GPT-1 論文中已觀察到,語言模型在「零樣本」設定下隱約會做語法修正等任務——只是能力太弱。
  • 資料工程的前案:OpenAI 判定 Common Crawl 太髒,自行爬取 Reddit 高讚外連網頁造出 WebText——「資料品質 > 資料數量」的先聲。
  • 2017-Transformer注意力機制.md 的架構已證明可規模化:GPT-2 只是 GPT-1 的架構放大 10 倍(117M → 1.5B)。
  • 動機:OpenAI(此時已轉為 capped-profit)要證明「生成式路線才是正確的」——並順勢把「AI 安全」推上輿論舞台。

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

第一條線索:規模的跳升與架構的保守#

GPT-1 GPT-2
參數 117M 1.5B
層數 12 48
隱藏維度 768 1600
上下文 512 token 1024 token
資料 BooksCorpus 5GB WebText 40GB
訓練方式 預訓練 + 微調 只預訓練,零樣本

架構幾乎不變(LayerNorm 前移是僅有的改動),能力卻質變——這是「規模湧現」的第一次大規模實證,為 2020-GPT-3規模湧現.md 鋪路。

第二條線索:零樣本多任務——把任務寫進上下文#

GPT-2 的核心推理:所有 NLP 任務都是訓練資料中「文檔續寫」的特例。翻譯在語料中本來就存在(雙語網頁、問答格式),只要把任務描述放進 prompt:

任務 Prompt(條件) 期望續寫
翻譯 English: The cat sat. French: Le chat s'est assis.
問答 Q: Who wrote Hamlet? A: William Shakespeare
摘要 Article: [長文] TL;DR: [摘要]

數學上,這是把條件分佈 \(p(\text{答案} \mid \text{任務描述}, x)\) 交給單一模型 \(p(x_{t} \mid x_{<t})\) 的條件化能力(與 2016-WaveNet語音合成.md 的條件化 \(p(\mathbf{x} \mid h)\) 同構——條件向量像旋鈕,這裡的旋鈕是自然語言本身)。

第三條線索:語言模型的「無監督多任務」定理#

GPT-2 論文的主張可以寫成一條不等式:若訓練分佈涵蓋多任務的文件,則極大化

\[ \mathcal{L} = \sum_{\text{doc}} \sum_i \log p(x_i \mid x_{<i}) \]

隱含地學會了 \(p(\text{任務輸出} \mid \text{任務條件})\) ——因為任務本身就是文件中的一段文字。實證結果:零樣本翻譯法德 WMT14 達 5 分 BLEU(弱但存在)、CoT 問答接近監督式基線、摘要可用。線索至此清晰:「微調」不是必需品,是資料不夠多時的補丁。

第四條線索:「太危險」——模型安全的開庭日#

OpenAI 的分段釋出時程:

日期 釋出版本
2019-02 124M 參數(原版 1/12)
2019-05 355M
2019-08 774M
2019-11 1.5B 完整版

理由:假新聞、自動生成的惡意內容難以偵測。爭議兩極——批評者說是行銷炒作(模型其實沒那麼危險),支持者說是負責任的先例。實質影響:「模型安全」首次成為釋出決策的一部分,OpenAI 同年成立 compute 與安全政策框架。這場法庭戲的判例,影響此後所有大模型的釋出策略(GPT-4 的分階段內測、模型卡與系統卡)。

第五條線索:案發現場的樣本——生成品質的翻盤#

GPT-2 1.5B 的生成能力(給定 UniCorn 標題續寫新聞)在盲測中:

模型 盲測中「像人寫的」比率
GPT(117M,2018) ~22%
GPT-2 774M ~59%
GPT-2 1.5B ~72%
人類真實文章 ~83%

規模跳升的每一級都伴隨生成品質的質變——1.5B 的文章「連貫、切題、有常識」,僅在長篇一致性上露餡。同時 WebText 驗證集的困惑度(perplexity)隨模型規模呈平滑冪律下降,而下游能力呈階梯式跳升——這條「平滑損失 vs 階梯能力」的線索,正是 2020-GPT-3規模湧現.md 湧現之辯的前奏。線索至此全部合攏。

結案 -- 後果與影響#

  • 證明「純自回歸 + 規模 + 好資料」能零樣本做多任務——BERT 的微調典範被斬出一道裂縫,GPT 路線取得意識形態主導權。
  • WebText 的資料工程成為此後的標準:「爬取—清洗—去重」的資料管線是 GPT-3(570GB)與後續模型的直接前驅。
  • 「提示即程式」的萌芽:零樣本 prompt 的成功,預示了 2020-GPT-3規模湧現.md 中 few-shot 提示與 in-context learning 的正式誕生。
  • 模型安全制度化:分段釋出、危險能力評估、後續的紅隊測試(red-teaming)成為大模型釋出的標配。
  • 假新聞與 deepfake 恐慌升溫,推動 AI 內容偵測與治理議題(見「科學與歷史/世界史/」「科學與歷史/法律與制度史/」的對應討論)。
  • 伏筆:GPT-2 的零樣本能力仍不穩定(翻譯只有 5 BLEU)——當參數再大 100 倍,零樣本將蛻變成 few-shot 湧現能力,ChatGPT 的對話能力也在此案的延長線上。

關鍵人物與文獻#

  • Alec Radford:GPT-1 與 GPT-2 的第一作者。
  • Jeffrey Wu:GPT-2 的核心作者之一,後續規模法則研究。
  • Ilya Sutskever:OpenAI 研究主管,GPT 路線的總設計師(見 2014-Seq2Seq與注意力.md)。
  • Radford et al., Language Models are Unsupervised Multitask Learners, OpenAI, 2019。
  • Radford et al., Improving Language Understanding by Generative Pre-Training, 2018(GPT-1 前案)。
  • Solaiman et al., Release Strategies and Social Impacts of Language Models, 2019(分段釋出的後續研究)。
  • 相關案件:2018-BERT與GPT預訓練典範.md、2020-GPT-3規模湧現.md、2016-WaveNet語音合成.md、2022-ChatGPT與RLHF.md(見「科學與歷史/人工智慧/」「科學與歷史/神經網路/2020-布朗GPT-3.md」)

補充 -- 程式實作(python + numpy + pytorch)#

本案無監督多任務目標(L = Σlog p(xᵢ|x_<i))+採樣整形(溫度/top-k)的最小可執行版本,見 _code/2019-GPT2.py(已實測可跑,CPU 秒級;詞級 bigram 代替 15 億參數):

# 2019 - GPT-2: 規模 + 採樣即產品 (溫度 / top-k 整形分佈)
import math
import torch


def shape(p, temperature=1.0, top_k=0):
    p = p.float()
    if top_k > 0:  # 只留前 k
        v, _ = torch.topk(p, top_k)
        p = torch.where(p >= v[-1], p, torch.zeros_like(p))
        p = p / p.sum()
    p = (p.clamp_min(1e-9).log() / temperature).exp()  # 溫度: 重塑銳度
    return p / p.sum()


def main():
    torch.manual_seed(0)
    docs = (["translate hello : hola", "translate cat : gato", "translate dog : perro",
             "summarize cats eat fish : cats fed", "summarize dogs run fast : dogs quick",
             "question who eats fish : cats", "question who barks : dogs",
             "see bird sings sweetly : song"] * 40)
    vocab = sorted({w for d in docs for w in d.split()})
    wi = {w: i for i, w in enumerate(vocab)}
    V = len(vocab)
    C = torch.ones(V, V)  # 加一平滑
    for d in docs:
        ids = [wi[w] for w in d.split()]
        for a, b in zip(ids, ids[1:]):
            C[a, b] += 1
    P = C / C.sum(1, keepdim=True)
    # (困惑度 / 整形表 / 生成流熵計算略, 見 _code/2019-GPT2.py 全文)


if __name__ == "__main__":
    main()

執行結果(python3 _code/2019-GPT2.py,torch 2.12.0):

詞彙 26 詞, bigram 困惑度=2.53 (GPT-2: 同一目標, 10億參數, 網路級語料)
上下文 'translate' 的下一詞分佈 (top3):
  T=0.5+top3: [('hello', 0.33), ('dog', 0.33), ('cat', 0.33)] 熵=1.58 bits (低溫銳化保守, 高溫拉平發散)
  T=1.0: [('hello', 0.28), ('dog', 0.28), ('cat', 0.28)] 熵=2.68 bits (低溫銳化保守, 高溫拉平發散)
  T=1.5: [('hello', 0.2), ('dog', 0.2), ('cat', 0.2)] 熵=3.70 bits (低溫銳化保守, 高溫拉平發散)
  生成流熵 T=0.5+top3: 4.09 bits
  生成流熵 T=1.5: 4.50 bits
結論: 採樣是產品的性格旋鈕; bigram 只學到『任務: 前綴格式』, 真正的零樣本語義需 GPT-2 級規模 -- 規模即能力 (見 2020-GPT-3規模湧現.md)

程式解說:shape 即 GPT-2 產品面的全部秘密——溫度整形銳度、top-k 截斷長尾,同一模型轉出三種性格:熵從 1.58 到 3.70 bits,生成流熵 4.09 到 4.50。bigram 在此只能演示「格式」(translate/summarize/question 前綴各帶出一串),語義一塌糊塗——這正是誠實的邊界:零樣本多任務的語義部分需要規模,bigram 的 26 詞玩具只能證明「任務可以寫進上下文」這個格式,却證明不了理解。從困惑度 2.53 到 GPT-2 的 WebText 困惑度,中間隔著 15 億參數——「太危險」的從來不是採樣器,是規模。