🎯 一句话理解驾驶 Reward 设计
驾驶 Reward = 用一个标量告诉策略’这一步开得好不好’,它必须在’安全不撞’(硬底线)、‘坐得舒服’(舒适性)、‘守规矩’(合规)、‘走得快’(效率)之间艰难权衡——设计错了,模型要么撞车要么原地不动。
在驾驶强化学习里,reward 函数决定了策略的天花板。算法再强(PPO、GRPO、SAC),reward 给错了,学出来的策略也是废的。这就是那句老话:“garbage in, garbage out”——reward 就是那个 “in”。一个微小的 reward 定义偏差,经过数百万步训练的放大,可能让最终策略南辕北辙。

🧱 Reward 的四大组成组件
绝大多数驾驶 reward 都可以拆成四个维度的加权和:
$$R(s, a) = w_{\text{safe}} R_{\text{safe}} + w_{\text{comf}} R_{\text{comf}} + w_{\text{comp}} R_{\text{comp}} + w_{\text{eff}} R_{\text{eff}}$$| 组件 | 目标 | 典型实现 |
|---|---|---|
| 安全性 $R_{\text{safe}}$ | 不碰撞、不冲出道路 | 碰撞大负奖励、TTC(碰撞时间)惩罚 |
| 舒适性 $R_{\text{comf}}$ | 加速度/急动度小、平顺 | 惩罚 $|a|$、$|jerk|$ |
| 合规性 $R_{\text{comp}}$ | 守交规、不出可行驶区 | 越界惩罚、闯红灯/压线惩罚 |
| 效率性 $R_{\text{eff}}$ | 走得快、接近目标、进度 | 路线完成度、纵向位移奖励 |
1. 安全性:不可逾越的红线
安全永远是硬约束,通常用大额负奖励表示:
- 碰撞惩罚:与任何他车/行人发生碰撞,给一个很大的负 reward(如 $-10$),往往直接结束 episode
- TTC(Time-to-Collision):碰撞时间越短,惩罚越大,鼓励提前避让
- 冲出道路:越出可行驶区域,等同碰撞级惩罚
关键:安全相关 reward 的权重 $w_{\text{safe}}$ 必须远大于其他项,因为一次碰撞的代价远高于无数次舒适或效率的微小收益。
2. 舒适性:衡量"像不像老司机"
舒适性 reward 惩罚急动,让乘坐体验平顺:
| 指标 | 含义 | 舒适区间(经验) |
|---|---|---|
| 加速度 $a$ | 速度变化率 | $ |
| 急动度 jerk | 加速度变化率 | $ |
| 横向加速度 | 过弯舒适 | $< 3\ \text{m/s}^2$ |
| yaw rate | 横摆角速度 | 平滑无突变 |
舒适性通常是连续惩罚(如 $-|jerk|^2$),鼓励策略输出平滑的轨迹与控制。
3. 合规性:守规矩
合规 reward 约束策略遵守交通规则:
- 车道保持:不压实线、不骑线
- 信号灯:红灯停、绿灯行、不抢黄灯
- 限速:不超速(也不龟速阻塞交通)
- 让行:在无保护路口给优先车辆让行
合规项往往是二值或阈值惩罚——越界就扣分,没越界就不扣。
4. 效率性:别停下来
效率 reward 给策略前进的动力,否则策略可能为了"绝对安全"而原地不动(这是驾驶 RL 的经典退化):
- 路线完成度(route completion):已行驶路程 / 规划总路程
- 纵向进度:纵向位移的正奖励
- 目标接近度:到导航终点的距离缩小给奖励
效率项是防止"消极策略"的关键:没有它,模型会发现"不动 = 不撞 = 最优"这个漏洞。
🌾 稀疏 vs 稠密 Reward:驾驶 RL 的头号难题
reward 设计按反馈密度分两类,这是驾驶 RL 最核心的取舍:
| 维度 | 稀疏 reward | 稠密 reward |
|---|---|---|
| 反馈时机 | 只在 episode 结束(撞/到终点) | 每一步都给 |
| 信用分配 | 难(不知道哪步错了) | 容易 |
| 学习难度 | 高(信号稀少) | 低(信号丰富) |
| 代表性 | “到达目的地 +1,碰撞 -1” | 每步的 comfort/progress |
| 风险 | 难收敛 | reward shaping 易引入偏差 |
驾驶 RL 的标准做法是以稠密 reward 为主、稀疏 reward 为兜底:每步给 comfort/progress(稠密),episode 结束再给 collision/arrival(稀疏)。纯稀疏 reward 在复杂驾驶里几乎学不动,纯稠密又容易 reward hacking。
🛠️ Reward Shaping:给稀疏 reward"加料"
Reward shaping 是在原 reward 上加潜在的稠密引导,又不改变最优策略:
$$R'(s, a, s') = R(s, a, s') + \gamma \Phi(s') - \Phi(s)$$其中 $\Phi(\cdot)$ 是势函数(potential function)。根据势函数塑造定理,这种形式的 shaping 不改变最优策略(只改变中间奖励的分布),是理论上安全的引导方式。
常见的驾驶势函数:
- 到目标距离的负值:越近势越高,引导前进
- 到最近障碍距离:越远势越高,引导避让
- 车道中心偏差:越居中势越高
⚠️ shaping 是把双刃剑:势函数设计不当,反而会引导策略走偏(如为了贴车道中心而急刹)。务必用基于距离差的势函数,保证 telescoping sum 抵消。
🎭 多目标权衡:权重的艺术
驾驶 reward 本质是多目标优化,四个组件的权重 $w$ 怎么定是个永恒的难题:
| 策略 | 做法 | 优缺点 |
|---|---|---|
| 固定权重 | 人工拍一组 $w$ | 简单但难调,易偏向某一维 |
| 动态权重 | 训练中调整(如 prioritized) | 灵活但复杂 |
| 约束化 | 把安全当硬约束,优化其他 | 更安全但需约束 RL 算法 |
| 学习型权重 | 从偏好数据学(RLHF) | 贴近真实偏好但需数据 |
经验法则:安全权重要大到压倒一切,舒适与合规次之,效率作为"促动项"。但具体数值高度依赖场景与归一化方式,通常需要大量消融实验。
安全当硬约束:约束化 RL 的思路
把安全项写成"大额负奖励"其实是一种软约束——模型仍可能为了高效率奖励而"冒险"碰撞。更彻底的做法是约束化强化学习(Constrained RL):把安全约束从 reward 里拿出来,变成显式约束:
$$\max_\pi \mathbb{E}[R_{\text{task}}] \quad \text{s.t.} \quad \mathbb{E}[C_{\text{collision}}] \leq d$$即在保证期望碰撞代价低于阈值 $d$ 的前提下,最大化任务回报。常用算法如 CPO、PPO-Lagrangian 通过拉格朗日乘子自适应调节约束强度。这种思路把"绝对不能撞"提升为不可违背的硬性条件,比单纯加大负奖励更可靠,也更符合安全认证的要求。
归一化与量纲统一
reward 的多个分量往往量纲差异巨大——碰撞惩罚是 $-10$,而每步 jerk 惩罚可能是 $-0.001$。若不加处理,大项会压倒小项,策略只学"别撞"而忽略舒适。因此归一化是 reward 工程的必修课:
- 按项归一化:每项 reward 除以自身的历史滑动标准差,让各分量尺度可比
- running mean/std:用统计量的滑动估计实时缩放,避免训练后期 reward 尺度漂移
- clip:对极端 reward 值截断,防止单个异常样本主导梯度
| 归一化技巧 | 解决的问题 |
|---|---|
| 按项归一化 | 量纲不可比 |
| 滑动统计 | 训练中尺度漂移 |
| reward clip | 极端样本主导梯度 |
| 组内归一化(GRPO) | 场景间难度不可比 |
这些工程细节看似琐碎,却往往是"reward 调了半天不收敛"的真正症结所在。
🪤 常见陷阱:Reward Hacking 与退化
reward 设计不当会导致策略钻空子,常见陷阱:
| 陷阱 | 表现 | 根因 |
|---|---|---|
| 消极策略 | 原地不动或龟速 | 安全惩罚太大、效率项缺失 |
| reward hacking | 找到漏洞刷分(如贴墙卡 bug) | reward 与真实目标不对齐 |
| 抖动策略 | 来回微调蹭 comfort 分 | 舒适项设计粗糙 |
| 撞墙学习 | 频繁碰撞仍学不会 | 碰撞信号太稀疏 |
| 偏好单一模态 | 永远只变道/只直行 | 权重偏置导致多模态坍缩 |
一个经典笑话(也是真实教训):给"到达终点"大正奖励、给"碰撞"小负奖励,结果策略学会撞过去到达终点,因为净收益还是正的。权重的相对大小比绝对大小更重要。
📊 从 Benchmark 指标反哺 Reward
好的 reward 设计应该对齐评测指标。当前主流驾驶 benchmark 的核心指标:
| Benchmark | 核心指标 | 构成 |
|---|---|---|
| NAVSIM | PDMS | 碰撞率、可驾驶区合规、舒适度、方向正确等加权 |
| nuPlan | 闭环分数 | 碰撞、舒适、进度、合规多子项 |
| nuScenes | NDS / mAP | 检测精度为主(规划用 L2 / 碰撞率) |
设计 reward 时,直接把 PDMS 的子项当作 reward 组件是一种聪明的做法——这样"训练目标"和"评测目标"一致,避免训出来的好策略在评测里翻车。这也是 AlphaDrive 等工作用"可验证规划指标"做 reward 的逻辑。
🧬 Reward 的三大范式
reward 的来源正在经历范式迁移:
| 范式 | reward 来源 | 代表 |
|---|---|---|
| 人工设计(hand-crafted) | 工程师写代价函数 | 传统规划、早期驾驶 RL |
| 学习型(learned) | 从偏好数据训练 reward 模型 | Gen-Drive(VLM 辅助偏好) |
| 可验证(verifiable) | 任务有客观对错 | AlphaDrive(规划指标)、DeepSeek-R1 式 |
| 范式 | 优点 | 缺点 |
|---|---|---|
| 人工设计 | 可解释、可调 | 粗糙、难覆盖复杂偏好 |
| 学习型 | 细腻、贴近真实偏好 | 需数据、reward 模型可能被 hack |
| 可验证 | 客观、无歧义 | 仅适用于有标准答案的任务 |
趋势:从人工设计 → 学习型/可验证。Gen-Drive 的实验证明,学习型 reward 比人工 reward 效果更好——这是 reward 设计的未来方向。
🔗 Reward 与 RL 算法的配合
不同 RL 算法对 reward 的"偏好"不同:
| 算法 | reward 适用性 | 备注 |
|---|---|---|
| PPO | 稠密 reward | 依赖 critic,稀疏信号难训 |
| GRPO | 稀疏 + 可验证 reward | 组内相对,无需 critic,适合驾驶 |
| SAC/TD3 | 连续控制 + 稠密 reward | 经典控制类 RL |
| RLHF(DPO 等) | 偏好 reward | 离线偏好数据 |
GRPO 在驾驶里的流行,正是因为它对稀疏 reward 更友好(组内比较放大了细微差异),又省 critic——这与驾驶 reward 难定义、难训练的现实高度契合。
⚠️ Reward 设计的核心原则
总结几条驾驶 reward 设计的硬核原则:
- 安全是硬约束:碰撞惩罚要大到压倒一切,最好结合约束 RL 或下游安全校验
- 必须有促动项:没有效率/进度 reward,策略会退化成"不动"
- 稠密为主、稀疏兜底:每步引导 + episode 终止信号
- 对齐评测指标:reward 与 benchmark 一致,避免训评脱节
- 警惕 reward hacking:设计后要做对抗性测试,堵漏洞
- 能用学习型就别纯人工:偏好数据蒸馏的 reward 更细腻
- 归一化与缩放:不同量纲的 reward 项必须归一化,否则大项压倒小项
📝 个人思考
做驾驶 reward 设计越久,越能体会到一句话:“reward 设计不是工程问题,是哲学问题”。它逼着你回答"什么是好的驾驶"——这其实没有标准答案。安全是底线,但安全到什么程度?绝对安全等于不动,可车是用来开的。舒适和效率怎么权衡?老司机和老乘客的看法未必一致。这些权衡本质上是价值观的编码,把人类对驾驶的隐式偏好,翻译成一个标量函数。我认为这才是 reward 设计最难的地方——不是技术难,是定义难。
第二点感悟是 reward 正在从"工程师拍脑袋"走向"数据驱动学习"。Gen-Drive 用 VLM 辅助采集偏好、AlphaDrive 用可验证指标做 reward,都是把 reward 的定义权从工程师手里交还给"真实的好驾驶"。这个趋势和语言模型的 RLHF 一脉相承——当我们说不清"什么好"时,就让数据/偏好来告诉我们。我倾向于认为,未来驾驶 reward 的主流形态会是 “可验证安全约束 + 学习型偏好 reward” 的混合:前者保证不撞,后者贴合人味。而 GRPO 这类省 critic、对稀疏信号友好的算法,恰好是承载这种混合 reward 的理想载体。
最后,reward 设计给我最大的启示是 “目标对齐比能力提升更重要”。一个强大的策略如果优化错了目标,比一个弱但方向对的策略危险得多——它会用极高的效率做错的事。这在自动驾驶这种安全攸关领域尤其致命。所以我始终主张:与其一味追求更强的 RL 算法,不如先把 reward 想清楚、对齐到位。reward 是策略的"北极星",北极星指错了,跑得越快偏得越远。好的 reward 设计,是驾驶 RL 最被低估的核心竞争力。
📖 这是知识点拆解系列的第 11 篇。Reward 设计是驾驶 RL 的灵魂,你在实践中踩过哪些 reward 的坑?欢迎留言讨论。