自回归模型:从 GPT 到现代语言模型的生成范式

AI 前沿自回归模型openstarry.com

自回归模型:从 GPT 到现代语言模型的生成范式

自回归模型(Autoregressive Model)是当今最成功的语言模型范式。GPT、LLaMA、Claude 等主流大语言模型都基于自回归生成——通过逐个预测下一个 token 来产生连贯的文本。

什么是自回归生成?

自回归生成的核心思想极其简单:每次只预测下一个 token,然后将已生成的 token 作为输入继续预测

自回归生成过程:

输入: "今天天气"
预测: "今天天气" → "真"        (下一个 token)
输入: "今天天气真"
预测: "今天天气真" → "好"       (下一个 token)
输入: "今天天气真好"
预测: "今天天气真好" → "啊"     (下一个 token)
...
最终输出: "今天天气真好啊!"

数学表示:
P(x_1, x_2, ..., x_n) = P(x_1) × P(x_2|x_1) × P(x_3|x_1,x_2) × ... × P(x_n|x_1,...,x_{n-1})
                        = ∏ P(x_t | x_1, ..., x_{t-1})

这种"一个接一个"的生成方式看似低效,但它正是大语言模型成功的关键。


训练目标:下一个 token 预测

自回归模型的训练目标就是最大化给定前文时下一个 token 的条件概率

# 训练数据示例
# 输入: "人工智能正在改变世界"
# 标签: "工智能正在改变世界" (右移一位)

# 前向传播
logits = model("人", "工", "智", "能", "正", "在", "改", "变")
# logits 形状: [seq_len, vocab_size]

# 损失计算(交叉熵)
loss = CrossEntropyLoss(logits[0], target="工")  # 预测 "工"
loss += CrossEntropyLoss(logits[1], target="智")  # 预测 "智"
loss += CrossEntropyLoss(logits[2], target="能")  # 预测 "能"
...

# 等价于:每个位置独立预测下一个 token

Teacher Forcing:训练的核心技巧

Teacher Forcing 是自回归模型训练的关键技巧:训练时使用真实标签作为下一步的输入,而不是模型的预测

训练过程(Teacher Forcing):

步骤 1: 输入 "人" → 预测 "工" ✓(真实标签是 "工")
步骤 2: 输入 "工" → 预测 "智" ✓(使用真实标签 "工")
步骤 3: 输入 "智" → 预测 "能" ✓(使用真实标签 "智")

注意:步骤 2 用的是真实的 "工",不是模型预测的可能错误的结果

对比(不使用 Teacher Forcing):
步骤 1: 输入 "人" → 预测 "工"(可能预测错误)
步骤 2: 输入 "工"(模型预测) → 可能输入已经错了
步骤 3: 错误累积,训练不稳定

Teacher Forcing 的利与弊

方面 使用 Teacher Forcing 不使用 Teacher Forcing
训练速度快(并行计算所有位置)慢(需要串行生成)
训练稳定性稳定(每步输入正确)不稳定(错误累积)
曝光偏差存在(训练用真实,推理用预测)不存在

解码策略:从概率到文本

训练完成后,模型输出的是每个位置的概率分布。如何从概率分布中选择 token?这就是解码策略。

1. 贪婪搜索(Greedy Search)

每次都选概率最高的 token。

# 贪婪搜索
def greedy_decode(model, start_tokens, max_len):
    tokens = start_tokens
    for _ in range(max_len):
        logits = model(tokens)
        next_token = logits[-1].argmax()  # 选概率最高的
        tokens = torch.cat([tokens, next_token.unsqueeze(0)])
    return tokens

# 优点:简单、快速
# 缺点:可能错过全局最优解

2. 束搜索(Beam Search)

同时维护 k 个最优候选序列,每步扩展每个候选。

束搜索(Beam Size = 2):

初始: [""](分数 = 0)

步骤 1: 扩展每个候选
  "" → " 你" (0.8)
  "" → " 我" (0.6)
  "" → " 他" (0.3)  ← 淘汰(只保留 top-2)

步骤 2: 继续扩展
  " 你" → " 你 好" (0.8×0.9=0.72)
  " 你" → " 你 是" (0.8×0.7=0.56)
  " 我" → " 我 们" (0.6×0.85=0.51)
  " 我" → " 我 的" (0.6×0.6=0.36)  ← 淘汰

步骤 3: 继续... 直到生成 EOS 或达到最大长度

最终选择得分最高的完整序列

3. 采样方法

从概率分布中随机采样,增加生成多样性。

# 温度采样
def temperature_sample(logits, temperature=1.0):
    # temperature < 1: 分布更尖锐(更确定)
    # temperature > 1: 分布更平坦(更随机)
    probs = softmax(logits / temperature)
    return torch.multinomial(probs, 1)

# Top-k 采样
def top_k_sample(logits, k=50):
    # 只从概率最高的 k 个 token 中采样
    top_k_vals, top_k_idx = logits.topk(k)
    probs = softmax(top_k_vals)
    selected = torch.multinomial(probs, 1)
    return top_k_idx[selected]

# Top-p (Nucleus) 采样
def top_p_sample(logits, p=0.9):
    # 从累积概率达到 p 的最小 token 集合中采样
    sorted_probs, sorted_idx = sort(softmax(logits), descending=True)
    cumsum = cumsum(sorted_probs)
    mask = cumsum <= p
    mask[0] = True  # 至少保留一个
    filtered_probs = sorted_probs * mask
    filtered_probs = filtered_probs / filtered_probs.sum()
    selected = torch.multinomial(filtered_probs, 1)
    return sorted_idx[selected]

解码策略对比

策略 特点 适用场景
贪婪搜索最快,但重复、无趣翻译、摘要等确定性任务
束搜索质量较高,但仍偏保守机器翻译、语音识别
温度采样控制多样性与确定性的平衡对话生成、创意写作
Top-k 采样排除低概率 token,减少噪声通用文本生成
Top-p 采样自适应候选集大小,效果最好当前主流 LLM 的默认选择

自回归模型的优势与局限

优势

局限


自回归模型的发展脉络

自回归语言模型的发展:

2018: GPT-1(1.17 亿参数)
  - 首次证明生成式预训练的有效性

2019: GPT-2(15 亿参数)
  - 展示了零样本学习能力
  - "语言模型是无监督多任务学习者"

2020: GPT-3(1750 亿参数)
  - 发现了 in-context learning 能力
  - 少样本学习的突破

2022: InstructGPT / ChatGPT
  - 引入 RLHF 对齐训练
  - 从"能力强"到"听话好用"

2023-2024: GPT-4, Claude 3, LLaMA 3
  - 多模态、长上下文、推理能力
  - 自回归范式的全面开花

总结

自回归模型通过"下一个 token 预测"这个看似简单的目标,构建出了当今最强大的语言模型。从训练时的 Teacher Forcing 到推理时的多种解码策略,自回归范式在效率和质量之间找到了精妙的平衡。理解自回归模型的原理和解码策略,是理解现代大语言模型工作方式的基础。

以 AI 之力,筑未来之境

现在注册,立即免费获赠 200 次大模型调用权益

免费注册 →