GenFirst:VAE 和扩散模型一联合训练就坍缩,这次为何稳住了?

主流潜变量生成模型,为什么默认把「重建」和「生成」拆成两段?

这篇文章想讲清楚的只有一件事:为什么把重建和生成放进同一个模型端到端联合训练就会坍缩,以及 GenFirst 靠什么把它稳住。要回答它,得先看清如今的默认做法,也就是两阶段范式,是怎么来的。

你让一个文生图模型画一只猫,背后其实是两个模型在接力。第一个是 VAE(变分自编码器),把图像压成一小段向量的压缩器。第二个是扩散模型(diffusion model),从随机噪声里逐步去噪、还原出图片的生成器。两者之间那段向量所在的潜空间(latent space),是图像在压缩器内部的一种中间表示。这条链路里藏着一个常被忽略的细节。生成器训练的时候,压缩器是冻结的,生成好坏插不上手。

这个冻结不是工程妥协,而是被正面论证过的选择。Latent Diffusion Models(LDM)在 2022 年把两阶段写成了明确设计。先训练感知压缩器,把图像压进紧凑潜空间;再在这个冻结的空间上训练扩散模型。作者的理由是,联合训练编码器和生成器需要对重建与生成能力做精细的权重权衡,而两阶段不需要这种权衡 LDM。换句话说,今天默认拆成两段,恰恰是因为"合在一起"被认为会出事。GenFirst 要推翻的,正是这个判断。

为什么合在一起会出事?两类裁判看的是不同的东西。训练压缩器时,唯一的裁判是重建,压出来的向量要能近乎无损地还原原图。生成器需要的却是另一种品质,它要在这张"地图"上学会"猫的分布长什么样"。按重建优化的地图,可能每个坐标都精确,却没有生成器需要的平滑结构。它在为像素精度服务,而不是为分布形状服务。一张处处精确却毫无路网的地图,导航的人没法用。重建友好的潜空间,不等于生成友好的潜空间。两阶段把压缩器冻死,等于把这个矛盾原样封存;端到端联合训练,就是想拆开它。

既然冻结的潜空间未必适合生成,直觉给出的答案是把压缩器一起拉进生成训练,让同一张潜空间同时服务两个目标。GenFirst 把这条思路画成了四组并排的范式,其中被寄予厚望的是端到端联合训练,让生成梯度直接回传编码器,逼压缩器为生成让出结构。

图注:四种潜变量生成范式并排示意:两阶段把生成器锁在冻结的潜空间上;naive 端到端让生成梯度直接回传编码器、导致坍缩;REPA-E 用 stop-gradient 切断梯度、改由表示对齐损失驱动;GenFirst 让梯度直通,靠熵项守住潜空间。 GenFirst

可这个"显然更优"的方向,过去几年反复翻车。端到端一联合训练就崩,潜空间被压成一点,生成器学无可学。崩在哪、为什么崩,下一章拆给你看。

一联合训练就崩:潜在坍缩和生成-重建冲突,是两件事还是一件事?

把两个模型直接连起来,教训是惨痛的。论文做了四组对照诊断:冻结 VAE 的两阶段基线、naive 端到端(不加任何防坍缩机制、直接让生成梯度回传编码器)、加了防护的 stable 端到端、以及把端到端训出的 VAE 再冻结、换新先验重训。naive 端到端在两类先验上都崩了:EAR 上 gFID 飙到 294.90,SiT 上训练直接 NaN 坍缩,而另外两种端到端设置各自都能稳住 GenFirst。反常之处在于:多了一个监督信号,结果反而更差。重建和生成各自单独看都没问题,合在一起却互相拆台。

论文把"拆台"拆成两个不同的机制。第一个叫潜在坍缩(latent collapse)。潜空间上同时压着两类损失:重建损失要求"压得准",先验拟合损失要求"压得和先验分布像"。两个压力有一个共同的倾向:都希望编码器的输出收缩、再收缩。收缩到极致,编码器就找到了一条偷懒捷径,把所有输入都映射到几乎同一个点。输出的方差趋零、不确定性归零,生成模型面对的是一个近乎常数的分布,学无可学。地图上只剩一个坐标,它只能生成同一个东西。同期 REPA-E 的消融给出了同方向的铁证:把防止坍缩的 stop-gradient(梯度截断)拿掉,gFID 从 16.3 直接飙到 444.1 REPA-E。这个病是整个领域共同观测到的,不是 GenFirst 一家的诊断。

第二个机制叫生成-重建冲突。它和坍缩是两件事:坍缩是"潜空间被压成一个点",冲突是"重建与生成两条梯度在训练里互相拉扯"。论文用一张诊断图给出这场拉扯最直观的线索。

图注:重建与生成的两组学习曲线:重建的 FID 在很少的训练步内就快速下降,生成的 FID 长时间保持在高位;下方样本网格显示重建侧早期已清晰、生成侧前期仍是噪声。这是调度设计之前的诊断图,不是 GenFirst 训练后的结果。 GenFirst

图能直接读出的只有现象:重建侧的学习曲线在很少的训练步内就快速下降,生成侧长时间高悬,样本网格里重建侧早已清晰、生成侧仍是噪声。重建更早改善、生成明显滞后,这个不对称是曲线能证明的全部。至于为什么会有这个差距,论文给出的是解释,图本身证明不了:重建受像素级监督驱动,信号直接而强;生成要经过漫长优化才能学到"可采样的潜分布",慢而弱。两种节奏同场相遇,重建的强梯度压过生成的弱梯度,强重建压力还会把编码器钉在重建导向的潜空间上,让生成更难学。这段解释正是调度设计的动机:生成信号容易吃亏,那就别让重建抢跑。更值得玩味的是,这场拉锯在两阶段内部早就存在。2025 年 VA-VAE 团队的前置观察发现:压缩器的 token 维度越高,重建越好,但下游扩散模型越难训、越慢,重建与生成在固定算力下构成一条此消彼长的 Pareto 前沿 VA-VAE。GenFirst 把这同一条张力搬进端到端训练的内部,据此推断它在对称联合训练里更尖锐:重建快而强、生成慢而弱,不加干预,生成信号必然被淹没。

两种病,需要两种药。治坍缩,要找到"压扁"力量的对冲;治冲突,要主动安排学习的先后。下一章讲第一种药:把 KL 拆开看。

把 KL 拆开看:谁在压扁后验,谁在帮它撑住?

先把数学语境立起来。2021 年的 LSGM 就把 VAE 训练目标里的 KL 散度显式拆成了三项:重建误差、负编码器熵、与潜空间先验的交叉熵(cross-entropy)LSGM。这里说的熵(entropy),是分布不确定性的度量:编码器输出的不是确定一个点,而是一团概率云,云的胖瘦就是熵。GenFirst 的贡献,是把这几项重新归成两个阵营,并点破它们各自的作用方向。

$$\text{KL}(q(z\mid x),|,p(z)) = -H(q) + \text{CE}(q,,p)$$

等式左边是 KL 散度(衡量两个分布差异的量),右边两项分别是带负号的熵项,和把后验拉向先验的交叉熵项。重建损失则在 KL 之外。于是三股力量各就各位:重建和先验拟合都在从两边压扁概率云,只有熵项撑着它,让每团云保住一点散布。压扁的是两股力量,撑住的只有一股。这个不对称,就是 GenFirst 诊断潜在坍缩的钥匙。

它立刻解释了 naive 端到端为何必死。两阶段预训练出来的 VAE 通常带着很小的 KL 权重,潜空间勉强保持着形状;端到端训练一开始,强大的先验拟合被直接强加给后验,却没有补偿被压掉的熵。先把云压扁,再把唯一的支撑抽走,后验方差一路趋零,潜在坍缩就此发生。论文由此给出一个反直觉的结论:想让端到端稳定,目标不是让后验"收敛到先验"。收敛到先验听起来更稳,可那只是把云压得更扁。真正要做的是主动保住熵,给压扁的力量配一个撑住的力量。潜空间是一团可以呼吸的云而不是一个钉死的点,生成模型才有形状可学 GenFirst。

第二个洞察,还是回到第二章那张诊断图,但这次的读法更克制。曲线能证明的,只有重建早降、生成高悬这个先后差。生成为何吃亏,是论文给的解释,图本身证明不了。按论文的解释,重建受像素级监督驱动,信号直接而强,生成要经过漫长优化才能学到可采样的潜分布,慢而弱,于是重建的强梯度压过生成的弱梯度,生成信号容易被淹没。谁先谁后,不能交给放任自流。"先生成、后重建"从一句直觉,变成了有动力学解释支撑的推论:让慢的那一个先跑,让快的那一个后补。它立论的依据,经验层面在曲线显示的先后差,机制层面在论文给出的解释,那张行为图只提供行为证据。下一章就是这道推论的具体执行。

不换架构不换损失:把「先生成、后重建」写进训练日程,够吗?

GenFirst 的做法朴素到不像一篇重量级方法的贡献:架构不变、损失不变,训练目标全程是同一套(重建 + LPIPS + GAN,权重都不动),只把两个超参 λprior(先验权重)和 λent(熵权重)在训练日程上做一次切换,并规定 λent 始终等于 λprior。朴素,但每一步都踩在上一章的洞察上 GenFirst。

阶段一叫生成优先。λprior 开局取大值,生成目标成为塑造潜空间的主力,先按"生成需要什么"把地图的形状画出来;熵项同期跟上,守住不确定性防止坍缩;重建损失保留在原来的权重,负责别把图像信息弄丢。阶段二叫重建精修:把 λprior、λent 同步调小,重建的相对影响力变强,开始回收视觉细节,但注意不要破坏第一阶段已经成型的潜空间骨架。默认设置里,生成优先阶段显著长于精修阶段,EAR 上是 500 个 epoch 对 140 个。用一个画面来记:装修一间房,先让定风格的设计师进场,把空间格局定下来;等格局定了,再让施工队进场补墙面细节。设计师慢、施工队快,慢的先进场、快的后补工。反过来就会出事:施工队三下五除二钉完钉子,设计师再也没有发挥的余地。

这个"谁先谁后、先重后轻"的日程,是不是拍脑袋定的?论文用消融把它钉死。固定一个先验权重从头训到尾,生成和重建永远只有一个在及格线上:λprior 从 0 涨到 1.0,gFID 从 120.60 降到 8.06,可重建质量指标 rFID 从 0.53 退化到 4.20。精修阶段的权重取中间值最优;生成优先阶段越长越好,太短则潜空间没成形就开始精修 GenFirst。

图注:调度选择的三联消融(gFID 蓝线、rFID 橙线,越低越好):固定先验权重无法同时照顾生成与重建、精修阶段权重适中最优、生成优先阶段越充分越好;圈点处为论文默认设置。图中曲线均为 EAR 实验的结果。 GenFirst

同期同方向的另外两条路线,让"改调度"的分量看得更清楚。REPA-E 走的是修梯度:用 stop-gradient 掐断扩散损失对 VAE 的梯度,改用 REPA 表示对齐损失(让 VAE 的潜空间去对齐 DINOv2 特征)来间接为编码器供梯度 REPA-E。

图注:REPA-E 的范式图:两阶段、naive 端到端坍缩、stop-gradient 加 REPA 对齐损失,以及右侧的 FID 训练曲线。它与 GenFirst 是同期独立的两条路线,不是前置工作。 REPA-E

DSD 走的是第三条路:把扩散损失重述为"自蒸馏失败",干脆改目标函数,并把编码器、解码器、扩散模型收拢进单个网络 DSD。同一个"端到端不坍缩"的问题,三条独立路线分别给出"改调度、修梯度、修目标"三种答案,而且都在对同一个敌人下手:梯度信号本身。没有谁靠换骨干出彩,强调的都是机制设计。那么问题来了:GenFirst 这张"只换顺序"的药方,换到别的地方还灵吗?

一个调度,两类先验:SiT 与 MMDiT 的分数说明什么?

灵不灵,要看证据。论文拿两类机理完全不同的先验做实验:一类是隐式似然的扩散/flow 先验(用 SiT),一类是显式似然的连续自回归先验(用 EAR),文生图则上 MMDiT。核心数字都列在下面,每个数字都附上了必须一起说的设置 GenFirst.

先验设置GenFirst 结果对照口径
SiT(隐式似然)ImageNet-256 · 800 epoch · 675M 参数gFID 0.97(带 CFG;精确值 0.969)/1.45(不带 CFG)两阶段 SiT-XL 基线 FID-50K 2.06
EAR(显式似然,连续自回归)312M 参数guided gFID 2.10—
MMDiT(文生图)MMDiT-XL/2 + FLUX.1-dev VAEGenEval 0.90(脚注:以 Qwen3-1.7B 替换 CLIP 文本编码器时 DPG-Bench 升至 84.65)SD3 论文自报 paper-best 0.74,设置不同、不可直接比

gFID(基于 Fréchet Inception Distance 的生成质量指标)越低越好;CFG(classifier-free guidance,无分类器引导)开与不开,是同一模型的两套报告口径;GenEval 越高越好,衡量文生图遵循 prompt 的组合能力。读这组数字有两个讲究。第一,0.97 的精确值是 0.969,摘要是四舍五入。第二,SiT 那一行最扎眼的是与两阶段基线的对照:同一个 SiT 骨干、同一个 ImageNet-256,两阶段 SiT-XL 要跑到 FID 2.06,端到端拿到 0.97,这场对照是闭合的,"端到端不输两阶段"第一次有了数字支撑。选 SiT 当先验,是因为它和 DiT 同骨干但收敛更快 SiT;选 MMDiT,是因为它的双流 joint attention 在 CC12M 上全面领先其他 backbone MMDiT。

比榜单数字更耐看的是另一条诊断,它回答"变好的是什么"。论文把端到端训出来的 VAE 冻结,换一个新的先验从头训练,EAR 的 gFID 从 36.33 降到 5.67,SiT 从 7.90 降到 3.57 GenFirst。变化的不是某个生成器被调强了,而是潜空间本身:这套调度训出来的空间,换谁上来都好使。"生成友好的潜空间"如果有实证内核,就是这条。

一个调度,在显式似然和隐式似然两类机理不同的先验上都成立,这是通用性最硬的一条论据。论文还把框架推了出去:共享视觉潜变量(让同一潜空间同时服务生成与表征学习)和统一文图生成。但所有数字都绑着具体的模型规模、epoch、VAE 与文本编码器部件,引用时少说一个设置就是失真。数字看完,还差最后一问:同期别人也在做端到端,凭什么说这是"首次"?

「首次端到端不坍缩」——这句话该怎么读?

GenFirst 在摘要里自称"the first direct end-to-end training without latent collapse"。这是论文的自陈,不是外界的判决;怎么读这个"首次",要放回赛道里看。端到端联合训练不是新念头:2021 年 LSGM 就做过 VAE 与潜空间扩散的端到端尝试,是这条赛道最早的探路者之一。2025 年 REPA-E 用 stop-gradient 走出"间接梯度"路线;同一年,DSD 用自蒸馏框架给出第三条路,把坍缩解释为"潜在方差被抑制 + 秩分化失效",并用单个 ViT 收拢全部功能 DSD。

图注:DSD 的自蒸馏类比四面板:标准自蒸馏、潜空间扩散、联合训练坍缩(红色高亮)、DSD 单网络修复。它把同一个坍缩问题放进另一套解释框架。 DSD

所以"首次"应该读成:在"让生成梯度直接回传 VAE、靠调度稳住"这条具体路线上首次成立,而不是"整条赛道的第一个"。要坐实这个判断,把三条同期路线并排放:

路线做法代表性数字(含设置)
GenFirst(改调度)同一端到端目标,只切 λprior = λent 两阶段权重gFID 0.97(SiT · 800 epoch · 675M · ImageNet-256 · 带 CFG)
REPA-E(修梯度)扩散梯度 stop-gradient,REPA 对齐损失替 VAE 供梯度gFID 1.12 / 1.69(SiT-XL · 800 epoch · ImageNet-256 · 带/不带 CFG)
DSD(修目标)扩散损失重述为自蒸馏失败,改目标 + 单网络 ViTFID 4.25(DSD-B · 205M · 50 epoch · ImageNet-256 · 不带 CFG)

三行数字不是同一场比赛的排位:模型规模、epoch、评测设置全不一样,它们各自只说明"这条路线有一个可行的结果"。真正值得记的是方法论的差异:同样治"一训就崩",有人动梯度、有人动目标、有人只动日程 GenFirst.

还得把 GenFirst 自己划的边界说全。它只验证了显式似然与 SiT/MMDiT 两类先验,没碰离散 token 的自回归生成;调度超参是手工设定,没有自动化的设计准则;主结果对应的 CFG scale 论文没有显式标注;代码仓库没有公开。说"首次",这三条限定一句都不能省。

走到这里,可以下一个带限定的判断。当初 LDM 论证了两阶段是有理由的默认,如今 GenFirst 证明了两阶段不是唯一答案:在同一个潜空间里稳定地联合训练重建与生成,这条路被证明可走,但还远没走完。更广的先验面、自动化的调度、公开可复现的实现,每一件都摆在前方。两阶段不再是唯一选择,端到端也还没有终结争论。这大概就是"首次不坍缩"最准确的分量:它打开了一条此前被认为不可行的路,而不是把路修完了。

想深入可以读原文:GenFirst: Generation Before Reconstruction for Stable End-to-End Latent Generative Modeling — arXiv:2608.29335

参考文献