视觉损失与评估指标#
本页内容7 个部分
查看概览图
三条线:对齐什么、
评估什么、训练什么
图文对齐用对比学习,生成质量用特征空间距离与分布距离,生成训练靠 ε / v / x₀ 参数化与重建三件套。
Contrastive → Triplet → InfoNCE
-
Contrastive (2006)显式成对 y=0/1;margin m 控制负对推开距离 -
Triplet (FaceNet 2015)每个 anchor 配一个正、一个负;margin α -
CLIP
InfoNCE / NT-Xent (2018)batch 内其他样本全当负;本质是多类分类
Perceptual → LPIPS → FID → FD-DINOv2
-
成对图像:Perceptual / Style / LPIPSVGG 多层 conv 特征;LPIPS 多一组学习到的线性权重 -
分布级
图像集合:FID / FD-DINOv2多元高斯的 Fréchet 距离;backbone 从 Inception-v3 换成 DINOv2
扩散 / VAE / VQGAN 配方
-
ε-pred大 t 端 loss 主导;小 t 端预测变平凡,方差不稳 -
两端不退化
v-pred全时间步方差稳定;渐进式蒸馏必备 -
x₀-pred直接预测终点;适合一步 / 少步采样
近零光滑,远处别爆炸
不同的最优解
最优解决定图像长什么样
-
VAE 重建
L2 / MSE最优解 = 条件均值 → 偏模糊;对离群值敏感 -
Pix2Pix · VQGAN
L1 / MAE最优解 = 条件中位数;不保证更锐利 -
bbox 回归
Huber / Smooth L1近零 L2、远处 L1——平滑 + 鲁棒 -
EDSR · ESRGAN
CharbonnierL1 的光滑近似(ε ≈ 10⁻³) -
去噪 · 去模糊
SSIM亮度 / 对比度 / 结构三分量乘积;比 pixel MSE 贴近人眼,不如 LPIPS 稳健
无约束逐点回归下,L2 对应条件均值、L1 对应条件中位数;多解任务都可能出现模糊。感知或分布损失提供另一种度量,但也有偏差与训练成本。
多模态视角 · 图文对齐 · 生成评估 · 生成训练 · 基础速查
**总纲:**多模态视觉的 loss,本质上都在做一件事——在某个"语义对齐"的空间里度量距离。CLIP 把图和文拉进同一个 embedding 空间(InfoNCE);Perceptual/LPIPS/FID 借 ImageNet 分类特征空间衡量"像不像";FD-DINOv2 用自监督特征去 ImageNet 偏置;扩散在 latent 空间做去噪 MSE;VQGAN 的 VAE 用 L1 + LPIPS + Hinge GAN 在像素、感知、对抗三个空间同时对齐。**选 loss 前先问:对齐用的空间是谁训的、训的什么任务。**这条线索贯穿后文所有章节。
1. 为什么像素空间 loss 不够用#
最朴素的图像 loss 是逐像素 MSE/L1:把生成图 和真实图 拉成向量算对应位置差的平方或绝对值均值。简单、可导、零额外开销——但几乎不能单独用来评估或优化"感知质量",原因是 像素距离和人类感知距离差得很远。
经典反例:平移 1 个像素
把一张图整体向右平移 1 像素,人眼几乎看不出差别——两张图语义完全一样。但 Pixel MSE 会很大(每个像素都和原来的邻居对应上),而人类判断几乎为零。pixel 距离对"平移、旋转、亮度、对比度、轻微噪声"这类感知无关扰动过度敏感,而对"感知相关"的扰动(物体形状改变)反而未必更敏感。
为什么直接最小化 pixel MSE 会"模糊":草叶例子
给定同一 condition,草叶的朝向、毛发的走向、布料的织纹——这些微观高频排列有无数种都符合语义。记为 。MSE 的数学性质是:
所以最优输出是这无数合理样本的逐像素平均。每根草叶朝向各异,平均后高频信息互相抵消,只剩一片平滑的灰绿色——这就是"模糊"的本质:不是模型能力不够,而是 loss 鼓励它这么做。
解决思路很统一:先用一个预训练模型把图像映射到"语义特征空间",在那个空间里再算距离。预训练目标已经把"哪些变化重要、哪些不重要"隐含在了特征的不变性和区分性里,特征空间的距离就比 pixel 空间更贴近人类判断。后文 §2 和 §3 展开的所有方法——CLIP Score、Perceptual、LPIPS、FID、FD-DINOv2——都是这个思路的不同实例,区别只在于:用什么 backbone、取哪一层、怎么聚合、比较的对象是成对图像还是两个分布。
2. 图文对齐线:InfoNCE → CLIP Score#
2.1 对比学习家族:Contrastive → Triplet → InfoNCE#
三者都是"拉正样本近、推负样本远"的度量学习 loss,演进线索是负样本怎么取、怎么利用。
| 名字 | 公式 | 负样本 | 代表工作 |
|---|---|---|---|
| Contrastive(Hadsell 2006) | 显式成对();margin 控制负对推开距离 | Siamese 原版 | |
| Triplet(FaceNet 2015) | 每个 anchor 配一个正、一个负;margin | FaceNet 人脸识别 | |
| InfoNCE / NT-Xent(Oord 2018, SimCLR/CLIP) | batch 内其他样本全当负;本质上是多类分类 | SimCLR、MoCo、CLIP |
三者各自在做什么
- Contrastive(样本对粒度):输入是一对样本 和标签 。正对()只管拉近 ;负对()推开到 margin 就停(hinge 项避免把负对无意义地推到无限远,浪费表征容量)。局限:需要显式准备正负对,每步只能利用 1 对,难负样本靠人工挖掘。
- Triplet(三元组粒度):输入是 (anchor, 正, 负) 三元组,约束 ——只关心"正比负近 "的相对关系,不强求绝对距离。比 Contrastive 高效(一步同时用 1 正 1 负),且相对判据更贴合"人脸验证/图像检索"这类排序任务。局限:每步仍只推开 1 个负样本,且 triplet 采样策略(semi-hard mining)决定成败——FaceNet 的主要工程难点就在挖 triplet。
- InfoNCE / NT-Xent(batch 粒度):不再成对喂,而是把 batch 里其他 个样本全当负,一次推开 个。本质是" 类 softmax 分类"——正样本是正确答案,其他全是错误答案。可证明它在最大化样本间互信息的下界(名字 Info-NCE 的由来)。硬负样本会在大 batch 内自然出现,无需人工挖掘;CLIP 靠这个把 batch 做到 32768。
前置速览:Cross-Entropy(CE)——InfoNCE 的数学母体
InfoNCE 被称作" 类 softmax 分类"不是比喻,它就是把 CE 套在"batch 里 个候选中选出正样本"这个分类问题上。
定义:真实分布 、预测分布 ,交叉熵 。分类里 是 one-hot,求和只剩正确类那一项:
为什么是 :① MLE 等价——最小化 CE = 最大化模型对数据的对数似然;② KL 等价——, 是常数,所以也 = 最小化预测到真实分布的 KL 散度;③ 惩罚形状—— 时罚爆炸, 时趋 0,契合"错得越离谱罚越狠"。
与 softmax 的黄金搭档:logits 过 softmax 得 ,再过 CE,梯度 ——"预测减真实",形式干净到不需要任何额外项。这是 softmax + CE 成为分类标配的根本数学原因。
接到 InfoNCE:把"类别"换成"batch 里 个候选",正样本位置 one-hot 为 1,相似度 当 logits,套 softmax + CE——就得到 §2.1 表格里 InfoNCE 的公式。InfoNCE 的温度 实际上就是给 logits 除了个 scale,道理和 CE/softmax 完全相通。
InfoNCE 两种变体:CLIP 式 vs SimCLR 式
同一个 InfoNCE 公式,放在不同任务里"一个 batch 能推开多少负样本"不一样。差别在正样本从哪来:
- 变体 A:CLIP 式(跨模态,正对天然存在)
batch 里有 对天然配对,例如 张图 + 段 caption。对第 张图,正样本是第 段文本,负样本是其他 段文本。相似度矩阵 ,对角线是正样本。每个 query 一次推开 个负样本。CLIP / ALIGN / BLIP 等图文对比预训练都是这套模式——无需做数据增强造正对。 - 变体 B:SimCLR 式(单模态,靠增强造正对)
batch 里 个原始样本,每个做两次数据增强得 个 view。对 view ,正样本是"同一张原图的另一个增强" ,负样本是剩余 个 view(包括其他原图的两个增强)。相似度矩阵 。每个 query 一次推开 个负样本。SimCLR / MoCo / DINO 等单模态自监督都是这套模式。
所以前文(以及下一框)说的"batch 内其他 样本都当负"严格讲是CLIP 式的表述;SimCLR 式下实际是 。一句话概括差异:有没有天然配对 → 决定正样本从哪来 → 决定相似度矩阵多大、一次能推开多少负样本。
为什么 InfoNCE 赢了:负样本规模 × 对比强度
Contrastive / Triplet 每步只用 1–2 个负样本,"难负样本"要靠手工挖掘;InfoNCE 把 batch 内其他 样本都当负,负样本规模由 batch size 决定——SimCLR 用 8192,MoCo 搭 queue 到 65536,CLIP 训练时 batch = 32768。负样本越多、任务越难、表征越判别。
温度 控制 softmax 分布尖锐度: 小 → 分布尖锐 → loss 对"最难的那个负样本"更敏感,梯度集中; 大 → 分布平缓 → 所有负样本都贡献梯度。CLIP 把 做成可学参数(初始化在 0.07 附近)。
2.2 CLIP 的训练目标:对称 InfoNCE#
Radford et al. 2021。图像和文本各过一个 encoder,输出同维度 embedding(一般 512 或 768),在同一个空间做对比学习:
一个 batch 内 对 ,构造 相似度矩阵,对角线是正样本。双向 softmax:每张图找自己的描述,每段描述找自己的图。
Backbone 训练目标:为什么这套 loss 产出的特征天然适合图文任务
- 数据:WIT 数据集,4 亿从网上爬的 (image, caption) 对——规模远超 ImageNet 的 128 万张
- 架构:图像编码器(ViT-L/14 或 ResNet-50)+ 文本编码器(Transformer),末端接投影层到共享 embedding 空间
- 对称性:i→t 和 t→i 两个方向同时 softmax,强制两个 encoder 的输出严格可互查
三个关键后果:
- 共享 embedding 空间是训练目标的直接结果——不像 VGG/Inception 的特征空间只对图像有意义,CLIP 的图像特征被强迫"能被文本描述"。这是后面 CLIP Score 用 cosine 衡量图文一致性的根基
- 语义覆盖远超 ImageNet 1000 类。"穿毛衣的柴犬""赛博朋克城市""莫奈风格的睡莲"——分类网络根本没见过这些,CLIP 全能编码
- 零样本泛化——文本端是自然语言,test 时任意 prompt 都能编码到同一空间,无需 fine-tune。这也是 CLIP 能当 T2I 生成模型 condition encoder 的基础
2.3 CLIP Score:T2I 评估的标配#
Hessel et al. 2021。评估文生图的图文匹配度:
图像 和文本 prompt 各过 CLIP 的 image/text encoder,取两个 embedding 的余弦相似度(负值裁到 0)。
为什么必须有它:T2I 评估的核心问题不是"图像好不好看"(FID 能管),而是"图像和文本说的是不是一回事"。FID 完全无视 prompt——只要生成分布和真实分布像,它就认为好——无法回答 prompt 是否被遵循。CLIP Score 正好补上这块:它不关心分布像不像,只看单张图和 prompt 语义对不对得上。
已知局限:CLIP Score 的三个盲区
- 数量:"三只猫"和"两只猫"的 CLIP Score 差不多,因为对比学习没强制区分精确计数
- 空间关系:"猫在狗的左边"vs"狗在猫的左边"——CLIP 捕捉的是"图里有猫和狗",对方位不敏感
- 细粒度属性:"镁合金""巴洛克风格""哥特式"——这些词罕见但 prompt 常用,CLIP 区分弱
原因可能是对比学习的 batch 内负样本区分度不足以强制模型学到这些细节。所以现代 T2I 评估里 CLIP Score 从来不单独用,而是和 FID/FD-DINOv2 + 人评配合。
小结:§2 这条线的本质是"把图文拉进同一个 embedding 空间"。InfoNCE 是训练这个空间的工具,CLIP Score 是在这个空间里量距离的指标——两者都建立在"共享语义空间"这个前提上。面试时被问 CLIP,几乎必然追问 InfoNCE 的公式、 的作用、以及为什么 CLIP 的 embedding 空间适合 zero-shot。
3. 生成评估线:Perceptual → LPIPS → FID → FD-DINOv2#
这一章把图像生成质量评估的几个指标按演进叙事串起来:手工选层 → 人类标注校准 → 分布级 Fréchet → 去 ImageNet 偏置。它们共享同一个模板,差别只在 backbone 训练目标、取哪一层、成对 vs 分布、聚合方式。
3.1 共同模板#
是预训练 backbone 提供的特征提取器;aggregate 可以是成对逐层 MSE、特征集合的分布距离、图-文 embedding 余弦等。
| 指标 | Backbone | 用哪层/哪种输出 | 比较对象 | 聚合方式 |
|---|---|---|---|---|
| Perceptual Loss | VGG-16/19 | 多层 conv 特征 | 成对图像 | 逐层 MSE 求和 |
| Style (Gram) Loss | VGG-16/19 | 多层 conv 特征的 Gram 矩阵 | 成对图像 | 逐层 Gram MSE |
| LPIPS | VGG / AlexNet / SqueezeNet | 多层 conv 特征 + 学习到的线性权重 | 成对图像 | 加权 L2 |
| FID | Inception-v3 | pool3(2048 维全局池化) | 两个图像集合 | 多元高斯的 Fréchet 距离 |
| FD-DINOv2 | DINOv2(ViT) | [CLS] token 或 patch 池化 | 两个图像集合 | 同 FID 的 Fréchet 距离 |
3.2 Perceptual Loss(VGG)——起点#
Johnson et al. 2016。用预训练 VGG 提取生成图和真实图的中间层特征,然后算 MSE:
是 VGG 第 层的特征图, 通常取 relu1_2, relu2_2, relu3_3, relu4_3 或其子集。
效果:比 pixel MSE 锐利得多。SRGAN、Pix2Pix、VQGAN 里都是必配组件。
Backbone 训练目标:VGG 为什么学到了"感知对齐"的特征
VGG(Simonyan & Zisserman, 2014)在 ImageNet-1k 分类上训练:128 万张图、1000 类、交叉熵。架构极简:只有 conv + ReLU + maxpool + FC。
为什么"1000 类分类"就能学到感知对齐?分类 loss 隐含两个约束:
- 类内不变:同一类("金毛犬")的不同姿态、光照、背景要输出同一类别——网络必须忽略"感知无关"的像素变化
- 类间可分:不同类("金毛"vs"吉娃娃")要能分开——网络必须捕捉物体形状、纹理、部件等"感知相关"的细节
这两条恰好就是我们想要的"感知距离"定义。
Gatys 2015 的发现:VGG 的浅层特征捕捉纹理和笔触(适合描述"风格"),深层特征捕捉物体部件和语义结构(适合描述"内容")。挑层 = 挑要惩罚什么:草地纹理像塑料布 → 浅层 loss 大;该是草地却生成沙漠 → 深层 loss 大。这是"content vs style"分解的起源,也是 perceptual loss 能工作的原因。
为什么不用 ResNet? 实践上 ResNet 特征也能用但略差——residual + BN 让中间层特征偏向最终分类头,损失了层间的"低级到高级"梯度;VGG 的纯堆叠反而保留了这种梯度。
同源姐妹:Style / Gram Matrix Loss#
同样用 VGG,但对特征图的 Gram 矩阵做 MSE:
Gram 矩阵丢掉空间信息,只保留通道间二阶统计,恰好对应"纹理/笔触风格"。Perceptual + Style 组合 = Neural Style Transfer 的全部公式。
3.3 LPIPS——用人类 2AFC 标注校准 Perceptual#
Zhang et al. 2018。在 Perceptual Loss 基础上加一层"向人类感知对齐"的校准:
是对第 层特征做通道维 L2 归一化后的结果; 是学习得到的逐通道权重。
LPIPS 相对 Perceptual Loss 做了两件事
- 通道维 unit-normalize:消除"某些通道激活值天然偏大"造成的偏置——否则强通道主导距离,弱但感知相关的通道被淹没
- 学权重 :对每一层的每一个 channel 都学习一个标量权重(而不是每层只学一个整体权重)。直观上 LPIPS 在说"conv3_3 的 channel #17(可能检测眼睛纹理)对人类判断很重要,权重 0.8;channel #42(可能检测无关背景)不重要,权重 0.05"——通道粒度的加权远比层粒度细
校准目标:拟合 BAPPS 的 2AFC 人类判断
LPIPS 的 backbone(VGG / AlexNet / SqueezeNet)保持 ImageNet 分类预训练冻结不动;真正"学"的只有 。
BAPPS 数据集:约 15 万组"2AFC"(two-alternative forced choice)人类判断。每组包含参考 patch + 两个 distorted 版本 + 人选"哪个更像参考"。distorted 类型涵盖 JPEG 压缩、模糊、噪声、色彩偏移、CNN artifact 等。
训练目标:让 LPIPS 距离对"人选的那个"小、对"没选的那个"大——本质上在让 拟合一个"人类感知预言器"。
效果:LPIPS 和人类判断的 Spearman 相关系数比任何手工选层方案都高,成为图像质量评估的新标准。
注意:LPIPS 既可做评估指标,也可直接做训练 loss(对图像可导、 固定)。这份校准红利让 VQGAN、LDM/SD 的 VAE 训练把 LPIPS 当做 loss 的核心组件——见 §4.3。
3.4 FID——从"成对"到"分布"#
Heusel et al. 2017。评估"一批生成图"和"一批真实图"作为分布的相似程度,不是单张对单张:
是 Inception-v3 的 pool3 特征(2048 维)在每个集合上的均值和协方差,两个多元高斯之间的 Fréchet 距离有闭式解。
为什么做到分布级:单张对单张的指标无法衡量"多样性"。FID 同时考虑:
- 均值差异 :生成图的"平均语义"和真实图的"平均语义"是否一致——衡量质量
- 协方差项:生成图覆盖的特征范围是否和真实图一样广——衡量多样性。mode collapse 的模型协方差会显著偏小,FID 就高
这是 FID 至今仍是主流评估指标的原因:唯一同时惩罚"质量差"和"多样性差"的常用指标。
Backbone 训练目标:Inception-v3 为什么适合做分布估计
Inception-v3(Szegedy 2015)也是 ImageNet-1k 分类,但比 VGG 先进——top-1 约 78.8%。关键是 Inception module(并行 conv + pool)让网络多尺度感知。
为什么用 pool3(分类前的全局池化,2048 维):
- 语义浓缩:整张图压成 2048 维向量——"图像语义摘要"。分类 logits 丢失了"类内差异"(两张都是'猫'的图都接近 cat logit),pool3 保留了
- 多尺度架构的副产品:Inception module 让 pool3 特征对物体大小、位置鲁棒
- 维度合适:2048 维够大承载语义,又小到让 的协方差估计稳定
局限:Fréchet 距离假设特征高斯,实际非严格高斯但"够用";Inception 在 ImageNet 上训,如果生成图分布离 ImageNet 远(医学、动漫、抽象艺术),特征失真,FID 不可靠。这是 §3.5 FD-DINOv2 出现的直接动因。
历史对照:IS(Inception Score)为什么被淘汰
Salimans 2016 提出的 IS 比 FID 更早。IS 用一个预训练好的 Inception 分类器,把每张生成图喂进去,得到一个"这张图属于各个类的概率分布" (1000 个 ImageNet 类上的 softmax)。公式是:
这个 KL 同时奖励两件事:
- 单张图的 要尖锐——某一类概率接近 1、其他接近 0,意思是"这张图清楚地是某个东西",不是糊成一团。→ 衡量质量
- 整体 要均匀——1000 个类都有生成到,不是只会画狗。→ 衡量多样性
致命缺陷:整个计算里只有生成图,没有真实图参与——只问"Inception 看着你的图觉得怎么样",不问"你的图和真实图像不像"。这就漏出两个大洞:
- 漏洞 1:Mode collapse 到每类一张。假设生成器学会了"每个 ImageNet 类恰好产出一张清晰标准图",总共 1000 张,反复输出这 1000 张。每张图 Inception 都能自信分类( 极尖锐 ✓),1000 类全覆盖( 完美均匀 ✓),IS 满分。但这是个只能产 1000 张的废物生成器——完全没学到分布。IS 发现不了,因为它不和真实数据比多样性,只看类别覆盖度。
- 漏洞 2:"非自然但有猫味"。一张奇形怪状、人眼一看就不像真实照片的图,但它恰好有足够多的猫特征让 Inception 自信判成"猫"—— 尖锐 → IS 奖励你。但这张图根本不在真实图像分布里,IS 不知道,因为它从不和真实猫的图做对比。
对照 FID 如何堵这两个洞:FID 全程在和真实分布对比。Mode collapse → 生成分布的协方差远小于真实分布 → FID 立刻飙高;非自然图 → 特征统计和真实图对不上 → FID 也高。两个洞都堵上了。
3.5 FD-DINOv2——去 ImageNet 偏置#
Stein et al. 2023。公式和 FID 完全一样,但把 Inception-v3 换成 DINOv2:
改为在 DINOv2 的 ViT 输出(如 [CLS] token 或 patch 池化)上估计。
Backbone 训练目标:DINOv2 为什么比 Inception 更中立
DINOv2(Oquab et al. 2023,Meta)是自监督预训练,完全无标签。融合两条之前的路线:
- DINO self-distillation(Caron 2021):学生网络看一张图的一个增广视图,目标是输出和教师网络(学生的 EMA)看另一个视图相同的 embedding。无负样本、无对比 loss
- iBOT masked image modeling:随机遮盖一部分 patch,让网络从剩下的预测被遮 patch 的 embedding——BERT 的 masked token prediction 搬到图像
数据:LVD-142M,Meta 自建的 142M 张精选无标签图。
为什么特征比 Inception 更适合做评估:
- 无 ImageNet 类偏置。Inception 特征被 1000 类 one-hot 目标"塑造"过,对 ImageNet 外概念(艺术、动漫、医学)失真。DINOv2 自监督 loss 没有"类"的概念,特征对任意视觉概念一视同仁
- 自监督目标学的是"图像内在结构"——两视图一致性、mask patch 上下文预测——不绑定具体下游任务,特征更"通用"
- Stein 2023 实证:FD-DINOv2 和人类判断的 Spearman 相关系数显著高于 FID。特别是现代扩散模型(SD、Imagen、Muse),FID 常给和人类直觉相反的排名——因为扩散生成图在 Inception 看来"不够 ImageNet 味"。DINOv2 不吃这一套
学界正在把 FD-DINOv2 当作 FID 的接班人,尤其在评估扩散/流匹配模型时。
**一条线贯穿 §3:**Perceptual → LPIPS → FID → FD-DINOv2 本质上都是"借 backbone 映射到语义空间再算距离"。脾气由 backbone 训练目标决定:VGG/Inception 是 ImageNet 分类,对 ImageNet 分布内自然图最准,类外失真;LPIPS 在 VGG 之上再用人类 2AFC 学一层权重,和人类判断相关性最高;DINOv2 是无标签自监督,不受类偏置影响,评估扩散模型更稳定。选指标前先问"backbone 训得对不对",再问"聚合方式合不合理"。
4. 生成训练三件套:扩散 / VAE / VQGAN 配方#
前面两章讲的是"评估"和"对齐";这一章讲实际训练生成模型时用什么 loss。
4.1 扩散模型:ε / v / x₀ 三种参数化#
DDPM / LDM / 流匹配模型的训练 loss 都是 MSE,但 MSE 作用在"什么变量"上有三种选择:
其中 , 。三者之间是线性变换,梯度方向等价,但方差结构不同——不同时间步 对 loss 的贡献不一样。
| 参数化 | 来源 | 特点 | 典型场景 |
|---|---|---|---|
| -pred | DDPM 原始(Ho 2020) | 大 (高噪)端 loss 主导;小 (低噪)端 几乎全是 ,预测变"平凡",方差不稳 | 标准 DDPM / LDM |
| -pred | Salimans 2022(Progressive Distillation) | 全时间步方差稳定;渐进式蒸馏必备;大 端 、小 端 ,两端都不退化 | Stable Diffusion 2.x / 蒸馏 |
| -pred | Consistency Models / LCM | 直接预测"终点",适合一步/少步采样;小 端预测简单,大 端难度高 | Consistency Models / LCM |
面试高频:为什么蒸馏偏爱 -pred
蒸馏把"多步采样"压成"一步/少步"。如果用 -pred,小 端的 loss 几乎没信号(网络学的是"认出自己"),但蒸馏需要网络在所有 都能一步到位,小 端的行为必须准确。-pred 把 loss 方差在所有 上拉平,每一步都能提供有效学习信号——这就是 progressive distillation 用 v-pred 而不用 ε-pred 的根本原因。
4.2 VAE:重建 + KL#
- 重建项:可以是 L2 / L1 / perceptual / LPIPS(VQGAN 里全用,见 §4.3)
- KL 项:encoder 输出的后验 拉向标准高斯先验 ,规整后验;先验采样质量还取决于后验匹配与解码器
- 权重: 是标准 ELBO;(β-VAE)加强解耦和正则化,代价是重建更模糊;LDM/SD 的 VAE 实际用 ——几乎不约束 KL,目标是"纯重建 + 可采样近似",因为 latent 不需要严格标准高斯
4.3 VQGAN / LDM VAE 配方:L1 + LPIPS + patch Hinge GAN#
现代潜空间生成模型(SD、LDM、Imagen 的 VAE 部分)几乎都用这套配方训练编码器/解码器。
VQGAN 再加一项 codebook commitment loss(见下)。
每项的作用(这是面试最爱问的拆解)
- L1 重建:保像素准度。L1 的条件中位数性质比 L2 的条件均值少一点"平均模糊"
- LPIPS:保感知细节。解决"L1 导致纹理模糊"——在 VGG 特征空间 + 人类校准权重下算距离,鼓励输出纹理锐利、结构正确
- patch Hinge GAN:保高频纹理。判别器是 PatchGAN(对每个 patch 独立判真假,而不是整图),强制输出在局部 patch 上也"像真实图"。Hinge loss 是 BigGAN/StyleGAN2/VQGAN 的默认 GAN loss:,训练稳定性远优于 vanilla GAN
- KL(或 VQ commitment):正则 latent 空间。LDM 用 KL,VQGAN 用 codebook commitment(下)
经验系数比例:典型配比是 L1:1, LPIPS:1, GAN:0.1~0.5, KL:1e-6。GAN 权重小因为判别器学得快,梯度幅度大;KL 权重极小因为只想"轻度正则"latent
VQ Commitment Loss(VQGAN 专属)#
VQGAN 用离散 codebook 替代连续高斯先验——encoder 输出 被最近的 codebook entry 替换:
是 stop-gradient。两项分别把 codebook 拉向 encoder 输出 / 把 encoder 输出拉向 codebook。
加上这项后,encoder 输出和 codebook 会共同收敛,离散 latent 空间逐步稳定。LDM 用连续高斯 KL 替代,两条路线并存;SDXL / SD3 的 VAE 仍属 KL 路线。
4.4 附属:Cycle / Identity#
用于无配对图像转换(CycleGAN)或多模态风格迁移。核心思路:没有配对数据时,靠"双向翻译回到自己"来约束语义一致性。
- Cycle: 要还原自己,防止 mode collapse 到"不管输入啥都输出同一张 "
- Identity:把目标域图直接输入 应该输出自己,稳定颜色/风格,避免不必要的改动
多模态岗不常直接用 CycleGAN,但在"图像到图像翻译""风格化"类任务里这对 loss 仍常见。
5. 基础与配角 loss 速查#
以下 loss 在多模态岗不是核心考点,但偶尔被问到原理。以速查表为主,不展开推导。
5.1 像素与结构基础#
| 名称 | 公式 | 特点 | 典型场景 |
|---|---|---|---|
| L2 / MSE | 光滑可导;对离群值敏感;生成图偏模糊(最优解 = 条件均值) | 回归基线、VAE 重建 | |
| L1 / MAE | 对离群值更鲁棒;可能更抗离群值(最优解 = 逐坐标条件中位数,但不保证落在真实模式);0 处不可导(次梯度) | Pix2Pix、VQGAN、超分 | |
| Huber / Smooth L1 | $\begin{cases}\tfrac{1}{2}r^2 & | r | <\delta\ \delta( |
| Charbonnier | L1 的光滑近似() | EDSR / ESRGAN / 去噪 | |
| SSIM | 局部亮度/对比度/结构三分量乘积;比 pixel MSE 更符合人眼;不如 LPIPS 稳健 | 图像去噪/去模糊 | |
| MS-SSIM | SSIM 在图像金字塔多尺度加权 | 对尺度变化更鲁棒 | 同上 |
深挖:为什么 L1 比 L2 对离群点更鲁棒
① 梯度视角(最直观)。L2 梯度 随残差线性放大,L1 梯度 恒为常数。残差 1 / 10 / 100 时,L2 梯度分别是 2 / 20 / 200,L1 始终是 1。
设 batch 里 99 个正常样本残差 ≈ 1、1 个离群点残差 = 100:L2 下离群点贡献梯度 200、正常样本合计 198——一个离群点 ≈ 所有正常样本之和,模型被它拽着走,为降其残差而牺牲正常样本;L1 下离群点贡献 1、正常样本合计 99——离群点只是普通一员。这就是"鲁棒"的真正含义:离群点的话语权不因它偏得远而被放大。
② 图像重建视角。 对固定条件做确定性回归,MSE 的总体最优解是条件均值,逐坐标 MAE 的最优解是条件中位数。二者都可能落在低密度区域:例如等概率取 −1 或 +1 时,区间 [−1,1] 内任一点都是 L1 最优解。因而“L1 自动选中真实模式、必然锐利”不成立。感知或对抗项改变了目标,是否改善纹理需要实验确认。
上面的残差梯度比较只针对输出;参数梯度还要乘网络 Jacobian,不同样本的方向也可能抵消。不能只按残差数量断言总参数更新必被某个样本主导。
5.2 GAN loss 家族#
| 名字 | 判别器 loss | 生成器 loss | 特点 |
|---|---|---|---|
| Vanilla GAN (Goodfellow 2014) | (non-saturating) | 理论源头;梯度消失严重 | |
| LSGAN (Mao 2016) | MSE 替 log;更稳定 | ||
| WGAN (Arjovsky 2017) | + weight clipping | Wasserstein 距离;clipping 不优 | |
| WGAN-GP (Gulrajani 2017) | 同 WGAN + 梯度惩罚 | 同 WGAN | 工程稳定 |
| Hinge GAN (Lim 2017) | 现代 SOTA 事实标准:BigGAN / StyleGAN2 / VQGAN |
工程共识:GAN loss 单独很难收敛,需搭配 L1/LPIPS/feature matching 稳定训练。StyleGAN2 用 "non-saturating + R1 梯度惩罚";VQGAN 用 §4.3 的三件套;这也是现代扩散 VAE 的主流配方。
Feature Matching Loss#
Pix2PixHD:让生成图通过判别器中间层特征和真实图对齐:。判别器充当"动态感知特征提取器",稳定 GAN 训练并让高频细节更准。
5.3 分类与分割(检测/分割岗相关)#
| 名称 | 公式 | 目标 |
|---|---|---|
| Cross-Entropy | 分类基础 | |
| Focal Loss (Lin 2017) | 降低易分样本权重;RetinaNet 解决正负样本不平衡 | |
| Dice Loss | $1 - \dfrac{2 | X\cap Y |
| Tversky / Focal Tversky | Dice 广义版,可调 FP/FN 权重 | 严重不平衡分割(医学) |
| BCE | 二分类;分割常用 BCE + Dice | |
| IoU / GIoU / DIoU / CIoU | 及广义版 | bbox 回归,比 L1 更贴近检测指标 |
5.4 度量学习(非 InfoNCE 部分)#
InfoNCE 已在 §2.1 讲透。以下是其他度量学习 loss,人脸/检索岗常见。
| 名称 | 公式 | 用途 |
|---|---|---|
| Contrastive(Hadsell 2006) | Siamese 原版 | |
| Triplet(FaceNet 2015) | 度量学习 / 人脸识别 | |
| ArcFace / CosFace | softmax 前给正确类 logit 加 angular margin | 人脸识别 SOTA;强制类间夹角大 |
5.5 其他常见辅助#
- Total Variation (TV) Loss:——惩罚相邻像素差异,去伪影/平滑噪声,早期风格迁移常用
- Path Length Regularization(StyleGAN2):让 空间到图像空间的 Jacobian 范数稳定,改善感知 smoothness
6. 任务 → 损失选用指南#
实际项目的"默认配方",按岗位相关性分层。
6.1 多模态核心场景#
| 任务 | 典型 loss 组合 | 说明 |
|---|---|---|
| VLM 对比预训练 (CLIP、SigLIP、EVA-CLIP) |
对称 InfoNCE(图→文 + 文→图) | CLIP 的 τ 可学习;SigLIP 把 softmax 换 sigmoid,摆脱 batch 全局规约 |
| T2I 生成训练 (SD / LDM / Imagen) |
Diffusion ϵ- 或 v-pred MSE(在 latent 上) | v-pred 方差稳定、蒸馏友好;条件 CLIP 文本 embedding 作 cross-attn 输入 |
| VAE / VQGAN 编码器 (LDM/SD 的 VAE) |
L1 + LPIPS + patch Hinge GAN + KL(或 VQ commitment) | §4.3 的三件套;现代潜空间模型标配 |
| T2I 评估 | FD-DINOv2(或 FID)+ CLIP Score + 人评 | FID/FD-DINOv2 看"分布像",CLIP Score 看"prompt 对",人评看细节;三者缺一不可 |
| 扩散蒸馏 (Progressive / Consistency / LCM) |
v-pred MSE 或 x0-pred MSE + 对教师的一致性约束 | v-pred 因为方差稳而被蒸馏青睐;LCM 用 x₀-pred 一步到位 |
| 自监督图像预训练 | InfoNCE(MoCo/SimCLR)或 DINO 自蒸馏(DINOv2) | 对比 vs 非对比两条路线 |
6.2 传统视觉场景(背景)#
| 任务 | 典型 loss 组合 | 说明 |
|---|---|---|
| 超分辨率 | L1 (Charbonnier) + VGG perceptual + Hinge GAN | SRGAN / ESRGAN 配方 |
| 图像去噪/去模糊 | L1 或 Charbonnier + SSIM | 经典恢复任务通常不上 GAN |
| 图像翻译 (Pix2Pix) | L1 + conditional GAN | L1 均值模糊 + GAN 锐化,互补 |
| Unpaired 翻译 (CycleGAN) | GAN + Cycle + Identity | 无配对数据时的语义一致约束 |
| 风格迁移 (Gatys) | VGG content + VGG Gram style | Perceptual + Style 组合 |
| GAN 生成 (StyleGAN2) | Non-saturating GAN + R1 + path length | 大规模 adversarial 单独训即可 |
| 检测 (Faster R-CNN / RetinaNet) | CE (或 Focal) + Smooth L1 (或 GIoU) | 分类 + bbox 回归 |
| 语义分割 | CE + Dice | 不平衡时加 Focal |
| 人脸识别 | ArcFace (或 CosFace) | margin-based softmax 比 triplet 稳定 |
通用经验原则
- 像素重建 loss 的适用性取决于任务:确定性一对多重建可能产生平均化;扩散的噪声 MSE 并不等于直接回归最终图像。
- 无条件 GAN 不要求成对的 L1/LPIPS:是否增加重建或感知约束取决于任务,训练稳定性仍需验证。
- 评估指标至少用两种:分布级(FID / FD-DINOv2)+ 语义对齐(CLIP Score)+ 成对(LPIPS)
- L1 + LPIPS + Hinge GAN 是一种常见配方;权重、判别器启用时机与数据域需要校准。
- 多 loss 加权系数反映梯度幅度差异,不是随便配的——典型 "GAN:0.1~0.5 + LPIPS:1 + L1:1 + KL:1e-6" 是量级调过的结果
7. 要点速查#
按多模态岗考查频率从高到低排。
① 图文对齐线(最高频)——CLIP 用对称 InfoNCE在 4 亿图文对上训练,产出图文共享 embedding 空间。这既解释了 zero-shot 分类能力,也解释了 CLIP Score 为什么能衡量 T2I 的 prompt 遵循度。InfoNCE 的温度 控制 softmax 尖锐度, 小对难负样本敏感,CLIP 把 做成可学参数。CLIP Score 的三大盲区:计数、空间关系、细粒度属性——所以 T2I 评估从不单独用。
② 生成评估线——FID = Inception-v3 pool3 特征的 Fréchet 距离,同时惩罚质量(均值差)和多样性(协方差),这是它比 IS 受信任的根本原因(IS 不看真实数据)。FD-DINOv2 公式和 FID 完全一样,但 backbone 换成自监督 DINOv2——无 ImageNet 类偏置,评估扩散模型时 Spearman 相关性显著高于 FID,正成为新标准。LPIPS 在 VGG 特征上额外学一层per-channel 权重,用 BAPPS 的 2AFC 人类标注校准——和人类判断相关性最高,既可做指标也可做 loss(SD/LDM 的 VAE 就用它)。
③ 扩散参数化—— / / 三种参数化梯度方向等价但方差结构不同。-pred 是蒸馏首选:全时间步方差稳定,两端都不退化( 当大 , 当小 ),这就是 Progressive Distillation / SD 2.x 用 v-pred 的原因。-pred 用于 Consistency Models / LCM 的"一步到位"。
**④ 生成训练三件套——**LDM/SD/VQGAN 的 VAE 都用 L1 + LPIPS + patch Hinge GAN:L1 保像素,LPIPS 保感知(人类校准),patchGAN Hinge 保高频纹理,再加 KL(连续)或 VQ commitment(离散)正则 latent。VAE 的 β:LDM 实际用 ——几乎不约束 KL,因为 latent 不需要严格标准高斯,目标是"纯重建 + 可采样近似"。
**⑤ 工程心法(兜底)——**纯 pixel loss 必模糊(条件均值),纯 GAN loss 必发散,两者组合才出可用生成。L1 比 L2 锐利的根本原因是条件中位数 vs 条件均值。Hinge GAN 是现代 SOTA 事实标准(BigGAN/StyleGAN2/VQGAN)。多 loss 加权系数反映梯度量级差异,典型配比 "GAN:0.1~0.5 + LPIPS:1 + L1:1 + KL:1e-6" 是调过的结果。
资料:LPIPS、FID、CLIP。评估应固定样本数、预处理与特征提取器;FID 有有限样本偏差,跨配置数值不宜直接比较。