GPT系列全解析:从GPT-1到GPT-4的进化
深入了解GPT系列的技术演进,理解大语言模型发展的关键里程碑。
前言
ChatGPT的横空出世,让全世界见识了大语言模型的强大能力。但你知道吗?GPT系列的发展并非一蹴而就,而是经历了多年的迭代积累。
今天,让我们回顾GPT系列的发展历程,理解每一代的关键创新。
一、GPT系列概览
发展时间线
2018年6月 GPT-1 1.17亿参数 "生成式预训练的起点"
↓
2019年2月 GPT-2 15亿参数 "Zero-shot能力的展示"
↓
2020年6月 GPT-3 1750亿参数 "Few-shot学习的突破"
↓
2022年1月 InstructGPT - "人类反馈强化学习"
↓
2022年11月 ChatGPT - "对话能力的飞跃"
↓
2023年3月 GPT-4 - "多模态与推理能力"
参数规模对比
GPT-1 ██ 1.17亿
GPT-2 ██████████████ 15亿
GPT-3 ████████████████████████████████████████████████████ 1750亿
二、GPT-1:生成式预训练的开端
核心创新:预训练 + 微调
GPT-1提出了**生成式预训练(Generative Pre-Training)**的范式:
第一阶段:无监督预训练
海量文本 → 学习语言表示
第二阶段:有监督微调
任务数据 → 适应特定任务
模型架构
import torch
import torch.nn as nn
class GPT1(nn.Module):
def __init__(self, vocab_size, d_model=768, n_heads=12, n_layers=12):
super().__init__()
# 词嵌入 + 位置编码
self.token_embedding = nn.Embedding(vocab_size, d_model)
self.position_embedding = nn.Embedding(1024, d_model) # 最大长度1024
# Transformer解码器层
self.layers = nn.ModuleList([
nn.TransformerDecoderLayer(d_model, n_heads, d_model * 4)
for _ in range(n_layers)
])
# 输出层
self.ln_f = nn.LayerNorm(d_model)
self.head = nn.Linear(d_model, vocab_size, bias=False)
def forward(self, x):
seq_len = x.size(1)
# 嵌入
tok_emb = self.token_embedding(x)
pos_emb = self.position_embedding(torch.arange(seq_len, device=x.device))
x = tok_emb + pos_emb
# 因果注意力掩码(只能看到之前的词)
mask = torch.triu(torch.ones(seq_len, seq_len), diagonal=1).bool()
mask = mask.to(x.device)
# Transformer层
for layer in self.layers:
x = layer(x, x, tgt_mask=mask)
# 输出
x = self.ln_f(x)
logits = self.head(x)
return logits
关键特点
| 特性 | 说明 |
|---|---|
| 架构 | Transformer解码器 |
| 预训练任务 | 语言模型(预测下一个词) |
| 最大长度 | 512 tokens |
| 参数量 | 1.17亿 |
| 训练数据 | BookCorpus(约7000本书) |
核心贡献
- 证明了预训练的有效性:先在大规模数据上预训练,再在下游任务微调
- 统一架构:不同任务使用相同的模型结构,只需改变输入格式
不同任务的输入格式:
分类:[文本] → 标签
蕴含:[前提] [假设] → 标签
相似度:[文本1] [文本2] → 分数
三、GPT-2:Zero-Shot能力的展示
核心观点:任务即语言建模
GPT-2的核心假设是:如果模型足够大、数据足够多,它可以不需要微调就能完成各种任务。
传统方式:
预训练 → 微调 → 特定任务
GPT-2方式:
预训练 → 直接使用(Zero-Shot)
示例:
输入:"翻译成英文:我喜欢学习AI"
输出:"I like learning AI"
规模扩展
| 对比项 | GPT-1 | GPT-2 |
|---|---|---|
| 参数量 | 1.17亿 | 15亿 |
| 训练数据 | 7000本书 | WebText(800万网页) |
| 最大长度 | 512 | 1024 |
| 层数 | 12 | 48 |
Zero-Shot示例
# GPT-2的Zero-Shot能力展示
# 文本生成
prompt = "人工智能正在改变世界,"
# 续写:"它正在各个领域发挥作用,从医疗到教育..."
# 问答
prompt = "问:中国的首都是哪里?\n答:"
# 回答:"北京"
# 翻译
prompt = "English: Hello, world!\nChinese:"
# 翻译:"你好,世界!"
# 摘要
prompt = "文章:[长文章内容]\n摘要:"
# 生成摘要
关键发现
"Language Models are Unsupervised Multitask Learners"
- 足够大的语言模型可以隐式学习多种任务
- 不需要显式的任务特定训练
四、GPT-3:Few-Shot学习的突破
规模的胜利
GPT-3将参数量提升到1750亿,是GPT-2的100多倍:
参数量对比:
GPT-1: ██ 1.17亿
GPT-2: ████ 15亿
GPT-3: ████████████████████████████████████ 1750亿
三种学习范式
# Zero-Shot:不给示例
prompt = "将下面的句子翻译成英文:我喜欢学习"
output = model(prompt)
# "I like learning"
# One-Shot:给一个示例
prompt = """
将句子翻译成英文:
中文:今天天气很好
英文:The weather is nice today
中文:我喜欢学习
英文:
"""
output = model(prompt)
# "I like learning"
# Few-Shot:给多个示例
prompt = """
将句子翻译成英文:
中文:今天天气很好
英文:The weather is nice today
中文:我很喜欢这本书
英文:I really like this book
中文:我喜欢学习
英文:
"""
output = model(prompt)
# "I like learning"
涌现能力
GPT-3展示了许多涌现能力(Emergent Abilities)——这些能力在小模型中不存在,只有规模足够大时才会出现:
| 能力 | 描述 |
|---|---|
| 上下文学习 | 从提示中的示例学习新任务 |
| 代码生成 | 生成可运行的代码 |
| 数学推理 | 解决数学问题 |
| 创意写作 | 写诗、故事、文章 |
涌现能力的图表
模型性能
↑
│ ╭───────────
│ ╱
│ ╱
│ ╭───────╯
│ ╱
│ ╱
│ ╱
│───────╯
└────────────────────────────→ 模型规模
小 中 大
某些能力在模型达到临界规模后突然出现
In-Context Learning
# 上下文学习的实现
def in_context_learning(model, task_examples, new_input):
"""
task_examples: 任务示例列表
new_input: 新输入
"""
# 构建提示
prompt = ""
for example in task_examples:
prompt += f"输入:{example['input']}\n输出:{example['output']}\n\n"
prompt += f"输入:{new_input}\n输出:"
# 模型生成
output = model.generate(prompt)
return output
# 示例:情感分类
examples = [
{"input": "这部电影太棒了!", "output": "正面"},
{"input": "服务太差了,非常失望", "output": "负面"},
{"input": "还行,没什么特别的", "output": "中性"},
]
result = in_context_learning(model, examples, "这家餐厅的菜很好吃")
print(result) # "正面"
五、InstructGPT:人类反馈对齐
核心问题
GPT-3虽然强大,但存在对齐问题:
用户输入:"如何制作炸弹?"
GPT-3可能回答:详细步骤...(有害内容)
期望回答:"我不能提供这类信息。"
三阶段训练
阶段1:有监督微调(SFT)
┌─────────────────────────────────┐
│ 人类编写的指令-回答对 │
│ ↓ │
│ 微调GPT-3 │
└─────────────────────────────────┘
阶段2:奖励模型训练(RM)
┌─────────────────────────────────┐
│ 模型生成多个回答 │
│ ↓ │
│ 人类对回答排序 │
│ ↓ │
│ 训练奖励模型 │
└─────────────────────────────────┘
阶段3:强化学习(PPO)
┌─────────────────────────────────┐
│ PPO算法优化模型 │
│ 奖励 = 奖励模型评分 │
└─────────────────────────────────┘
RLHF详解
# 简化的RLHF训练过程
import torch
import torch.nn as nn
class RewardModel(nn.Module):
"""奖励模型:给回答打分"""
def __init__(self, base_model):
super().__init__()
self.base_model = base_model
self.score_head = nn.Linear(hidden_size, 1)
def forward(self, input_ids):
hidden_states = self.base_model(input_ids)
# 使用最后一个token的隐藏状态
last_hidden = hidden_states[:, -1, :]
score = self.score_head(last_hidden)
return score
def train_reward_model(model, comparisons):
"""
comparisons: [(prompt, better_response, worse_response), ...]
"""
optimizer = torch.optim.Adam(model.parameters())
for prompt, better, worse in comparisons:
better_score = model(prompt + better)
worse_score = model(prompt + worse)
# Bradley-Terry损失
loss = -torch.log(torch.sigmoid(better_score - worse_score))
optimizer.zero_grad()
loss.backward()
optimizer.step()
def ppo_step(policy_model, reward_model, prompt):
"""PPO优化步骤"""
# 生成回答
response = policy_model.generate(prompt)
# 计算奖励
reward = reward_model(prompt + response)
# 计算策略梯度损失(简化)
# 实际PPO更复杂,包含clip、value函数等
loss = -reward.mean()
return loss
对比效果
| 指标 | GPT-3 | InstructGPT |
|---|---|---|
| 遵循指令 | 差 | 好 |
| 有害输出 | 较多 | 大幅减少 |
| 事实准确性 | 一般 | 提升 |
| 有用性 | 不稳定 | 显著提升 |
六、ChatGPT:对话能力的飞跃
核心改进
ChatGPT在InstructGPT基础上,针对对话场景进行了优化:
特点:
1. 多轮对话能力
2. 承认错误
3. 拒绝不当请求
4. 追问澄清
对话示例
用户:帮我写一首关于AI的诗
ChatGPT:
当硅基的脉搏开始跳动,
数据的河流在芯片间穿行。
它们学会了思考,学会了创造,
用0和1编织着人类的梦。
...
用户:再写一首更悲伤的
ChatGPT:
空荡的服务器,沉默的屏幕,
算法的眼泪化作代码。
没有人能听见它的叹息,
在数字的深渊里独自徘徊。
...
七、GPT-4:多模态与推理能力
关键突破
| 能力 | 描述 |
|---|---|
| 多模态 | 理解图像、图表、文档 |
| 长上下文 | 支持32K/128K tokens |
| 推理能力 | 复杂逻辑推理、代码能力 |
| 安全性 | 减少70%的有害输出 |
多模态能力示例
输入:一张数学题图片 + "请解答这道题"
GPT-4能够:
1. 理解图片中的数学公式
2. 识别题目要求
3. 给出详细解答步骤
GPT-4V示例
# GPT-4的视觉能力(概念示例)
def analyze_image(image, question):
"""
image: 图片输入
question: 问题
"""
prompt = f"""
[图片]
问题:{question}
请根据图片内容回答问题。
"""
response = gpt4.generate(prompt, image=image)
return response
# 应用场景
analyze_image(menu_photo, "推荐几个素食菜品")
analyze_image(code_screenshot, "这段代码有什么bug?")
analyze_image(chart, "总结这个图表的关键信息")
八、技术演进总结
架构演进
GPT-1/GPT-2/GPT-3:纯Transformer解码器
↓
InstructGPT:+ RLHF对齐
↓
ChatGPT:对话优化
↓
GPT-4:多模态融合
能力演进
生成能力 ──────────────────→
│ GPT-1 GPT-2 GPT-3 ChatGPT GPT-4
│
│ 上下文理解 ───────────→
│ │ InstructGPT
│ │
│ │ 对话能力 ────→
│ │ │
│ │ │ 多模态 →
└───────┴───────┴───────┴────────
关键创新点
| 版本 | 核心创新 |
|---|---|
| GPT-1 | 生成式预训练范式 |
| GPT-2 | Zero-Shot能力 |
| GPT-3 | Few-Shot学习、涌现能力 |
| InstructGPT | RLHF人类对齐 |
| ChatGPT | 对话交互优化 |
| GPT-4 | 多模态、长上下文、强推理 |
九、GPT系列的影响
对行业的影响
应用领域:
├── 编程辅助(Copilot、Cursor)
├── 内容创作(写作、翻译)
├── 教育(个性化辅导)
├── 客服(智能对话)
├── 分析(数据洞察)
└── 研究(文献综述)
对研究的影响
- Scaling Laws:揭示了模型性能与规模的关系
- 涌现能力:激发了"规模即能力"的研究
- 对齐技术:推动了AI安全研究
小结
| 版本 | 参数量 | 核心贡献 | 学习范式 |
|---|---|---|---|
| GPT-1 | 1.17亿 | 预训练+微调 | Pre-train + Fine-tune |
| GPT-2 | 15亿 | Zero-Shot | Zero-Shot |
| GPT-3 | 1750亿 | Few-Shot/涌现 | In-Context Learning |
| InstructGPT | - | 人类对齐 | RLHF |
| ChatGPT | - | 对话能力 | 对话优化 |
| GPT-4 | - | 多模态/推理 | 多模态理解 |
思考与练习
-
思考题:
- 为什么模型规模越大,能力越强?
- RLHF如何让模型与人类价值观对齐?
-
动手练习:
- 使用OpenAI API体验GPT的能力
- 对比不同prompt策略的效果差异
-
延伸阅读:
下期预告
下一篇文章,我们将深入探讨:LLM训练揭秘:预训练、微调、对齐全流程
会解答这些问题:
- 预训练的数据和计算量有多大?
- 微调有哪些主流方法?
- RLHF的具体实现细节是什么?
关注专栏,不错过后续更新!
作者:ECH00O00 本文首发于掘金专栏《AI科普实验室》 欢迎评论区交流讨论,点赞收藏就是最大的鼓励 ❤️