大模型对齐训练的目标是把模型输出行为约束到人类偏好上,解决回答有害、事实编造、拒绝执行等问题。当前工业界两条主流路线分别是RLHF(基于人类反馈的强化学习)和DPO(直接偏好优化)。本文对比两条路线的原理差异、训练流程和落地踩坑点,给出可复用的实现方案。
RLHF训练管线:奖励模型与强化学习微调
RLHF把对齐拆成三个环节。先收集偏好数据:给定同一提示词,让模型生成多条候选回答,标注员按质量排序或两两打分。数据量通常要几千到几万条,质量远重于数量,标注矛盾样本会直接污染奖励模型。接着训练奖励模型:把排序结果转成pair形式,奖励模型对两条回答各输出一个标量,用Bradley-Terry模型让”赢家得分高于输家”;最后用PPO微调策略模型,以奖励模型打分作为奖励信号,同时用KL散度约束策略模型,避免模型偏离原分布输出失控文本。
# 奖励模型训练的核心损失:Bradley-Terry排序损失
import torch
def bradley_terry_loss(r_win, r_lose):
# r_win / r_lose 为同一条提示下两条回答的奖励分值
return -torch.log(torch.sigmoid(r_win - r_lose)).mean()
RLHF的问题是工程链路长:奖励模型、策略模型、参考模型、价值模型四个模型同时参与,显存和调参成本高,PPO对超参数极其敏感,价值模型估计不准时会放大方差,训练过程容易崩溃回退。
DPO直接偏好优化:去掉奖励模型的实现思路
DPO绕开了奖励模型和强化学习循环。核心观察是:最优策略与参考策略的比值可以隐式表达奖励,因此损失函数直接用当前策略、参考策略和偏好对计算。训练时策略模型与参考模型各forward一次,计算两条回答的log概率差,套入log-sigmoid损失,用梯度更新策略模型。训练目标通俗地说:提高被偏好回答的概率,同时压低被拒绝回答的概率,且与参考模型的偏离受beta系数控制。
def dpo_loss(logp_win, logp_lose, ref_win, ref_lose, beta=0.1):
# 当前策略与参考策略的对数概率差
ratio_win = logp_win - ref_win
ratio_lose = logp_lose - ref_lose
logits = beta * (ratio_win - ratio_lose)
return -torch.nn.functional.logsigmoid(logits).mean()
DPO不需要奖励模型,训练显存和实现复杂度大幅下降,业界大量低成本对齐微调都选DPO。代价是它对偏好数据质量更敏感,且没有显式奖励模型做中间校验,模型过度优化的风险要靠beta系数和早停控制。
偏好数据构建:对齐效果的决定因素
数据构建决定对齐上限。实践中需覆盖三类提示词:真实用户高频请求、安全边界场景(毒品、暴力、隐私泄露)、模型高频出错场景。每条偏好数据包含拒绝型与赢型回答,拒绝型不能随意生成,质量低劣的拒绝样本会让模型学会”言之无物式拒答”。构建偏好对时,候选回答的差异要落在”有用性、诚实性、无害性”三个维度上,差异太小则信号微弱。
对齐训练稳定性与评估体系
对齐训练容易出现两类问题:奖励放大(模型刷分输出空泛套话)和模式坍塌(回答风格单调)。缓解措施:参考模型全流程冻结、beta值控制在0.05-0.2、每个step监控KL距离与平均log-ratio;评估不能只看单一指标,要同时跑GPT-4打分、人工抽检、安全基准集(如有害问答对抗集)三套体系。线上迭代遵循”偏好数据更新->重新对齐->灰度放量”的闭环。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/da-mo-xing-dui-qi-xun-lian-shi-zhan-rlhf-yu-dpo-pian-hao/