← pinyu.ai
Linum Field Notes

Better Reconstruction Better Generation

Linum 团队从零训练 Image-Video VAE 的 5 个月旅程。踩过 NaN 爆炸、神秘色斑、联合训练不稳定——最终学到一个违反直觉的教训。

Linum AI · 2024.07 — 11 Model Code Weights 原文
Core Thesis

VAE 重建质量越高,下游 Diffusion 的生成质量不一定更好——甚至可能更差
因为过度优化重建 = 让 latent space 去记住噪声,扭曲了语义结构,让 Diffusion 更难学到真正的视觉概念。

实证:Yao et al. (2025) 将 VAE 的 rFID 从 0.49 提升到 0.18(重建更好),但下游 Diffusion 的 gFID 从 20.3 暴跌到 45.8(生成更差)。
01

为什么需要 VAE

先建直觉——VAE 解决什么问题?

当前最好的图像/视频生成模型都依赖 Diffusion Transformer。Transformer 的注意力机制是 O(n²)——序列越长,计算量越离谱。

量级感
一段 720p、5 秒、24fps 的视频 = 1.1 亿个 token
在像素空间直接算注意力?完全不可能。

VAE 的职责只有一个:把视频压缩到一个紧凑的 latent space,让 Diffusion Transformer 在小得多的空间里工作。

原始视频 x
Encoder
latent z
Decoder
重建 x̂
认知锚点
VAE 不是目的,是管道。它的价值不在于"重建得多完美",而在于"压缩后的 latent space 对下游学习是否友好"。这个认知将贯穿全文。
02

VAE 工作原理

用 2 分钟建立足够的技术模型

普通 Autoencoder:输入 → Encoder 压缩成小表示 → Decoder 重建。瓶颈结构迫使模型学到"什么是真正重要的"。

Variational Autoencoder 加了一层:Encoder 不输出一个固定的点,而是输出一个概率分布的参数(均值 μ 和标准差 σ),从中采样 z 再送进 Decoder。

x
Encoder → μ, σ
采样 z ~ N(μ, σ²)
Decoder

训练目标:四项 Loss 协同

LKL 正则化
让 latent 分布接近标准正态,保证 latent space 平滑。权重极低 ~1e-6,几乎不在乎采样能力,只要平滑。
Lrecon 基本功
L1 风格重建损失。输出应该像输入。带一个可学习的置信度参数。
Lperceptual 语义层
过预训练 VGG 提特征、比中间层。"看起来像"比"像素一样"重要。
Ladversarial 锐化
借鉴 GAN:训判别器区分真假,VAE 要骗过它。逼出高频细节,防模糊。
为什么要同时训练图像和视频?
训练 text-to-video 模型时,需要先在图像上预训练——模型得先理解"名词"(人、地点、物体),再理解"动词"(动作、运动、镜头)。所以 VAE 必须同时处理图像和视频,总 loss = Limage + Lvideo

阶段一 1 周

构建纯视频 VAE 基线

先解决最简单的子问题

2024 年秋天,没有好用的开源 Video VAE。他们从纯视频开始,用传统 CNN 架构将 Conv2D 替换为 Conv3D。

FLUX-1 用 8x 空间下采样,但视频的最优压缩率未知。保守起步:4x 空间 + 4x 时间。开箱即用,重建几乎完美——但压缩率太低,360p 1 秒视频就 OOM(80GB H100)。

瓶颈定位
超线性内存增长来自 Encoder/Decoder 中的 AttentionBlock。解法:在 attention 之前多降采样。

压缩率实验

空间时间等效压缩率结果
4x4x12x 不可用 压缩不够,高分辨率 OOM
8x8x96x 不可用 重建质量崩坏
16x4x192x 不可用 重建质量崩坏
8x4x48x 可用 偶有伪影(180p 高运动场景)
等效压缩率怎么算?
等效压缩率 = H 下采样 × W 下采样 × T 下采样 × (3 RGB 通道 / 16 latent 通道)
例如 8x 空间、4x 时间:8 × 8 × 4 × (3/16) = 48x
前瞻
自适应 tokenization 是未来。当前 latent 大小机械地绑定输入分辨率,而非内容复杂度。一个平静湖面和一场拳击赛信息量完全不同,但 latent 大小一样——这并不合理。
阶段二 3 个月

图像-视频联合训练

整个项目最艰难的阶段——三个环环相扣的子问题

为了让 VAE 同时处理图像,他们将每张图像 pad 成 4 帧"静态视频"(temporal downsample 压回 1 帧 latent)。视频重建正常,但图像重建一塌糊涂——细节模糊、面部不可辨。单独训图像完全没问题,所以问题出在联合训练的 loss 设计。

子问题 1:Loss 归一化

子问题 2:NaN 地狱

即使解决了 loss 归一化,加权后仍然频繁 NaN。

子问题 3:色斑问题

AGC 稳定了训练,但重建图像上出现了彩色斑点(绿色、黑色色块随机出现)。

根因
GroupNorm 是罪魁祸首。组内归一化时,如果某个通道的激活值特别大,GroupNorm 会让它"独占话语权",压制同组其他通道信号——表现在像素层面就是局部色斑。
Meta MovieGen 的替代方案
Meta 在 MovieGen 论文中描述了同样的色斑问题,但解法不同:在 VAE loss 中添加一项惩罚激活值异常值的损失。由于 Meta 没有发布模型,无法验证效果。但这说明色斑问题有多种解法。
阶段三 2 周

多分辨率训练

灾难性遗忘
顺序训练 180p → 360p → 720p 后,最终 checkpoint 完全忘记了低分辨率的重建能力。而 Diffusion 模型需要跨分辨率训练,VAE 必须全分辨率可用。
解法
改课程策略:引入高分辨率时保留低分辨率训练。通过超参搜索确定各分辨率 loss 权重:
180p → ~1.1(主力) · 360p → 0.1 · 720p → 0.01
06

为什么最终切换到 Wan 2.1 VAE

训练 Diffusion 时,数据集只需用 VAE 嵌入一次(离线)。2025 年 2 月 Wan 2.1 VAE 发布时,Linum 只嵌入了一小部分数据集,于是做了对比:

Linum VAEWan 2.1 VAE
生成质量✓ 持平
模型大小较大更小
速度全时空注意力更快(无全时空注意力)
嵌入成本

务实选择:质量持平,Wan 更便宜 → 切换,省钱嵌入大数据集。

元启示
VAE 是基础设施,不是护城河。没有差异化优势时,用社区最优解是理性选择。

核心

Better Reconstruction ≠ Better Generation

全文最重要的部分——回到开头的反直觉命题

Linum 在构建 VAE 时执着于"完美重建",花了数周优化那 ~10% 的困难样本。回头看,他们应该直接把这些样本过滤掉

那 10% 的困难样本是什么?

几乎都是低质量数据:严重像素化的人脸、JPEG 压缩伪影遍布的图像、完全没有细节的树枝和纹理——都是激进 JPEG 压缩的产物。

关键因果链

  1. 压缩伪影比真实细节更难重建——因为它们本质上是噪声
  2. 逼 VAE 完美重建噪声 → latent space 被扭曲去"记住"噪声模式
  3. Diffusion 通过这个 latent space "看世界" → 学到的是噪声模式,不是视觉概念
  4. 生成质量反而更差

这也解释了为什么跨分辨率联合训练那么不稳定:模型在 180p 时把噪声理解烙进了表示空间,引入高分辨率数据时不得不彻底重塑 latent space。

直觉
更清晰的镜头 → Diffusion 更容易学到模式 → 生成更好
VS
现实
rFID 0.49→0.18(重建更好),gFID 20.3→45.8(生成更差)。你在优化镜头清晰度,但那个镜头同时放大了噪声。
展望

未来方向

如何创造一个"对下游学习友好"的 latent space?

路线 A · 正则化 VAE

让 latent space 对齐语义表征

保留 VAE,但增加对齐损失——让 latent 表征与预训练视觉编码器(如 DINO)对齐。"压缩"的同时保留语义结构。

可以端到端训练(不实际),也可以用对齐损失单独重训 VAE,或直接让更大 VAE 学习自监督表征。

路线 B · 去掉 VAE

让 Diffusion 自己学压缩

JIT:对 flow-matching 目标做少量修改,让 Diffusion 模型自己学压缩,根本不需要 VAE。

目前效果还不如最好的对齐 VAE 方案。但 Linum 团队直觉认为:JIT 也在过拟合噪声(程度更轻),如果让它显式学习 DINO 式语义表征,可能会超越现有方法。

Takeaway

VAE 的目标是"有意义的有损压缩"——丢掉噪声,保留语义结构,让下游模型能学到东西。