一、什么是大模型对齐?

当我们使用 ChatGPT 等大语言模型时,希望它不仅能够生成流畅的文字,还能够理解用户意图、遵循指令、减少有害输出,并在面对不确定的问题时诚实地表达自己的局限。

但问题是:大模型预测下一个 Token 的能力强,并不意味着它一定能够按照人类的期望回答问题。

例如,用户问:

如何提高学习效率?

一个未经充分对齐的模型可能生成一段语法正确、但内容空洞的文字;经过对齐训练的模型,则更有可能给出结构清晰、可执行的建议。

这就引出了大模型对齐(LLM Alignment)。

大模型对齐,是指通过数据、训练方法和评估机制,让模型的行为更符合人类意图、偏好以及预先定义的规范。

常见的对齐目标包括:

  • 指令遵循: 理解并完成用户的合理请求。

  • 有用性: 提供准确、清晰、具有实际价值的回答。

  • 安全性: 降低有害输出和不当行为的风险。

  • 诚实性: 尽量避免编造事实,正确表达不确定性。

  • 偏好一致性: 在多个可行答案中,更倾向于符合人类偏好的回答。

需要注意:对齐并不意味着模型永远正确,也不意味着模型能够完全理解人类价值观。它是一个持续训练、评估和改进的过程。

二、大模型为什么需要对齐?

首先,需要理解一个基本事实:

预训练模型的核心目标,通常是根据已有上下文预测下一个 Token。

例如,输入:

今天天气很好,我准备去

模型需要根据上下文预测后续可能出现的词语。

经过大规模预训练后,模型能够学习语言规律、知识和一定的推理模式。但这并不自动保证它能够:

  1. 按照用户指定的格式输出结果。

  2. 在遇到错误前提时主动指出问题。

  3. 在缺乏可靠信息时承认自己不知道。

  4. 在存在风险的请求中遵循安全规范。

因此,通常需要在预训练之后,通过指令微调、偏好优化等方式进一步调整模型行为。

三、大模型对齐的整体流程

典型的大模型训练流程可以理解为以下几个阶段:

             大规模文本数据
                   |
                   v
             预训练模型
                   |
                   v
          SFT:监督微调
          学习遵循人类指令
                   |
                   v
       偏好数据收集与整理
       好答案 vs. 差答案
                   |
                   v
          偏好对齐训练
           /           \
          v             v
        RLHF           DPO
    奖励模型+强化学习   直接偏好优化
           \           /
            v         v
             对齐后模型
                   |
                   v
          安全评估与效果验证

这是一种常见的训练框架,并不是所有模型都必须严格按照这条路径训练。不同模型可能采用 SFT、DPO、强化学习或其他组合方法。

四、SFT:监督微调是什么?

SFT,全称 Supervised Fine-Tuning,即监督微调。

它的核心思想非常直接:

给模型提供大量高质量的指令和标准答案,让模型学习应该如何回答问题。

例如,训练数据可以是:

{
  "instruction": "解释什么是机器学习",
  "output": "机器学习是人工智能的一个分支,"
}

实际训练时,模型会根据完整的目标回答计算损失,并通过梯度下降更新模型参数。

SFT 的训练过程

用户指令
   |
   v
构造指令-答案数据集
   |
   v
模型生成预测结果
   |
   v
计算预测与标准答案的损失
   |
   v
反向传播更新参数
   |
   v
得到指令微调模型

SFT 的优点

  • 能够让模型学习特定的回答格式。

  • 能够提升模型的指令遵循能力。

  • 可以使用人工编写或筛选后的高质量示例。

  • 适合领域适配,例如法律、医疗、金融等任务。

SFT 的局限

SFT 主要学习示例中提供的目标答案。如果训练数据质量不高,模型可能学到错误知识、不合理的回答模式,或者对训练数据产生过度拟合。

另外,SFT 不等于偏好优化。标准 SFT 通常直接学习目标答案,并不显式比较同一个问题下的多个候选答案哪个更好。

五、RLHF:基于人类反馈的强化学习

RLHF,全称 Reinforcement Learning from Human Feedback,即基于人类反馈的强化学习。

它的核心思路是:

先收集人类对模型回答的偏好,再训练模型,让模型更倾向于生成受到偏好的回答。

经典 RLHF 流程一般包括三个主要步骤。

第一步:SFT 监督微调

先使用高质量的指令和答案训练模型,让模型具备基本的指令遵循能力。

第二步:训练奖励模型

针对同一个问题,让模型生成多个候选答案,再由标注人员比较答案质量。

例如:

候选答案人类偏好
答案 A:解释清楚,给出具体步骤更偏好
答案 B:内容模糊,缺少关键细节较不偏好

通过大量偏好数据,训练一个奖励模型(Reward Model),让它为候选回答打分。

奖励模型的分数用于近似反映人类偏好,但不代表绝对的答案质量。

第三步:强化学习优化

经典方案通常使用 PPO 等强化学习算法优化语言模型,使模型生成的回答获得更高的奖励,同时通过约束控制模型与参考模型之间的偏离。

整体流程如下:

              SFT 模型
                  |
                  v
             生成多个答案
                  |
                  v
              人类排序
                  |
                  v
              偏好数据
                  |
                  v
              奖励模型
                  |
                  v
       PPO 等强化学习算法优化
                  |
                  v
             对齐后的模型

RLHF 的优缺点

优点:

  • 可以利用人类对多个答案的相对偏好。

  • 能够优化难以直接用标准答案衡量的回答质量。

  • 可以结合奖励模型调整模型行为。

局限:

  • 数据标注和奖励模型训练存在成本。

  • 强化学习训练涉及多个模型组件,工程实现较复杂。

  • 奖励模型可能被模型利用漏洞,即出现奖励黑客(Reward Hacking)。

  • 如果奖励信号存在偏差,模型可能学到不理想的行为。

需要强调,RLHF 是一种训练范式,并不意味着所有 RLHF 实现都必须使用 PPO。

六、DPO:不训练奖励模型,也能进行偏好对齐?

DPO,全称 Direct Preference Optimization,即直接偏好优化。

它的目标同样是让模型更倾向于人类偏好的回答,但与经典 RLHF 不同,DPO 可以直接使用偏好数据优化策略模型,而不需要单独训练一个奖励模型,再通过 PPO 进行优化。

1. DPO 使用什么数据?

DPO 常用的数据格式包含三个字段:

{
  "prompt": "如何提高 Python 编程能力?",
  "chosen": "建议通过基础练习、项目实践和代码复盘逐步提升。",
  "rejected": "只要背诵所有 Python 语法,就能成为高手。"
}

其中:

  • prompt:用户的问题。

  • chosen:更受偏好的回答。

  • rejected:相对不受偏好的回答。

2. DPO 的核心思想

DPO 会比较当前策略模型和参考模型对 chosen、rejected 两种回答的相对概率,并利用偏好数据调整模型。

直观地说,它希望模型:

  • 相比参考模型,更倾向于生成 chosen 回答。

  • 相比参考模型,降低对 rejected 回答的相对偏好。

DPO 的经典目标函数可以表示为:

[
\begin{aligned}
\mathcal{L}{DPO}(\pi\theta;\pi_{ref})
= -\mathbb{E}{(x,y_w,y_l)}\Big[
\log \sigma\bigg(\beta \bigg(
&\log\frac{\pi
\theta(y_w|x)}{\pi_{ref}(y_w|x)}\
-&\log\frac{\pi_\theta(y_l|x)}{\pi_{ref}(y_l|x)}
\bigg)\bigg)\Big]
\end{aligned}
]

其中:

  • (\pi_\theta):正在训练的策略模型。

  • (\pi_{ref}):参考模型。

  • (y_w):更受偏好的回答。

  • (y_l):较不受偏好的回答。

  • (\beta):控制偏好优化与参考策略约束之间权衡的超参数。

  • (\sigma):Sigmoid 函数。

这里需要注意,DPO 并不是简单地让 chosen 的概率永远变大、rejected 的概率永远变小,而是通过相对于参考模型的对数概率差构建偏好优化目标。

3. RLHF 与 DPO 的区别

对比维度经典 RLHF(PPO 路线)DPO
偏好数据通常需要需要
独立奖励模型经典流程需要标准 DPO 不需要
强化学习阶段使用 PPO 等方法标准 DPO 直接优化偏好目标
工程复杂度相对较高通常更容易实现
训练稳定性依赖奖励模型与强化学习配置依赖数据质量、超参数和训练配置
适合场景需要强化学习优化的场景希望直接利用偏好数据训练的场景

DPO 并不保证在所有任务上都优于 RLHF。实际效果仍然取决于数据质量、基础模型、训练配置和评估方法。

七、Python 实战:使用 TRL 进行 DPO 微调

理解原理后,可以尝试使用 Hugging Face 生态中的 Transformers、Datasets 和 TRL 实现偏好对齐。

下面给出一个基于 TRL 的简化示例。实际运行前,需要准备兼容的基础模型、偏好数据集以及满足显存要求的计算环境。

1. 安装依赖

pip install torch transformers datasets trl accelerate

不同版本的 TRL API 可能存在差异,运行时应以所安装版本的官方文档为准。

2. 准备偏好数据

创建一个名为 train.jsonl 的文件,每行是一条 JSON 数据:

{"prompt":"什么是机器学习?","chosen":"机器学习是人工智能的一个分支,研究如何让计算机从数据中学习规律。","rejected":"机器学习就是让电脑随便猜答案。"}
{"prompt":"如何学习 Python?","chosen":"先学习基础语法,再通过数据处理和小型项目巩固知识。","rejected":"只需要背诵语法,不需要动手写代码。"}

这些示例仅用于演示数据结构,不足以训练出有实际应用价值的对齐模型。

3. 加载数据并执行 DPO 训练

from datasets import load_dataset
from transformers import AutoModelForCausalLM, AutoTokenizer
from trl import DPOTrainer, DPOConfig

# 换成自己有权访问的因果语言模型
model_name = "Qwen/Qwen2.5-0.5B-Instruct"

tokenizer = AutoTokenizer.from_pretrained(model_name)

model = AutoModelForCausalLM.from_pretrained(model_name)
ref_model = AutoModelForCausalLM.from_pretrained(model_name)

dataset = load_dataset(
    "json",
    data_files="train.jsonl",
    split="train"
)

config = DPOConfig(
    output_dir="./dpo-aligned-model",
    per_device_train_batch_size=1,
    gradient_accumulation_steps=4,
    learning_rate=5e-7,
    num_train_epochs=1,
    logging_steps=1,
    save_strategy="epoch",
    report_to="none",
)

trainer = DPOTrainer(
    model=model,
    ref_model=ref_model,
    args=config,
    train_dataset=dataset,
    processing_class=tokenizer,
)

trainer.train()

trainer.save_model("./dpo-aligned-model")
tokenizer.save_pretrained("./dpo-aligned-model")

代码说明:

  1. 加载基础模型与参考模型。

  2. 读取包含 prompt、chosen 和 rejected 的偏好数据。

  3. 配置训练批次、学习率、训练轮数等参数。

  4. 使用 DPOTrainer 执行偏好优化。

  5. 保存训练后的模型与 Tokenizer。

这是一份用于理解流程的简化代码,并非经过验证的最佳训练配置。显存不足时,可以考虑使用 LoRA、QLoRA 等参数高效微调方法;实际部署还需要处理模型量化、推理框架和兼容性等问题。

八、除了 SFT、RLHF、DPO,还有哪些对齐方法?

大模型对齐并不只有三种方法。

1. RLAIF

RLAIF,即基于 AI 反馈的强化学习。

它利用 AI 模型对候选回答进行评价或排序,以减少部分人工标注需求。其效果依赖评价模型的能力、偏差和校准质量。

2. Constitutional AI

Constitutional AI 是一种通过明确的原则或规则引导模型自我批评、修订回答,并结合相应训练方法改善行为的思路。

它强调利用原则指导训练,而不完全依赖逐条人工偏好标注。

3. KTO

KTO 是另一种偏好优化方法,可以利用正向或负向的反馈信号构造训练目标,不要求数据必须始终以传统的 chosen/rejected 配对形式提供。

4. GRPO 等强化学习方法

GRPO 等方法可用于推理任务中的策略优化,通过对一组候选回答进行相对评价来构建学习信号。

它们常被用于数学推理、代码生成等场景,但不应简单理解为适用于所有对齐任务的通用替代方案。

九、大模型对齐有哪些实际应用?

应用场景对齐目标可能采用的方法
通用聊天助手指令遵循、回答质量SFT、DPO、RLHF
企业知识库问答忠实引用、减少无依据回答SFT、偏好优化、检索评估
AI 编程助手代码正确性、遵循开发要求SFT、代码测试反馈、强化学习
数学推理模型提高推理结果正确率SFT、结果验证、强化学习
医疗 AI 助手可靠性、风险控制、专业表达领域微调、偏好对齐、安全评估
智能客服业务规则遵循、语气一致SFT、偏好优化、规则评估

需要注意:对齐技术不能代替事实验证、权限控制和安全工程。尤其在医疗、金融等高风险场景中,仍需要专业审核、可靠的数据来源和明确的使用边界。

十、学习大模型对齐,应该怎么入门?

如果你希望从零开始学习 LLM Alignment,可以按照以下顺序推进。

第一阶段:理解基础知识

学习 Transformer、Token、Attention、交叉熵损失、梯度下降,以及因果语言模型的训练方式。

目标:理解模型为什么能够通过预测下一个 Token 学习语言规律。

第二阶段:掌握监督微调

学习 Hugging Face Transformers、数据集构造、训练参数、Loss 计算与模型保存。

实战目标:使用一个小型开源模型完成指令微调。

第三阶段:学习偏好数据与奖励建模

理解偏好标注、奖励模型、Bradley–Terry 偏好模型,以及奖励黑客问题。

实战目标:构建 chosen/rejected 数据集,并理解偏好数据如何影响模型行为。

第四阶段:掌握 DPO

理解 DPO 目标函数、参考模型、对数概率差和超参数设置。

实战目标:使用 TRL 完成一个小型偏好优化实验,并对比微调前后的回答。

第五阶段:学习评估与安全

建立测试集,评估回答质量、指令遵循、事实正确性和安全性,并关注训练集污染、过拟合和奖励投机等问题。

最终目标不是只跑通一段训练代码,而是能够回答以下问题:

  • 为什么需要大模型对齐?

  • SFT 与 DPO 有什么本质区别?

  • RLHF 为什么需要奖励模型?

  • DPO 如何利用人类偏好优化模型?

  • 如何判断对齐训练是否真正有效?

十一、总结

大模型对齐是连接基础模型能力与实际用户需求的重要环节。

其中:

  • SFT:通过示范数据教会模型如何回答。

  • RLHF:利用人类偏好训练奖励模型,并通过强化学习等方式优化模型。

  • DPO:直接利用偏好数据优化模型,无需单独训练奖励模型。

  • RLAIF、KTO、GRPO 等方法:为不同反馈形式和优化目标提供了其他选择。

真正理解大模型对齐,不能只记住几个英文缩写,更重要的是理解训练数据、优化目标、模型行为和评估指标之间的关系。

如果你正在学习大模型算法,建议从 SFT 实战 → 偏好数据构建 → DPO 微调 → 对齐效果评估 这条路线开始,逐步建立完整的技术认知。

后续可以进一步深入研究 DPO 的数学推导、奖励模型训练,以及基于 LoRA 的低成本偏好对齐实践。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐