📚 GPT完全指南

GPT完全指南(一):发展历程与核心思想

📅 创建时间
📁 分类 技术

从GPT-1到GPT-4,深入理解大语言模型的发展脉络、核心思想与技术演进

引言:为什么要学习GPT?

GPT(Generative Pre-trained Transformer)是当前AI领域最具影响力的技术之一。从2018年GPT-1问世,到2023年GPT-4引爆全球,这个系列模型不仅推动了NLP技术的革命性进步,更开创了人工智能的新纪元。

GPT的历史地位

里程碑意义
GPT-1 (2018)验证了预训练+微调范式的有效性
GPT-2 (2019)展示了规模带来的涌现能力
GPT-3 (2020)开创了In-Context Learning时代
ChatGPT (2022)让AI对话进入大众视野
GPT-4 (2023)多模态、更强推理能力

技术演进时间线

2017年之前:预GPT时代

Word2Vec (2013) → GloVe (2014) → ELMo (2018) → Transformer (2017)

核心问题

  • 词向量是静态的,无法处理一词多义
  • RNN/LSTM训练慢,难以并行
  • Seq2Seq模型需要大量标注数据

2017年:Transformer横空出世

Google发表”Attention Is All You Need”,提出纯注意力架构:

# Transformer核心公式
# Attention(Q, K, V) = softmax(QK^T / √d_k) V

def scaled_dot_product_attention(Q, K, V, mask=None):
    d_k = Q.size(-1)
    scores = torch.matmul(Q, K.transpose(-2, -1)) / math.sqrt(d_k)
    
    if mask is not None:
        scores = scores.masked_fill(mask == 0, -1e9)
    
    attention_weights = F.softmax(scores, dim=-1)
    output = torch.matmul(attention_weights, V)
    
    return output, attention_weights

Transformer的革命性

  • 完全并行化训练
  • 长程依赖建模能力
  • 统一的编码器-解码器架构

GPT-1:预训练范式的开端

核心论文

“Improving Language Understanding by Generative Pre-Training” (2018, OpenAI)

核心思想

GPT-1提出了两阶段学习范式

Stage 1: 无监督预训练(大规模无标注文本)

Stage 2: 有监督微调(特定任务)

架构特点

# GPT-1配置
class GPT1Config:
    vocab_size = 40478      # BPE词表
    n_positions = 512       # 最大序列长度
    n_embd = 768           # 嵌入维度
    n_layer = 12           # Transformer层数
    n_head = 12            # 注意力头数
    
    # 总参数量:约117M

关键创新

  1. Decoder-only架构:只使用Transformer解码器
  2. 因果注意力掩码:只能看到之前的token
  3. BPE分词:解决OOV问题

预训练目标

# 语言建模目标:预测下一个token
# L1 = Σ log P(u_i | u_{i-k}, ..., u_{i-1}; θ)

def language_modeling_loss(logits, labels):
    """
    logits: (batch_size, seq_len, vocab_size)
    labels: (batch_size, seq_len)
    """
    shift_logits = logits[:, :-1, :].contiguous()
    shift_labels = labels[:, 1:].contiguous()
    
    loss = F.cross_entropy(
        shift_logits.view(-1, shift_logits.size(-1)),
        shift_labels.view(-1)
    )
    return loss

微调方法

# 输入格式统一
# 文本分类: [Start] text [Extract] → label
# 文本蕴含: [Start] premise [Delim] hypothesis [Extract] → label
# 问答: [Start] context [Delim] question [Delim] answer [Extract]

class GPT1ForClassification(nn.Module):
    def __init__(self, gpt_model, num_labels):
        super().__init__()
        self.gpt = gpt_model
        self.classifier = nn.Linear(768, num_labels)
    
    def forward(self, input_ids):
        # 取最后一个token的hidden state
        hidden_states = self.gpt(input_ids)
        cls_hidden = hidden_states[:, -1, :]  # [Extract] token
        logits = self.classifier(cls_hidden)
        return logits

GPT-1的局限

  • 模型规模小,能力有限
  • 仍需针对每个任务微调
  • 上下文窗口仅512

GPT-2:规模的力量

核心论文

“Language Models are Unsupervised Multitask Learners” (2019, OpenAI)

核心思想

GPT-2最重要的发现:足够大的语言模型可以零样本完成多种任务

"All NLP tasks can be framed as question answering"

规模对比

模型参数量层数维度
GPT-2 Small124M12768
GPT-2 Medium355M241024
GPT-2 Large774M361280
GPT-2 XL1.5B481600

数据集:WebText

# WebText数据集
# - 来源:Reddit外链(karma > 3)
# - 规模:800万文档,40GB文本
# - 特点:高质量、多样性

# 数据清洗流程
def preprocess_webtext(document):
    # 1. 去重
    # 2. 语言过滤(只保留英文)
    # 3. 去除样板文本
    # 4. 质量过滤
    return cleaned_document

Zero-Shot能力

# 零样本任务示例

# 翻译
prompt = "Translate English to French: cheese =>"
# 模型输出: "fromage"

# 摘要
prompt = """
Article: [长文本]
TL;DR:
"""
# 模型生成摘要

# 问答
prompt = """
Q: What is the capital of France?
A:"""
# 模型输出: "Paris"

架构改进

class GPT2Block(nn.Module):
    def __init__(self, config):
        super().__init__()
        # Pre-LN: Layer Norm放在前面
        self.ln_1 = nn.LayerNorm(config.n_embd)
        self.attn = CausalSelfAttention(config)
        self.ln_2 = nn.LayerNorm(config.n_embd)
        self.mlp = MLP(config)
    
    def forward(self, x):
        # Pre-LN残差连接
        x = x + self.attn(self.ln_1(x))
        x = x + self.mlp(self.ln_2(x))
        return x

关键改进

  1. Pre-LayerNorm:训练更稳定
  2. 更大的上下文:1024 tokens
  3. 更好的初始化:残差层权重缩放

GPT-2的争议

OpenAI最初拒绝公开完整模型,引发关于AI安全的讨论:

  • 担心被用于生成虚假信息
  • 开创了”负责任发布”先例
  • 最终在验证安全后逐步公开

GPT-3:涌现能力的巅峰

核心论文

“Language Models are Few-Shot Learners” (2020, OpenAI)

规模突破

# GPT-3配置
class GPT3Config:
    # GPT-3 175B
    n_params = 175_000_000_000  # 1750亿参数
    n_layer = 96
    n_head = 96
    d_model = 12288
    d_ff = 49152
    vocab_size = 50257
    n_positions = 2048
    
    # 训练配置
    batch_size = 3_200_000  # tokens per batch
    training_tokens = 300_000_000_000  # 3000亿tokens

模型系列

模型名参数量训练token备注
GPT-3 Small125M300B基线
GPT-3 Medium350M300B
GPT-3 Large760M300B
GPT-3 XL1.3B300B
GPT-3 2.7B2.7B300B
GPT-3 6.7B6.7B300B
GPT-3 13B13B300B
GPT-3 175B175B300Bdavinci

In-Context Learning

GPT-3最重要的发现:模型可以通过上下文示例学习新任务

# Zero-shot: 无示例
prompt_zero = """
Translate English to French:
sea otter =>
"""

# One-shot: 1个示例
prompt_one = """
Translate English to French:
cheese => fromage
sea otter =>
"""

# Few-shot: 多个示例
prompt_few = """
Translate English to French:
cheese => fromage
cat => chat
dog => chien
sea otter =>
"""

涌现能力(Emergent Abilities)

随着模型规模增大,突然出现的新能力:

模型规模    →    涌现能力
< 1B            基础语言生成
1B - 10B        简单推理、翻译
10B - 100B      复杂推理、代码生成
> 100B          数学推理、思维链

典型涌现能力

  • 算术运算
  • 思维链推理(Chain-of-Thought)
  • 代码生成
  • 多语言翻译

Scaling Laws

OpenAI发现的缩放定律:

# 损失与三个因素的幂律关系
# L(N) ∝ N^{-0.076}  # 参数量
# L(D) ∝ D^{-0.095}  # 数据量
# L(C) ∝ C^{-0.050}  # 计算量

# 最优分配
# 给定计算预算C,最优参数量和数据量的比例约为:
# N_opt ∝ C^0.73
# D_opt ∝ C^0.27

def compute_optimal_allocation(compute_budget):
    """计算给定预算下的最优配置"""
    n_params = compute_budget ** 0.73
    n_data = compute_budget ** 0.27
    return n_params, n_data

API发布

GPT-3通过API提供服务,开创商业化先河:

import openai

# 2020年的API调用方式
response = openai.Completion.create(
    engine="davinci",  # 最大模型
    prompt="Translate English to French: Hello, how are you?",
    max_tokens=60,
    temperature=0.7
)

print(response.choices[0].text)

InstructGPT:对齐的开始

核心论文

“Training language models to follow instructions with human feedback” (2022, OpenAI)

为什么需要对齐?

GPT-3的问题:

  • 可能生成有害内容
  • 不遵循用户意图
  • 输出格式不可控
  • 容易”胡说八道”

RLHF训练流程

# 三阶段训练

# Stage 1: 监督微调 (SFT)
# 使用人类标注的高质量对话数据
def sft_training(model, demonstrations):
    """
    demonstrations: [(prompt, ideal_response), ...]
    """
    for prompt, response in demonstrations:
        input_ids = tokenize(prompt + response)
        loss = language_modeling_loss(model(input_ids))
        loss.backward()
        optimizer.step()

# Stage 2: 训练奖励模型 (RM)
class RewardModel(nn.Module):
    def __init__(self, base_model):
        super().__init__()
        self.backbone = base_model
        self.reward_head = nn.Linear(hidden_size, 1)
    
    def forward(self, input_ids):
        hidden = self.backbone(input_ids)
        reward = self.reward_head(hidden[:, -1, :])
        return reward

# 奖励模型训练:偏好对比
def rm_loss(reward_chosen, reward_rejected):
    """
    chosen: 人类偏好的回复
    rejected: 人类不偏好的回复
    """
    return -torch.log(torch.sigmoid(reward_chosen - reward_rejected)).mean()

# Stage 3: PPO强化学习
def ppo_training(policy, reward_model, prompts):
    for prompt in prompts:
        # 生成回复
        response = policy.generate(prompt)
        
        # 计算奖励
        reward = reward_model(prompt + response)
        
        # 加入KL惩罚防止偏离太远
        kl_penalty = kl_divergence(policy, reference_policy)
        total_reward = reward - beta * kl_penalty
        
        # PPO更新
        ppo_update(policy, total_reward)

对齐税(Alignment Tax)

对齐后模型在某些任务上性能下降:

任务GPT-3 175BInstructGPT 1.3B
指令遵循
真实性较差较好
安全性
学术基准略低

ChatGPT:现象级产品

2022年11月30日

ChatGPT发布,5天内用户破百万,两个月破亿。

与InstructGPT的区别

# ChatGPT = InstructGPT + 对话优化

# 训练数据差异
instructgpt_data = [
    {"prompt": "Write a poem", "response": "..."}
]

chatgpt_data = [
    {
        "conversation": [
            {"role": "user", "content": "Hi!"},
            {"role": "assistant", "content": "Hello! How can I help?"},
            {"role": "user", "content": "Write a poem"},
            {"role": "assistant", "content": "..."}
        ]
    }
]

对话格式

# ChatML格式
"""
<|im_start|>system
You are a helpful assistant.
<|im_end|>
<|im_start|>user
Hello!
<|im_end|>
<|im_start|>assistant
Hi! How can I help you today?
<|im_end|>
"""

# 现代API调用
from openai import OpenAI
client = OpenAI()

response = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Hello!"}
    ]
)

GPT-4:多模态与更强推理

核心特性

  1. 多模态输入:支持图像理解
  2. 更长上下文:8K / 32K / 128K
  3. 更强推理:在多项基准上达到人类水平

性能对比

考试/基准GPT-3.5GPT-4
美国律师资格考试~10%~90%
SAT数学70%89%
GRE写作54%80%
LeetCodeEasy级别Hard级别

多模态能力

from openai import OpenAI
client = OpenAI()

response = client.chat.completions.create(
    model="gpt-4-vision-preview",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "What's in this image?"},
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://example.com/image.jpg"
                    }
                }
            ]
        }
    ],
    max_tokens=300
)

GPT-4的神秘面纱

OpenAI未公开GPT-4的详细信息:

  • 参数量(传闻1.7万亿,MoE架构)
  • 训练数据
  • 具体架构改进

GPT技术演进总结

架构演进

Transformer Decoder

Pre-LayerNorm(GPT-2)

更大规模(GPT-3)

RLHF对齐(InstructGPT)

多模态(GPT-4)

关键技术

技术首次出现作用
BPE分词GPT-1处理开放词表
Pre-LNGPT-2稳定训练
Scaling LawsGPT-3指导模型扩展
In-Context LearningGPT-3零样本/少样本学习
RLHFInstructGPT人类偏好对齐
多模态GPT-4跨模态理解

参数量演进

GPT-1:    117M (2018)
GPT-2:    1.5B (2019)  → 10x
GPT-3:    175B (2020)  → 100x
GPT-4:    ~1.7T? (2023) → 10x

开源替代品

主要开源模型

模型参数量开发者特点
LLaMA 27B-70BMeta开源标杆
Mistral7BMistral AI效率最高
Qwen7B-72B阿里中文友好
DeepSeek7B-67BDeepSeek代码能力强
Yi6B-34B零一万物长上下文

为什么要学开源模型?

  1. 可定制:可以针对特定任务微调
  2. 可控制:完全掌控模型行为
  3. 成本低:本地部署无API费用
  4. 隐私保护:数据不离开本地

小结

GPT发展的核心洞见

  1. 规模是关键:更大的模型有质的飞跃
  2. 数据质量重要:高质量数据胜过大规模数据
  3. 预训练范式有效:通用能力可迁移
  4. 对齐是必要的:让模型有用且安全
  5. 涌现能力存在:大模型产生新能力

下一篇预告

深入GPT的核心架构:Decoder-only Transformer的每个组件、位置编码、注意力机制的实现细节。


参考文献

  1. Radford, A. et al. “Improving Language Understanding by Generative Pre-Training” (2018)
  2. Radford, A. et al. “Language Models are Unsupervised Multitask Learners” (2019)
  3. Brown, T. et al. “Language Models are Few-Shot Learners” (2020)
  4. Ouyang, L. et al. “Training language models to follow instructions with human feedback” (2022)
  5. OpenAI. “GPT-4 Technical Report” (2023)