← 返回 Transformer 专题 2018 · OpenAI GPT-1 原理:预训练 + 微调的诞生
GPT-1(Generative Pre-Training)是第一个把「大规模无监督预训练」与「有监督微调」结合的 Transformer
解码器模型。它使用 BookCorpus(7,000 多本未出版小说)预训练,然后通过任务特定头在 GLUE
等任务上微调,展示了语言模型可迁移的潜力。
重点:两阶段训练、12 层 Decoder、任务特化线性头
1. 为什么要预训练?
2018 年之前,NLP 常常为每个任务单独训练模型,数据依赖大、泛化差。GPT-1
认为语言建模就是一个通用的「自监督」目标:预测下一个 token 的概率。当模型学会语言结构后,只需少量有标签数据就能微调到具体任务。
核心公式
预训练目标是最大化 ∑ log P(w_t | context_t; θ)。微调阶段在 Transformer 顶部添加任务层,最小化对应的
cross-entropy。
2. 两阶段训练流程
预训练 + 微调的二阶段 pipeline 是后续 GPT/BERT/T5 的共同底座。 - 预训练设置:上下文窗口 512,12 层 Transformer Decoder,隐藏维度 768,注意力头 12,参数约
117M。
- 微调策略:在每个任务上附加一个浅层分类器或指针网络,部分任务引入任务描述 + 输入拼接。
3. 模型解剖
12 层解码器,每层包含 Masked Self-Attention + 前馈网络 + 残差层归一化。 - 只保留解码器堆叠(没有 encoder),依靠 mask 强制自回归。
- 前馈层使用 GELU 激活;LayerNorm 放在残差之后(Post-LN)。
- 微调阶段在最后一层上接 task head,例如 MLP 分类器或 pointer network。
4. 多任务适配技巧
- 自然语言提示:在输入前拼接诸如 “Question: … Answer:” 的提示,统一不同任务的输入格式。
- Span Prediction:对于问答任务,模型预测 answer span 的起止位置(类似 Pointer
Networks)。
- 无标签数据增强:使用语言模型生成的候选句子来扩展训练数据,缓解过拟合。
5. 局限与启发
虽然 GPT-1 在多个 GLUE 任务上领先于同年代模型,但仍存在如下限制:
- 数据规模小:BookCorpus 仅 ~5GB 文本,语域单一。
- 任务仍需微调:模型无法直接零样本推理。
- 上下文长度 512,无法覆盖长文本推理。
即便如此,GPT-1 证明了「先学语言,再学任务」的可行性,并为 GPT-2 的扩大规模与 zero-shot 实验铺平道路。