当自编码器学会"不追求还原"——Sphere Encoder 2 如何用一轮旋转解决图像生成的模糊病
想象你在学画人像。老师给你看了10000张脸,让你一笔一笔精确复刻。等你学成之后,让你凭空画一张新脸——你画出来的,大概率是一张"平均脸":五官位置中规中矩,但毫无个性,像打了马赛克。
这就是自编码器做图像生成的老毛病。它太擅长"还原"了,以至于当你要它"创造"时,它给出的答案是所有合理图像的均值——一张模糊到失去灵魂的图。
Sphere Encoder 2 这篇论文(Tom Goldstein 组,arXiv 2610.02208)干的,就是治这个病。而且治得干净利落:不用对抗训练,不用蒸馏预训练模型,一步生成就能在 ImageNet 512×512 上打出接近最好的 FDr6 分数,计算量比像素扩散模型少 23 到 40 倍。
病灶一:训练时没见过的"赤道带"
先说第一层故事。Sphere Encoder 的核心想法很优雅:把图像编码到高维球面上的一个点,生成时就在球面上随机取一个点解码回图像。如果训练图像在球面上分布得足够均匀,解码器就能处理球面上任何一个点——生成不过是从球面采样,再跑一次解码。
但高维球面有个反直觉的几何性质:随机取一个点,它几乎一定落在"赤道"附近——相对于任何一个固定方向,球面面积集中在赤道薄带上。这意味着生成时采样的点,和训练时编码器输出的点,分布对不上。
第一代 Sphere Encoder 用"带噪声的球面化"来弥合这个差距:训练时给干净隐变量加噪声,噪声角度 α 从 [0°, 85°] 均匀采样。问题是,赤道在 90°,差了 5° 的缝。这 5° 在高维空间里是一片不小的"训练盲区"——生成时恰好要采样的地方,解码器从没见过。
为什么不上推到 90°?因为原来的参数化用 tan(α) 来加噪声,α→90° 时 tan 发散,数值上根本走不到。
Sphere Encoder 2 的第一个手术:换参数化。不用加噪声再投影,改用显式旋转——把干净隐变量 z 朝随机方向 e 旋转 α 度。旋转矩阵在 α=90° 时定义良好,端点 z(0°)=z 是干净隐变量,z(90°)=F(e) 恰好落在赤道上。训练盲区被彻底关闭。
病灶二:像素级损失鼓励"平均脸"
第二个病灶更深。Sphere Encoder 把生成当重建来训:无论旋转角度多大,都用像素级 LPIPS 损失要求解码器还原原图。
这有什么问题?当 α 接近 90° 时,输入隐变量几乎是纯噪声,对应"这张图可能是什么样"的多种可能。像素级损失的最优解是所有可能图像的均值——一张模糊的、缺乏高频细节的图。解码器学会了输出均值,因为它被训练的目标就是输出均值。
Sphere Encoder 2 的第二个手术:把旋转弧切成两段。低角度段([0°, α_cutoff])保留像素重建损失,保证解码器还能忠实还原;高角度段([α_cutoff, 90°])丢掉像素损失,换成两个新损失。
第一个新损失叫"语义对齐":用冻结的 ConvNeXt 提取生成图和原图的特征,对齐它们的 logits。这保证生成图和原图在语义上相关(同一类别),但允许外观和结构自由变化。这个损失几乎零成本——它复用了 LPIPS 已经算过的前向传播。
第二个新损失是核心创新:潜空间分数匹配。
不用判别器的"分布对齐"
GAN 用判别器区分真假,把生成器推向真实分布。DMD(Distribution Matching Distillation)用预训练的扩散模型提供真实分数,再训一个假分数模型,两者之差就是移动方向。但 DMD 需要一个预训练的扩散教师——本质上还是蒸馏。
Sphere Encoder 2 的做法更轻量:在冻结的特征空间里(ConvNeXt V2-N,14.98M 参数),从头训练两个只有两层 transformer 的分数模型——一个学真实特征分布,一个学生成特征分布。两个分数之差,就是"把假特征推向真分布"的方向。
这和 GAN 的判别器有什么区别?判别器输出的是"真/假"标量概率,梯度方向信息有限。分数模型输出的是整个特征空间的去噪方向——信息密度高得多。而且分数模型各自独立训练,不存在 GAN 那种对抗博弈的不稳定性。
代价是:需要两个辅助模型同时在线训练。但每个只有两层 transformer,总参数 24M,相比主解码器(Sphere2-B 是 ViT-Base)的开销可以忽略。
结果:一步生成,23-40 倍效率提升
在 ImageNet 256×256 上,Sphere Encoder 2 取得了最好的 FDr6 分数;在 512×512 上是第二好。关键数字是 NFE(网络前向传播次数):Sphere2 只用 4×2=8 次,而 JiT、PixNerd 等像素扩散模型需要 200 次。总采样计算量少 23 到 40 倍。
不用 CFG(classifier-free guidance),4 步就能超过 JiT-H 和一步 pMF-H。
作者还发现了一个有意思的现象:分数匹配损失在 ConvNeXt 特征空间里对齐了分布,但在老掉牙的 Inception 空间里会漂移——而 gFID 恰恰用 Inception。于是他们加了一个轻量级正则化项 L_FD-lite,用 EMA 跟踪真实和生成特征的均值协方差,加一个 Fréchet 距离项。三个小提取器(Inception + DINOv3-small + ConvNeXt V2-N),几乎不加计算。
作者坦言:这个正则化项"肉眼不可见"——加不加,生成的图看起来一模一样。它只是让 Inception 空间的统计量不漂移。这其实暴露了 gFID 作为指标的局限:一个在人类视觉上无差异的改进,需要专门加损失来讨好一个十年前的特征提取器。
这篇论文的深层贡献
跳出技术细节,Sphere Encoder 2 做了一件概念上很漂亮的事:它把"生成"和"重建"正式解耦了。
自编码器从诞生起就有一个身份焦虑:它到底是压缩器还是生成器?VAE 试图用 KL 正则化让隐空间可生成,但代价是重建质量下降。两阶段范式(autoencoder 压缩 + latent diffusion 生成)干脆放弃让自编码器自己生成,把生成外包给第二个模型。
Sphere Encoder 2 选择了第三条路:自编码器自己生成,但生成和重建用不同的损失。低角度时你是压缩器,高角度时你是生成器。同一个解码器,两种人格,靠角度条件化来切换。
这让我想到一个类比:好的厨师和好的菜谱创造者是不同的人。前者追求精确复刻,后者追求在食材约束下创造新菜。Sphere Encoder 2 训练的是一个能在这两种模式间切换的厨师——给它熟悉的食材(低角度),它复刻;给它随机食材(高角度),它创造。
更深层的是:分数匹配损失替代对抗训练,可能是一个趋势信号。GAN 的判别器本质上是一个过于简化的分布对齐工具——它把高维分布差异压缩成一个标量。分数模型保留了完整的梯度信息,训练更稳定,不需要精心调参。BigGAN 在 ImageNet 上训几百个 epoch 就崩溃,Sphere Encoder 2 没有这个问题。
如果这条路线走通,图像生成的"标准架构"可能不再是"扩散模型 + 判别器",而是"自编码器 + 分数模型"——更简单、更快、更稳定。
代码与模型
开源仓库在 github.com/kaiyuyue/sphere2,MIT 协议。HuggingFace 上有 Sphere2-B 和 Sphere2-L 在 ImageNet 256/512 和 Oxford Flowers 256/512 上的全部 checkpoint。用 DINOv3-small 做编码器(29M,冻结),只训解码器。
代码结构很干净:一个 workspace 目录管所有输入输出,配置文件和 checkpoint 放一个文件夹,采样和评估都有现成脚本。想复现论文结果或者在自己的数据上试,门槛很低。
---
*论文:arxiv.org/abs/2610.02208* *代码:github.com/kaiyuyue/sphere2* *模型:huggingface.co/tomg-group-umd/sphere2*