Representation Forcing: 让 UMM 自己长出 VAE 替代品

Fig 2: RF-Pixel 1024×1024 T2I 生成样本
Fig. 2 — RF-Pixel 在 1024×1024 分辨率下的文生图样本(没有 VAE)。注意人脸、毛皮、织物等高频纹理保真度——这是 pixel-space 路线相比 VAE-based 的标志性优势(VAE 的 8× 下采样会糊掉这些)。

1. 出发点 (Motivation)

Unified Multimodal Models (UMMs) 想用同一个 transformer 处理 (a) 图像理解("describe this image"),(b) 图像生成("draw me a cat")。现状是这条路被一个不起眼的 component 卡住了——frozen VAE

主流的 UMM 架构(BAGEL / Janus / Show-o / Transfusion / JanusFlow)都长这样:

VAE 在这个 pipeline 里有两个根本问题:

  1. 它是 separately pretrained 的,目标是"latent → pixel 的重建无损",不是 UMM 的 understanding+generation 联合目标。
  2. 它的 latent space 有损压缩(SD3 VAE 是 8× 下采样 + 16 通道),意味着生成质量有一个模型再怎么训也突破不了的上限

那能不能直接 pixel-space 生成,把 VAE 拿掉?最近确实有这条路的工作(latent-to-pixel-2026 L2P / JiT / PixNerd / PixelFlow / SimpleDiffusion v2 等),但 paper 实验发现:在 UMM 这个 broader distribution + richer text conditioning 的场景下,naive pixel-space 直接掉链子——GenEval 从 VAE 的 0.52 跌到 0.25(Table 3a)。失败模式 Fig 4 上半行可见:扭曲的物体形状 + 不连贯的构图。

诊断:模型同时学"高层语义结构"和"低层像素细节"两件事太难了, 它需要一个 intermediate representation 把这两层分开。VAE 实际上就在扮演这个角色——只不过是 separately 训的、固定的。

Paper 的主张:让 UMM 自己长出这个 intermediate representation, 而不是借外部 VAE。Representation Forcing (RF) 的关键观察:

UMM 已经有一个 understanding encoder 在那儿(给图像理解用),它产生的 features 已经包含 object identity、spatial layout、scene composition 这些高层结构。为什么不直接复用呢?

具体做法:让 decoder 在生成 pixel 之前,先 autoregressive 地生成一串 "representation tokens"(这些 tokens 是 understanding encoder 输出特征的量化版本),然后 pixel diffusion 在 同一个 backbone 内通过 in-context 看到这些 rep tokens 做条件生成。

Fig 1: 三种架构对比
Fig. 1 — 三种 UMM 架构对比。 (a) VAE-based UMM (主流): 依赖 frozen VAE encoder/decoder,structural bottleneck; (b) Naive pixel-space: 拿掉 VAE 但没有任何结构指引, 质量塌方; (c) Representation Forcing (本文): 在 text head 和 pixel head 之间插一个 Rep head, decoder 先 AR 预测 rep tokens, 这些 tokens 留在 in-context 喂给 pixel diffusion——所有都在同一个 transformer 里,完全 end-to-end,无外部 VAE。

2. 方法 (Method)

2.1 Representation token 怎么来:online vector quantization 在 understanding encoder 上

UMM 已有一个 understanding encoder(本文用 DINOv3 ViT-H+/16, jointly trained),它把图像编成连续 features。但 decoder 要在 text 之后自回归地预测这些 features,连续值不适合 AR cross-entropy——所以要离散化成 token。

具体流程(§3.1):

  1. 维护一个 EMA copy 的 encoder(慢更新),用它对 GT image 抽特征(只在训练时用)。
  2. 准备一个 K=16384 的可学习 prototype 码本 \(\{e_k\}\)
  3. 对 EMA encoder 的 last-layer patch feature(pre-norm)\(f_p\),跟所有 prototype 算 cosine similarity, 取 argmax → 离散 token index。
  4. 码本通过 SwAV-style momentum update 更新, 配 Sinkhorn-Knopp balancing 防 codebook collapse。

这一步的关键不是"我们发明了什么新 quantization", 而是 quantizer 不是 separately pretrained——它和整个 UMM 一起从头训(以 EMA + Sinkhorn 维持稳定)。这点很重要, 后面 §5 会说为什么。

2.2 训练:三个 head 三个 loss, 一根 sequence

Fig 3: 训练 pipeline
Fig. 3 — Training pipeline。 Left: 一根 sequence 同时包含 Text token (T) + Rep token (R) + Pixel patch (P)。T 和 R 走 causal autoregressive (跟 LLM 一样, 一次预测一个), P 走 bidirectional diffusion (一次denoise 整张图)。三个 head 各自算自己的 loss。 Right: 训练时 R 的 GT 来自 EMA encoder 编码 GT image, 再 online quantization 量化成离散 token。推理时整个 Right panel 都被绕过——decoder 自己从 text prompt 生成 R, 再 condition 在 R 上做 pixel diffusion。

Sequence 结构:[text tokens, representation tokens, pixel patches]

Flow matching 用 x-prediction + velocity loss (沿用 JiT [27]):

\[z_t = t \cdot x + (1-t) \cdot \epsilon\]

—— 翻译: 时刻 $t \in [0, 1]$ 时,带噪 patch $z_t$ = 干净 patch $x$ 和噪声 $\epsilon$ 的线性插值。当 t=0 时 $z_t = \epsilon$ (纯噪声),当 t=1 时 $z_t = x$ (干净)。

模型预测 \(x_\theta\),velocity 重参 \(v_\theta = (x_\theta - z_t)/(1-t)\), GT velocity \(v = x - \epsilon\), loss:

\[\mathcal{L}_{FM} = \mathbb{E}\big[\|v_\theta - v\|^2\big]\]

总训练目标:

\[\mathcal{L} = \mathcal{L}_{LM} + \mathcal{L}_{FM} + \mathcal{L}_{Rep}\]

Classifier-free guidance: 训练时以 0.1 的概率分别 drop 文本条件和 rep token 序列。推理时两个 condition 都做 CFG。

2.3 关键点:rep token 怎么 condition pixel patch?

这是 paper 最干净也最容易被忽略的设计——没有 cross-attention, 没有 adapter 模块, 就是 shared self-attention

Sequence 里 pixel patch (P) 的 attention 模式:

所以 rep tokens 通过普通 self-attention 流入 pixel generation。没有任何额外注入机制——纯粹靠 sequence 结构 + attention mask。

2.4 架构:MoT (BAGEL 的 mixture-of-transformers)

承袭 [BAGEL] 的设计——所有 token 共享 self-attention,但 routed 到 modality-specific FFN expert:

模型初始化:Qwen3-A3B (Qwen3 的 MoE 版, 3B active params per token)。Image encoder:DINOv3 ViT-H+/16 + NaViT 风格 variable-resolution。Pooling factor:2×2 (每 4 个 pixel patch 对应 1 个 rep token,空间布局对齐)。

2.5 训练分三阶段

按 BAGEL 配方:

Stage iters resolution what's trained
(i) Alignment 10K ≤256 只训 MLP connector, backbone + encoder 冻结
(ii) Joint pre-train 50K ≤256 全部解冻, text + text-image pairs 联合
(iii) Continued 20K ≤1024 拉分辨率到 1024,fine-tune

数据:跟 BAGEL 同一个 pipeline——纯文本 + 大规模图文对(VQA、文档、空间推理 + T2I 生成)。

2.6 推理:两阶段,先 AR rep, 再 diffusion pixel

Stage 1 (AR): 给文本 prompt → decoder 一个一个 token 地生成 representation token, 直到生成完整的 rep sequence。

Stage 2 (Diffusion): 把生成好的 text + rep 全部留在 sequence 里, 加一段 noise pixel patch, 跑标准的 flow matching 迭代去噪 (~25-50 step), 生成最终图像。

EMA encoder 和 quantizer 在推理时完全不用——它们只是训练期间提供 rep token GT 的 helper。推理时 decoder 是自给自足的。

3. 结论 (Key Findings)

3.1 生成:匹配 VAE-based SOTA UMM

Table 1: 文生图基准对比
Table 1 — RF-Pixel 在 GenEval (compositional) 和 DPG-Bench (dense prompt) 上跟 SOTA 比。关键比较(不带 LLM rewriter): RF-Pixel 0.84 vs BAGEL (同 backbone, VAE-based) 0.82,vs Janus-Pro-7B 0.80,vs BLIP3-o 0.84(打平)。带 rewriter † 时 RF-Pixel 到 0.88, 跟 BAGEL† 0.88 持平。DPG-Bench 84.15 跟 BAGEL 85.07 接近。

核心信息: RF-Pixel 是第一个不依赖任何 pretrained VAE 的 unified 多模态生成模型(BAGEL/Janus/Show-o/BLIP3-o 全都用 VAE 或 VQVAE), 且性能匹配 VAE-based 同行。

3.2 理解:Pixel+RF 比 VAE+RF 更好

Table 2: 理解任务对比
Table 2 — 同一个 architecture / data 下, 比较四种变体的理解性能。 关键观察: (i) RF 对两种 generation pathway 都涨 (VAE+RF 5/8 win,Pixel+RF 6/8 win); (ii) Pixel+RF 在 6/8 benchmark 上压过 VAE+RF——MMMU 54.2 vs 49.6, BLINK 53.0 vs 52.9, MME* 80.2 vs 79.3。 Pixel+RF vs Pixel: MMMU +4.3, MME +3.6, BLINK +3.6, AI2D +4.5, RealWorldQA +2.7。 DocVQA / ChartQA 这种需要精细文字识别的任务上 Pixel+RF 反而略掉(-2.0 / -0.4)——rep token 编码的是 high-level structure, 不擅长 fine-grained text。

意外发现:去掉 VAE 不仅没伤理解, 反而帮助理解性能。Paper 解释: VAE 把 understanding 和 generation 强行分到两个 representation space 上, 互相对齐不上;Pixel-space + RF 让两者共享同一个 representation space(rep tokens 来自 understanding encoder), 互相 reinforce。这点支持论文的核心论断"bottleneck-free 不只是生成的事,也是理解的事"。

3.3 最有意思的消融:RF vs REPA (Table 3b)

Table 3: 消融研究
Table 3 — 关键消融。 (a) RF 对 pixel-space 是 critical: 0.25 → 0.76 (3×); 对 VAE-space 也帮: 0.52 → 0.77。 (b) 同样用 DINOv3 当 rep 源: REPA (auxiliary alignment loss) 只到 0.43, RF (in-context 放进 sequence) 到 0.76(c) Discrete (cross-entropy) 0.76 vs Continuous (regression) 0.26——连续目标完全失败。 (d) K=16384 vs 32768: 0.76 vs 0.77, 不敏感。 (e) DINOv3 比 SigLIP2 在 4/5 理解 benchmark 上更好(DINOv3 自监督, 编码更多空间结构)。

(b) RF vs REPA 这条最值得讲: REPA [55] 是个 sibling idea——也是用 frozen DINO features 当生成的"语义指引", 但它的做法是 加一个 auxiliary loss 让 diffusion 中间层 features 对齐 DINO features(feature alignment), DINO features 本身不进 sequence、不参与推理

RF 的不同:把 representations 直接作为 token 放进 sequence, 让 pixel patch 通过 attention 显式看到它们做 conditioning。同样的 rep 源, 同样的训练 budget,0.43 vs 0.76——结构性差距来自"in-context > implicit alignment"。

(c) Discrete vs Continuous 也很关键: 把 rep token 改成连续向量 + AR regression (diffusion head at each rep position), GenEval 只到 0.26——基本等于没 RF。两个原因:

3.4 定性:RF 把"垮掉的 pixel-space" 救活

Fig 4: with/without RF 定性对比
Fig. 4 — 同一组 prompt 下, without RF (上) vs with RF (下)。上排能看到 distorted 物体形状(那只"猫"几乎是个色块)、不连贯构图;下排明显恢复出物体身份和空间关系。视觉验证 Table 3(a) 的数字。

4. 实现细节 (Implementation Notes)

⚠️ 代码尚未发布: 论文 2026/05/29 上线, 截至本文撰写时(2026/06/03), 没有 GitHub repo、没有 HuggingFace 权重。PDF 引用里唯一的 GitHub URL 是 github.com/black-forest-labs/flux(只是比较对象, 不是 RF 代码)。所以本节没有 repo/file.py:Lnn 引用, 全部是论文条款 + 跨论文交叉确认。

5. 批判性总结 (Critical Assessment)

5.1 优点

5.2 不足 / 疑点

5.3 适用 vs 不适用

5.4 进一步阅读

讨论 / Comments

评论托管在本仓库的 GitHub Discussions, 需 GitHub 账号。