1. CE曲线的横轴到底是什么?

对当前单个空间位置,有512个token候选。设真实编号为y,模型给它的概率为p_y,则硬标签交叉熵为:

L = − ln ⁡ p y , 0 < p y ≤ 1. L=-\ln p_y,\qquad 0<p_y\le1. L=−lnpy​,0<py​≤1.

下面横轴是给正确token的概率,不是迭代次数、不是token编号、也不是logit原始分数。纵轴是该位置的未加权loss。

在这里插入图片描述

正确token概率p_yL=-ln(p_y)
0.014.605
0.12.303
0.50.693
0.90.105
0.990.010
10
  • p_y趋近0,loss趋近正无穷:对真实答案极不信任时惩罚很大。
  • p_y趋近1,loss趋近0。
  • 512类均匀预测时p_y=1/512,loss=ln512≈6.238;这是均匀猜测的参考,不是实际训练loss必须从6.238开始。
  • 图只显示有限纵轴,曲线在0处未定义,不能把左边界当成一个有限最大loss。

2. 从交叉熵定义推导成-log正确类别概率

设目标概率分布为q,模型概率分布为p,定义:

H ( q , p ) = − ∑ c = 0 511 q c ln ⁡ p c . H(q,p)=-\sum_{c=0}^{511}q_c\ln p_c. H(q,p)=−c=0∑511​qc​lnpc​.

单个正确类别y对应one-hot目标:

q y = 1 , q c ≠ y = 0. q_y=1,\qquad q_{c\ne y}=0. qy​=1,qc=y​=0.

代回后只有真实类别这一项留下:

H ( q , p ) = − 1 ln ⁡ p y − ∑ c ≠ y 0 ln ⁡ p c = − ln ⁡ p y . H(q,p)=-1\ln p_y-\sum_{c\ne y}0\ln p_c=-\ln p_y. H(q,p)=−1lnpy​−c=y∑​0lnpc​=−lnpy​.

所以GT不必真的存512个one-hot值,存整数y即可。PyTorch可按该编号索引,避免显式存整张one-hot目标。

也可以从最大似然理解:希望真实答案的条件概率尽量大;对概率取负对数,就得到可最小化的损失。多位置的条件概率乘积取对数变成求和,再归一化得到平均loss。

3. 从logits到实际CE公式

Transformer每位置输出512个logit s_c,不是已经归一化的概率。softmax定义:

p c = exp ⁡ ( s c ) ∑ j exp ⁡ ( s j ) . p_c=\frac{\exp(s_c)}{\sum_j\exp(s_j)}. pc​=∑j​exp(sj​)exp(sc​)​.

因此:

L = − ln ⁡ p y = − s y + ln ⁡ ∑ j exp ⁡ ( s j ) . L=-\ln p_y=-s_y+\ln\sum_j\exp(s_j). L=−lnpy​=−sy​+lnj∑​exp(sj​).

F.cross_entropy直接处理logits,通过稳定的log_softmax等计算,不需要提前softmax,更不能先argmax成整数再算这个分类loss。官方接口

默认无类别权重、硬标签、所有标签有效时,当前11×50×50=27500个监督位置的loss求平均,得到token CE标量。然后总训练loss再加0.1倍轨迹项。

4. 曲线为什么这样弯?梯度怎样推动学习?

对正确类概率直接求导:

d L d p y = − 1 p y , d 2 L d p y 2 = 1 p y 2 > 0. \frac{dL}{dp_y}=-\frac1{p_y},\qquad \frac{d^2L}{dp_y^2}=\frac1{p_y^2}>0. dpy​dL​=−py​1​,dpy2​d2L​=py2​1​>0.

因此概率越高,loss越低;函数向上凸,低概率区惩罚变化更陡。

但网络实际产生logits,不是直接把p_y当独立参数。经过softmax链式求导:

∂ L ∂ s c = p c − 1 [ c = y ] . \frac{\partial L}{\partial s_c}=p_c-\mathbb1[c=y]. ∂sc​∂L​=pc​−1[c=y].

展开:由L=-s_y+ln(sum exp(s_j)),第一项导数是真实类的-1,第二项导数是exp(s_c)/sum exp(s_j)=p_c,所以得到上式。

正确类的单位置梯度p_y-1≤0,梯度下降倾向提高其logit;错误类梯度p_c≥0,倾向降低其logit。所有512项通过softmax分母共同参与。不能仅凭概率曲线在0附近斜率大,就断言当前稳定实现的logit梯度会按1/p_y爆炸;进一步参数梯度还与网络本身的导数、归约方式等有关。

5. 为什么VQVAE质量很重要?

第二阶段的GT token来自冻结的第一阶段:真实OCC→Encoder/quant_conv→最近邻码本编号。第二阶段只能利用这些表示,并用冻结码本/解码器解释预测结果。

如果第一阶段无法表达车辆、地面等有用差异,或量化重建丢失关键细节,第二阶段再努力预测token,也难以恢复表示中没有保留下来的信息。固定码本不是把编码错误变成正确事实,而是固定了第二阶段使用的表示协议。

极端教学例子:若大量不同场景全部变成同样的token,Transformer可能很容易猜中这些token、CE很低,但占据解码只能产生缺少区分的结果。token loss低不自动等于OCC预测好。

“有区分度”应当指保留对重建和未来预测有用的差异,不是要求每帧、每物体、每格都有独一无二的码本ID。码本复用相近模式本来就是量化的目的;token也不直接对应某一种语义类别。

可以分开查看:

  1. 第一阶段重建OCC的mIoU/占据IoU,以及小物体和类别细节是否保留。
  2. 码本使用是否集中到极少数词条;当前量化器返回perplexity=None,不能据这个字段直接读到实际利用率。
  3. 第二阶段token CE与解码后的真实未来OCC指标,两者分别反映表示预测和最终输出。
  4. 轨迹误差与占据质量分开评价,不由一项loss代替所有结果。

这些是分析维度,并非本次已执行完整模型质量评测。重建质量限制表达能力,但不应不加条件地把某个重建IoU数值称为未来预测IoU的严格数学上界。

6. 第一阶段6帧:各自重建原帧,不是预测“当前帧”

当前第一项debug配置return_len=6:

帧0 → Encoder → 共享码本 → Decoder → 重建帧0
帧1 → Encoder → 共享码本 → Decoder → 重建帧1
……
帧5 → Encoder → 共享码本 → Decoder → 重建帧5

6帧合并进batch维,网络逐帧处理,共享参数但没有跨帧时间Attention。并非把前5帧作为历史、只重建第6帧。

也不应只概括成“逼近当前帧的码本”:所有帧使用同一张码本,码本不是每帧各有一张。第一阶段联合训练编码器、码本和解码器,目标同时包括:

  • Recon/Lovasz:量化后仍能重建各自原始OCC。
  • commitment:连续特征靠近被选码本向量。
  • codebook项:被选码本向量靠近连续特征。

因此它学习的是一套适合场景压缩与重建的共享表示,不只是让编码特征靠近一个预先固定的词典。

7. 第二阶段11个时间输入:并行训练多个下一步任务

当前第二项debug实际读12帧。冻结tokenizer后,场景输入取帧0~10,目标取帧1~11,因果mask为各位置提供不同长度的真实历史:

输出位置允许读取的真实历史监督目标
0帧0帧1的token
1帧0、1帧2的token
2帧0、1、2帧3的token
………
10帧0~10帧11的token

所以“历史11帧预测当前帧”只描述了最后一个输出位置:如果把帧11叫当前待预测帧,确实用0~10这11帧预测它。但整个训练前向还同时监督前面10个下一步输出,不是只有一个目标帧。

更清楚的说法是“根据截至t的历史预测t+1”。当前训练用真实历史、一次并行计算,叫teacher forcing;预测结果不接回该次训练输入。真正固定5帧历史、再连续生成6帧未来的自回归评测在第三项debug中。

两阶段目的对照:

阶段1:学会用共享词典描述一帧,并还原它。
阶段2:冻结词典,学习这些表示下一步如何变化,同时预测自车运动。

8. 本次检查

本次核对了当前VQVAE.forward的原帧重建路径、TransVQVAE.forward_train_with_plan的输入/目标切片,以及mini的6帧/12帧配置。绘图直接依据-log§,已检查图中文字、标注及范围,提供PNG和SVG;这些是公式曲线,不是实际训练日志曲线。没有重新训练或验证现有checkpoint的质量。

示意图见上文插图(交叉熵随正确 token 概率变化的公式曲线,非真实训练日志)。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐