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”與“保留隨機創意”之間自由調節。