Language Models are Unsupervised Multitask Learners

作者: Alec Radford, Jeffrey Wu, Rewon Child, David Luan, Dario Amodei, Ilya Sutskever 年份: 2019 会议: OpenAI Technical Report 分类: 网络架构

论文笔记:GPT-2

元信息

项目内容
机构OpenAI
日期February 2019
链接Paper / Blog / Code
对比基线GPT-1, BERT, 各任务特定 SOTA 模型

一句话总结

展示了在足够大的高质量数据集(WebText)上训练的足够大的 语言模型 可以在零样本(zero-shot)条件下完成多种 NLP 任务,无需任何任务特定的训练数据或参数微调

核心贡献

Zero-shot 任务迁移: 首次系统性地证明大规模语言模型无需 fine-tuning 或 few-shot 示例即可完成阅读理解、摘要、翻译、问答等多种任务,仅通过自然语言 prompt 引导

WebText 数据集: 构建了 40GB 高质量文本数据集(从 Reddit 高赞链接抓取),质量远超此前常用的 Common Crawl 等数据源

规模效应的系统验证: 在 4 种不同规模(117M → 1.5B 参数)上实验,展示了语言模型性能随规模 对数线性 增长的趋势,且最大模型仍未饱和

文本生成质量飞跃: GPT-2 生成的文本流畅度和连贯性达到前所未有的水平,引发了关于 AI 生成内容安全性的广泛讨论

问题背景

要解决的问题

当前 NLP 系统(包括 BERTGPT-1)依赖于”预训练 + 特定任务微调”的范式,存在两个根本问题:

  1. 泛化脆弱: 模型在特定分布/任务上 fine-tune 后,在分布外(OOD)数据上表现急剧下降
  2. 标注瓶颈: 每个新任务都需要收集标注数据并训练,无法快速适应新任务

现有方法的局限

GPT-1: 已证明生成式预训练 + 判别式 fine-tuning 有效,但仍需要每个下游任务的标注数据

BERT: 虽然在多项 benchmark 上 SOTA,但完全依赖 fine-tuning,zero-shot 能力极弱

多任务学习 (MQAN, decaNLP): 尝试统一多任务训练,但需要为每个任务准备训练数据,且任务数量有限

本文的动机

核心假说: 如果语言模型足够好(即真正学会了语言的分布),它应该能在不需要显式监督的情况下完成任何可以用自然语言描述的任务

形式化地说,任何有监督任务 P(outputinput)P(\text{output} \mid \text{input}) 都可以表示为条件语言模型 P(outputinput,task description)P(\text{output} \mid \text{input}, \text{task description})

如果语言模型的训练数据足够多样化,它会隐式地学习到这种条件分布

关键条件:(1) 模型足够大以拥有足够的容量;(2) 数据足够大且多样化以覆盖各种任务的自然语言表达

方法详解

模型架构

GPT-2 基于 Transformer decoder-only 架构,是 GPT-1 的直接扩展:

  • 与 GPT-1 的主要区别:
    • Layer Normalization 移到每个子层的输入端(Pre-LN),并在最终 self-attention 后额外加一层 LN
    • 残差层权重初始化缩放为 1/N1/\sqrt{N}NN 为残差层总数
    • 词表从 40K BPE → 50257 BPE(byte-level BPE,覆盖所有 UTF-8 字符)
    • 上下文长度从 512 → 1024 tokens
  • Byte-Level BPE: 在 UTF-8 byte 级别而非 Unicode 字符级别运行 BPE,优点是 (1) 词表规模可控;(2) 可以编码任意文本,无 OOV 问题;(3) 需要特殊规则防止常见词(如 dog)出现 dog., dog!, dog? 等冗余变体

模型规模

模型参数量层数维度 dmodeld_\text{model}注意力头数
GPT-2 Small117M1276812
GPT-2 Medium345M24102416
GPT-2 Large762M36128020
GPT-2 XL1542M48160025

训练数据:WebText

构建方法: 从 Reddit 爬取所有获得 ≥3 karma 的外链目标页面,利用社区筛选机制获取高质量内容

规模: 800 万文档,约 40GB 清洗后文本

去重: 使用 Dragnet 和 Newspaper 内容提取器,移除 Wikipedia 页面(避免与测试集重叠)

与此前数据的对比: 远大于 GPT-1 的 BooksCorpus (5GB) 和 BERT 的 BooksCorpus+Wikipedia (~16GB)

Zero-shot 评估方式

核心思路: 将每个任务转化为语言模型的条件生成问题,通过自然语言 prompt 引导模型

示例:

  • 翻译: 在 context 中提供几个 “english sentence = french sentence” 的例子,然后接 “english sentence =“,让模型生成法语翻译
  • 阅读理解: 将文章和问题拼接,末尾加 “A:” 让模型生成答案
  • 摘要: 在文章后加 “TL;DR:” 让模型生成摘要

不用任何梯度更新: 完全依赖模型在预训练中隐式学到的任务能力

关键公式

公式1: 自回归语言模型

P(x)=i=1nP(xix1,x2,,xi1)P(x) = \prod_{i=1}^{n} P(x_i \mid x_1, x_2, \ldots, x_{i-1})

含义: 将序列概率分解为条件概率的乘积,每个 token 的概率以所有前序 token 为条件

符号说明:

  • x=(x1,x2,,xn)x = (x_1, x_2, \ldots, x_n): token 序列
  • P(xix<i)P(x_i \mid x_{<i}): 第 ii 个 token 的条件概率

公式2: 条件多任务目标

P(outputinput,task)P(\text{output} \mid \text{input}, \text{task})

含义: 任何有监督任务都可以表示为以输入和任务描述为条件的序列生成问题

关键洞察: 如果语言模型在训练数据中见过足够多的 (task, input, output) 自然语言示例,它就能隐式建模这个条件分布

例子:

  • 翻译: P("chat""translate to french: cat")P(\text{"chat"} \mid \text{"translate to french: cat"})
  • 摘要: P(summaryarticle + "TL;DR:")P(\text{summary} \mid \text{article + "TL;DR:"})

公式3: 语言模型评估

PPL=exp(1Ni=1NlogP(xix<i))\text{PPL} = \exp\left(-\frac{1}{N} \sum_{i=1}^{N} \log P(x_i \mid x_{<i})\right)

含义: 困惑度,衡量语言模型对测试数据的建模能力,越低越好

符号说明:

  • NN: 测试集 token 总数
  • 等价于交叉熵损失的指数

公式4: 残差缩放初始化

WlresN(0,0.022N)W_l^{\text{res}} \sim \mathcal{N}\left(0, \frac{0.02}{\sqrt{2N}}\right)

含义: 残差路径的权重初始化标准差缩放为 1/N1/\sqrt{N}NN 为残差层数),确保深层网络训练初期梯度稳定

符号说明:

  • NN: 模型中残差层的总数(GPT-2 XL 中 N=96N=96,即 48 层 × 2 子层/层)

实验结果

语言模型基准(Perplexity)

数据集前 SOTAGPT-2 (1.5B)改善
Penn Treebank35.7635.76匹配
WikiText-239.1418.34-53%
WikiText-10315.1717.48略高*
1 Billion Word23.742.16较高*
LAMBADA99.88.63-91%
CBT-CN96.0%93.3%-2.7%
CBT-NE82.0%89.1%+7.1%

*注: 在 1BW 和 WikiText-103 上 PPL 偏高是因为 GPT-2 在 WebText 而非目标域数据上训练,存在分布偏移

Zero-shot 阅读理解

模型CoQA F1
有监督 SOTA (BERT + Conversational History)89.8
GPT-2 (1.5B, zero-shot)55.0
4/127 个有监督基线< 55.0

Zero-shot 即超越 3 个有监督基线系统,展示了语言模型的隐式阅读理解能力

LAMBADA (长距离依赖预测)

模型AccuracyPPL
前 SOTA (neural cache)63.24%99.8
GPT-2 Small (117M)45.99%35.13
GPT-2 Medium (345M)55.48%15.60
GPT-2 Large (762M)60.12%10.87
GPT-2 XL (1.5B)63.24%8.63

PPL 从 99.8 降至 8.63,准确率与前 SOTA 持平,且无需任何特定训练

Zero-shot 翻译 (WMT14 EN→FR)

模型BLEU
前 SOTA (有监督)45.6
5-gram LM (零知识)8.6
GPT-2 (1.5B, zero-shot)5.0
GPT-2 (1.5B, word-by-word)11.5

虽然远低于有监督 SOTA,但语言模型在从未见过平行语料的情况下具备一定翻译能力,这本身令人惊讶

Zero-shot 摘要 (CNN/DailyMail)

模型ROUGE-1ROUGE-2ROUGE-L
前 SOTA41.6919.4738.92
随机 3 句 baseline28.78.322.6
GPT-2 (TL;DR: prompt)29.348.2726.58

略优于随机抽取 3 句的 baseline,但远低于有监督模型

规模效应 (Scaling)

关键发现: 在几乎所有任务上,性能随模型规模对数线性增长,且最大模型 (1.5B) 仍未出现饱和迹象

这一观察为后续 Scaling Laws(Kaplan et al., 2020)和更大规模模型(GPT-3, GPT-4)的开发提供了直接动力

Winograd Schema Challenge

模型准确率
Ensemble (前 SOTA)63.7%
GPT-2 Small (117M)62.5%
GPT-2 Medium (345M)66.1%
GPT-2 Large (762M)70.6%
GPT-2 XL (1.5B)70.70%

在常识推理上大幅超越前 SOTA (+7.0%),每次 scale up 都带来稳定提升

局限性

Zero-shot 性能仍有限: 在多数任务上远低于有监督 SOTA(如翻译 BLEU 5.0 vs 45.6,摘要 ROUGE 显著落后),零样本并非万能

数据偏差: WebText 源自 Reddit 社区的高赞内容,存在明显的人口统计学和话题偏差(偏向英语、科技、西方文化)

记忆 vs 泛化: 难以区分模型是在做真正的零样本推理还是在”记住”训练数据中的相似模式(WebText 中可能包含任务相关的自然语言示例)

缺乏可控性: 自回归生成难以精确控制输出内容,可能产生事实错误、偏见或有害内容

重复生成问题: 长文本生成时容易陷入重复模式(repetition loops),需要 top-k/nucleus sampling 等技巧缓解

仅限英语: 训练数据以英语为主,其他语言能力有限

评估困难: Zero-shot 评估方式(prompt 选择、答案提取)高度依赖 prompt 工程,结果不够稳定

相关概念

语言模型

Transformer

GPT-1

GPT-3

Zero-shot Learning

Transfer Learning

BPE

Scaling Laws

BERT

Autoregressive Model

Prompt Engineering

Pre-LN Transformer

速查卡片

GPT-2 (Language Models are Unsupervised Multitask Learners)

  • 核心: 大规模自回归语言模型 + 高质量 WebText 数据 → 零样本多任务迁移
  • 方法: Transformer decoder-only (Pre-LN) + Byte-Level BPE + 1024 上下文 → 用自然语言 prompt 零样本完成各种任务
  • 结果: LAMBADA PPL 8.63 (前 SOTA 99.8), Winograd 70.7% (+7%), 7/8 语言模型基准创 SOTA
  • 影响: 揭示了规模驱动的涌现能力,直接催生 GPT-3、Scaling Laws 研究,以及 AI 安全讨论

笔记创建时间: 2026-04-03