1. GPT 是什么?
GPT 全称 Generative Pre-trained Transformer,意为"生成式预训练 Transformer"。
它是一种通过预测下一个词(Next Token Prediction)来学习语言规律的模型,本质上是:
$$ P(w_t | w_1, w_2, ..., w_{t-1}) $$
也就是说,GPT 不需要人工标签,它通过阅读大量文本自动学习如何预测句子中接下来的内容。
1.1 GPT 的发展历程
| 版本 | 发布时间 | 参数量 | 主要特点 |
|---|---|---|---|
| GPT | 2018年6月 | 1.17亿 | 首次验证Transformer解码器在预训练中的有效性 |
| GPT-2 | 2019年2月 | 15亿 | 多任务零样本学习,证明大规模模型的泛化能力 |
| GPT-3 | 2020年5月 | 1750亿 | 上下文学习,少样本学习,强大的生成能力 |
| GPT-4 | 2023年3月 | 未公开 | 多模态能力,更强的推理和指令遵循能力 |
1.2 GPT 的核心价值
GPT 的革命性在于:
- 通用性:同一个模型可以处理多种任务
- 零样本学习:无需特定训练即可执行新任务
- 创造性:能够生成新颖、连贯的文本
- 可扩展性:模型性能随规模增大而持续提升
2. GPT 的三阶段思想
| 阶段 | 目的 | 对应机制 | 技术细节 |
|---|---|---|---|
| 预训练 (Pre-training) | 学习语言统计规律 | 在海量语料上自监督训练(预测下一个词) | 使用Transformer解码器,掩码自注意力 |
| 微调 (Fine-tuning) | 学习特定任务 | 使用少量带标签数据调整参数 | 监督学习,指令微调,人类反馈强化学习 |
| 推理 (Inference) | 生成或回答 | 根据输入逐词生成输出 | 自回归生成,束搜索,温度采样 |
直觉类比:
GPT 先"读遍全书",形成语言直觉;再针对特定任务"补课";最后"开口说话",生成语义连贯的文本。
2.1 预训练阶段详解
预训练是 GPT 能力的基石:
# 伪代码示例:预训练过程
def pre_training(corpus, model):
for text in corpus:
tokens = tokenize(text) # 将文本转换为token序列
for i in range(len(tokens)-1):
input_tokens = tokens[:i+1] # 前i+1个token
target_token = tokens[i+1] # 第i+2个token作为目标
prediction = model(input_tokens)
loss = cross_entropy(prediction, target_token)
update_model(loss)预训练数据特点:
- 规模巨大:GPT-3 使用了近万亿单词
- 来源多样:网页、书籍、论文、代码等
- 质量筛选:经过清洗和去重处理
3. 模型结构:基于 Transformer Decoder
GPT 使用 Transformer 的解码器部分(Decoder Stack)。其结构核心如下:
输入序列(Tokens) → 词向量 + 位置编码 → 多层 Transformer Decoder → Softmax 预测下一个词3.1 完整结构图示
输入: [Token₁, Token₂, ..., Tokenₙ]
↓
词嵌入层 (Embedding Layer)
↓
位置编码 (Positional Encoding)
↓
┌─────────────────────────────────┐
│ Transformer Decoder Block × L │
│ ┌─────────────────────────────┐ │
│ │ Masked Multi-Head Attention │ │
│ │ LayerNorm │ │
│ └─────────────────────────────┘ │
│ ┌─────────────────────────────┐ │
│ │ Feed Forward Network │ │
│ │ LayerNorm │ │
│ └─────────────────────────────┘ │
└─────────────────────────────────┘
↓
输出层 (Output Projection)
↓
Softmax 概率分布
↓
输出: [Token₂, Token₃, ..., Tokenₙ₊₁]3.2 各组件详细说明
3.2.1 词嵌入层 (Token Embedding)
- 将离散的token转换为连续向量
- 每个token对应一个d维向量(GPT-3中d=12288)
- 嵌入矩阵维度:词汇表大小 × 隐藏层维度
3.2.2 位置编码 (Positional Encoding)
- 绝对位置编码:使用正弦余弦函数
- 相对位置编码:学习位置间的相对关系
- 旋转位置编码:通过复数旋转表示位置
3.2.3 Transformer Decoder Block
每个块包含:
- 掩码多头注意力层
- 前馈神经网络
- 残差连接和层归一化
4. 核心机制一:自回归语言建模
GPT 的训练目标是最大化似然:
$$ L(\theta) = \sum_t \log P_\theta(w_t | w_1, ..., w_{t-1}) $$
这意味着模型要学会"读一半句子,猜下一个词"。
4.1 实际例子
例1:
输入:我今天很
预测:开心 / 忙 / 累 / 幸福
概率分布:开心(0.4), 忙(0.3), 累(0.2), 幸福(0.1)例2:技术文档续写
输入:def calculate_fibonacci(n):
预测:
if n <= 1:
return n
return calculate_fibonacci(n-1) + calculate_fibonacci(n-2)4.2 几何直觉
- 每个词被映射为高维向量(Token Embedding)
- 自注意力计算这些向量之间的依赖关系,形成"语义力场"
- 输出向量再通过 softmax 映射为下一个词的概率空间
4.3 概率建模的数学基础
GPT 建立了一个概率语言模型:
$$ P(\text{序列}) = P(w_1) \times P(w_2|w_1) \times P(w_3|w_1,w_2) \times \cdots \times P(w_n|w_1,...,w_{n-1}) $$
这个链式法则允许模型评估任何文本序列的可能性。
5. 核心机制二:Masked Self-Attention(掩蔽自注意力)
在 BERT 中,注意力是双向的(可看左右),而在 GPT 中,注意力是单向的:只能看左边(历史信息)。
数学形式:
$$ \text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}} + M\right)V $$
其中 $M$ 为下三角掩码矩阵(mask),防止模型看到未来词。
5.1 掩码矩阵详解
序列长度 = 4时的掩码矩阵:
[[0, -∞, -∞, -∞],
[0, 0, -∞, -∞],
[0, 0, 0, -∞],
[0, 0, 0, 0]]在softmax前加上掩码,-∞的位置经过softmax后变为0,实现掩蔽效果。
5.2 掩码注意力的计算过程
输入序列: [我, 爱, 机器, 学习]
步骤1: 计算注意力分数
我 爱 机器 学习
我 s11 s12 s13 s14
爱 s21 s22 s23 s24
机器 s31 s32 s33 s34
学习 s41 s42 s43 s44
步骤2: 应用掩码
我 爱 机器 学习
我 s11 -∞ -∞ -∞
爱 s21 s22 -∞ -∞
机器 s31 s32 s33 -∞
学习 s41 s42 s43 s44
步骤3: Softmax和加权求和
输出_我 = softmax([s11, -∞, -∞, -∞]) · [V1, V2, V3, V4] = V1
输出_爱 = softmax([s21, s22, -∞, -∞]) · [V1, V2, V3, V4] = w21·V1 + w22·V2
...5.3 因果掩码的重要性
- 训练-推理一致性:训练时看不到未来信息,与推理时一致
- 避免信息泄露:防止模型"作弊"看到要预测的内容
- 自回归生成的基础:支持逐个token生成
6. 多头注意力(Multi-Head Attention)
多个注意力头并行捕捉不同的依赖关系:
$$ \text{MultiHead}(Q,K,V) = \text{Concat}(head_1, ..., head_h)W^O $$
6.1 多头注意力的工作机制
输入向量 X
│
├─ 头1 ──→ 线性变换 → Q1,K1,V1 → 注意力计算 → 输出1
├─ 头2 ──→ 线性变换 → Q2,K2,V2 → 注意力计算 → 输出2
├─ ...
└─ 头h ──→ 线性变换 → Qh,Kh,Vh → 注意力计算 → 输出h
│
↓
拼接 [输出1, 输出2, ..., 输出h]
↓
线性变换 W^O
↓
最终输出6.2 不同注意力头的专业化
| 头类型 | 关注模式 | 具体功能 | 示例 |
|---|---|---|---|
| 局部语法头 | 邻近词关系 | 捕捉局部语法结构 | 检测主谓一致、时态一致 |
| 长程依赖头 | 远程依赖 | 捕捉句法长程联系 | 代词与先行词的关系 |
| 语义角色头 | 上下文语义 | 识别语义角色 | 施事、受事、工具等 |
| 话题连贯头 | 话题一致性 | 维持话题连贯性 | 确保生成内容不跑题 |
| 风格控制头 | 语言风格 | 控制生成文本风格 | 正式、口语、技术等风格 |
6.3 多头注意力的优势
- 表示多样性:每个头学习不同的关注模式
- 并行计算:多个头可以并行计算,提高效率
- 容错性:即使某些头失效,其他头仍能工作
- 可解释性:可以通过可视化注意力权重理解模型决策
7. 生成过程(推理)直觉
生成时,GPT 采用"自回归"方式:
7.1 自回归生成算法
def autoregressive_generation(model, prompt, max_length):
tokens = tokenize(prompt)
for i in range(max_length - len(tokens)):
# 前向传播,获取下一个token的概率分布
logits = model(tokens)
next_token_logits = logits[-1, :] # 最后一个位置的输出
# 采样策略
next_token = sampling_strategy(next_token_logits)
# 添加到序列中
tokens.append(next_token)
if next_token == EOS_TOKEN: # 结束符
break
return detokenize(tokens)7.2 生成策略比较
7.2.1 贪婪搜索(Greedy Search)
def greedy_sampling(logits):
return torch.argmax(logits, dim=-1)优点:计算简单,速度快
缺点:容易陷入重复,缺乏多样性
7.2.2 束搜索 (Beam Search)
def beam_search(model, prompt, beam_width=5, max_length=100):
# 维护beam_width个最有可能的序列
beams = [([], 0.0)] # (token序列, 对数概率)
for step in range(max_length):
new_beams = []
for tokens, score in beams:
logits = model(tokens)[-1]
topk_tokens = torch.topk(logits, beam_width)
for token, log_prob in zip(topk_tokens.indices, topk_tokens.values):
new_beams.append((tokens + [token], score + log_prob))
# 选择top-k
beams = sorted(new_beams, key=lambda x: x[1], reverse=True)[:beam_width]
return beams[0][0]优点:生成质量较高
缺点:计算开销大,可能过于保守
7.2.3 温度采样 (Temperature Sampling)
def temperature_sampling(logits, temperature=0.8):
logits = logits / temperature
probabilities = torch.softmax(logits, dim=-1)
return torch.multinomial(probabilities, num_samples=1)优点:平衡质量和多样性
缺点:需要调整温度参数
7.2.4 Top-k 和 Top-p 采样
def top_k_sampling(logits, k=50):
indices_to_remove = logits < torch.topk(logits, k)[0][..., -1, None]
logits[indices_to_remove] = -float('Inf')
return torch.multinomial(torch.softmax(logits, dim=-1), num_samples=1)
def top_p_sampling(logits, p=0.9):
sorted_logits, sorted_indices = torch.sort(logits, descending=True)
cumulative_probs = torch.cumsum(torch.softmax(sorted_logits, dim=-1), dim=-1)
# 移除累积概率超过p的token
sorted_indices_to_remove = cumulative_probs > p
sorted_indices_to_remove[..., 1:] = sorted_indices_to_remove[..., :-1].clone()
sorted_indices_to_remove[..., 0] = 0
indices_to_remove = sorted_indices_to_remove.scatter(1, sorted_indices, sorted_indices_to_remove)
logits[indices_to_remove] = -float('Inf')
return torch.multinomial(torch.softmax(logits, dim=-1), num_samples=1)优点:控制生成多样性,避免低质量token
7.3 生成过程的可视化示例
初始输入: "人工智能是"
步骤1: 模型预测下一个token → "未来"
当前序列: "人工智能是未来"
步骤2: 模型预测下一个token → "的"
当前序列: "人工智能是未来的"
步骤3: 模型预测下一个token → "发展"
当前序列: "人工智能是未来的发展"
步骤4: 模型预测下一个token → "方向"
当前序列: "人工智能是未来的发展方向"
步骤5: 模型预测下一个token → "。"
当前序列: "人工智能是未来的发展方向。"
生成结束8. 数学本质:条件概率链式法则
GPT 的核心概率建模基于:
$$ P(w_1, w_2, ..., w_T) = \prod_{t=1}^T P(w_t | w_{<t}) $$
每一步都是一个条件概率预测问题。
8.1 训练与推理的差异
| 方面 | 训练阶段 | 推理阶段 |
|---|---|---|
| 计算方式 | 并行计算所有位置 | 顺序逐个生成 |
| 注意力掩码 | 下三角掩码 | 下三角掩码 |
| 输入长度 | 固定长度序列 | 逐渐增长的序列 |
| 目标 | 最小化损失函数 | 生成高质量文本 |
8.2 损失函数详解
GPT 使用交叉熵损失函数:
$$ \mathcal{L} = -\frac{1}{N} \sum_{i=1}^{N} \sum_{t=1}^{T} \log P(w_t^{(i)} | w_{<t}^{(i)}) $$
其中:
- $N$ 是批次中的序列数量
- $T$ 是序列长度
- $w_t^{(i)}$ 是第 $i$ 个序列的第 $t$ 个token
8.3 梯度计算与优化
由于Transformer的并行性,GPT可以使用标准的反向传播算法:
- 通过自动微分计算梯度
- 使用AdamW等优化器更新参数
- 应用梯度裁剪防止梯度爆炸
9. GPT 与 BERT 的对比直觉
| 特征 | BERT | GPT |
|---|---|---|
| 架构 | Transformer Encoder | Transformer Decoder |
| 方向 | 双向(上下文填空) | 单向(序列生成) |
| 任务 | 理解(分类、问答) | 生成(对话、续写) |
| 输入掩蔽 | 随机 Mask | 下三角 Mask |
| 典型用途 | NLU(语言理解) | NLG(语言生成) |
| 预训练目标 | 掩码语言建模 | 下一个词预测 |
| 推理方式 | 一次性前向计算 | 自回归生成 |
| 上下文利用 | 全上下文 | 左上下文 |
9.1 架构差异图示
BERT (Encoder):
输入: [CLS] 我 爱 机 器 学 习 [SEP]
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
[Transformer Encoder × L]
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
输出: E₀ E₁ E₂ E₃ E₄ E₅ E₆ E₇
↑
[CLS]用于分类任务
GPT (Decoder):
输入: 我 爱 机 器 学 习
↓ ↓ ↓ ↓ ↓ ↓
[Transformer Decoder × L]
↓ ↓ ↓ ↓ ↓ ↓
输出: 爱 机 器 学 习 <end>9.2 应用场景对比
BERT 更适合:
- 文本分类(情感分析、主题分类)
- 命名实体识别
- 问答系统
- 语义相似度计算
GPT 更适合:
- 文本生成(故事、诗歌、代码)
- 对话系统
- 内容创作
- 语言翻译(特别是低资源语言)
9.3 混合架构:Encoder-Decoder
后来的模型如 T5、BART 结合了两者的优点:
- 编码器理解输入(类似BERT)
- 解码器生成输出(类似GPT)
- 适合序列到序列任务:摘要、翻译、改写等
10. GPT 的训练技巧与优化
10.1 规模化定律 (Scaling Laws)
研究表明,模型性能遵循幂律关系:
$$ L(N, D) = \left(\frac{N_c}{N}\right)^{\alpha_N} + \left(\frac{D_c}{D}\right)^{\alpha_D} + L_\infty $$
其中:
- $N$ 是模型参数量
- $D$ 是训练数据量
- $L$ 是测试损失
这意味着增大模型规模和数据量可以持续提升性能。
10.2 训练稳定性技术
10.2.1 梯度裁剪
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0)10.2.2 学习率调度
- 线性warmup
- 余弦衰减
- 线性衰减
10.2.3 精度训练
- FP16混合精度
- BF16脑浮点数
- 梯度检查点
10.3 指令微调与对齐
10.3.1 监督微调 (SFT)
使用人工标注的指令-回答对微调模型:
输入: "写一首关于春天的诗"
输出: "春风拂面花香溢,...(人工写的诗)"10.3.2 人类反馈强化学习 (RLHF)
- 收集比较数据:人工对模型输出排序
- 训练奖励模型:学习人类的偏好
- 强化学习微调:使用PPO算法优化策略
11. GPT 的应用领域
11.1 内容创作
- 文章写作:新闻、博客、技术文档
- 创意写作:小说、诗歌、剧本
- 营销文案:广告词、产品描述、邮件
11.2 编程辅助
- 代码生成:根据描述生成代码
- 代码补全:智能代码建议
- 代码解释:解释复杂代码的功能
- bug修复:识别和修复代码错误
11.3 教育辅导
- 答疑解惑:回答学生问题
- 个性化学习:根据学生水平调整内容
- 作业辅导:帮助解决学习难题
11.4 商业应用
- 客服机器人:自动回答客户问题
- 数据分析:从文本数据提取洞察
- 报告生成:自动生成业务报告
11.5 研究与开发
- 科学发现:帮助研究人员提出假设
- 文献综述:总结研究领域进展
- 实验设计:协助设计科学实验
12. GPT 的局限性
12.1 技术局限性
- 幻觉问题:可能生成看似合理但不正确的内容
- 重复生成:在某些情况下会陷入重复循环
- 上下文限制:受限于最大序列长度
- 推理能力有限:复杂逻辑推理仍有困难
12.2 伦理与社会问题
- 偏见放大:可能放大训练数据中的社会偏见
- 信息滥用:可能被用于生成虚假信息
- 就业影响:可能替代某些文案、编程工作
- 隐私风险:可能记忆并泄露训练数据中的敏感信息
12.3 解决方案与发展方向
- 事实核查:结合知识库验证生成内容
- 透明度提升:提供生成内容的置信度
- 对齐研究:确保模型价值观与人类一致
- 多模态扩展:结合视觉、听觉等多模态信息
13. 未来展望
13.1 技术发展趋势
- 规模继续扩大:参数量和数据量持续增长
- 多模态融合:文本、图像、音频、视频统一建模
- 推理能力提升:增强逻辑推理和数学能力
- 效率优化:降低计算成本和推理延迟
13.2 应用场景扩展
- 个性化AI助手:深度理解个人需求和偏好
- 科学发现助手:加速科学研究进程
- 创意合作工具:与人类共同进行艺术创作
- 教育平等推动:为全球提供高质量教育资源
13.3 社会影响
- 生产力革命:大幅提升知识工作效率
- 教育变革:个性化学习成为常态
- 创作民主化:更多人能够参与高质量内容创作
- 新职业出现:AI培训师、提示工程师等新岗位
14. 总结:GPT 的思维方式
- 语言是概率分布,不是符号规则
- 理解来源于预测:能预测即意味着理解
- 生成来源于上下文:模型通过注意力权重捕捉语义依赖
- 知识是分布式表示:信息编码在高维向量的几何关系中
核心洞见: GPT 就像一个"概率驱动的语言物理引擎"——通过连续预测下一个词,构建出语义流畅、逻辑连贯的文本世界。它不是一个简单的模式匹配系统,而是一个能够理解语言内在规律并创造性运用的智能系统。