Plan-R1: Safe and Feasible Trajectory Planning as Language Modeling

🚗 Plan-R1:让自动驾驶规划既像人又守规矩

核心洞见: 预训练学会"像人类一样开车",RL 微调让它真正理解"什么是安全"——两个目标完全解耦,互不干扰。


📌 一句话总结

两阶段训练范式:自回归预训练建立行为先验,规则奖励 RL 微调灌输安全意识,双模型架构让 ego 和世界模型各司其职。


一、核心动机:自动驾驶规划的"原罪"

想象一个驾校学员,他只跟着老师的录像学开车。问题来了:如果老师偶尔超速、偶尔开得有点激进,这个学员也会原封不动地把坏习惯学走。更糟的是,录像里几乎没有"险些撞车"的场景,所以他根本不知道该怎么主动避险。

这正是现有自动驾驶规划模型的困境。作者统计发现,nuPlan 训练数据里超过 10% 的场景存在超速行为,还有一些场景的碰撞预警时间(TTC)危险地低。现有方法无论是模仿学习(IL)还是强化学习(RL),都有明显短板:

方法 核心问题
纯 IL 照着人类数据"描红",继承所有坏习惯;罕见危险场景几乎没有覆盖
纯 RL 从零探索效率极低,在复杂动态环境里难以收敛,行为也不像人类
IL+RL 混合(如 Gen-Drive、TrajHF) 依赖人工偏好数据,收集成本高,可能引入新偏差

Plan-R1 的核心洞察:向大语言模型(LLM)的训练范式取经——预训练学会"像人类一样开车",再用规则奖励进行 RL 微调,让模型真正理解"什么是安全"。这两个阶段的目标完全解耦,互不干扰。


二、问题建模:把开车看成"序列预测任务"

论文把多辆车的未来运动联合建模为自回归序列预测。给定场景上下文 $C$ 和规划原则 $P$,联合生成所有智能体的未来轨迹 $Y$:

$$p(Y | C, P) \approx \underbrace{\pi_e(y_{t,0} | y_{关键假设是:周围车的行为不受自车规划原则 $P$ 的影响(现实中大致成立)。这样就把问题拆成两个子任务分而治之,为后续的双模型设计埋下伏笔。


三、Stage 1:自回归预训练——学会"人味儿驾驶"

3.1 运动 Token 化

把连续轨迹离散化为"运动 Token",就像 LLM 把文字切成词元一样:

  • 时间维度:每 0.5 秒一个片段;
  • 空间维度:用 K-disk 聚类算法,生成大小为 1024 的运动词汇表,每个 Token 代表一种典型的"位移 + 航向变化";
  • 自车和周围车辆共享同一套 Vehicle 类别词汇表(另有 Pedestrian、Cyclist 各自的词汇表)。

3.2 模型架构:三种注意力轮番上阵

模型是一个带有因式分解注意力的 Transformer 解码器,每个 Block 包含三种注意力机制:

每个 Attention Block:
  ├── 时间自注意力      → 理解单辆车自身的运动连续性
  ├── 智能体-地图交叉注意力 → 感知道路结构,别跑出赛道
  └── 智能体-智能体自注意力 → 感知周围邻居动态,避免互撞

参数规模:6 层 Transformer,8 头注意力,隐藏维度 128,约 505 万参数,相当轻量。

💡 深入讨论:相对时空位置编码

所有注意力模块都使用相对时空位置编码,而不是绝对位置编码。这里有一个常见的误区需要澄清:

“直接用 RoPE 不就是相对位置编码吗?”

RoPE 确实是相对位置编码,但它解决的是一维序列的相对性(谁先谁后),而自动驾驶需要的是多维时空的相对性:

维度 含义 RoPE 能处理吗?
Δx 横向相对距离
Δy 纵向相对距离
Δθ 相对朝向角
Δt 时间差 ⚠️ 仅此一项

硬套 RoPE 会有三个致命问题:

  1. Token 顺序没有物理意义:把 10 辆车排成序列,序列距离和空间距离完全脱钩;
  2. 空间是 2D 的,RoPE 是 1D 的:车在正前方 10 米和正右方 10 米,决策含义天壤之别;
  3. 朝向信息丢失:两车相向而行还是同向而行,危险程度完全不同。

论文实际做法是专为多智能体设计的时空相对位置编码,以每个智能体为局部坐标系原点(即 query-centric),把其他所有元素变换到自己视角下:

# 把 agent_j 的位置投影到以 agent_i 为原点、以其朝向为 x 轴的局部坐标系
relative_pos = rotate(pos[j] - pos[i], -heading[i])
relative_heading = heading[j] - heading[i]
relative_time = t_j - t_i

# 编码后加入注意力计算
bias = MLP([relative_pos.x, relative_pos.y, relative_heading, relative_time])
attention_score += bias

这保证了平移不变性(同样的追尾场景发生在哪座城市都是同样的输入)和旋转不变性(向东开还是向西开,“左侧有车逼近"的处理逻辑相同)。

工程实现上完全可以向量化,无需逐对循环:

# 一次广播算出所有对的位置差,shape: [N, N, 2]
delta_pos = pos[None, :, :] - pos[:, None, :]

# 批量旋转到各自局部坐标系
R = build_rotation_matrix(-heading)           # [N, 2, 2]
local_pos = torch.einsum('ixy, ijy -> ijx', R, delta_pos)  # [N, N, 2]

# 相对朝向,一行搞定
delta_heading = heading[None, :] - heading[:, None]  # [N, N]

# 批量 MLP 编码,零循环,GPU 完全并行
bias = MLP(torch.cat([local_pos, delta_heading.unsqueeze(-1)], dim=-1))

N² 对的相对位置编码在 GPU 上是一次并行计算,实际速度和标准 attention 相当。

3.3 训练目标

标准的下一个运动 Token 负对数似然,和 LLM 的预训练目标如出一辙:

$$\mathcal{L}_{\text{pretrain}} = -\sum_{t=1}^{F}\sum_{n=0}^{N} \log p_a(y_{t,n} | y_{此阶段只学行为,不问是非对错。


四、Stage 2:强化学习微调——灌输"安全意识”

预训练只是让模型"学会开车",RL 微调才是让它"开好车"。这一阶段包含三个关键设计。

4.1 双模型 Rollout 设计

RL 微调时面临一个现实困境:如果周围车辆只是"放录像"(回放真实轨迹),它们完全不理会自车决策,仿真严重失真;但如果让周围车也参与训练,就乱成一锅粥。

解决方案:双模型

  • 可训练的 ego 规划器:探索更安全的决策;
  • 冻结的预训练模型副本(世界模型):动态预测周围车辆的响应。
每一个时间步:
  ego 规划器(可训练)  →  采样 G=4 条候选轨迹
  冻结世界模型(no_grad)→  基于当前联合状态,输出所有周围车的 token
  → 更新联合历史,进入下一步

💡 深入讨论:世界模型是几个副本?

不是每辆车配一个副本,而是整个场景共享同一个冻结模型。预训练模型本来就是多智能体联合预测器,一次前向传播天然输出所有车的预测。加上 no_grad 省掉反向传播,额外开销约等于半个模型的前向计算。

计算开销拆解:

组件 梯度 相对计算量
ego 规划器前向 × G=4 采样 ✅ 需要 ~40%
冻结世界模型前向(全部周围车) ❌ no_grad ~20%
反向传播(只对 ego) ~40%

冻结世界模型的鲁棒性:论文做了扰动实验,对自车历史状态加入不同强度的高斯噪声(σ = 0 ~ 10m),世界模型对周围车的预测误差几乎不变(极端扰动 σ=10m 时 FDE 仅增加 0.58m)。这是因为世界模型依赖多维信息(周围车自身运动历史 + 地图拓扑 + 交互上下文),自车状态只是其中一个次要输入,单一扰动不会主导多智能体表示。

⚠️ 关于 ego 规划质量的内在局限

值得注意的是,共享联合预测模型对 ego 规划的质量先天不足。多智能体联合预测的目标是"输出合理的多模态未来分布",而规划目标是"输出最安全最合规的单一决策"——两者在同一个共享 backbone 上存在竞争。

论文通过 RL 微调来弥补这个 gap,但受限于 KL 正则(防止 ego 偏离预训练分布太远),能纠正的空间有限。数据也印证了这一点:纯预训练的 NR-CLS(85.61)低于有专门 ego decoder 的 PLUTO(88.89),RL 微调带来 ~5 分提升说明确实存在明显缺口。

Plan-R1 真正的差异化优势在反应式场景(R-CLS),这是双模型交互感知能力的主场,而不是 ego 规划本身的精度。

4.2 基于规则的奖励函数

奖励设计遵循"安全一票否决 + 软目标加权"的结构:

$$R(y_t) = \underbrace{\prod_{k \in \mathcal{I}_{\text{safe}}} \mathbb{1}_{k,t}}_{\text{安全指标(一票否决)}} \times \underbrace{\sum_{j \in \mathcal{I}_{\text{cost}}} w_j \cdot r_j(y_t)}_{\text{软目标加权求和}}$$

安全指标(任意一项为 0 则总奖励归零)

  • 驾驶区域合规(不出赛道)
  • 不与动态障碍物碰撞
  • 不与静态障碍物碰撞

软目标(安全满足后才优化)

项目 权重 说明
舒适度 2 横纵向加速度、角速度不超阈值
TTC 碰撞预警 5 保持足够安全车距
速限合规 2 超速距离线性扣分
行驶进度 1 沿参考路线的前向位移(非模仿损失!)

消融实验证实每个组件不可缺少:去掉碰撞奖励 NR-CLS 暴跌 18 分;去掉进度奖励车辆倾向原地发呆,NR-CLS 降至 80.01。

4.3 VD-GRPO:强化学习的"安全护盾"

GRPO 的问题:安全信号被"稀释"

论文采用 GRPO(Group Relative Policy Optimization)进行微调,但直接使用会产生一个隐患。

预训练后约 80% 的轨迹组都是安全的,只有少数组发生碰撞。GRPO 的逻辑是对每组奖励做归一化(减均值除以标准差)再计算优势:

$$\tilde{R}_{\text{GRPO}}(y_t^g) = \frac{R(y_t^g) - \mu_R}{\sigma_R}$$

问题就出在 $\sigma_R$ 这一项:

  • 安全组:奖励全是软目标波动,方差小($\sigma_R$ 小)→ 归一化后优势值被放大
  • 危险组:有些时刻奖励直接归零(撞车了),方差大($\sigma_R$ 大)→ 归一化后优势值被压缩

结果是优化器看到"安全组信号更强",疯狂优化舒适度、进度这些次要目标,对碰撞避免这个核心目标反而越来越麻木。实验证实:GRPO 微调后碰撞避免指标反而下降 0.96 分。

数学根源(论文附录 E 的严格证明)

设安全组奖励为纯软目标 $C_t^g \in [0,1]$,危险组奖励有 $\alpha$ 比例直接归零。在满足 $\alpha < 0.3$、$\mathbb{E}[C_t^g] > 0.8$(这两个条件在预训练后实测成立)时,可以证明:

$$\text{Var}(R_t^g)_{\text{unsafe}} > \text{Var}(R_t^g)_{\text{safe}}$$

即危险组的方差一定大于安全组,从而 GRPO 的隐式权重 $1/\sigma_R$ 系统性地压低了安全关键轨迹的梯度,与"安全第一"的设计意图完全背离。

VD-GRPO 的解法:去掉方差,换成固定常数

把 $\sigma_R$ 替换为固定常数 $c$:

$$\tilde{R}_{\text{VD}}(y_t^g) = \frac{R(y_t^g) - \mu_R}{c}$$

这样所有组使用相同的缩放,危险组因为方差本身就大,自然产生更大的梯度,得到更多的优化关注,正好符合"安全第一"的优先级。

为什么需要 $c$ 而不是直接不缩放?

因为 GRPO 的 KL 正则系数 $\beta$ 是在有 $1/\sigma_R$ 放大效应的前提下调的。直接去掉缩放,RL 梯度相对于 KL 正则会骤然缩小,KL 主导整个优化,策略无法改进。$c \leq 1$ 的作用是把 RL 信号的量级恢复到 GRPO 隐式期望的范围,同时不再引入方差偏差。实验显示 $c$ 在 $[10^{-4}, 10^{-1}]$ 的宽范围内都稳定,$c = 0.1$ 为最优。

微调损失完整形式:

$$\mathcal{L}_{\text{finetune}} = -\frac{1}{GF}\sum_{g=1}^{G}\sum_{t=1}^{F}\left[\frac{\pi_e(y_t^g | C, P, y_{其中 $\hat{A}_t^g = \sum_{\tau=t}^{F} \tilde{R}_{\text{VD}}(y_\tau^g)$ 为累积优势,KL 项将 ego 策略锚定在预训练分布附近,保留人类驾驶先验。


五、实验结果

5.1 实验设置

  • 数据集:nuPlan(4 座城市,超 1300 小时驾驶数据)
  • 预训练:100 万场景;RL 微调:10 万场景(控制 rollout 计算量)
  • 评估指标:NR-CLS(非反应式)/ R-CLS(反应式,周围车用 IDM 动态响应,更接近真实)
  • 硬件:8 × NVIDIA RTX 4090

5.2 与 SOTA 的对比

在最具挑战性的反应式场景下,Plan-R1 大幅超越所有基线:

模型 Val14-R Test14-hard-R Test14-random-R
Diffusion Planner 82.80 69.22 82.93
Plan-R1(ours) 87.69 77.20 90.04
提升 +4.89 +7.98 +7.11

在非反应式场景(NR-CLS)下 Plan-R1 与 Diffusion Planner 基本持平,这正是因为后者有专门的 ego decoder,在无交互时的规划精度更高。加入规则后处理模块后,Plan-R1 在 Val14 以 94.72 / 93.54(NR/R)拿下双项第一。

定性案例:在专家轨迹有超速的场景里,PLUTO 和 Diffusion Planner 都"学坏了",跟着超速;Plan-R1 全程守规矩,速度完全合规。

5.3 消融实验

VD-GRPO 对比 GRPO

配置 NR-CLS 碰撞避免 TTC R-CLS
纯预训练 85.61 94.83 90.04 82.81
+ GRPO 88.65 93.87 91.57 88.35
+ VD-GRPO 91.23 97.32 95.02 90.04

GRPO 的碰撞避免指标比预训练还低,印证了安全信号被稀释的问题。VD-GRPO 将不安全场景比例从 6.7% 压缩到 4.7%(降幅 29.8%)。

双模型设计消融(R-CLS):

世界模型设计 R-CLS 说明
无 RL 82.81 纯预训练基线
双倍参数预训练 84.94 堆参数,+2.13
GT 回放 87.44 非反应式仿真,+4.63
反应式世界模型 90.04 +7.23

堆参数只带来 +2.13,加入反应式世界模型带来 +7.23,性能提升来自设计本身,而非参数规模

Pass@k 分析:生成 k 条候选轨迹,至少有一条安全可行的概率随 k 增大而提升,且 Plan-R1 始终高于基线,说明微调不仅提升了单次质量,也提升了"多样性中找到好方案"的能力。

interPlan 鲁棒性测试:在加入随机扰动(添加/删除智能体、插入障碍物)的 335 个场景上,Plan-R1(72.33)超越 PDM-Closed(69.64)拿下第一。


六、总结与核心贡献

Plan-R1 做了三件互相咬合的事:

  1. 范式迁移:把轨迹规划建模为"原则对齐的序列预测",将行为学习和安全原则对齐彻底解耦;
  2. 双模型架构:预训练建立行为先验,冻结副本充当世界模型,RL 微调专注于 ego 策略提升,不需要额外人工偏好数据;
  3. VD-GRPO:通过去掉方差归一化、换用固定常数缩放,确保安全目标在训练全程占主导地位,从理论上根除了 GRPO 的隐式降权偏差。

Plan-R1 的核心优势在于反应式交互场景——双模型带来的交互感知能力让它在真实互动环境中大幅领先。其局限在于共享 backbone 对 ego 规划精度的天花板,以及 KL 正则对策略改进空间的约束;在无交互的非反应式场景下,有专门 ego decoder 的方法(如 Diffusion Planner)仍有竞争力。


相关笔记

  • HorizonDrive — 同属自回归轨迹生成范式
  • Epona — 自回归扩散世界模型,类似的生成框架
  • MomAD — 运动规划优化方向
  • MotionLM — 同为运动语言建模方向

笔记整理自论文原文及阅读讨论,包含模型架构、位置编码、并行计算实现、世界模型鲁棒性及 ego 规划局限性等细节研讨。