如下部分由AI整理,不喜欢深入技术的同学可跳过,直接到第4部分!!!!
3.1 基础:分块掩码扩散的工作原理
Fast-dDrive建立在**分块掩码扩散语言模型(Block-Causal Masked Diffusion)**的基础架构上,并针对端到端自动驾驶的结构化输出做了深度适配。掩码扩散语言模型(Masked Diffusion Language Model,MDM) 的核心不同于传统的连续扩散——它操作的是离散token序列 x₀ = (x₁, …, xₗ)。前向过程按噪声调度 {λₜ}ᵀ 将token随机替换为 [MASK],逆向过程由参数化策略 pθ 预测被掩码位置的原始token,训练目标是最小化被掩码位置上的交叉熵损失。
分块因果注意力(Block-Causal Attention) 在此基础上引入了结构化约束:输出被划分为B个固定大小的块 [b₁, …, b_B],块内使用双向注意力(能看到块内所有位置),块间使用单向因果注意力(只能看到前面的块)。
这个设计的核心价值是恢复了KV-cache的兼容性:前面的块计算完成后,其Key-Value状态可以被后面的块直接复用,不需要每次去噪都从零计算完整上下文。
同时,全序列扩散的"逻辑泄漏"问题也随之消解——trajectory块永远只能看到前面块的最终输出,不能反向影响explanation块的内容,因果顺序在注意力机制层面就被保证了。
3.2 Structure-Aware Scaffold Diffusion
框架构建:冻结已知,专注未知
端到端自动驾驶VLA的输出是一个JSON schema,包含四个语义段:
critical_objects → 关键物体检测(12个二元判断)
explanation → 自由文本推理说明
future_meta_behavior → 行为决策(纵向/横向枚举)
trajectory → 5秒轨迹坐标(20个航点)
Fast-dDrive的关键洞察是:这个JSON里约30%的token是纯结构性的——键名、引号、括号、逗号。这些token的内容完全由schema决定,没有任何不确定性。
框架(Scaffold)的构建方法: 将所有结构token预填为 x̂ₜ,只对Editable位置 ℰ(即值token)施加掩码和去噪。这一步直接带来两个收益:
语义段 | Editable值token | Scaffold框架token | 分块数 |
|---|
critical_objects | 12 | 80 | 1 |
explanation | 192 | 6 | 6 |
future_meta_behavior | 6 | 18 | 1 |
trajectory | 70 | 20 | 3 |
语义对齐的分块策略
Fast-dDrive将块边界与语义段边界严格对齐:每个语义段 s 包含 |ℰₛ| 个Editable token,被划分为 nₛ = ⌈|ℰₛ|/d⌉ 个扩散块。
语义段按因果顺序 CO → Expl → FMB → Traj 依次生成,每个块都能完全看到同一语义段内其他块的双向上下文,而跨语义段只能看到前面段全部完成后的输出。
这一设计与端到端自动驾驶"先感知、后推理、再决策"的业务逻辑完全一致——从架构层面消灭了逻辑泄漏。
安全优先的训练机制
四个语义段对驾驶安全的影响天差地别:trajectory一个错误坐标可能导致碰撞;explanation一句话不准确,毫无后果。
Fast-dDrive引入两项互补的训练时机制:
段落加权损失(Section-Weighted Loss): 每个语义段 s 分配一个正标量权重 wₛ,缩放其被掩码位置的交叉熵。论文中四段权重为 {wₛ} = {3.0, 2.0, 1.5, 1.0}(分别对应 trajectory、future_meta_behavior、critical_objects、explanation),梯度更新时,高权重段落的难样本主导学习方向。
段落自适应噪声调度(Section-Adaptive Beta Noise Schedule): 噪声调度从全局统一分布替换为各段独立的Beta分布:tₛ ~ Beta(αₛ, βₛ})。四段参数 {(αₛ, βₛ)} = {(2,1), (1,1.5), (1,2), (1,1)},使trajectory段在更难去噪的高噪声区间训练,explanation段在低噪声区间训练——因段施教,不浪费模型容量。
两项机制仅存在于训练阶段,推理时零额外开销。
联合AR+Diffusion双流训练
Fast-dDrive继承了Fast-dVLM的双流训练目标,在同一组权重上同时优化两个分支:
{\text{train}}(\theta) + \beta\,\mathcal{L}$$\mathcal{L} = \alpha\,\mathcal{L}{\text{AR}}(\theta), \quad \alpha = \beta = 0.5$$
这个设计是Fast-dDrive支持"同一模型、两种推理模式"的底层基础——不需要微调,权重自带两个解码头。
3.2 推理模式:Section Diffusion与Scaffold Speculative Decoding
模式一:Section Diffusion(分块迭代去噪)
Section Diffusion复用训练时的生成流程:从预填的框架 x̂ₜ 出发,MDM头在块级迭代去噪,按语义段顺序逐段生成。
每个语义段生成时,KV-cache从已完成的段复用(causal context reuse),无需重复计算前方内容。这已经是比全序列扩散高效得多的方案,但仍是纯扩散——每块需要多次去噪步迭代。
模式二:Scaffold Speculative Decoding(框架推测解码)
这是Fast-dDrive效率提升的核心大招,基于**自推测解码(Self-Speculative Decoding)**框架,并在块级引入了框架感知加速。
给定预填框架 x̂ₜ,每个语义块 bⱼ 的处理流程如下:
第一步:框架token自动通过(Auto-Accept)。
块 bⱼ 内的所有框架位置(属于集合 𝒜)直接接受,无需任何计算。只有Editable值位置 ℰⱼ = ℰ ∩ bⱼ 进入后续的推测解码流程。
第二步:MDM头并行草稿(Draft)。
扩散头对块内所有 |ℰⱼ| 个Editable位置执行单次前向传播,利用块内双向注意力,同时生成所有草稿 token {x̃ᵢ}ᵢ∈ℰⱼ。这一步是纯并行的,不是逐token生成。
第三步:AR头串行验证(Verify)。
因果头对完整块执行单次前向传播,计算每个位置 p_ARθ(·|x<i)。从左到右逐位置比较:若 argmax p_ARθ(·|x<i) = x̃ᵢ,则接受该token并继续;若不匹配,则拒绝,接受AR预测并丢弃该位置之后的所有草稿,同时额外接受一个bonus token(确保不倒退)。
每块固定消耗 2次前向传播(草稿+验证),与块内Editable token数量无关。相比纯AR逐token解码(每个token一次完整前向传播),效率提升来自两个维度:并行草稿(块内多token同时生成)和框架自动通过(结构性token零计算)。
3.3 低开销测试时推理扩展:共享前缀多轨迹Rollout
Scaffold Spec对同一输入总是输出同一条确定性轨迹。Fast-dDrive进一步引入了测试时计算扩展机制,将额外算力转化为精度提升。
设计原则一:仅在trajectory段引入随机性。
前三个语义段高度结构化,softmax分布极为尖锐,采样几乎不产生有用多样性,反而会劣化下游轨迹段的质量。因此,前三段保持greedy解码,只有进入trajectory段后才开启softmax采样。
设计原则二:共享前缀KV-cache,fork只发生在trajectory段。
前三段的KV-cache在所有rollout路径上完全相同——只需解码一次,然后在trajectory段fork出N条独立采样路径。每条路径的额外成本仅来自trajectory段本身(前约70个值token),而非整个280+token的完整输出序列。
设计原则三:多轨迹平均。
N条rollout轨迹 {τ⁽ⁱ⁾}ᵢ₌₁...N 经Jerk-Minimizing Trajectory(JMT)插值至20航点后取等权平均。按方差-均值原理,N条轨迹的均值的残差方差随N增大而按1/N衰减,而确定性偏差保持不变——这意味着更多rollout直接带来更低的预测误差。
实验验证:在WOD-E2E验证集上,ADE@5s随N增大单调递减(N=4时,L2误差从单rollout的1.64m降至1.36m),且额外算力成本远低于完整序列的N次解码。
框架的前三个段高度结构化,softmax分布非常集中,随机采样几乎没有意义。
NVIDIA只对trajectory段开启采样。但这里有一个关键设计:前三个段的KV-cache在所有采样路径上完全相同,解码一次,fork出N条轨迹,再取平均。
不是重新跑完整输出序列,而是只对trajectory那一段做N次采样和平均——额外算力成本只有全量的零头,但能将L2误差从1.64m压到1.36m。