奖励工程
概述
奖励函数是强化学习的核心——它定义了智能体的优化目标。然而,设计一个正确且高效的奖励函数往往是RL应用中最困难的部分。本节讨论奖励塑形、奖励课程、多目标奖励以及奖励黑客等关键主题。
奖励塑形(Reward Shaping)
基本概念
奖励塑形通过添加额外的奖励信号来引导学习,而不改变最优策略。
原始奖励 \(R(s, a, s')\) 被修改为:
其中 \(F(s, s')\) 是塑形函数。
基于势函数的奖励塑形
Ng et al. (1999) 证明,只要塑形函数满足以下形式,最优策略不变:
其中 \(\Phi: \mathcal{S} \to \mathbb{R}\) 是势函数(potential function)。
定理:在基于势函数的奖励塑形下,原始MDP和塑形后的MDP具有相同的最优策略集合。
直观理解:势函数类似于物理学中的势能——势差只取决于起点和终点,与路径无关,因此不会引入"捷径"。
实践示例:
# 迷宫导航中的势函数:距离目标的负距离
def potential(state, goal):
return -np.linalg.norm(state - goal)
# 塑形奖励
def shaped_reward(s, s_next, gamma, original_reward):
F = gamma * potential(s_next) - potential(s)
return original_reward + F
非势函数塑形的风险
如果 \(F\) 不满足势函数形式,可能导致:
- 改变最优策略
- 引入循环行为(智能体在高奖励区域绕圈)
- 收敛到次优解
稀疏与稠密奖励
稀疏奖励
仅在关键事件(如到达目标、完成任务)时给予奖励:
优点:
- 目标明确,不易引入偏差
- 更接近真实任务定义
缺点:
- 学习信号极其稀疏,探索困难
- 需要大量交互才能首次获得奖励
稠密奖励
在每一步都提供信息丰富的反馈:
优点:
- 学习效率高
- 梯度信号丰富
缺点:
- 容易引入设计者偏差
- 可能导致奖励黑客
混合策略
实践中常采用混合方法:
- 稀疏目标奖励 + 势函数塑形
- 课程化奖励:从稠密逐渐过渡到稀疏
- 分层奖励:子目标给予稠密奖励,最终目标给予稀疏奖励
奖励课程(Reward Curriculum)
基本思想
随训练进度动态调整奖励函数,引导智能体从简单到复杂地学习:
其中 \(\lambda_t\) 随训练进度从0增加到1。
奖励退火
类似于模拟退火,逐渐减少辅助奖励信号的权重:
- 初期:提供丰富的中间奖励引导学习
- 中期:逐步减少辅助奖励
- 后期:仅保留任务的真实奖励
自动课程
使用元学习或进化策略自动设计奖励课程,避免人工调参。
多目标奖励
线性加权
最简单的多目标处理方式:
问题:权重选择困难,不同奖励的尺度可能差异很大。
约束优化
将部分目标转化为约束(参见安全强化学习):
Pareto最优
在多目标之间寻找Pareto最优策略集,而非单一最优解。
实践中的奖励组合
def compute_reward(state, action, next_state):
# 任务奖励(稀疏)
task_reward = 10.0 if is_goal(next_state) else 0.0
# 进度奖励(稠密)
progress = distance(state, goal) - distance(next_state, goal)
# 安全惩罚
safety_penalty = -100.0 if is_unsafe(next_state) else 0.0
# 能耗惩罚
energy_cost = -0.01 * np.sum(action ** 2)
return task_reward + 1.0 * progress + safety_penalty + energy_cost
基于人类反馈的奖励
RLHF连接
人类反馈可以作为奖励信号的来源(详见LLM后训练):
- 收集人类对行为的偏好比较
- 训练奖励模型 \(r_\phi(s, a)\)
- 使用学到的奖励模型训练策略
基于VLM的奖励
利用视觉-语言模型(VLM)作为奖励函数:
- 使用自然语言描述目标
- VLM评估当前状态与目标描述的匹配程度
- 提供密集的、语义级别的奖励信号
示例:
优势:
- 无需手工设计奖励
- 可以处理复杂的语义目标
- 天然支持开放世界任务
奖励黑客(Reward Hacking)
定义
奖励黑客是指智能体找到了最大化奖励函数的方式,但没有完成设计者真正期望的任务。
经典案例
| 任务 | 设计奖励 | 黑客行为 |
|---|---|---|
| 赛艇 | 收集金币 | 绕圈收集同一组金币 |
| 清洁机器人 | -(灰尘量) | 把灰尘推到看不见的地方 |
| 足球 | 控球时间 | 原地运球不射门 |
| 代码生成 | 通过测试 | 硬编码测试答案 |
奖励黑客的原因
- 代理指标与真实目标的差距:奖励函数是真实目标的近似
- 分布外行为:策略可能发现训练分布外的漏洞
- Goodhart定律:"当一个度量成为目标时,它就不再是一个好的度量"
缓解策略
1. 多样化奖励信号
使用多个互补的奖励组件,减少单一指标被hack的风险。
2. 对抗性奖励设计
在设计奖励时主动思考可能的黑客行为,并添加防护条件。
3. 奖励模型集成
使用多个奖励模型的集成,减少单一模型的偏差:
4. 人在环路中
定期让人类审查智能体的行为,检测并纠正奖励黑客。
5. 约束优化
将安全条件和行为规范作为硬约束,而非仅依靠奖励。
实践指南
奖励函数设计流程
- 明确任务目标:用自然语言精确描述期望行为
- 设计初始奖励:从简单开始,优先使用稀疏奖励
- 添加塑形:如果学习效率不够,添加基于势函数的塑形
- 测试鲁棒性:检查是否存在奖励黑客的可能
- 迭代优化:根据智能体实际行为调整奖励
常见陷阱
- 奖励组件之间的尺度不匹配
- 遗忘终止条件中的奖励
- 稠密奖励引入了不必要的偏差
- 缺少对不期望行为的惩罚
参考文献
- Ng et al., "Policy Invariance Under Reward Transformations" (ICML 1999)
- Amodei et al., "Concrete Problems in AI Safety" (2016)
- Christiano et al., "Deep Reinforcement Learning from Human Preferences" (NeurIPS 2017)
- Clark & Amodei, "Faulty Reward Functions in the Wild" (2016)
- Ma et al., "Eureka: Human-Level Reward Design via Coding Large Language Models" (ICLR 2024)