为什么“对齐之后翻车”,反而更难解释
在很多事故复盘里,经常会出现一句话:
“模型已经做过 PPO / DPO 了,
按理说应该更安全。”
这句话本身没有恶意,
但它隐藏了一个极其危险的假设:
安全是一个“单调递增”的属性。
也就是说,只要你做了对齐训练:
- 风险就会下降
- 边界就会更稳
- 行为就会更可控
但真实工程世界里,事情往往是反过来的。
你会看到一些非常反直觉的现象:
- 明显违规内容确实少了
- 明确拒答更自然了
- 但某些灰区输出反而更稳定、更自信
于是问题来了:
PPO / DPO 到底是在压制风险,
还是在把风险“挪”到你没盯住的地方?
这篇文章,要讲清楚的正是这件事。
先给一个必须先接受的结论(非常重要)
在展开之前,我先把全文最重要的一句话写出来:
PPO / DPO 改变的不是“模型有没有风险”,
而是“风险以什么形式出现、出现在哪里”。
如果你始终用“有没有违规输出”来判断安全,
那你几乎一定会被对齐后的模型骗到。
第一层误解:把 PPO / DPO 当成“安全模块”
很多工程讨论中,会不自觉地把 PPO / DPO 描述成:
- “安全微调”
- “对齐阶段”
- “最后一道保险”
仿佛在系统架构中,它们是一个:
可以单独承担安全责任的模块。
但从机制上看,这种理解是完全错误的。
PPO / DPO 的核心目标只有一个:
让模型在“给定分布的偏好信号”下,
调整输出概率分布。
它并不理解:
- 什么是隐私
- 什么是合规
- 什么是不可接受
它只知道:
“哪些输出在训练中被奖励过”。
第二层:PPO / DPO 真正“擅长”的是什么
要理解风险迁移,必须先承认 PPO / DPO 的强项。
它们非常擅长做三件事:
- 压低显式不良输出的概率
- 强化表面安全、礼貌、克制的表达
- 让拒答看起来更自然
这就是为什么:
对齐后模型
- 更少“直接说错话”
- 更少明显违规
在静态评测中,看起来安全性明显提升。
但问题在于:
它们擅长的是“概率压制”,
而不是“能力移除”。
第三层:风险为什么不会被“消灭”
我们必须面对一个事实:
模型原有的表达能力,在 PPO / DPO 中并不会消失。
- 参数没有被删除
- 表示空间没有被清空
- 只是输出分布被重新加权
换句话说:
危险能力还在,只是被“藏起来”了。
这意味着,只要:
- 输入足够绕
- 语境足够接近训练边界
- 奖励信号存在歧义
模型仍然有路径走到危险输出。
只是这条路径:
- 不再是直线
- 而是曲线
第四层:PPO / DPO 如何“迁移”风险,而不是压平它
这是全文最核心的一部分。
对齐前的风险特征
在未对齐或轻对齐模型中,风险通常表现为:
- 明确
- 粗糙
- 容易被规则捕捉
比如:
- 直接给出不该给的信息
- 直接回应敏感请求
这些风险:
- 好检测
- 好拦截
- 好复现
对齐后的风险特征
在 PPO / DPO 之后,风险形态往往变成:
- 表达更委婉
- 逻辑更完整
- 语气更“负责任”
模型会学会:
- 用条件语句
- 用假设讨论
- 用中立分析
于是风险迁移成:
“看起来合理、
但在特定组合下
仍然越界”的输出。
这类风险:
- 更难用规则捕捉
- 更难通过单轮评估发现
- 更容易在线上触发
第五层:DPO 与 PPO,在风险迁移方式上的差异
虽然 PPO 和 DPO 都是对齐方法,
但它们迁移风险的方式并不完全相同。
PPO:风险被“平滑化”
PPO 的特点是:
- 连续优化
- 强 KL 约束
- 输出分布逐步移动
结果是:
- 极端输出概率被压低
- 中间区域概率被抬高
风险后果是:
模型更少“明显越界”,
但更容易在边界附近游走。
DPO:风险被“离散化”
DPO 的特点是:
- 成对偏好
- 强烈的好 / 坏区分
- 对边界样本非常敏感
结果是:
- 某些模式被强烈排斥
- 相邻但未标注的模式被放过
风险后果是:
模型在“被明确标记的区域”很安全,
在未覆盖区域反而更自信。

PPO 平滑边界 vs DPO 离散边界
第六层:为什么对齐后,风险更难被评估
这是很多团队真正开始焦虑的地方。
因为你会发现:
- 原来的安全测试集不再命中问题
- 模型在“标准测试”中表现很好
- 但线上开始出现奇怪案例
原因在于:
评估集覆盖的是“旧风险形态”,
而模型已经学会了“新表达方式”。
你不是低估了模型,
而是:
高估了评估的“时间有效性”。
第七层:一个极简示意,理解“风险迁移”
我们用一段伪代码来描述这个过程:
# 对齐前
if request in forbidden_space:
output = dangerous_response()
# 对齐后
if request in forbidden_space:
output = refuse_politely()
else:
output = nuanced_analysis_with_loopholes()
注意:
dangerous_response被压制了- 但
nuanced_analysis_with_loopholes
往往并不在“禁止列表”中
风险不是没了,
而是换了一种形态。
第八层:什么时候你会误以为“模型更安全了”
以下几个信号,非常容易让团队产生错觉:
- 红线问题明显减少
- 用户投诉下降
- 静态评测分数上升
但如果你同时看到:
- 回答越来越长
- 条件越来越多
- 模型开始“解释为什么不能解释”
那很可能意味着:
模型正在用更复杂的方式接近边界。
第九层:真正的安全边界,为什么不该只交给 PPO / DPO
到这里,结论其实已经很清楚了:
PPO / DPO 擅长的是“塑形”,
而不是“兜底”。
真正稳定的安全体系,必须满足:
模型层:
- 不主动放大风险
系统层:
- 识别上下文
- 限制能力组合
策略层:
- 决定什么时候该拒绝
- 而不是怎么拒绝
如果你把所有安全期待都压在 PPO / DPO 上,
那风险只会被推迟,而不会消失。
一个非常实用的判断问题(强烈建议)
在你准备给模型再加一轮 PPO / DPO 之前,问自己一句话:
我现在要解决的是:
模型“说了不该说的”,
还是
系统“让它有机会说”?
- 前者 → 对齐可能有帮助
- 后者 → 对齐只会掩盖问题
很多团队在 PPO / DPO 之后才发现安全问题变得更隐蔽,其实关键不在算法,而在风险形态的变化。用LLaMA-Factory online对比对齐前后的模型输出分布,更容易识别:哪些风险被真正压制了,哪些只是被迁移到了更难察觉的区域。
总结:对齐不是终点,而是风险形态变化的开始
我用一句话,把这篇文章彻底收住:
PPO / DPO 不会消灭风险,
它们只是让风险
换了一种你不熟悉的样子。
当你开始:
- 不再用“违规率”判断安全
- 开始分析“风险出现路径”
- 把安全责任拆分到系统各层
你才真正开始工程化地看待对齐训练。