1. 首页
  2. 精选文章
  3. 我们离原生自回归视频模型还有多远

我们离原生自回归视频模型还有多远

  • 发布于 2026-09-11
  • ·
  • 3 次阅读
  • ·
  • ·

原文:https://waynejin0918.github.io/how-far-native-ar-video/zh.html
作者:Weiyang Jin,香港大学

语言模型里,自回归的意思其实早就清楚了。预训练拟合的就是

p(w_{1:n})=\prod_i p(w_i\mid w_{<i}),

每写下一个词只需一次前向,训练看见的、测试看见的,都是已经写出的词。没人会先训一个双向 BERT 6,再蒸馏出一个「看起来像 GPT」的学生,然后说这就是原生自回归。推理时加一层因果 mask,同样不算。

视频如果也用这个词,对 V=(v_1,\ldots,v_T),就写成

p(V\mid c)=\prod_t p(v_t\mid v_{<t},c_{\le t}).

c_t 是当时已经有的条件:文本、第一帧、相机位姿、按键。它可以进条件,但不等于可以去看还没发生的 v_{>t}。这里说的原生自回归有两层意思,预训练拟合的就是这个乘积,写出下一步只需一次前向。Echo-WM-Flash 1 是我们按现在通行的扩散自回归训过的模型之一,下面讲这套做法离这个定义还有多远。

图像没有时间;视频多出来的是 t

一张图里,左右是同时存在的。PixelRNN 4 把似然写成光栅顺序 p(x)=\prod_{h,w}p(x_{hw}\mid x_{<hw}),只是给联合分布排个序,这个序是编码约定,不是时间。DiT 12 后来把光栅顺序丢掉,在 (h,w) 上做双向注意力,更接近一张照片,帧内空间双向没问题。

视频多出来的是 t。Video Pixel Networks 5 在像素级就已经把 t 当序列,而不是把时长 T 拉成一张更高的图。写 v_t 的时候,下一帧还没发生,不是画面还没画完。所以同一个似然里,两种顺序不是一类东西:

p(V)=\prod_t p\bigl(v_t\mid v_{<t}\bigr),\qquad p(v_t\mid v_{<t})\;\text{在 }(h,w)\text{ 上可以双向。}

时间上的这个乘积,是因为后面的帧这一刻还不存在;帧内双向只是当前帧怎么表示。把 T 当成更长的 H,就是把「还没发生」当成「画面另一边还没画完」。

短短几秒的片子上,这个差别几乎看不出来,未来帧就在同一条训练样本里,用上它们画质更好,Sora 14、Wan 16、LTX 15 靠的就是这个。它们拟合的是整段短片的联合分布,所以每个时刻的条件是

q_{\mathrm{bi}}(v_t\mid V_{\setminus t},c).

测试变成流式生成以后,需要的条件就变了。接着往下写,中途会碰到新的 c_t,生成也会比训练见过的窗口更长。这时要拟合的是

q_{\mathrm{AR}}(v_t\mid v_{<t},c_{\le t})=p_{\mathrm{data}}(v_t\mid v_{<t},c_{\le t}).

image-mVSC.png

image-MWcw.png

训练时能看见哪些变量,学到的条件就不一样。c_t 换成文本、图像或位姿,只是条件里多一项,V_{\setminus t} 不会变成 v_{<t}

世界模型 2225 很早就把这个错位露出来了,因为人一边看一边操作。更长的视频、更低延迟的续写,碰到的还是这件事。

VideoGPT 7、TATS 9 已经在离散符号上写过 \prod_t p(v_t\mid v_{<t})。画质后来不如 MaskGIT 8、MAGVIT 11、Phenaki 10,再不如按整段短片训的 DiT 级双向模型。

图好看了,「下一帧只看过去」却丢掉了。测试变成流式生成之后,领域没有回到「时间上只看过去」的预训练,问的是已经训好的 q_{\mathrm{bi}} 怎么改一改,让测试看起来像 q_{\mathrm{AR}},后面的流水线一直在做这件事。

训练看见了未来,生成下一步也不止一次前向

按这个定义,现在通行的扩散自回归这两条都不成立。

先说训练。训练时本该拟合 q_{\mathrm{train}}(v_t\mid\cdot)=p_{\mathrm{data}}(v_t\mid v_{<t})。如果拟合的是 q_{\mathrm{bi}},推理时再加因果 mask(当前块不许看后面的块),只是测试时挡住训练用过的未来。模型从来没有在「只有过去」这个条件下训练过。

再说生成。时间切成 B_1,\ldots,B_N 之后,写成 p(B_{1:N})=\prod_i p_\theta(B_i\mid B_{<i})。可这一步如果做成

x_{\sigma_K}\sim\mathcal{N}(0,I),\quad x_{\sigma_k}=x_{\sigma_{k+1}}+(\sigma_k-\sigma_{k+1})\,v_\theta(x_{\sigma_{k+1}},\sigma_{k+1}\mid B_{<i},B_i^{\mathrm{noisy}}),

写出来的并不是直接的 B_i,而是一段常微分方程积出来的。K\sim 30 是短片双向模型的积分长度;K=4 只是把同一种向量场的步数缩短,并不是一次前向写出 f_\theta(v_{<t})

这两条缺口接着会变成一串后训练。训练已经看见未来,推理就只能加上因果 mask,训练时历史用的是干净数据(teacher forcing),测试时历史却是模型自己刚写出的块:

q_{\mathrm{train}}(B_{<i})=p_{\mathrm{data}}(B_{<i}),\qquad q_{\mathrm{infer}}(B_{<i})=p_\theta(B_{<i}).

Bengio 等的 scheduled sampling 2、Ranzato 等的序列级训练 3、Self Forcing 19,处理的都是这个缺口。

真要在「只有过去」下训又贵又不稳。缺口还在就再加一级,先让模型自己往下滚,在这段历史上做 DMD 28,再把同样的损失加到已经带误差的更长历史上,\mathcal{L}_{\mathrm{long}}=\sum_k\mathcal{L}_{\mathrm{DMD}}^{(k)}。预训练从没在「只有过去」下训练过,这些阶段都是事后加上的。

写出下一步仍要积一段微分方程,所以要蒸馏。

Diffusion Forcing 17、CausVid 18、Self Forcing 19、Rolling Forcing 20、MAGI-1 21 推理时都不看未来,块里面却还是用多步把 K 压下来,整段生成要跑 N_{\mathrm{blocks}}\times K 次前向,到了 K=4 网络拟合的仍是 v_\theta(x,\sigma)

训练条件没改,每一步仍是多步积分。生成又要比训练窗口更长,于是改的是推理时看得见的过去 \mathcal{H}_i:留几帧早期的当锚点、只留最近几块、窗口往前滑时重置位置编码。

StreamingLLM 13 在语言里说过,滑动窗口需要锚点;FramePack 26、WorldMem 27 问的是 \mathcal{H}_i 里该留什么。这只改了测试时能看见哪些帧,训练时拟合的条件没动。

现在通行的做法,是缺一层补一层:

现在通行

for i in 1..N:
    x ~ N(0, I)
    for σ in [1.0, 0.75, 0.50, 0.25]:
        x = x + Δσ · v_θ(x, σ | B_<i, x)
    cache.write(x)

原生

for t in 1..T:
    v_t = f_θ(v_<t, c_≤t)
    cache.write(v_t)

image-glFE.png

每一级都多一组要调的量,如果预训练从来没用过 v_{>t},下一步也只需一次前向,这些级就没有必要。

块该切多长,不能随便定:一块只有一帧,块里没有前后运动,多步积分只剩空间去噪;一块接近一秒,又变回带边界缓存的短片模型;三帧既能边写边出,又给块内双向去噪留了空间,所以成了常见折中。原生模型得在预训练就定下这个单元,可以一帧跑一次网络,也可以一块跑一次网络,不用额外让三帧共用一个 mask 再积分一遍。

过去的经验

我们过去训过现在这套扩散自回归,Flash 1 是其中之一,闭环长程生成时,两件事反复出现。

后训练如果优化的是块内去噪,同一块 B_i 里可以更好看,但不一定能改善块与块之间的条件,而 \prod_t p(v_t\mid v_{<t}) 要的正是这个。只改 \mathcal{H}_i,改的是测试时能看见哪些帧,训练时拟合的条件没动。

image-Farc.png

更晚的后训练,采样和窗口都没动,同一块里纹理更干净,跨块一致性却没有稳定跟着变好。

生成器不动,只改 \mathcal{H}_i,加长推理窗口,或者打开、关掉位置和位姿编码的重置,训练条件都没变。窗口和训练对不上,问题出在块与块的接缝;重置和训练对不上,相对位置编码会指向另一套几何。跨块一致性没有因此稳定变好,变的仍是测试时能看见哪些帧,并没有拟合 p(v_t\mid v_{<t})

对原生设计意味着什么

块内后训练,推理时改窗口、开关重置,都到不了拟合 p(v_t\mid v_{<t}) 的目标。如果预训练就要拟合 p(v_t\mid v_{<t},c_{\le t}),下一步也只需一次前向,后面几件事其实已经定了。

块内后训练补不上跨块条件。 块内损失会把容量用在 B_i 好不好看上,要把 \prod_t p(v_t\mid v_{<t}) 学到,预训练的条件就得是过去,再加一个更好看的蒸馏阶段也补不上这个条件。继续预训练已经双向的 DiT,初始化可以留,但时间上的未来必须从第一步起就看不见。更干净的做法是隐空间不变,帧内仍双向,时间 mask 从随机初始化就是因果的。

VideoGPT 7 写过「下一帧只看过去」,离散码本偏弱,缺的是用现在的 DiT 和视频 VAE 再走这条路 12 15 16。损失可以还是流匹配,改的是条件:

\mathcal{L} =\mathbb{E}_{t,\sigma}\bigl\| v_\theta(x_{\sigma,t},\sigma\mid v_{<t},c_{\le t}) -(\varepsilon-v_t)\bigr\|_2^2,

\sigma 只加在当前单元上,梯度不经过 v_{>t}。少步一致性训练如果想当 K=1 的手段,得一开始就在 q_{\mathrm{AR}} 下训,先学 q_{\mathrm{bi}} 再压步数,容量又会用在块内积分上。后训练擅长的正是这个,跨块一致性却没有跟着上来,自己滚一段再加 DMD 还可以继续补,但那是上一节写过的后训练,不是原生模型。

加长窗口、开关重置,改的不是训练条件。 只改 \mathcal{H}_i、不改训练条件,跨块一致性没有稳定变好,所以在原生模型里,看得见的过去要成为模型的一部分:要么就是 v_{<t}(因果注意力的缓存),要么是参数里对 v_{<t} 的压缩,而且这段历史要接得上梯度。

固定「留多少锚点、留多少最近帧」,再去搜要不要重置位置编码,是改造 q_{\mathrm{bi}} 时才会去做的事。FramePack 26、WorldMem 27 问的是这段历史里该留什么,答案不该是再搜一轮和训练对不齐的窗口。

时间单元在预训练定下来,测试时不再对块内积分。 块内去噪可以更好看,网络却还在算 K 步向量场,如果一块或一帧就是一步,测试时就不能再对这块做 K 步积分。一次网络计算写一帧,最接近语言里的一个词;一次网络计算写 L>1 帧,块内可以双向,每次写出的片段更长。

两种都可以,但 L 不能再当推理超参,改 L 就是改这一步有多长,块长如果还留给测试时折中,就会回到三帧加一段微分方程,后训练会再去优化这段方程。

评价要看跨块,不能只看块内好不好看。 块内更好看,并不等于跨块更一致,只看短片段和块内指标来停训,还会把这两件事当成一回事。用同一套权重,生成时只需一次前向,从第一秒量到超过训练窗口,c_t 中途变了,再看条件是不是仍只依赖 v_{<t}

几秒的短片上双向模型更好看并不奇怪,那段长度上训练本来就看得见未来,短片上的观感说明不了原生这条路通不通。

数据也要按「过去已经发生」来切。 等长短片把未来帧也当特征用。q_{\mathrm{AR}} 要求数据里的过去也是当时已经发生的:更长的连续镜头、带时间戳的 c_t、中途才出现的条件。不改训练条件,跨块一致性上不来,只改 \mathcal{H}_i 的时候我们见过这件事。

还有几个问题没有答案,最好在再调窗口之前先想清楚。已经双向的大规模视频骨干,只做时间因果的继续预训练,要多久才能去掉 q_{\mathrm{bi}} 留下的习惯,要不要重新初始化?连续隐空间上 K=1 稳不稳,还是需要更强的离散或混合码本?

原生目标下,一帧跑一次网络和三帧跑一次网络,哪一个更能同时顾上运动和延迟?学出来的 \mathcal{H}_i 要不要直接用跨块一致性来监督?没有这条监督的窗口搜索,并不改变模型学到的条件。

2021 年离开 VideoGPT「下一帧只看过去」这条路,当时说得通,因为要的是短片段,短片段上 q_{\mathrm{bi}} 就是对的模型。现在面对的已经是流式生成,先训双向短片,再做后训练,再在推理时搜 \mathcal{H}_i,到不了拟合 p(v_t\mid v_{<t}) 的目标,接下来只能在预训练改训练时能看见的变量。没改之前,现在叫「自回归视频」的做法仍是先按整段短片去噪,再在推理时改成只看过去。

结论

原生自回归是两件事,预训练拟合 p(v_t\mid v_{<t},c_{\le t}),写出下一步只需一次前向,现在通行的做法这两条都不成立。事后再补也补不上,块内损失只让同一块更好看,加长窗口或开关重置只改测试时能看见哪些帧,都到不了拟合 p(v_t\mid v_{<t}) 的目标。

语言模型这几年走得快,是因为预训练从一开始就在做下一词预测,扩大模型和数据仍在优化同一个目标。视频生成在 2021 年为了短片画质离开了「下一帧只看过去」这条路,后来才加上因果 mask、少步去噪和窗口搜索,让双向短片模型能够流式生成,但这些都没有改变预训练拟合的条件。原生模型必须在预训练时看不见未来,生成下一步也只需一次前向,事后蒸馏补不上这两点。没做到这些,我们离原生自回归视频模型还很远。

目录