DPO:把谨慎、引用和升级写进偏好
同一份证据不完整的病例,两个输出都能通过 schema:一个猜测 EGFR 阴性并继续给建议,另一个写 unknown、指出缺失检测并请求人工补充。这里真正需要被比较的不是文风,而是哪个决定更符合工作流。
SFT 教模型“像什么”,偏好优化进一步表达“两个可行输出中哪个更好”。Direct Preference Optimization(DPO)把人类偏好下的策略优化转化为相对参考策略的分类式目标,避免先训练显式奖励模型再跑在线 RL 的复杂链路。S18 MedAgent Forge 用它研究谨慎、引用、最小权限和升级行为,但所有硬安全规则仍由运行时执行。
为什么用偏好优化
Section titled “为什么用偏好优化”同一任务可能有两个 schema 正确的答案:A 猜测 EGFR 阴性并给建议;B 输出 unknown、列出缺失检测并请求人工补充。医疗候选筛选应该偏好 B。类似偏好还包括:真实引用优于悬空引用、最小权限工具优于宽权限工具、短而完整优于冗长、最新协议优于过期版本。
问题出在捷径学习。如果 chosen 总更长,模型可能学长度;如果 rejected 总有某个词,模型学表面标记。偏好标注者也可能对临床与安全标准有不一致的理解。
原理:一对只改变一个决定
Section titled “原理:一对只改变一个决定”偏好样本包含相同 prompt/context、chosen、rejected、偏好维度、证据和标注来源。尽量让一对只改变一个关键决策:是否猜测、是否越权、引用是否支持、是否使用过期证据。硬安全违规不能只靠偏好;策略层还是直接拒绝。
评测既看 preference accuracy,也回到冻结 TaskPackage:四态、引用、工具轨迹、校准、安全和通用能力。DPO 的 beta、参考模型和 prompt 格式必须版本化。
| 方法 | 数据 | 优点 | 局限 |
|---|---|---|---|
| SFT | 单一目标 | 稳定、直观 | 难表达相对质量 |
| DPO | chosen/rejected | 工程链路较简洁 S18 | 偏好偏差、参考策略敏感 |
| 奖励模型 + PPO | 偏好 + 在线采样 | 可探索 | 复杂、昂贵、易奖励投机 |
| 策略硬门 | 明确规则 | 安全可证明 | 只能覆盖已知规则 |
先让一对看起来顺眼的偏好样本接受质询
Section titled “先让一对看起来顺眼的偏好样本接受质询”python3 labs/run_lab.py --lab 16实验验证偏好对:chosen/rejected 不能相同;必须指明 dimension;如果 chosen 含不存在的 evidence id 或者 rejected 反而更安全,规则会标记为可疑,要求人工复核。你可以先调换一对样本的 chosen/rejected,确认门不会因为文字更流畅而放行。这里只验证数据,不报告 DPO 训练结果。
四对真正有用的医疗 Agent 偏好
Section titled “四对真正有用的医疗 Agent 偏好”第一对只改变缺证据决策:chosen 输出 unknown 并请求检测,rejected 猜 met。第二对保持结论相同,只改变引用:chosen 引用患者报告对应 span,rejected 引用一篇相关但不支持患者事实的文章。第三对只改变工具 scope:chosen 查询当前患者和 14 天,rejected 查询全时段或全库。第四对只改变版本:chosen 使用冻结 amendment,rejected 用旧协议。
这四对分别教谨慎、支持性、最小权限和新鲜度。每对附程序化检查和人工理由。如果 chosen 同时更长、语气更好、引用更多且结论不同,就无法知道模型学到什么,也更容易学表面特征。
偏好从哪里来
Section titled “偏好从哪里来”来源按强度分层:明确 policy/规则可自动判的安全对;专家对真实工作单的纠错;协调员对可用性选择;合成 hard negative。临床事实偏好由合格领域人员审核,权限/格式可由程序 verifier。标注界面同时显示原始 Evidence 和协议版本,避免标注者只凭答案文风选择。
记录 disagreement,不用多数票吞掉争议。不同角色可能优化不同目标:协调员喜欢简洁,安全人员要求完整警告。dimension 和 severity 允许后续分层评测。如果偏好规范更新,旧数据不会静默重标。
DPO 目标的直觉
Section titled “DPO 目标的直觉”DPO 让策略相对参考策略提高 chosen 的概率、降低 rejected 的概率,并由 beta 控制偏离强度。S18 它省去显式奖励模型 + 在线 RL 的部分复杂度,但仍依赖参考模型、token log probability、prompt 模板和数据分布。chosen/rejected 长度差、截断和模板错误都会扭曲训练。
医疗场景不能把所有拒绝都当 chosen。过度拒答会漏掉明确可完成任务;目标是证据充足时行动、证据不足时 abstain。偏好集需同时含“应该回答”和“应该升级”,并按难度/类别平衡。
训练与评测流程
Section titled “训练与评测流程”先对 SFT checkpoint 建 base;冻结 preference dataset;用小样本 overfit 验证 chosen reward 方向;跑 smoke 检查数值;完整 run 才比较 beta/学习率/epoch。保留 reference、policy、tokenizer、数据和 TRL 版本。S21
离线看 chosen/rejected margin 和 held-out preference accuracy,但最终回 TaskPackage:unknown calibration、引用支持、工具越权、安全拒绝、任务成功和长度/成本。如果偏好准确率升但实际任务下降,不能发布。通用能力与各亚组也要回归。
比较 chosen/rejected 长度、markdown、特定词、evidence 数量和 status 分布;训练一个简单 bag-of-words classifier,如果轻易区分,说明表面泄漏。做 swap/paraphrase test:互换风格但保留决策,模型应仍偏好安全语义。故意加入 concise chosen / verbose rejected,打破“越长越好”。
DPO 与硬策略的边界
Section titled “DPO 与硬策略的边界”跨患者读取、未审批写入和 token passthrough 永远由 policy hard gate 拒绝。DPO 可以让模型更少提出这些调用,降低无效请求,却不能成为唯一防线。同样,citation preference 提升习惯,但 verifier 仍检查 evidence id。
如何诚实报告
Section titled “如何诚实报告”数据门通过只说明偏好样本形状和安全规则满足;smoke 只说明 trainer 连通;只有完整、冻结评测才能报告效果。报告 chosen 来源、争议、beta、模型版本、所有关键指标与退化,不用“对齐成功”概括。
数据规模之前先看覆盖
Section titled “数据规模之前先看覆盖”一万对同质“安全回答更长”的偏好,不如数百对覆盖不同决策边界。建立 coverage matrix:criterion 类型 × 缺失/冲突 × 工具风险 × 来源版本 × 语言;每格记录数量、标注一致和 severity。高风险稀有格采用主动选择失败轨迹,而不是只随机采样常见简单例。
偏好数据还要防环和矛盾:A>B、B>C、C>A 可能来自不同维度或标注不一致。保留 dimension 后分别训练/评测,不能压成一个神秘“better”。硬规则生成对与人类风格偏好分开,避免安全信号被文风数量淹没。
与 SFT 的组合
Section titled “与 SFT 的组合”通常先 SFT 学会 schema/tool,再在其上 DPO 调整相对行为。如果 base 连合法 action 都不会,偏好优化会浪费样本。对比 SFT-only、SFT+DPO;保持 inference template 一致。DPO 后如格式退化,可修数据/训练而不是在生产 parser 大量修补。
在线反馈为什么不能直接变训练数据
Section titled “在线反馈为什么不能直接变训练数据”用户点击接受可能只是省事,不代表医学正确;覆盖可能因界面或流程而非模型。线上反馈需关联证据、角色、版本和原因,经过隐私/质量审核才进入候选数据。不能让某个用户通过反复操作污染偏好或模型记忆。
写三对长度相反的偏好:安全 chosen 更短;证据完整 chosen 更长;两者等长只改变 scope。用简单词/长度统计检查可分性。再给每对添加 dimension 和程序 verifier,说明哪些需要专家。
贯穿一次偏好审查会议
Section titled “贯穿一次偏好审查会议”协调员、安全工程师和临床专家分别看 30 对样本。遇到“给出候选但证据旧”时,安全人员可能偏好 unknown,协调员可能偏好保留候选并醒目标注,临床专家取决于协议。团队不强行投票,而是拆成 status、freshness warning 和 next action 三个字段:资格 unknown、候选保留、人审优先。一次争议由此推动合同改进,而非只产生标签。
对“答案正确但调用范围过宽”的 pair,临床内容不是争议点,policy verifier 直接判 rejected。对措辞清晰度,用户研究提供偏好。把不同证据类型混进同一个二元标签,会让 DPO 目标不可解释。
偏好规范、policy 和协议变更时,样本可能失效。每对绑定 rubric/version;数据构建只选择与当前目标兼容的 pair。标注错误被发现后不覆盖旧记录,写 tombstone/correction 并重建 manifest;受影响 run 可追溯。
DPO 候选必须在所有 safety hard gate 不退化,unknown/引用目标改善且过度拒答受控;统计不确定时结论写“未证明改善”。如果只有风格更好,就将收益限定为 UX,不宣称医疗可靠性。训练复杂度和额外 adapter 运维也进入决策。
最终报告给出 preference 数据版本、各维度数量与一致性、训练配置、对照、全部回归和失败样本;缺任一项就保持实验状态。
DPO 可以调整相对偏好,不能替你确认偏好本身正确。只要硬策略、证据新鲜度或人工责任没有独立落地,权重里的“谨慎”就只是一个不稳定的习惯。
- DPO 不能把错误偏好变正确。
- 安全规范不能只藏在训练权重中,必须有运行时策略。
- 离线偏好胜率提升可能伴随任务退化,需多指标门。
- 医疗偏好标注应记录角色与指南版本,不能匿名多数投票替代专业责任。
资料与延伸阅读
Section titled “资料与延伸阅读”以下参考资料分别回答目标函数、训练器和风险治理该看哪里。它们不把离线偏好胜率自动变成医疗可靠性证明。