1. 为什么要防止流形折叠(mode collapse)
流形折叠 = 生成器只学会输出极少数甚至单一模式(mode)的样本,而完全忽略数据分布的多样性。
后果一句话:“模型看起来生成了很多图,其实都在重复同一张。”
直观例子
- 训练集里既有“狗”又有“猫”,但 GAN 折叠后只输出“金毛犬”——因为判别器暂时被这种高逼真样本骗过,生成器就偷懒永远只画金毛。
- 扩散模型如果折叠,可能所有文本 prompt 都生成同一张“通用美女脸”。
为什么要阻止它
维度 | 折叠带来的问题 |
---|---|
样本质量 | 单一模式往往过拟合训练集局部细节,导致 artifacts 更严重。 |
多样性 | 用户无法获得丰富输出,产品不可用(如 AI 绘图只能画一种狗)。 |
分布一致性 | 生成分布与真实分布的 KL/JS 距离瞬间爆炸,理论上的“近似真实分布”失效。 |
训练动力学 | 一旦生成器锁定单一模式,判别器也很快过拟合该模式,梯度消失 → 训练停滞。 |
因此,正则化(梯度惩罚、谱归一化)、minibatch 判别、unrolling、多样性感知损失、扩散模型的分类器引导等技巧,都是为了把“被折叠的流形”重新拉开,恢复高维空间里本应存在的多模态结构。
2. 什么是条件机制(classifier-free guidance、text prompt)
条件机制 = 在生成过程的每一步,用额外信息 y(文本、标签、图像、深度图……)把高维搜索空间
“钉”到一条更窄、更可控的子流形上,使输出既符合 y 又保持多样性。
两大类做法
-
显式条件网络
-
把 y 直接 concat / cross-attention 进网络输入,如 Stable Diffusion 的 CLIP text encoder → UNet cross-attention。
-
训练时随机丢弃 y(设为 ∅),推理时可用 classifier-free guidance 公式:
其中 s>1 是 guidance scale,放大“按条件走”的梯度,减少随机漂移。
-
-
隐式条件(无分类器引导)
- 模型在训练阶段同时学习 无条件 和 有条件 两种噪声预测器;
- 推理时不依赖额外分类器,只靠上述插值即可“无分类器引导”——省掉额外网络,避免分类器梯度噪声。
直观效果
- text prompt:输入 “a red sports car on a mountain road”,条件机制把生成流形从“所有可能图像”压缩到“同时满足红跑车+山路”的子区域。
- classifier-free guidance:当 s=7.5 时,扩散模型会优先满足文本描述的语义;s 过大(如 20)可能出现过度锐化或失真,因为流形被拉得太“紧绷”。
一句话:
条件机制 = 用 y 给生成器装“方向盘”,而 classifier-free guidance 是“方向盘增益旋钮”,让用户在“严格按 prompt”与“保留随机创意”之间自由调节。