本文解读的是Alec Radford等人于2018年发表的里程碑论文《Improving Language Understanding by Generative Pre-Training》,该论文提出了GPT(Generative Pre-Training)模型,首次将大规模无监督预训练与有监督微调相结合,在多个NLP基准上取得了突破性成绩。GPT-1是ChatGPT的直系祖先——它确立了"预训练+微调"的范式,证明了通用语言表示可以从海量无标注文本中学习,为后续GPT-2、GPT-3乃至ChatGPT奠定了架构和方法论基础。
NLP的迁移学习困境
问题一:标注数据的稀缺性
深度学习在NLP中的应用面临一个根本挑战:高质量标注数据稀缺。
与计算机视觉不同,NLP任务的标注需要语言专业知识,成本高昂:
- 情感分析:需要理解语言的细微差别
- 问答系统:需要专业领域知识
- 文本蕴含:需要逻辑推理能力
大多数NLP数据集仅有数千到数万条标注样本,远不足以从头训练大型神经网络。
问题二:预训练方法的局限
在GPT之前,NLP领域的预训练主要有两种方式:
词向量预训练(如Word2Vec、GloVe):
- 只提供词级别的表示
- 无法捕捉上下文信息
- 无法处理多义词
语言模型预训练(如ELMo):
- 使用双向LSTM
- 表示能力受限于LSTM架构
- 预训练和微调架构不一致
这些方法虽然有效,但都存在明显局限:预训练的知识无法充分迁移到下游任务。
问题三:无监督学习的挑战
无监督学习的核心挑战是找到合适的目标函数。语言建模是一个自然的选择:
$$ \mathcal{L}{\text{LM}} = \sum{i} \log P(u_i | u_1, \ldots, u_{i-1}; \Theta) $$
但如何设计一个既能充分利用预训练知识、又能适应多种下游任务的框架?
GPT的核心设计
Transformer解码器架构
GPT采用Transformer的解码器部分作为基础架构,使用单向自注意力(因果注意力):
$$ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^\top}{\sqrt{d_k}} + M\right)V $$
其中 $M$ 是掩码矩阵,确保位置 $i$ 只能关注位置 $j \leq i$:
$$ M_{ij} = \begin{cases} 0 & \text{if } j \leq i \ -\infty & \text{if } j > i \end{cases} $$
GPT-1的架构参数:
| 参数 | 值 |
|---|---|
| 层数 | 12 |
| 隐藏维度 | 768 |
| 注意力头数 | 12 |
| 前馈网络维度 | 3072 |
| 最大序列长度 | 512 |
| 参数量 | 117M |
两阶段训练框架
GPT的核心创新是两阶段训练框架:
阶段一:无监督预训练
在大规模无标注语料上训练语言模型:
$$ \mathcal{L}1(U) = \sum{i} \log P(u_i | u_{i-k}, \ldots, u_{i-1}; \Theta) $$
其中 $U = {u_1, \ldots, u_n}$ 是无标注语料,$k$ 是上下文窗口大小。
预训练数据:BooksCorpus,包含7000+本未发布的书籍,约8亿词。
阶段二:有监督微调
在标注数据上微调预训练模型:
$$ \mathcal{L}2(C) = \sum{(x, y) \in C} \log P(y | x^1, \ldots, x^m) $$
其中 $C$ 是标注数据集,$x^i$ 是输入token,$y$ 是标签。
辅助语言模型损失:微调时添加语言模型损失作为正则化:
$$ \mathcal{L}_3(C) = \mathcal{L}_2(C) + \lambda \cdot \mathcal{L}_1(C) $$
实验表明,辅助损失能够:
- 提升泛化能力
- 加速收敛
- 提供额外监督信号
任务特定输入转换
GPT的另一个关键创新是统一的输入格式,使得同一个模型可以处理多种任务:
分类任务:
[Start] 文本 [Extract] → 分类标签
文本蕴含:
[Start] 前提 [Delim] 假设 [Extract] → 蕴含/矛盾/中立
问答/阅读理解:
[Start] 文档 [Delim] 问题 [Delim] 答案 [Extract] → 答案概率
相似度:
[Start] 文本1 [Delim] 文本2 [Extract] +
[Start] 文本2 [Delim] 文本1 [Extract] → 相似度分数
这种设计使得微调时只需最小的架构改动——仅添加一个线性分类层。
实验结果与分析
自然语言推理
在SNLI(Stanford Natural Language Inference)任务上:
| 模型 | 准确率 |
|---|---|
| ESIM + ELMo | 88.7% |
| GPT | 89.9% |
GPT在文本蕴含任务上超越了此前最优模型。
问答与常识推理
在RACE(阅读理解)和Story Cloze(常识推理)任务上:
| 任务 | 此前SOTA | GPT | 提升 |
|---|---|---|---|
| RACE-Middle | 59.2% | 62.9% | +3.7% |
| RACE-High | 44.2% | 57.4% | +13.2% |
| Story Cloze | 77.6% | 86.5% | +8.9% |
GPT在需要推理能力的任务上取得了显著提升。
语义相似度
在STS-B(语义文本相似度)任务上:
| 模型 | Pearson相关系数 |
|---|---|
| 此前SOTA | 81.0 |
| GPT | 82.3 |
消融实验
论文进行了详细的消融实验:
| 设置 | 平均性能 |
|---|---|
| GPT完整版 | 68.5% |
| 无预训练 | 59.1% |
| 无辅助损失 | 67.8% |
| LSTM代替Transformer | 66.4% |
关键发现:
- 预训练贡献约9%的性能提升
- Transformer优于LSTM约2%
- 辅助损失贡献约0.7%
预训练的迁移能力
随着预训练轮数增加,下游任务性能持续提升:
| 预训练数据量 | 零样本性能 |
|---|---|
| 25% | 58.2% |
| 50% | 63.1% |
| 75% | 66.4% |
| 100% | 68.5% |
这表明预训练数据规模与下游性能正相关——一个在后续GPT-2、GPT-3中得到充分验证的规律。
GPT-1的创新与局限
核心创新
-
预训练+微调范式:确立了NLP迁移学习的标准范式,后来被BERT、T5等模型广泛采用
-
Transformer解码器:证明了单向Transformer足以学习强大的语言表示
-
统一输入格式:同一模型可以处理多种任务,为后来的prompt engineering奠定基础
-
辅助语言模型损失:微调时保持预训练目标,提升泛化能力
局限性
-
单向注意力:无法利用双向上下文,限制了表示能力
-
规模较小:117M参数在今天看来很小
-
依赖微调:每个下游任务都需要微调,无法零样本迁移
这些局限性推动了后续研究:
- BERT(2018):双向预训练
- GPT-2(2019):更大规模,零样本能力
- GPT-3(2020):1750亿参数,上下文学习
GPT-1的历史地位
从预训练到ChatGPT的演进
GPT-1确立的设计选择在后续所有GPT模型中得到延续:
| 设计选择 | GPT-1 | GPT-2 | GPT-3 | ChatGPT |
|---|---|---|---|---|
| 架构 | Transformer解码器 | ✓ | ✓ | ✓ |
| 预训练目标 | 语言模型 | ✓ | ✓ | ✓ |
| 单向注意力 | ✓ | ✓ | ✓ | ✓ |
| 参数量 | 117M | 1.5B | 175B | ~175B |
与BERT的对比
GPT-1和BERT是2018年同时出现的两种预训练范式:
| 特性 | GPT-1 | BERT |
|---|---|---|
| 注意力方向 | 单向 | 双向 |
| 预训练目标 | 语言模型 | 掩码语言模型 |
| 适合任务 | 生成 | 理解 |
| 后续发展 | GPT-2/3/4, ChatGPT | RoBERTa, ALBERT |
两种范式都取得了巨大成功,但GPT的生成能力使其成为ChatGPT的基础。
OpenAI的战略选择
回顾历史,GPT-1代表了OpenAI在语言模型上的战略赌注:
- 2018年GPT-1:证明预训练的有效性
- 2019年GPT-2:证明规模的重要性
- 2020年GPT-3:涌现能力的发现
- 2022年ChatGPT:对话能力的突破
GPT-1是这一旅程的起点。
阅读研究论文的时间线计划
本文在技术时间线中的位置
Word2Vec(2013) → Seq2Seq(2014) → Attention(2015) → Transformer(2017)
→ 【当前位置】GPT-1(2018) → GPT-2(2019) → Scaling Laws(2020) → GPT-3(2020) → InstructGPT(2022) → ChatGPT
前置知识
在阅读本文之前,建议了解:
- 【ChatGPT时刻04】Transformer:GPT的基础架构
- 【ChatGPT时刻05】Transformer代码解析:逐行理解实现细节
- 自回归语言模型的基本原理
后续论文推荐
完成本文后,建议按顺序阅读:
- 【ChatGPT时刻07】GPT-2(下一篇):更大规模,发现零样本能力
- 【ChatGPT时刻08】Scaling Laws:规模与性能的幂律关系
- 【ChatGPT时刻09】GPT-3:涌现能力与上下文学习
完整技术路线图
GPT系列演进
│
GPT-1 ──────────► GPT-2 ──────────► GPT-3 ──────────► InstructGPT ──────► ChatGPT
(2018) (2019) (2020) (2022) (2022)
117M 1.5B 175B 175B 175B
│ │ │ │ │
└── 预训练+微调 └── 零样本学习 └── 上下文学习 └── RLHF └── 对话优化
任务特定输入 规模效应 涌现能力 人类对齐 多轮对话
参考文献
- Radford, A., Narasimhan, K., Salimans, T., & Sutskever, I. (2018). Improving Language Understanding by Generative Pre-Training. OpenAI.
- Vaswani, A., et al. (2017). Attention is All You Need. NeurIPS.
- Peters, M. E., et al. (2018). Deep contextualized word representations (ELMo). NAACL.
- Devlin, J., et al. (2019). BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. NAACL.
- Howard, J., & Ruder, S. (2018). Universal Language Model Fine-tuning for Text Classification. ACL.