【World Model】交叉熵曲线与OccWorld两阶段训练关系
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_y | L=-ln(p_y) |
|---|---|
| 0.01 | 4.605 |
| 0.1 | 2.303 |
| 0.5 | 0.693 |
| 0.9 | 0.105 |
| 0.99 | 0.010 |
| 1 | 0 |
- 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∑511qclnpc.
单个正确类别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=∑jexp(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. dpydL=−py1,dpy2d2L=py21>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也不直接对应某一种语义类别。
可以分开查看:
- 第一阶段重建OCC的mIoU/占据IoU,以及小物体和类别细节是否保留。
- 码本使用是否集中到极少数词条;当前量化器返回perplexity=None,不能据这个字段直接读到实际利用率。
- 第二阶段token CE与解码后的真实未来OCC指标,两者分别反映表示预测和最终输出。
- 轨迹误差与占据质量分开评价,不由一项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 概率变化的公式曲线,非真实训练日志)。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)