AI 纪元 追踪人工智能最新进展,深度解读前沿技术

垂直模型对齐怎么做:把奖励规则写成代码,再跑 GRPO

金融、医疗、法律任务里,很多错误可以直接核验。GRPO 去掉 Critic 后,可用代码奖励替代一部分奖励模型;省下价值网络的同时,采样开销、规则漏洞和评测压力会更突出。

0 次阅读 约 2974 字 6 分钟 AI 生成

在金融、医疗、法律场景里,模型对齐经常卡在奖励信号。语气是否自然,可以靠偏好数据判断;法条是否仍然有效、计算结果是否与原始数据一致、必填字段有没有缺失,通常能直接核验。法律助手引用废止条文时,表述再流畅,也不该拿到高分。

CS336 对齐技术指南梳理的常见 RLHF 流程,是先收集同一提示下的优劣回答,用 Bradley–Terry 等配对方法训练标量奖励模型,再交给 PPO 更新策略。处理“更有帮助”“更自然”这类主观偏好时,这条路有用。到了垂直业务,链路就显得偏长:专家标注、奖励模型拟合、PPO 联调,任何一环偏了,最后都可能表现为模型行为不对。

GRPO 省掉 Critic,奖励信号还在

DeepSeek-R1 让 GRPO 进入了更多工程团队的视野。它会针对同一个 Prompt 采样一组回答,再根据每个回答与组内平均奖励的差距计算优势,不再单独训练价值网络,也就是 Critic。

这里容易混淆两个环节。GRPO 取消了 Critic,评分仍然要做。每个候选答案都需要奖励信号,来源可以是训练好的奖励模型,也可以是计算器、数据库、代码验证器,或者几种方式的组合。超智咨询的对齐技术指南也将 GRPO 放在 RLHF、DPO 之后讨论,其简化重点在策略优化结构,并不意味着奖励凭空消失。

垂直任务的切入点正是在这里:当错误能够被程序识别,团队可以把一部分专家判断写成验证器,再把验证结果交给 GRPO。

领域知识 → 可执行验证器 → 奖励分数 → GRPO 更新

一套奖励函数,先拆成三个检查

以金融审计模型为例,奖励函数可以从格式、数值和合规三类检查开始:

def reward(answer, source):
    checks = {
        'format_ok': has_required_index(answer),
        'number_ok': numbers_match(answer, source),
        'compliance_ok': not hits_forbidden_terms(answer),
    }
    return combine(checks)

对应到原始规则,可以这样处理:

  • 缺少指定的财务报表索引,直接记 0 分;
  • 计算结果与源数据不一致,扣 1 分;
  • 触发违规表述,扣 2 分。

0、-1、-2 只是示意权重,不是通用配方。更重要的是,每次得分都能追到具体规则:哪个字段没找到、哪一步计算不一致、哪条合规检查被触发。奖励异常时,工程师和领域专家不用猜测黑盒模型在想什么,可以直接查看日志和测试样本。

法律 AI 也能采用类似做法。模型输出法条编号后,通过 API 检查条文是否存在、状态是否为“现行有效”,通过后再给正向奖励。不过,这条规则只能验证引用是否有效,不能证明整段法律分析都正确。检索失败和法条失效也要分开处理,避免数据库或接口故障被误记成模型错误。

医疗 AI 更需要收窄规则范围。若奖励条件写成“答案越详细、引用文献越多,得分越高”,模型很容易堆砌术语,甚至生成不存在的文献索引。可执行奖励适合检查文献是否存在、格式是否完整等明确项目,不宜把完整的临床判断压缩成几条正则表达式。

组内第一名,也可能只是错得少

假设同一个 Prompt 生成了 64 个候选答案。如果 64 个答案都错了,其中一个只是格式更完整、引用更多,它仍可能高于组内平均分,并从其他 63 个答案中胜出。相对得分能找出组内差异,却不会自动保证绝对正确。

这也是 Reward Hacking 最常见的入口。模型不会理解规则制定者的真实意图,只会寻找更容易拿分的输出方式。正式训练前,奖励函数至少要经过几轮针对性检查:

  • 放入“内容错误但格式完美”的样本,确认它拿不到高分;
  • 把正确性设为门槛,格式、简洁度和表达质量放在后面评分;
  • 同时设置正向条件和可核验的负向条件,避免单一指标被刷分;
  • 随模型能力变化调整阈值,并保留规则版本和人工抽检记录。

奖励函数本身也要做单元测试。否则,模型训练得越充分,利用规则漏洞的能力可能越强。

28B 对 14B,只能算一笔粗账

标准 PPO 通常包含 Policy、Reference、Reward 和 Critic 四个角色。如果假设它们都是 7B 模型,纸面上的模型规模可以写成约 28B;采用代码奖励的 GRPO 只保留 Policy 和 Reference,则约为 14B。

这个算法只能说明角色数量,不能直接等同于显存占用或训练总成本。优化器状态、梯度、激活值、KV Cache、量化方式、LoRA、序列长度和卸载策略都会改变实际账单。有的实现还会共享部分结构,Reference 和 Reward 也可能只参与推理。

GRPO 确实省掉了 Critic 及其训练状态。如果奖励全部由代码给出,独立 RM 的训练也可以省下。但成本会转移到采样侧:一组生成 64 个候选答案,需要消耗更多生成 Token,还要保存和处理相应的 rollout 数据。

因此,没有模型长度、组大小、卡型和框架版本时,“Batch Size 提升 2—3 倍”或“训练吞吐提升 40%—60%”都不能当作通用结论。奖励模型标注需要“数十万至数百万元”的说法也缺少统一口径,至少要交代样本量、专家成本和复核流程。无论是 3B 端侧模型还是 7B 模型,都应该用相同任务和训练配置做对照测试。

URPO 先别拿缩写替代证据

谈 URPO 或国产算力适配时,硬件名和算法名不能代替测试数据。就给出的可引用材料看,还没有足够信息确认 URPO 的正式定义,也没有摩尔线程、昇腾 910C 在同一训练配置下的对照结果。

同样,“FP8 能显著缓解显存碎片”或“优化缓存后 AllReduce 不再卡住”也需要可复现实验支撑。模型规模、训练框架、序列长度、组大小、精度和通信方式没有对齐,单独比较卡型没有太大意义。

从训练流程可以确定的是,GRPO 会把更多压力放到组采样和长序列生成。具体到摩尔线程或昇腾 910C,应先固定模型、数据和训练参数,再测生成吞吐、显存峰值与通信耗时。

先挑那些确实能验的任务

金融 AI 中的数值计算、法律 AI 中的法条状态、结构化输出中的字段完整性,都是比较合适的起点。它们有外部数据源,也能说明一条答案为什么得分或扣分。医疗 AI 可以先处理文献存在性、输出格式等可核验部分,诊断质量仍需更谨慎的评测和人工复核。

如果奖励要求只能写成“更专业”“更可信”“更像专家”,代码验证器还没有准备好。能够写成“法条状态为现行有效”“计算结果与源数据一致”“指定字段全部出现”,才有适合 GRPO 的落脚点。

算法跑起来只是第一步。长期要维护的是验证器:规则从哪里来、哪一条被命中、为什么扣分、更新后是否误伤正常答案,都要能查清楚。

参考资料

相关阅读