← 自动驾驶主线

决策

在不确定性中选择让行、试探还是通行

约 9 分钟阅读

面对几个都有道理的未来,选哪个不是数学题,是风险偏好题——但风险偏好可以写成数学。


规划器已经会算轨迹了,为什么还要决策

用一个左转场景把这个问题问到底。目标点已知,运动规划算一条平滑轨迹过去,看起来齐活了。然后往场景里加一辆对向直行车、一个横穿的行人,事情立刻变成四个方案:

  1. 停车等待,车和行人都过去再走;
  2. 先加速抢在对向车前面,再停下等行人;
  3. 车和行人一起抢;
  4. 觉得左转太复杂,干脆放弃这个目标点,改走直行。

这四个方案背后有两句话,是整个决策层存在的理由:每种方案对应一种决策,每种决策对应一簇规划。规划器能在“给定意图”时算出最优轨迹。“换不换目标”这类选择,它管不了;“抢不抢”虽然能在规划里隐式选出来(比如速度规划里选让行还是超车),但把离散选择单独拎出来决策更清楚。不先分层,规划器就得在一个巨大的连续轨迹空间里,同时猜意图、算几何。

这四个方案还分两层:

  • 低层决策:方案 1–3,同一个目标下的通行次序;
  • 高层决策:方案 4,换掉目标本身。

这个区分后面还会用到。

我们的汇入口是同一个结构。预测交上来的分支摆在面前,候选行为无非三个:继续等、低速探出去表明意图、直接汇入。这一章讲怎么把“选哪个”变成一个可计算、可解释、还能管住尾部风险的问题。


MDP:两个旋钮,保守还是激进

把序贯决策写成数学,标准工具是 MDP(马尔可夫决策过程):系统处在某个状态,选一个动作,环境按概率转移到下一个状态,并给出奖励;目标是让打过折扣的累积奖励的期望最大。折扣因子 γ 决定看多远,就像金融里说的:今天的一块钱比明天的值钱。

抽象定义不如一个例子。在一个悬崖网格世界里,有近处的 +1 出口、远处的 +10 出口,还有一整排 −10 的悬崖。调两个参数,就能养出四种“性格”:

noise = 0:动作从不失手noise 大:动作会打滑
γ 小:只看眼前贴着悬崖,奔近处的 +1绕开悬崖,奔近处的 +1
γ 大:看得远贴着悬崖,奔远处的 +10绕开悬崖,奔远处的 +10

γ 控制“看多远”,noise 描述“动作有多靠不住”:noise 越大,最优策略越会主动绕开悬崖、留出余量。这两个旋钮可以类比量产调参里的“保守 / 激进”:一辆被用户抱怨“太怂”的车,和一辆被安全员抱怨“太猛”的车,差别可能就在这类参数上。

MDP 有一个致命的前提:它假设当前状态完全可测,你知道世界的全部真相。路口那辆深色轿车的位置和速度你确实知道,但它“打算”完成切入还是缩回去,写在司机脑子里,任何传感器都测不到。


看不全的世界:POMDP 和老虎问题

放松“状态可测”这个假设,就得到 POMDP(部分可观测马尔可夫决策过程)。理解它的标准例子是老虎问题,值得完整看一遍。

两扇门,其中一扇后面是老虎。你有三个动作:听、开左门、开右门。

  • 听:每听一次花 1 分,而且只有 85% 的概率听对方位;
  • 开对门:+10;
  • 开错门:−100。

你永远不知道老虎真正在哪,只有一个不断更新的置信,比如“老虎在左边的概率是 0.85”。策略也不再是“状态 → 动作”,而是“置信 → 动作”:置信多高就该动手,多低就该继续听。

这个例子的精髓全在那个 −1:获取信息是有代价的。你可以一直听下去,把置信推到 99%,但每听一次都在付钱。翻译到汇入口,付的不是分数,是时间和路权:再等一帧看清切入车的意图,还是现在就动?“低速探出”这个候选行为,在 POMDP 的语言里就像驾驶版的“听”:花一点时间和位置的代价,买更多关于对方意图的观测。不同的是,探出还会改变局面,顺便向对方表明了自己的意图。

POMDP 的麻烦在求解:它的“状态空间”是概率分布构成的空间,精确求解在真实驾驶问题的规模上不可行。所以工程上的问题,从“怎么解”变成了“怎么砍”。


把不可解砍成可解:MPDM 和 EPSILON

第一刀是 MPDM(2015)砍的,思路极其务实:

  • 不在连续动作空间里搜索,而是预先定义一小撮语义策略:车道保持、左变道、右变道、停车等;
  • 假设自己和周围每辆车都在执行其中一种,对自车的每个候选策略做闭环的前向仿真;
  • 按到终点的距离、车道偏好、最大角速度等指标加权打分,选最优。

无限的决策问题,就这样变成了“在有限集合里挑一个”。

EPSILON(2021)把这套做成了完整系统。它先用 POMDP 把问题形式化,再从两个方向砍,最后打分选优:

  1. 动作侧动作树一个周期最多换一次动作
  2. 观测侧聚焦分支只给有风险的车展开意图
  3. 仿真前向仿真代替完整的置信更新
  4. 兜底RSS仿真里嵌安全模块
  5. 选优打分效率、安全、导航

动作侧,用 DCP-Tree。决策树的节点是语义动作(变道、变速),展开时有一条约束:每条策略序列,在一个决策周期里最多换一次动作。依据不是数学,而是对人类司机的观察:司机通常不会在一个决策周期里“变道、取消、再变道”地反复改主意;需要反复的行为,交给下一个重规划周期去做。这一刀,把指数级的动作空间砍成了能一一列举的候选集。

观测侧,只对可能带来风险的车展开意图组合,其余车取最可能的意图;也不做完整的置信更新,而是用前向仿真代替:假设他车执行预测给出的语义动作,自车用会看上下文的控制器,他车用基于模型的简单控制器,一起做闭环仿真。仿真里再嵌一层 RSS(责任敏感安全)模型兜底。最后按效率、安全、导航三部分奖励,给每个候选策略打分。

我们汇入口的三个候选,等待、探出、汇入,在这套框架里各自前向仿真出几条场景线,逐一评分。如果只看期望分数,故事到这里就完了。但期望会撒谎。


平均值撒谎:尾部风险和 CVaR

安全强化学习(Safe RL)一开头就把问题挑明了:机器学习倾向于优化大量样本的平均行为,极端情况下的安全问题可能被忽视。数字例子更扎心:一条危险轨迹出现的概率是 p、惩罚是 r,它对期望回报的影响只有 −p·r。惩罚远小于 1/p,学习器就看不见它;惩罚远大于 1/p,回报的方差又大到没法稳定估计目标和梯度。只调奖励的数值,解决不了根本问题。

用一组好算的数字看这件事。假设某个汇入口,“直接汇入”这个策略在 90% 的分支里顺畅通过,收益不错;在 10% 的分支里撞上了,记 −100。一算期望,0.9 × 收益 + 0.1 × (−100),那次灾难被平均值稀释得看起来“还行”。我们这个路口更不利:按上一章的联合预测,直接汇入只在一个组合里没有冲突。

MARC 可以看作 EPSILON 的后继,做法分两步。

第一步,场景树。不把每个未来分开处理,而是找出它们的共同前缀:好几个分支在最初一段时间里对自车的要求是一样的,就合并成一段共享轨迹,之后再分叉。优化轨迹时,共享段必须对所有分支都成立,分叉之后各管各的。这在数学上兑现了“防御性驾驶”:先走一段对所有可能都留有余地的轨迹,等世界揭晓再分化。这正是“先探出、看情况再汇入”的形式化版本。

第二步,CVaR(条件风险价值)。不再平等地看所有分支,而是放大最坏那部分尾巴的安全代价;参数 α 决定尾巴取多宽,α 越大尾巴越窄,这就是风险容忍度的数学旋钮。期望值会拿 90% 的顺畅去稀释 10% 的碰撞;α 取到 0.9 以上的 CVaR,盯住的就是那 10% 的碰撞本身。

效果可以量化。MARC 的消融实验放在一个加塞场景里:自车只保持车道,旁车强行切入、逼自车让行,每种做法随机初始化跑 100 次:

做法平均最大减速度与切入车的平均最小距离成功率
不分支3.48 m/s²1.37 m83%
固定分支2.52 m/s²2.53 m93%
动态分支1.63 m/s²3.45 m96%
动态分支 + 风险感知1.14 m/s²4.12 m100%

更安全的同时反而更平顺:提前留了余地,就不需要急刹。在加塞、预测带噪声、多车高速三个场景里和 EPSILON 对比,MARC 也全面更优:通行更快,加速度更平稳。


这条路线的天花板

把这条路线推到头,它有三条结构性的局限,这三条比前面所有内容都值钱:

  1. 按意图组合生成场景,存在组合爆炸:车一多、交互一密,就枚举不动了;
  2. 基于模型的前向仿真,处理复杂交互的能力有限:你的“他车模型”终究是个手写的假设;
  3. 基于模型产生的决策,泛化性和多样性有限:没见过的场景组合,规则栈给不出新答案。

这三条就是第 7 章端到端方法的存在理由。记住它们,到那一章会看到学习栈分别怎么回应。


决策交付什么

回到停止线前。综合预测的分支和尾部风险,决策层的输出是:

  • 当前策略:保持停止,随后低速探出;
  • 切换条件:目标间隙收窄,就立即停车;确认切入完成、后车留出安全间隙后,切换为汇入;
  • 交给下一层的约束:探出阶段的限速、必须能在可见距离内停住、目标汇入区域。

注意它交付的不是轨迹,而是带切换条件的策略和一组约束。把这个策略变成每个时刻的位置、速度、加速度,也就是一条底层控制真正能执行的曲线,是下一章的事。


本章速查

概念一句话
决策 vs 规划每种决策对应一簇规划;离散的“做什么”不先分层,规划就得同时猜意图、算几何
MDP 两个旋钮γ 管看多远,noise 是动作执行的不确定性;可以类比量产的保守 / 激进调参
POMDP状态测不到,只有置信;策略是“置信 → 动作”的映射
老虎问题的 −1获取信息有代价;“低速探出”就像驾驶版的“听一次”
MPDM有限的语义策略集 + 闭环前向仿真 + 打分选优,把无限问题变成有限
DCP-Tree一个决策周期里最多换一次动作,用人类驾驶的观察砍掉指数空间
期望的谎言0.9 的顺畅会稀释 0.1 的灾难;惩罚小了看不见、大了方差失控,靠调奖励治不了本
场景树 + CVaR共享段对所有分支留余地;CVaR 放大最坏尾部的安全代价,α 是风险容忍旋钮
规则栈天花板组合爆炸、仿真交互能力有限、泛化有限,这就是端到端的动机
02

规划器:端到端怎样生成一条可执行轨迹

当感知、导航与自车状态已经被编码,端到端规划器究竟怎样用 Query、AR、Diffusion 或 Flow Matching 产生轨迹,并在实时预算内选出最后一条?

03

从模仿学习到强化学习:训练闭环怎样补上驾驶因果

为什么端到端规划器不能只靠模仿学习,强化学习又为什么取代不了监督底座?PPO、GRPO、奖励、信用分配和闭环 rollout,在量产链路里各自解决什么?