Representation Distribution Matching for One-Step Visual Generation

iRDM 把四步 FLUX.2 [klein] 后训练成一步生成器: 左为四步基线, 中为一步 iRDM, 右为 GenEval / PickScore 随后训练算力上升越过四步教师
Fig. 1 — iRDM 把四步 FLUX.2 [klein] 后训练成一步生成器, 画质不掉。(a) 四步 FLUX.2。(b) 一步 iRDM (联合图文目标后训练)。(c) GenEval 与 PickScore 随后训练算力的曲线:约 90 H200 GPU-hours 后, 一步模型在两个指标上都越过四步版 (灰虚线)。一次网络前向, 无迭代采样。

一句话

生成 = 分布匹配。把「无教师一步生成」这条线抽象成 RDM 范式, 拆成两根轴, 逐轴做受控实验, 定位每个方法的天花板到某个具体设计选择。

轴一 · 怎么比

用平方 MMD:批内精确排斥 + 对全量数据的 Nyström 冻结吸引 (eq.3), 大而新鲜的生成批 (梯度缓存吃下显存), 条件任务上匹配图文联合律

轴二 · 在哪比

单个编码器必被刷穿。对一整排 (10 训 + 4 留出) 冻结编码器匹配, 用比例 Lagrangian 控制器把最难满足的编码器加权最重, 满足了就退出。

指标

SW_r14:14 个编码器上的 Sliced-Wasserstein 比值, 真实数据按定义 =1, 与训练损失不共享任何机理, 抗刷分。iRDM 1.30 一步 SOTA。

RDM

Representation Distribution Matching。在冻结预训练编码器的特征空间里, 直接把生成分布对齐真实分布——不用在线教师、不用对抗、不用模拟轨迹。

MMD

Maximum Mean Discrepancy, 最大平均差异。用一个正定核度量两个分布的距离, 对特征核 (如高斯) 当且仅当两分布相等时为 0。

Nyström

用少量「地标点」(landmarks) 低秩近似核矩阵的经典手法。这里用 4096 个地标把 128 万张图的吸引项压成一个冻结、零方差的参考。

pushforward ϕ∗

推前测度:把图像上的分布 p 通过编码器 ϕ 映到特征空间得到的分布 ϕ∗p。RDM 比的就是 ϕ∗pθ 和 ϕ∗p_data。

median heuristic

定高斯核带宽 σ 的常用启发式:取特征两两距离的中位数。每个编码器一个 σ, 固定不调。

Sliced-Wasserstein

把高维最优传输距离沿大量随机一维投影求平均的可算版本。比 Fréchet / MMD 更难被刷, 用作评测而非训练。

PID-Lagrangian

把「每个编码器都要达到真实地板」写成约束优化, 用比例 (P) 控制动态调 Lagrange 乘子 (=编码器权重) 的方案。

gradient caching

批内损失不可拆成逐样本项时, 分两趟前向、把中间梯度缓存下来, 用一个 micro-batch 的显存算出整批的精确梯度。

1. 出发点 (Motivation)

生成建模本质就是分布匹配。 我们想要一个生成器, 它的输出分布匹配数据分布——而且我们评判「匹配得好不好」用的本来就是两者表征分布之间的距离 (FID 就是这么定义的)。扩散和流模型只是隐式地追这个目标:学着反转一个加噪过程, 推理时模拟很多步去噪, 把噪声搬到数据上。每一步去噪都是一次网络前向, 所以贵。

有一条显式的新路线:直接在一个冻结预训练编码器的特征空间里, 把生成分布和真实分布对上, 一次网络前向出图——没有在线教师, 没有对抗, 没有要模拟的轨迹。作者把这条路线命名为 RDM (Representation Distribution Matching)

作者的核心洞察是:近期几个一步生成器 (drifting field, Fréchet-distance loss, Sinkhorn flow) 其实是同一个范式的不同实例, 只差两根轴。

问题在于:现有方法把这些选择捆在一起定死, 于是分不清到底是哪个选择带来了质量。 作者的做法是一次只变一根轴, 受控实验推翻了当前实践里几条隐含假设:

  1. 经典 MMD 从来不弱, 只是估计得烂。 十年前 MMD 被判定「训不出有竞争力的生成器」。但好的估计需要一个结构化的特征空间 + 每边足够多的样本, 而且两边要区别对待。参考是提前定死、永不移动的, 所以用全部——把整个 128 万张训练集压成一个冻结的 Nyström 参考。
  2. 生成批是真正的操作变量, 最优点远超常规。 生成侧每步都在动, 必须每步重新采样;批越大估计越准但更新次数越少, 最优点在 2048 以上, 比常规大一个数量级, 靠梯度缓存吃下显存。
  3. 任何单个编码器都能被刷穿。 生成器会对它训练所针对的那个编码器过拟合——在那个编码器自己的分数上打赢真实数据, 图却肉眼可见地假。解法不是找个更好的编码器, 而是谁都别单靠:对一整排编码器匹配, 且用约束优化保持它们平衡。

2. 方法 (Method)

一个一步生成器 \(g_\theta\) 把先验 \(z \sim p_z\) 一次前向映成图像, 输出律 \(p_\theta\)。给定冻结编码器 \(\phi\) 把图像送成特征 \(\phi(x)\in\mathbb{R}^D\), RDM 对齐生成与真实的特征律:

\[\mathcal{L}(\theta) = D\big(\phi_* p_\theta,\ \phi_* p_{\text{data}}\big)\]

—— 翻译: 别在图像像素上比, 在编码器特征空间里比两个分布的距离。约束输出分布而非逐样本的去噪轨迹, 使得生成器「一次前向」是天生的, 不是硬凑出来的;同一目标也能把一个少步采样器 (把它最终输出当作 $g_\theta$) 后训练成一步。

每个 eq.(1) 的实例由两根轴定死。下面逐个拆。

iRDM 训练流程: 生成器产出新鲜大批 N=5120, 与一次冻结的全量真实参考一起, 在一排编码器特征空间里做 Nyström 吸引 + 批内排斥, 编码器权重由约束优化平衡
Fig. 2 — iRDM 只靠表征分布匹配训练一步生成器:无在线教师、无对抗、无轨迹。每步抽一批新鲜的 $N$ 个样本并编码, 连同一次算好并冻结的参考, 送进一排预训练编码器。轴一 (comparison):在每个特征空间里, 生成样本被 Nyström 吸引拉向参考流形、被批内精确排斥推开 (eq.3)。轴二 (representation):一排编码器 (DINOv3 / CLIP / …) 由约束优化保持平衡。

2.1 轴一之核:MMD 与它的估计器 (eq. 2–3)

正定核 \(k\) 在特征空间上定义平方 MMD:

\[\text{MMD}^2(P,Q) = \mathbb{E}_{x,x'\sim P}\,k(x,x') - 2\,\mathbb{E}_{x\sim P,y\sim Q}\,k(x,y) + \mathbb{E}_{y,y'\sim Q}\,k(y,y')\]

—— 翻译: 三项分别是「P 内部有多聚」「P 与 Q 有多像」「Q 内部有多聚」。对高斯这类特征核 (characteristic kernel), 当且仅当 P=Q 时这个量为 0——所以最小化它就是逼两分布相等。作者用高斯核 $k(x,y)=\exp(-\|x-y\|_2^2/2\sigma_\phi^2)$ 直接作用在原始编码器嵌入上, 带宽 $\sigma_\phi$ 每编码器用中位数启发式定死。

关键在于:生成器优化的是有限样本估计, 而估计器决定了它的开销、方差、以及可被利用的盲点。\(g_i=\phi(g_\theta(z_i))\) 为一批大小 \(B\) 的生成特征。eq.(2) 三项里:数据项对 \(\theta\) 是常数, 丢掉;交叉项把生成特征向数据;生成项把它们相互排斥——这是唯一阻止「塌缩到最密模态」的力。两个诉求相反, 所以两项分开估计:

\[\widehat{\mathcal{L}}_\phi = \underbrace{\frac{1}{B^2}\sum_{i,j} k(g_i,g_j)}_{\text{排斥, 精确}} - \underbrace{\frac{2}{B}\sum_i \psi(g_i)^\top \bar\mu_\phi}_{\text{吸引, Nyström}}\]

—— 翻译: 排斥项只在批内跑, $B\times B$ 核和很便宜, 所以留精确, 一个编码器一个矩阵。吸引项要跟全训练集比, 若每步重采样 (标准两样本估计的做法) 会注入参考噪声, 带宽越小噪声越大——所以算一次就冻死:用 Nyström 核均值嵌入, $m{=}4096$ 个由 k-means 放的地标 $\ell_j$, $\psi(x)=K_{mm}^{-1/2}(k(x,\ell_1),\dots,k(x,\ell_m))^\top$, 参考均值 $\bar\mu_\phi=\frac1n\sum_t\psi(r_t)$ 在全部 $n{=}128$ 万张图上预先算好并冻结。每步以 $O(Bm)$ 把批拉向这个零方差的摘要, 相比编码器前向可忽略。

这段公式几乎逐字落到代码里。iRDM 训练损失就是「精确排斥 − 2×Nyström 吸引 + 常数」:

repo/rdm/compare/mmd_nystrom.py:29-42 — iRDM 的操作性目标 (eq.3)

def mmd_nystrom_loss(feat_g, Z, Z2, alpha, sigma, k_rr_const=0.0, gen_chunk=8192):
    """Biased MMD^2 = exact within-batch repulsion - 2 * Nystrom attraction + const k_rr."""
    g = feat_g.float()
    gamma = gamma_from_sigma(sigma)                 # gamma = 1/(2 sigma^2)
    k_gg = self_kernel_mean(g, gamma, gen_chunk)    # 排斥: (1/N^2) Σ_{i,j} k(g_i,g_j)
    k_gr = nystrom_attraction(g, Z, Z2, alpha, gamma)  # 吸引: mean_i k(g_i,Z)·alpha
    return k_gg - 2.0 * k_gr + k_rr_const           # k_rr 只定损失值, 无梯度

排斥项有偏估计:对角 \(i{=}j\) 保留, 除以 \(B^2\)。它无参考、恒精确, 且可分块以配合梯度缓存:

repo/rdm/compare/kernels.py:40-59 — 批内精确排斥 (唯一防塌缩的力)

def self_kernel_mean(g, gamma, chunk=8192):
    """BIASED within-batch self-kernel mean (1/N^2) Σ_{i,i'} k(g_i, g_i')."""
    n = g.shape[0]
    def block(gg, lo, hi):
        return gaussian_gram(gg[lo:hi], gg, gamma).sum()
    acc = g.new_zeros(())
    for lo in range(0, n, chunk):                   # 分块 + 逐块 checkpoint,
        hi = min(lo + chunk, n)                      # 峰值中间矩阵仅 O(chunk*N)
        acc = acc + checkpoint.checkpoint(block, g, lo, hi, use_reentrant=False)
    return acc / (n * n)

吸引项在生产训练里用的是预算好的系数向量 \(\alpha = K_{ZZ}^{-1}\bar\mu\)——这样只要一次 \(B\times m\) 的核乘法, 零方差、无需每步重建参考:

repo/rdm/compare/nystrom.py:29-40 — Nyström 吸引 (对冻结全量参考)

def nystrom_attraction(g, Z, Z2, alpha, gamma):
    """Nystrom attraction (cross-kernel mean) k_gr = mean_i k(g_i, Z) · alpha."""
    d2 = (g.pow(2).sum(1)[:, None] + Z2[None, :] - 2.0 * (g @ Z.T)).clamp_min(0)
    return (torch.exp(-gamma * d2) @ alpha).mean()

为什么是 MMD + Nyström, 而不是别的? 作者用一个「螺旋线诊断」给出直观证据 (Fig. 3):把一条两圈螺旋线用固定正交映射埋进 \(\mathbb{R}^{64}\) (模拟真实编码器把数据放在高维里的一条薄流形上), 同一个 MLP 生成器在各目标下等预算训练, 扫批大小 \(B\in\{8,32,128\}\)

螺旋线诊断: 6 种距离 × 3 种批大小的生成结果散点, Nyström-MMD 在每一行都最贴合螺旋
Fig. 3 — 螺旋线诊断 ($D{=}64$)。行扫批大小 $B$, 列是不同方法。角标为 anchor recall / medDist (到曲线的中位距离, 真实数据地板 0.033)。Fréchet 对批大小不敏感、永远画不出螺旋 (两阶矩编码不了流形);其他距离靠采样, 各有失效区:sliced-Wasserstein 在小批塌, drifting 在大批塌, 随机特征 (RFF) 随维度散。只有 Nyström-MMD 在每一行都最锐、无处失效——因为它每个批大小都拉向同一个冻结参考, 而 MMD-exact 在小批时其「每批参考」变稀。

每个替代距离都放弃了上面某个优势:Fréchet 把每边压成两阶矩, 会「匹配饱和了但图仍瑕疵」;sliced-Wasserstein 靠投影内排序, 只能拿批比批 (而非比全量真实分布);drifting field 是同一 MMD 梯度的逐粒子归一化形式, 小批更稳但批一大就退化回普通 MMD, 其重采样的每批参考把它锁死在小批。至于吸引项, Nyström 地标胜过随机 Fourier 特征 (RFF):地标基是数据相关的、正好铺在真实点上、在「生成实际发生的地方」精确;而全局余弦把容量花在流形几乎不占的环境空间上, 留下的未解析方向会被优化压力下的生成器钻空子。

2.2 轴一之续:大批 + 联合律 (eq. 4)

生成侧要大而新鲜。 数据侧一次冻死后, 生成分布是唯一还在动的量, 且每步都动, 所以必须每步重采样——用 EMA 队列这种陈旧缓冲 (如 Yang et al. 2026) 会把梯度带偏成 off-policy。一批新鲜样本让它的大小 \(N\) 成为操作变量:\(N\) 越大方差越低, 但定算力预算下更新次数越少。大批本来被显存卡死, 梯度缓存 (Gao et al. 2021) 分块累积精确的全批梯度、只花一块的显存, 把这道墙拆了。在等 wall-clock 预算下扫 \(N\) (学习率按 \(\sqrt N\) 缩放), 质量随 \(N\) 爬升到一个宽的最优区:ImageNet 取 \(N{=}5120\), FLUX 后训练取更大的 \(N{=}10240\)

条件任务要匹配联合律, 不是边缘律。 一个带提示词的生成器可以满足图像边缘分布、却漂离提示词 (用对齐换来的真实感)。作者改为匹配联合律:配一个冻结文本编码器 \(\tau\), 耦合特征 \(\Phi(x,c)=\phi(x)\oplus\tau(c)\),

\[\mathcal{L}_{\text{joint}}(\theta) = D\big(\Phi_* p_\theta,\ \Phi_* p_{\text{data}}\big)\]

—— 翻译: 参考对把每张图和它的caption耦在一起, 生成对把每个输出和产生它的提示词耦在一起;估计器不变, 地标现在指向图文对。在核下, 一张生成图被拉向那些caption 与其提示词相近的参考图——于是「提示词保真」被塞进了匹配目标里。

代码里, 联合耦合只是把图像特征和 (冻结的、缩放过的) 文本特征拼接。核对拼接会分解成图核×文核, 所以文本权重由缩放系数 \(\beta\) 决定, 且梯度只流过图像分支:

repo/rdm/representation/joint_feature.py:41-51 — 图文联合耦合 (eq.4)

def couple(phi, tau_rows, beta):
    """Build Phi = [phi | beta * tau] for a batch (the joint coupling).
    phi: (B, d_img) 图像特征 (带梯度); tau_rows: (B, d_txt) 冻结文本特征 (无梯度)。"""
    return torch.cat([phi, beta * tau_rows], dim=1)

2.3 轴二:一个编码器永远不够

特征距离也是真实感怎么被打分的方式:FID 及其后裔把真实感约化成「单个编码器下的分布差」, 当作人类判断的代理。这个代理很脆。 作者做了最狠的反例:拿语义结构远强于 Inception/ConvNeXt 的 DINOv2 单独匹配, 起点 \(\text{SW}_{\text{dino}}{=}1.81\) (离真实很远), 训 1000 步后压到 1.01——几乎等于真实验证集的地板 1.00。按 DINOv2 的账本, 生成器已经跟真实一样近了。 但图说了不算数:

只匹配 DINOv2: 蜥蜴变得跟真实照片难分, 但打字机保留了不可能的按键排布, 而两者 DINOv2 分数都到了真实地板
Fig. 5 — 只匹配 DINOv2 把它的距离压到真实地板 $\text{SW}_{\text{dino}}{=}1.01$, 质量却提升不均:蜥蜴 (左) 变得与真实难分, 打字机 (右) 却在同样的地板分数下保留了明显的按键排布错误。一个饱和的单编码器距离并不蕴含真实。 病根是「单编码器匹配」这件事本身, 不是编码器选得不好。

受约束优化对付一整排编码器。 单个编码器只给伪度量, 但一排多样编码器的组合核是特征核, 只在真实分布处消失。作者对 14 个面板编码器中的 10 个训练 (选那些「以不同方式失败」的冻结骨干), 另 4 个留出。权重决定这份多样性能否存活:固定权重下, 优化器会挑最容易的编码器把总和压下去。作者把加权写成约束优化——每个编码器都被要求达到它的真实验证地板 \(b_\phi\), 权重就是 Lagrange 乘子, 由比例控制在一个满足门下设定 (Stooke et al. 2020 的 PID-Lagrangian 的 P 项):

\[\lambda_\phi \propto \exp\!\big(e_\phi / (\tau\bar e)\big),\quad e_\phi = s_\phi - b_\phi\]

—— 翻译: 编码器的「超额」$e_\phi$ = 当前分 − 地板。达标或低于地板的直接退出 (权重归 0, 天然防过拟合), 违反者通过 softmax 分享一个固定预算 $\Sigma{=}10$——离真实最远的加权最重。全部满足时权重全消, 是个自然的终止态。这就是「短板法则」:一只桶只装到最短那块板的高度, 看图的人也只盯最扎眼的那处瑕疵。

代码里, step() 拿每编码器的实时分数, 违反者做 softmax 分配固定预算, 达标者清零:

repo/rdm/train/pid_lagrangian.py:71-83 — 门控 softmax 权重分配 (违反者分预算, 达标者归零)

if self.softmax_mode:
    active = [n for n in z if z[n] > 0.0]            # 只留违反者
    for n in z:
        self.lambdas[n] = 0.0                        # 满足 -> 0 (防过拟合)
    if active:
        zs = [z[n] for n in active]
        t_eff = max(self.temperature * (sum(zs) / len(zs)), 1e-12)  # 自适应温度
        z_max = max(zs)
        exp_z = [math.exp((v - z_max) / t_eff) for v in zs]
        denom = sum(exp_z)
        for n, e in zip(active, exp_z):
            self.lambdas[n] = float(self.total_lambda * e / denom)  # 分享预算 Σ

2.4 抗刷分的评测:SW_r14 (eq. 5)

评测也需要同样的保护, 且绝不能塌回训练损失。作者沿用「每编码器比值取面板均值」的构造, 但把 Fréchet 换成 Sliced-Wasserstein (一个正经的最优传输距离, 与训练用的 MMD 不共享估计器):

\[\text{SW}_{r_k} = \frac1k\sum_{e=1}^k r_e,\quad r_e = \frac{\text{SW}\big(\phi_{e*}p_\theta,\ \phi_{e*}p_{\text{train}}\big)}{\text{SW}\big(\phi_{e*}p_{\text{val}},\ \phi_{e*}p_{\text{train}}\big)}\]

—— 翻译: 分子是「生成 vs 训练」的 SW 距离, 分母是「验证 vs 训练」的 SW 地板 (两次独立真实抽样之间不可约的距离)。所以 $r_e{=}1$ 意味着生成跟一次新鲜真实抽样一样近, 越低越接近真实。$k{=}14$ 时真实验证数据按构造得 1, 其中 4 个编码器留出作泛化检查。因为从不针对它训练, 涨分就排除了刷分。

repo/rdm/eval/sw_r14.py:22-33 — 每编码器 SW 比值 (eq.5), 与训练损失不共享机理

def sw_ratio_per_encoder(gen_feats, train_feats, val_feats, n_proj=1024, p=2, seed=0):
    """Per-encoder SW ratio SW(gen,train) / SW(val,train) for each shared encoder."""
    ratios = {}
    for name in gen_feats:
        n = min(gen_feats[name].shape[0], train_feats[name].shape[0], val_feats[name].shape[0])
        g, tr, v = gen_feats[name][:n], train_feats[name][:n], val_feats[name][:n]
        floor = sliced_wasserstein(v, tr, n_proj, p, seed=seed)   # 真实-真实地板
        sw = sliced_wasserstein(g, tr, n_proj, p, seed=seed)      # 生成-真实
        ratios[name] = float(sw / floor) if floor > 0 else float("nan")
    return ratios

合成 iRDM: 精确批内排斥 + 对全量数据一次冻结的 Nyström 吸引, 大而新鲜的生成批, 条件任务上的图文联合律, 以及一排由约束优化平衡的多样编码器。参考 \(\bar\mu_\phi\) 每编码器预算一次;每步再抽新鲜批、一次前向生成、带梯度缓存编码、在比例 Lagrangian 权重下把各编码器损失求和。目标里没别的了:无在线教师、无对抗、无轨迹。

3. 实验结果 (Results)

3.1 ImageNet-256 一步生成:SW_r14 1.30 SOTA

在 ImageNet-256 上后训练已发布的 pMF-H FD-SIM 检查点 4000 步 (lr \(1.6\times10^{-6}\), \(N{=}5120\), 10 个训练编码器, 全 128 万图压成 4096 地标 Nyström 参考)。没有一个已发布生成器接近真实地板 1.0, 最强的到约 2.05。iRDM 把一步 SOTA 定在 SW_r14 1.30, 低于所有已发布模型, 在 14 个编码器中的 9 个及总和上都是最好。

模型 类型 SW_r14 ↓ SW†_r4 (留出) ↓
Validation baseline (真实) 1.00 1.00
pMF-H (base) 一步 4.09 3.63
RAE-XL⋆ 多步 2.43 2.18
REPA-E SiT-XL/1⋆ 多步 2.40 2.14
pMF-H (FD-SIM)⋆ (前 SOTA) 一步 2.05 1.98
iRDM (ours)⋆ 一步 1.30 1.54

它让出 5 个编码器:Inception、ConvNeXt、MAE 让给 FD-loss 模型 (那个模型正是靠刷穿单个空间在这几个上打到真实之下), DreamSim 也险败给它, 留出的 FLUX VAE 输给 MAR-H。

人类偏好 (PickScore, 从不针对它训练) 印证同一排序:

3.2 文生图:一步 FLUX.2 反超四步教师, 90 GPU-hours

从四步 FLUX.2 [klein] 后训练成一步 (联合图文目标, \(N{=}10240\), lr \(2.83\times10^{-6}\), 仅 180 步 ≈ 90 H200 GPU-hours)。匹配参考一次性从四步教师采集后冻死 (约 30 万张 PickScore 排序的 COCO 渲染 + 检测器验证的 GenEval 正确样本), 所以后训练不查询任何在线教师

方法 Two Obj. Colors Position Color Attr. Overall PickScore
FLUX.2 [klein] (4 步) 0.904 0.880 0.575 0.623 0.794 22.58
Untrained (1 步) 0.323 0.673 0.225 0.128 0.474 19.95
DMD2 (1 步) 0.894 0.864 0.603 0.660 0.804 22.36
iRDM (1 步, 边缘) 0.899 0.910 0.638 0.608 0.801 22.70
iRDM (1 步, 联合) 0.924 0.923 0.650 0.708 0.826 22.76

一步模型在 GenEval 总分 0.826 反超四步版 0.794, PickScore 22.76 也高于 22.58;强于同教师蒸馏出的 DMD2 (0.804 / 22.36)。联合 vs 边缘的对照是关键:边缘变体 (丢掉 caption) 总分 0.801, 差距集中在最吃图文对齐的类——two-object (0.924 vs 0.899) 和属性绑定 (0.708 vs 0.608);而几乎不吃耦合的 single-object 基本不变。匹配联合律而非图像边缘律, 正是「提示词保真」进入目标的原因。

3.3 三个把设计选择钉死的消融

训练距离 (Table 4) —— 固定其余配方, 只翻每步距离, 各从同一 pMF-H 起点、对单个 DINOv2 微调 100 步, 用两个中立第三方距离评。一个排序在两个评测上都成立:

\[\text{mmdx} \succ \text{mmd rff} \succ \text{mmd exact} \succ \text{fd} \succ \text{sw} \succ \text{drifting}\]

三个 kernel-MMD 估计器占顶, 矩匹配 (Fréchet) 其次, sliced-Wasserstein 再次, drifting 力场即便在学习率扫描的最佳点也最弱。两个对照证实读法:精确全两两 MMD 并不打赢它的 Nyström 近似 (低秩交叉项梯度更平滑), 且在某距离上训练并不能在同一距离上占便宜 (SW 训练的臂在 SW 评测上被每个 MMD 臂甚至矩匹配打败)。这就是为什么 iRDM 用 MMD-Nyström 训、却用独立的 SW 评。

受约束 vs 均匀加权 (Table 3) —— 门控比例控制器把预算倒向最差的编码器 (PE-Core), 门掉三个已达标的:SW_r14 略胜 (1.88 vs 1.90), 而最差编码器决定性改善 (3.49 vs 4.06, 起点 4.83)——几乎是均匀加权改善量的两倍。

生成批 \(N\) —— 等 wall-clock 下质量随 \(N\) 爬升到宽最优区;最小批被噪声主导、即便更多优化步也会退步。

4. 实现细节 (Implementation)

  1. 梯度缓存的正确性来自「批内损失不可拆」这一事实 (repo/rdm/train/grad_caching.py:1-19)。批内排斥对全 \(N\times N\) 对求平均, 损失不分解成逐样本项, 所以朴素梯度累积是错的。GradCache 三步走:Pass 1 无梯度生成+编码全部块 → 缓存 detach 特征 \(F\);Middle 对 \(L(F)\) 关于 \(F\) 反传一次 (小核图) → 缓存 \(G=dL/dF\);Pass 2 逐块重编码、用代理 \(\sum(\text{feat}\cdot G_{\text{slice}}.\text{detach}())\) 反传 → 精确 \(dL/d\theta\)

  2. 梯度是逐元素精确的, 不是近似 (repo/rdm/train/grad_caching.py:55-77)。在确定性 fp32 + 相等 pass1/pass2 分块下, 累积梯度与朴素全批反传逐元素相同 (仓库 tests 里有证明);bf16 autocast + 不等分块下退化为一阶近似 (仍是有效下降方向)。多卡:middle 反传把聚合的全局 \(dL/dF\) 路由回各 rank 的本地行, 外层 all-reduce 求均。

  3. Nyström 有两种等价形式, 生产用「预算 alpha」形式 (repo/rdm/compare/nystrom.py)。显式形式 \(\psi(x)=K_{ZZ}^{-1/2}k(x,Z)\) 是论文 eq.3 的写法 (螺旋 toy 用它);生产训练用预算好的系数 \(\alpha=K_{ZZ}^{-1}\bar\mu\), 因为 \(\psi(g)^\top\bar\mu = k(g,Z)K_{ZZ}^{-1}\mu_{Zr}=k(g,Z)\cdot\alpha\) 代数上恒等, 但 alpha 形式给出一个冻结、零方差的参考。

  4. 联合特征的核会分解, 所以文本权重靠一个标量 \(\beta\) (repo/rdm/representation/joint_feature.py:1-24)。\(k(\Phi,\Phi')=k_{\text{img}}\cdot k_{\text{txt}}\), 取 \(\beta=\sigma_{\text{img}}/s_{\text{txt}}\) 使文本核带宽为 \(s_{\text{txt}}\) (论文把文本分量权重设 1)。文本嵌入 \(\tau(c)\) 预算一次并冻结 (requires_grad=False), 拼接列加零参数梯度, 梯度只流过 \(\phi(x)\)。联合运行的图像带宽用「冷」的 \(0.25\times\) 中位数。

  5. PID 控制器可关, 关了就回退均匀权重 (repo/rdm/train/pid_lagrangian.py:105-110)。build_pid_lagrangianpid_enable=False 时返回 None, 损失尾部退回静态权重。实时分 \(s_\phi\) 用的是优化器正在训练的同一个 Nyström-MMD (在 rollout 上算), 所以地板和分数同尺度。

  6. 仓库结构自证「设计空间」叙事 (repo/rdm/compare/)。compare/ 目录并列摆着 6 个消融距离:mmd_nystrom.py (iRDM 主目标)、mmd_exact.pymmd_rff.pyfrechet.pysliced_wasserstein.pydrifting.py——每个 baseline 就是「换一根轴上的一个选择」, 与论文「一次只变一根轴」的方法论一一对应。

论文 vs 代码的出入:未发现实质性偏差。核心方程 (eq.3/4/5) 都在对应文件里逐字落地, docstring 甚至写明了「有偏估计」「代数恒等」「fp32 逐元素相等」等论文正文一笔带过的细节。唯一值得标注的是排斥项的有偏选择 (含对角、除 \(B^2\)), 论文正文只写「精确批内」, 代码 docstring 才点明是 biased 估计——但这与「防塌缩的排斥力」语义一致, 不构成矛盾。

5. 批判与延伸 (Critique & Extensions)

5.1 具体不足

5.2 交叉验证:同一范式的三个实例, 谁对谁错

RDM 的最大贡献是把三个近期一步生成器放进同一坐标系。下面对照它们在两根轴上的选择与由此得出的结论/观察的异同:

维度 RDM / iRDM (本文) Drifting field (Deng 2026) FD-loss (Yang 2026)
比较距离 平方 MMD (高斯核) 逐粒子归一化的 MMD 梯度场 Fréchet (前两阶矩)
吸引参考 全量数据, Nyström 一次冻结 每批重建 (in-batch) 全量数据, EMA 队列
批大小 大, N>2048 小 (被每批参考锁死) 中 (EMA 缓冲)
编码器 10 训 + 4 留出, 约束加权 少数, 固定权重 少数, 固定权重
自曝的软肋 与真实仍差 0.30 大批塌缩 可刷穿单空间到真实之下

一致的观察:三者都同意「在冻结编码器特征空间里直接匹配分布」能出一步生成器, 无需在线教师。都用「特征距离」作真实感代理。

矛盾与本文的裁决:(1) Drifting 声称逐粒子归一化更稳, 本文的螺旋诊断显示这只在小批成立, 大批直接塌 (Fig.3 drifting 列 B=128), 而其每批参考把它锁死在最噪的小批区。(2) FD-loss 声称能把生成器压到真实分数之下, 本文承认这是真的、但正是病征——它靠刷穿 Inception/ConvNeXt/MAE 这几个弱代理做到 (Table 1 里 iRDM 恰恰在这几个上让给 FD-loss), 换个抗刷的 SW_r14 就现原形。(3) FD-loss 用 EMA 队列估生成侧, 本文论证这会把梯度带偏成 off-policy, 改用每步新鲜大批。

分歧的可能成因:三者的「结论」差异几乎全部可追溯到估计器而非「headline idea」——这正是本文方法论的价值。Drifting 的小批锁定来自其参考构造 (每批重建), FD-loss 的可刷来自其距离构造 (两阶矩 + 单/少编码器), 而非它们各自宣称的核心创新。把三者摆到同一两轴坐标系, 才看得出「谁强在机制、谁强在调参」。

5.3 研究启发 (可迁移的套路)

老方法+对的估计器 > 新方法

MMD 被弃十年不是因为它弱, 是因为估计烂 (小批、重采样参考、坏特征空间)。在下结论「某目标不行」前, 先问「是目标不行还是我估计得烂」。很多「过时」损失可能只差一个 Nyström。

非对称估计:两项分开对待

吸引 (对固定参考) 和排斥 (批内动态) 诉求相反, 就该用不同估计器:参考端冻死求零方差, 动态端保精确。把一个损失的不同项当成同质来估, 是浪费。

单一代理必被过拟合 → 用一排 + 约束

任何单个可微评分 (单编码器 FID、单个 reward model) 都会被优化器刷穿。RL 的 reward ensemble、这里的编码器 battery 是同一招:多样 + 短板法则加权 (谁最不满足谁最重), 满足即退出防过拟合。

训练指标 ≠ 评测指标, 且不能共享机理

用 MMD 训、用 SW 评, 故意让评测与损失「不共享估计器」, 涨分才排除刷分。凡是「训什么评什么」的报告都要打问号——这在任何有可微评分的优化里都成立。

反直觉:批大小是一等超参

最优生成批在 2048 以上, 比常规大一个数量级, 且小批「更多优化步」反而更差。当估计方差主导时, 花算力在「每步更准」比「更多步」值——梯度缓存让这变得可行。

5.4 延伸阅读

本仓库里几篇相关工作可对照阅读:

讨论 / Comments

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