奖励函数

奖励函数把可观察结果转成数值反馈,决定策略学习倾向于哪些行为;它只是实际目标的一种表达。

返回概念图谱 →

理解与应用

奖励函数是在强化学习中为行为或结果给出数值反馈的规则。奖励可以来自程序测试、环境状态、人工偏好或模型评审。策略优化的是这些反馈对应的回报,所以“想让助手把事情办好”必须被转成可观察、可计算的标准,才会进入学习过程。

例如报销查询任务的真实目标是准确解释退回原因。一个奖励设计可以在原因正确且证据对应时给成功奖励,再按工具调用次数收取小成本。但如果“原因正确”只是检查回答中有没有“发票”两个字,系统就可能通过到处提发票得分;如果每次检索都加分,它还可能学会不停检索。这里的问题不是模型不努力,而是它努力优化了一个不够准确的代理目标。

只在任务结束给奖励,容易难以判断哪一步有帮助;逐步给奖励能提供更密集的信号,却又可能鼓励为了得分而增加步骤。奖励权重和折扣决定这些取舍,需要用完整轨迹和独立验收检查。权限则属于另一层约束:不能设计成“越权扣一点分,但完成任务多加几分”,让不可接受动作有机会划算。训练奖励可以引导效率与质量,运行系统仍应硬性拒绝未经授权的操作。

关系速览
智能体评估应用于 →奖励函数

离线评估指标可帮助设计奖励,但两者不能直接互换或只优化单一分数。

智能体强化学习包含 →奖励函数

策略优化需要反馈信号;奖励设计决定优化方向和被钻空子的空间。

动手试一试:节省调用是否掩盖了越权

两条轨迹是手工构造的评分记录。只比较成功与调用成本,越权捷径会得更高分;加入独立授权门槛后,它仍不能被采用。这并不是训练实验,而是检查评分规则是否与允许的行为范围一致。

将代码保存为 example.py,使用 Python 3.10+ 运行 python3 example.py。仅使用标准库,无需密钥,不会调用外部模型。

Python 代码

traces = [
    {"name": "授权查询", "success": 1, "calls": 2, "authorized": True},
    {"name": "越权捷径", "success": 1, "calls": 1, "authorized": False},
]
for trace in traces:
    reward = trace["success"] - 0.05 * trace["calls"]
    admissible = trace["authorized"] and trace["success"] == 1
    print(f'{trace["name"]}:奖励 {reward:.2f},允许采用 {admissible}')

运行结果

授权查询:奖励 0.90,允许采用 True
越权捷径:奖励 0.95,允许采用 False

常见误区

  • 可测量的代理指标可能与真实目标分离,分数提高也可能是奖励投机。
  • 过程奖励如果只奖励动作发生,可能鼓励无意义地增加调用或篇幅。
  • 安全约束不能被当作可用更高成功奖励抵消的小额惩罚。

前置与延伸

建议先读

相关概念

参考与版本

Apollo 原创讲解与教学示例。参考资料用于核对技术定义;核验日不代表资料的发布日期。