3.1 GPT 系列:Generative Pre-Training(从 GPT-1 到 GPT-3)
迁移方式:GPT-1 主推“预训练 + 微调”;GPT-2 主推“预训练 + zero-shot”。规模与数据:GPT-2 数据与参数显著扩大(典型说法是 GPT-2 约 40GB 高质量文本,GPT-1 数据规模更小)。训练细节:LayerNorm 位置、初始化等工程细节更适配更深模型。贡献意义:GPT-2 强化了一个重要结论:当模型容量与数据多样性足够时,语言模型会呈现明显的通用迁移与多任务能
3.1 GPT 系列:Generative Pre-Training(从 GPT-1 到 GPT-3)
GPT 系列的主线非常清晰:用自回归语言建模(Language Modeling)作为通用学习目标,先在大规模文本上做生成式预训练(Generative Pre-Training),再通过不同方式把能力迁移到下游任务上。
从 GPT-1 的“预训练 + 有监督微调”,到 GPT-2 的“预训练 + zero-shot 多任务”,再到 GPT-3 的“预训练 + few-shot / in-context learning”,迁移方式逐步从“参数更新”走向“仅提示(prompt)驱动”。
1. GPT-1:Improving Language Understanding by Generative Pre-Training
1.1 模型结构:Decoder-only Transformer
GPT-1 使用 Transformer 的 decoder-only 结构(12 层)。它和原始 Transformer decoder 的关键差别在于:
原始 Transformer decoder 有两类注意力:
- Masked Multi-Head Self-Attention:在 decoder 内部对历史 token 做自注意力(带因果 mask)。
- Cross-Attention:qqq 来自 decoder,k,vk,vk,v 来自 encoder(用于 seq2seq 结构,如翻译)。
GPT-1 只保留 masked self-attention,不需要 encoder,因此整体成为 纯生成式自回归模型。
另一个常被提到的细节是位置编码:GPT-1 使用 可训练(learnable)的 position embedding,而不是固定的正弦位置编码。
1.2 训练范式:自监督预训练 + 有监督微调(并混合无监督目标)
(1)预训练:标准语言模型目标
GPT-1 的核心预训练目标是:给定前面若干 token,预测下一个 token。
如果用 u1,u2,…,unu_1,u_2,\dots,u_nu1,u2,…,un 表示一段 token 序列,语言模型最大化序列的对数似然(等价于最小化负对数似然)。一种常见写法是对每个位置 iii:
L1(u)=∑ilogP(ui∣ui−k,…,ui−1;Θ) L_1(\mathbf{u}) = \sum_i \log P(u_i \mid u_{i-k}, \ldots, u_{i-1}; \Theta) L1(u)=i∑logP(ui∣ui−k,…,ui−1;Θ)
这里:
- Θ\ThetaΘ:模型参数;
- kkk:可见历史的窗口(在 Transformer 中通常是“到当前位置的全部历史”,这里写成 kkk 是一种概括表达);
- P(ui∣⋅)P(u_i \mid \cdot)P(ui∣⋅):模型对当前位置 token 的条件概率。
理解要点:
自回归建模把“理解文本”转化为“能否预测合理的下一个词”。当数据足够大、模型足够强时,预测下一个词会迫使模型学习语法、事实、常识、指代、篇章结构等大量知识。
(2)微调:有监督目标 + 无监督目标(联合训练)
GPT-1 的微调并不是只用监督目标,而是把监督损失与语言模型损失混合。
有监督目标可以写为(对一个监督数据集 C={(x,y)}C=\{(x,y)\}C={(x,y)}):
L2(C)=∑(x,y)logP(y∣x1,…,xm) L_2(C) = \sum_{(x,y)} \log P(y \mid x^1, \ldots, x^m) L2(C)=(x,y)∑logP(y∣x1,…,xm)
其中:
- x1,…,xmx^1,\ldots,x^mx1,…,xm:输入序列(可以是 token 序列,也可以是由多个片段拼接后的序列);
- yyy:任务标签或目标输出(分类标签、答案 token 等)。
联合目标则是:
L3(C)=L2(C)+λ⋅L1(C) L_3(C) = L_2(C) + \lambda \cdot L_1(C) L3(C)=L2(C)+λ⋅L1(C)
其中:
- λ\lambdaλ:权重系数,控制“继续保持语言建模能力”的强度;
- L1(C)L_1(C)L1(C):把微调数据中的文本序列也当成语言建模数据,再做一遍自回归目标。
为什么微调还要加 L1L_1L1?(两个核心作用)
- 提升泛化:监督数据往往规模小、分布窄,纯监督微调容易过拟合;混入 L1L_1L1 等价于一种正则化,让模型保留预训练时学到的通用语言结构与知识。
- 加速收敛:模型在预训练阶段已经学会了“如何建模自然语言”,微调阶段继续保持该训练信号能让优化更稳定,减少灾难性遗忘。
1.3 输入形式与任务适配:用特殊标记把任务“写进序列”
GPT-1 在下游任务中常把输入改写成统一的“序列形式”,常见做法是加入一些特殊 token 来组织结构,例如:
- [Start][Start][Start] 表示序列开始
- [Delim][Delim][Delim] 表示片段分隔
- [Extract][Extract][Extract] 表示需要抽取/预测的位置或结束
关键思想:把分类、蕴含、问答等任务都包装成“读一段序列,输出某个位置的预测”。
常见实现是:取最后一层最后一个 token 的隐藏状态(或特定位置的隐藏状态)接一个任务头(分类层等)完成不同任务。
2. GPT-2:Language Models are Unsupervised Multitask Learners
GPT-2 延续了 GPT-1 的 decoder-only 自回归框架,但它的核心主张从“预训练 + 微调”转向:
只靠预训练的语言模型,就能在 zero-shot 条件下完成许多下游任务。
2.1 模型结构:更深更大 + 训练稳定性改进
GPT-2 的结构仍是 decoder-only Transformer,但做了关键工程改动与规模扩展,例如:
- 从 post-norm 改为 pre-norm(LayerNorm 放置位置变化),通常能显著改善深层 Transformer 的训练稳定性;
- 上下文长度从 512 扩到 1024;
- 层数与参数量大幅提升(最大 15 亿参数量级)。
2.2 训练范式:预训练 + zero-shot(无监督多任务学习)
(1)核心观点:有监督任务是语言建模的“子集”
GPT-2 的关键洞察是:
当训练数据足够大且多样时,文本中会自然包含大量“任务描述—示例—答案”的结构(例如教程、论坛问答、翻译示例、摘要样例)。
因此,一个足够强的语言模型在预训练时就可能“顺带学会”许多任务的映射关系。
可以用一个直观的例子理解:
语料里出现过类似段落:
- “Translate English to French: cheese => fromage”
- “Q: Who is the best basketball player in history? A: Michael Jordan”
语言模型为了预测后续 token,必须学会在这些模式下生成合理的答案,于是 zero-shot 时只要把输入写成类似的自然语言提示,模型就能延续该模式生成答案。
(2)为什么 GPT-2 的 zero-shot 需要更“自然”的输入
GPT-2 强调:zero-shot 时的输入形式应尽量贴近预训练文本分布。
如果下游任务输入引入了预训练阶段没见过的特殊符号或强结构化模板,模型可能无法对齐到它在语料中学到的“自然模式”。
因此更推荐用自然语言 prompt(指令 + 若干示例)表达任务,例如翻译:
- Zero-shot:
- “Translate English to French: cheese =>”
- One-shot:
- “Translate English to French: sea otter => loutre de mer; cheese =>”
- Few-shot:
- “Translate English to French: sea otter => loutre de mer; peppermint => menthe poivrée; plush giraffe => girafe peluche; cheese =>”
这里的区别不是“模型结构变了”,而是给模型的上下文里提供了多少任务示例,帮助模型在当前上下文中临时建立映射规则。
2.3 GPT-2 与 GPT-1 的关键区别总结
- 迁移方式:GPT-1 主推“预训练 + 微调”;GPT-2 主推“预训练 + zero-shot”。
- 规模与数据:GPT-2 数据与参数显著扩大(典型说法是 GPT-2 约 40GB 高质量文本,GPT-1 数据规模更小)。
- 训练细节:LayerNorm 位置、初始化等工程细节更适配更深模型。
- 贡献意义:GPT-2 强化了一个重要结论:当模型容量与数据多样性足够时,语言模型会呈现明显的通用迁移与多任务能力,很多任务不必再依赖额外微调。
3. GPT-3:Language Models are Few-Shot Learners
GPT-3 将 GPT-2 的路线进一步推向极致:
更大的模型 + 更大的数据,并把“few-shot / in-context learning”作为核心能力展示方式。
3.1 模型结构:与 GPT-2 同族,但面向更大规模训练优化
GPT-3 仍是 decoder-only Transformer。其训练与推理复杂度的核心瓶颈是 self-attention:
如果序列长度是 nnn,标准 dense self-attention 的复杂度是:
O(n2) O(n^2) O(n2)
因为每个 token 都要和所有 token 两两计算相关性。
一些工作会用 稀疏注意力(sparse attention) 思路来降低复杂度:每个 token 只与一个子集交互,从而把复杂度降到更低的量级(常见表述之一是):
O(nlogn) O(n \log n) O(nlogn)
稀疏注意力的直观理解:
- 邻近 token 通常强相关(局部密集关注);
- 远距离 token 只需少量关键连接(远程稀疏关注);
这使得模型可以在更长上下文下保持可计算性与可训练性。
3.2 训练范式:预训练 + few-shot / in-context learning
GPT-3 最典型的使用方式是:不给任何梯度更新,只在输入上下文里塞入“任务描述 + 若干示例”,模型就能在当前上下文中完成任务,这被称为 In-Context Learning(ICL)。
(1)few-shot 的典型结构
给定一个任务描述 DDD,若干示例对 {(x1,y1),…,(xK,yK)}\{(x_1,y_1),\dots,(x_K,y_K)\}{(x1,y1),…,(xK,yK)},以及待预测输入 xxx,把它们拼接成一个长上下文:
- DDD
- x1⇒y1x_1 \Rightarrow y_1x1⇒y1
- ⋯\cdots⋯
- xK⇒yKx_K \Rightarrow y_KxK⇒yK
- x⇒x \Rightarrowx⇒
模型生成 yyy。
核心点:模型并没有在参数层面“学会这个任务”,它是在当前上下文里“临时对齐”到示例所展示的映射规律。
(2)In-Context Learning 为什么常被认为与元学习有关
一个常见解释框架是把 GPT-3 的行为类比为“元学习(meta-learning)”:
- 外循环(outer loop):预训练阶段在海量任务混合风格文本上做语言建模,学习到“如何从上下文中归纳规律”的能力;
- 内循环(inner loop):推理阶段通过 few-shot 示例在上下文中快速形成临时任务适配(但不更新参数)。
虽然它不是传统意义上显式的梯度式内循环优化,但表现出来的“给少量示例就能适配新任务”的现象,与元学习目标非常相似。
3.3 GPT-3 与 GPT-2 的差异总结
- 主推能力:GPT-2 强调 zero-shot 多任务;GPT-3 强调 few-shot / ICL。
- 规模:GPT-3 参数量巨大(175B 量级),训练语料也显著扩大(通常描述为更大规模的混合语料并进行清洗)。
- 效果:生成质量与任务泛化显著提升,few-shot 表现成为亮点。
- 关键意义:展示了“规模化语言建模”能诱发强大的上下文学习能力,使得模型在不更新参数的情况下也能通过提示完成多样任务。
4. Shot(样本提示数量)区别:Zero / One / Few
把“给模型多少个示例”作为变量,就形成常说的三种设置:
- Zero-shot:只给任务描述,不给示例。
- One-shot:给 1 个示例。
- Few-shot:给多个示例(通常是 2 到十几个不等,受上下文长度限制)。
以“英译法”为例:
- Zero-shot:
- “Translate English to French: cheese =>”
- One-shot:
- “Translate English to French: sea otter => loutre de mer; cheese =>”
- Few-shot:
- “Translate English to French: sea otter => loutre de mer; peppermint => menthe poivrée; plush giraffe => girafe peluche; cheese =>”
这里的本质是:示例越多,模型越容易在当前上下文中锁定输出格式、词汇风格与映射规则;但示例过多会占用上下文窗口,且示例质量对结果影响很大。
5. 小结:GPT-1 / GPT-2 / GPT-3 的主线对比
-
GPT-1:
- 以生成式预训练学习通用表示
- 通过有监督微调适配下游任务
- 微调时混入语言模型目标:
L3(C)=L2(C)+λL1(C) L_3(C)=L_2(C)+\lambda L_1(C) L3(C)=L2(C)+λL1(C)
-
GPT-2:
- 强调“无监督多任务”:大模型 + 大数据会自然覆盖多种任务模式
- 倡导 zero-shot:用自然语言 prompt 让模型直接完成任务
-
GPT-3:
- 进一步规模化带来强 ICL 能力
- few-shot 成为主要范式:通过上下文示例进行快速任务适配
- 常被解释为“外循环预训练 + 内循环上下文学习”的元学习式行为
GPT 系列的演进展示了一个关键趋势:迁移学习的主要载体从“参数更新”逐渐转向“上下文提示”,而这背后的驱动力是更大规模、更高多样性的生成式预训练。
更多推荐
所有评论(0)