05-GPT系列全解析:从GPT-1到GPT-4的进化

116 阅读9分钟

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. 统一架构:不同任务使用相同的模型结构,只需改变输入格式
不同任务的输入格式:

分类:[文本] → 标签
蕴含:[前提] [假设] → 标签
相似度:[文本1] [文本2] → 分数

三、GPT-2:Zero-Shot能力的展示

核心观点:任务即语言建模

GPT-2的核心假设是:如果模型足够大、数据足够多,它可以不需要微调就能完成各种任务

传统方式:
    预训练 → 微调 → 特定任务

GPT-2方式:
    预训练 → 直接使用(Zero-Shot)

示例:
    输入:"翻译成英文:我喜欢学习AI"
    输出:"I like learning AI"

规模扩展

对比项GPT-1GPT-2
参数量1.17亿15亿
训练数据7000本书WebText(800万网页)
最大长度5121024
层数1248

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-3InstructGPT
遵循指令
有害输出较多大幅减少
事实准确性一般提升
有用性不稳定显著提升

六、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-2Zero-Shot能力
GPT-3Few-Shot学习、涌现能力
InstructGPTRLHF人类对齐
ChatGPT对话交互优化
GPT-4多模态、长上下文、强推理

九、GPT系列的影响

对行业的影响

应用领域:
├── 编程辅助(Copilot、Cursor)
├── 内容创作(写作、翻译)
├── 教育(个性化辅导)
├── 客服(智能对话)
├── 分析(数据洞察)
└── 研究(文献综述)

对研究的影响

  • Scaling Laws:揭示了模型性能与规模的关系
  • 涌现能力:激发了"规模即能力"的研究
  • 对齐技术:推动了AI安全研究

小结

版本参数量核心贡献学习范式
GPT-11.17亿预训练+微调Pre-train + Fine-tune
GPT-215亿Zero-ShotZero-Shot
GPT-31750亿Few-Shot/涌现In-Context Learning
InstructGPT-人类对齐RLHF
ChatGPT-对话能力对话优化
GPT-4-多模态/推理多模态理解

思考与练习

  1. 思考题

    • 为什么模型规模越大,能力越强?
    • RLHF如何让模型与人类价值观对齐?
  2. 动手练习

    • 使用OpenAI API体验GPT的能力
    • 对比不同prompt策略的效果差异
  3. 延伸阅读


下期预告

下一篇文章,我们将深入探讨:LLM训练揭秘:预训练、微调、对齐全流程

会解答这些问题:

  • 预训练的数据和计算量有多大?
  • 微调有哪些主流方法?
  • RLHF的具体实现细节是什么?

关注专栏,不错过后续更新!


作者:ECH00O00 本文首发于掘金专栏《AI科普实验室》 欢迎评论区交流讨论,点赞收藏就是最大的鼓励 ❤️