考察点
这道题出自字节跳动 LLM 算法实习一面,是 RLHF 方向的中阶题。面试官默认你知道奖励模型是什么,想考的是多目标冲突这个真实痛点:有用性、无害性、格式、长度、风格多个奖励一起上时,模型会偏科。直接回答「加权」只能拿及格分,能讲出约束分层、归一化、动态调整这套组合拳才像干过活的。追问会往 reward hacking、权重怎么调、怎么发现冲突走。
参考答案
先承认:直接加权是基线,也是大多数团队的起点
多维奖励合成一个标量最朴素的做法就是线性加权:
$$R = w_1 R_{helpful} + w_2 R_{harmless} + w_3 R_{format} + \dots$$
它能用,但有三个已知坑:
- 量纲不一致。各奖励模型输出的分布完全不同——有的 0-1,有的 -5 到 5,方差大的那个维度会主导梯度,权重设得再好看也没用。
- 静态权重 vs 动态偏好。训练早期模型格式乱七八糟,格式奖励最重要;后期格式已经满分,这个维度还在出力就是纯噪声。
- Reward hacking 放大器。模型一旦发现某个维度好刷分(比如「无害性」奖励对拒答给高分),会疯狂优化它牺牲其他维度——你得到了一个什么都说「我不能回答」的安全模型。
改进一:分维度归一化,让权重回归本意
每个维度的奖励在一批 rollout 内做 z-score 或 min-max 归一,再加权。这样 w 才真实反映你想要的重要性比例,而不是被各维度的天然方差绑架。这是性价比最高的一步,成本几乎为零。
改进二:硬约束与软目标分层
这是我认为比调权重更重要的结构性方案:不可谈判的维度不做奖励,做约束。
- 安全合规、隐私泄露、违法内容这类维度,做错就是零分,不该存在「多拿点有用性分数补偿一下」的交易空间。实现上用规则过滤或判别器做 hard gate,不过 gate 的样本奖励清零或不参与梯度更新。
- 剩下的偏「品味」的维度(详尽程度、格式、风格)才进加权求和,它们之间的权衡本来就是可以商量的。
数学上更讲究的版本是带拉格朗日乘子的约束优化,但工程上门槛过滤已经能拿到 80% 收益。
改进三:动态权重与课程式调度
按训练阶段调权重:早期重格式和基础质量,中期重有用性,安全约束全程在线。实现可以简单粗暴——每隔 N 步看各维度评测分,达标的维度降权、不达标的升权。本质是手工版的自动课程学习。
怎么知道冲突发生了
监控不能只看合成后的总奖励,必须分维度跟踪:各维度奖励的均值曲线、评测集上各维度的独立分数、以及「跷跷板指标」——一个维度涨另一个维度跌的幅度。线上表现也要分维度看:拒答率升高往往是无害性权重过大的信号,回答变啰嗦往往是有用性奖励模型偏爱长文本的信号。
一句话总结:加权是必需的底座,但冲突治理靠的是「归一化让权重诚实、分层让底线不交易、监控让失衡可见」。
可能的追问
1. 为什么不用多目标 RL(Pareto 最优)?
理论和研究都成立,但工程成本高:需要维护一组策略或向量值函数,线上还得在 Pareto 前沿上再选一个点。绝大多数团队用「约束 + 加权」能拿到足够好的解。
2. Reward hacking 怎么检测?
构造探针集:对同一问题比较模型在优化前后的行为漂移(比如拒答率、平均长度);看奖励分数和人工偏好评分的相关性是否脱钩——脱钩就是在 hack。
3. DPO 没有显式奖励模型,还存在这个问题吗?
存在,只是转移了:多维偏好被压进偏好对的构造里,哪个维度在标注数据里占比高、标注一致性高,模型就学得多。数据配比就是 DPO 世界的「权重」。