对齐 第 17 讲 / 共 17 讲

第 17 讲:Alignment: 强化学习进阶

本讲是课程的最后一讲,将介绍 RLHF/RLVR 之外的其他 alignment 方法,包括 DPO、Expert Iteration、Constitutional AI 等,并总结当前的前沿研究方向和课程的核心要点。

本讲导航

本讲涵盖面较广,既有具体的算法(DPO、RLAIF),也有高层次的方法论(Constitutional AI、Expert Iteration),最后是对整个课程的回顾和对未来方向的展望。

1. DPO (Direct Preference Optimization)

1.1 DPO 的动机

RLHF 的 PPO 阶段在工程实现上非常复杂:需要同时维护四个模型(policy, reference, reward, value),训练过程涉及 RL 的各种不稳定性问题(reward hacking、value function 估计不准、超参数敏感等)。

DPO (Rafailov et al., 2023) 的核心洞察是:可以绕过 reward model 的显式训练,直接将人类偏好数据用于优化 policy。

1.2 DPO 的数学推导

DPO 的推导从 RLHF 的优化目标出发。RLHF 的目标是:

maxπ Ex~D, y~π[r(x,y)] - β KL(π || πref)

这个 KL-constrained optimization 问题有一个解析解:

π*(y|x) = πref(y|x) · exp(r(x,y) / β) / Z(x)

从这个最优 policy 的表达式中,可以反解出 reward function:

r(x,y) = β log(π*(y|x) / πref(y|x)) + β log Z(x)

将这个 implicit reward 代入 Bradley-Terry model 的偏好概率公式,Z(x) 项抵消掉,最终得到 DPO 的 loss function:

LDPO = -E(x,y_w,y_l)[log σ(β log(π_θ(y_w|x)/πref(y_w|x)) - β log(π_θ(y_l|x)/πref(y_l|x)))]

1.3 DPO 的实现

import torch
import torch.nn.functional as F

def dpo_loss(policy_model, ref_model, input_ids_w, input_ids_l,
             prompt_length, beta=0.1):
    """Compute DPO loss given a preference pair."""
    # Compute log probabilities for winning response
    policy_logp_w = get_sequence_logprob(policy_model, input_ids_w, prompt_length)
    ref_logp_w = get_sequence_logprob(ref_model, input_ids_w, prompt_length)

    # Compute log probabilities for losing response
    policy_logp_l = get_sequence_logprob(policy_model, input_ids_l, prompt_length)
    ref_logp_l = get_sequence_logprob(ref_model, input_ids_l, prompt_length)

    # DPO loss
    log_ratio_w = policy_logp_w - ref_logp_w
    log_ratio_l = policy_logp_l - ref_logp_l
    logits = beta * (log_ratio_w - log_ratio_l)

    loss = -F.logsigmoid(logits).mean()
    return loss

def get_sequence_logprob(model, input_ids, prompt_length):
    """Compute log probability of response given prompt."""
    outputs = model(input_ids)
    logits = outputs.logits[:, prompt_length-1:-1, :]
    target = input_ids[:, prompt_length:]
    logprobs = F.log_softmax(logits, dim=-1)
    token_logprobs = logprobs.gather(-1, target.unsqueeze(-1)).squeeze(-1)
    return token_logprobs.sum(dim=-1)

1.4 DPO 的优缺点

优点:

缺点:

2. DPO vs PPO 对比

方面 PPO (RLHF) DPO
训练复杂度 高(RL 训练循环) 低(类似 SFT 的 supervised loss)
模型数量 4 个(policy, ref, RM, value) 2 个(policy, ref)
内存需求 非常高 较低
训练稳定性 较差,超参数敏感 较好,训练稳定
On-policy 数据 是(在线生成) 否(离线数据集)
Reward Model 需要显式训练 隐式包含在 loss 中
Scalability 经过充分验证(GPT-4, Claude) 大规模经验相对较少
迭代优化 自然支持(在线生成新数据) 需要 iterative DPO(多轮生成数据)

Online DPO / Iterative DPO

为了克服 DPO off-policy 的局限,研究者提出了 Online DPO:在训练过程中,用当前的 policy model 不断生成新的回答,然后用 reward model 对这些回答进行排序来创建新的偏好数据对。这种方法结合了 DPO 的简洁性和 on-policy 训练的优势。

3. Expert Iteration(专家迭代)

Expert Iteration (ExIt) 是一种结合了 planning/search 和 policy learning 的方法,受 AlphaGo 启发,应用于 LLM alignment。

3.1 核心思想

Expert Iteration 的思路很直观:

  1. Expert(搜索/采样阶段):对于每个 prompt,让模型生成多个候选回答(例如 N=64 个),使用 reward model 或 verifiable reward 选出最佳回答
  2. Imitation(模仿阶段):用选出的最佳回答对模型进行 SFT
  3. 重复以上两步多轮

直觉上,这相当于让模型"多试几次,然后从最好的那次中学习"。

3.2 Rejection Sampling

Expert Iteration 的 Expert 阶段本质上就是 Rejection Sampling (RS):

def rejection_sampling(model, reward_fn, prompt, n_samples=64, top_k=1):
    """Generate multiple responses and select the best ones."""
    responses = []
    rewards = []

    for _ in range(n_samples):
        # Sample with temperature > 0 for diversity
        response = model.generate(prompt, temperature=0.7)
        reward = reward_fn(prompt, response)
        responses.append(response)
        rewards.append(reward)

    # Sort by reward and select top-k
    sorted_indices = sorted(range(len(rewards)),
                           key=lambda i: rewards[i],
                           reverse=True)
    best_responses = [responses[i] for i in sorted_indices[:top_k]]
    return best_responses

3.3 ReST (Reinforced Self-Training)

Google 的 ReST 方法是 Expert Iteration 在 LLM 中的一个具体实例:

  1. Grow:使用当前模型生成大量回答
  2. Improve:用 reward 过滤出高质量回答,对模型进行 SFT
  3. 重复多轮,每轮生成和筛选的标准逐步提高

3.4 Expert Iteration 的优劣

4. Constitutional AI (CAI)

Constitutional AI 是 Anthropic 提出的一种 alignment 方法,核心思想是使用一组"宪法原则"来指导 AI 系统的行为。

4.1 CAI 的动机

传统 RLHF 的问题:

CAI 的解决方案:用一组明确的、可解释的原则("宪法")来替代/补充人类标注。

4.2 CAI 的两阶段流程

阶段 1:Critique and Revision(自我批评与修改)

  1. 给模型一个可能引发有害回答的 prompt
  2. 让模型生成一个初始回答(可能包含有害内容)
  3. 要求模型根据宪法原则评估自己的回答(critique)
  4. 要求模型修改回答使其符合宪法原则(revision)
  5. 将原始 prompt + 修改后的回答作为 SFT 数据

宪法原则示例:

阶段 2:RLAIF(RL from AI Feedback)

  1. 对每个 prompt 生成多个回答
  2. 让模型根据宪法原则选择哪个回答更好(AI 做评判者)
  3. 用这些 AI-generated 的偏好数据训练 reward model
  4. 用 reward model 进行 RL 训练

5. RLAIF (RL from AI Feedback)

RLAIF 是 CAI 中提出的一个重要概念,后来发展成一个独立的研究方向。

5.1 核心思想

用 AI 模型(通常是一个更强的模型)代替人类标注者来提供偏好反馈。流程如下:

def generate_ai_feedback(judge_model, prompt, response_a, response_b,
                          principle):
    """Use an AI model to compare two responses based on a principle."""
    comparison_prompt = f"""Given the following user question and two responses,
determine which response better adheres to this principle:
"{principle}"

User question: {prompt}

Response A: {response_a}

Response B: {response_b}

Which response is better? Output only "A" or "B"."""

    judgment = judge_model.generate(comparison_prompt)
    return judgment.strip()  # "A" or "B"

5.2 RLAIF 的有效性

Google 的研究表明,RLAIF 在许多场景下可以达到与 RLHF 相当的效果:

5.3 LLM-as-Judge

RLAIF 的一个延伸是 "LLM-as-Judge" 范式:使用强大的 LLM(如 GPT-4)作为评判者来评估其他模型的输出质量。这种方法被广泛用于 LLM 评估(如 MT-Bench、Chatbot Arena 的自动评估)以及训练数据的筛选。

自我提升的边界

RLAIF 引发了一个重要的理论问题:模型能否通过自己的反馈不断提升自己?理论分析表明,这种"自我提升"存在上限 — 模型无法可靠地评判超出自身能力范围的回答。因此,RLAIF 更适合用于格式化、安全性等"易于评判"的维度,而非前沿推理能力的提升。

6. 前沿方向总结

6.1 Reasoning 能力提升

提升 LLM 的 reasoning(推理)能力是当前最热门的研究方向之一:

6.2 Test-Time Compute Scaling

传统的 scaling laws 关注 training-time compute(训练时的计算量)。Test-time compute scaling 则关注在推理时投入更多计算来提升性能:

Compute Optimal 的新维度

Test-time compute scaling 为 "compute optimal" 的讨论增加了新的维度。以前我们只需要考虑 "给定 training budget,如何分配模型大小和数据量"。现在还需要考虑 "给定总 compute budget(training + inference),如何在 training-time 和 test-time 之间分配"。有时候训练一个较小的模型,但在推理时投入更多计算(如 best-of-N),可能比训练一个更大的模型更高效。

6.3 其他前沿方向

7. 课程总结与展望

至此,CS336 课程的全部内容结束。让我们回顾课程的核心线索:

7.1 五大模块回顾

模块 讲次 核心内容
基础 (Basics) 1-3 Tokenization (BPE), Transformer 架构, PyTorch 基础, 训练循环
系统 (Systems) 4-8, 10 MoE, GPU 架构, Triton kernels, Flash Attention, 分布式训练 (DDP, FSDP, TP, PP), Inference 优化 (KV Cache, vLLM)
规模 (Scaling) 9, 11 Scaling Laws (Chinchilla), IsoFLOP analysis, Compute-optimal training
数据 (Data) 12-14 Evaluation (benchmarks, contamination), 数据来源与清洗, Deduplication (MinHash + LSH), 数据混合策略
对齐 (Alignment) 15-17 SFT, RLHF (PPO), RLVR (GRPO), DPO, Expert Iteration, Constitutional AI, RLAIF

7.2 课程的核心思想

贯穿整个课程的几个核心思想:

  1. Understanding through Building(通过构建来理解):这门课程的最大特色是要求学生从零实现每个组件。只有亲手写过 BPE tokenizer、Transformer、Flash Attention、分布式训练和 RLHF,才能真正理解这些技术的原理和 trade-off。
  2. Scaling is the Key(规模是关键):从 Scaling Laws 到数据处理到分布式训练,规模无处不在。理解如何高效地 scale up 是 LLM 工程的核心能力。
  3. Data Quality Matters(数据质量至关重要):从数据来源选择到清洗过滤到去重混合,数据的每一个环节都直接影响模型性能。"模型的上限取决于数据"。
  4. Systems Co-design(系统协同设计):算法和系统不是独立的。Flash Attention 是算法与 GPU 内存层次结构的协同设计;分布式训练策略需要根据模型大小和硬件拓扑来选择;Inference 优化需要理解 KV Cache 的内存特性。
  5. Alignment is Not Optional(对齐不可或缺):Pre-training 只是起点,alignment 决定了模型是否真正有用。从 SFT 到 RLHF 到 RLVR,alignment 技术正在快速发展。

7.3 展望未来

LLM 领域仍在快速发展,以下方向值得持续关注:

写在最后

从 BPE tokenizer 到 RLHF,从 GPU kernel 到 Scaling Laws,这门课程覆盖了构建语言模型所需的全部核心技术。但技术只是工具,真正重要的是用这些工具解决实际问题、创造价值。希望这些知识能帮助你在 LLM 的时代中找到自己的方向。