HWC
← Note

No date

CFDG | Classifier-Free Diffusion Guidance

PaperDiffusion

快速解釋

Classifier-Free Diffusion Guidance 的核心是:把有條件與無條件兩種 denoiser 合併到同一個模型裡。訓練時偶爾拿掉條件,推論時再把 conditional score 和 unconditional score 線性組合,就能像 classifier guidance 一樣提高 fidelity,同時不需要額外分類器。

問題設定

  • 傳統 classifier guidance 會在 diffusion sampling 時額外加上一個 noisy classifier 的梯度。
  • 這雖然能提升 sample quality,但訓練流程更複雜,因為分類器必須能處理噪聲影像,不能直接拿現成 classifier 來用。
  • 此外,guidance 效果會混入 classifier 本身的 bias,很難分辨品質提升到底來自生成模型還是來自 classifier gradient。

核心想法

  • 用同一個 diffusion model 同時學 p(z_lambda | c) 與 p(z_lambda);做法是在訓練時以機率 p_uncond 把 condition c 隨機丟掉,改成空條件。
  • 如此一來,模型既會輸出 conditional score,也會輸出 unconditional score。
  • 推論時對同一個 noisy sample 各跑一次 conditional 與 unconditional 前向,然後用 guidance strength w 做線性組合。
  • 差值 epsilon_theta(z,c) - epsilon_theta(z) 可以理解成把樣本往條件專屬高密度區域推的方向;w 越大,樣本越符合條件,但多樣性通常越低。

關鍵公式

連續時間 diffusion 的基本訓練目標為

Ldenoise=Eϵ,λ[ϵθ(zλ,c)ϵ22],\mathcal{L}_{\mathrm{denoise}}= \mathbb{E}_{\epsilon,\lambda} \left[ \left\lVert \epsilon_\theta(z_\lambda,c)-\epsilon \right\rVert_2^2 \right],

其中 noisy sample 由

zλ=αλx+σλϵz_\lambda=\alpha_\lambda x+\sigma_\lambda\epsilon

產生。

classifier-free guidance 的採樣公式是

ϵ~θ(zλ,c)=(1+w)ϵθ(zλ,c)wϵθ(zλ).\tilde{\epsilon}_\theta(z_\lambda,c)= (1+w)\epsilon_\theta(z_\lambda,c) -w\epsilon_\theta(z_\lambda).

若用隱式 classifier 的角度看,條件與無條件 score 的差滿足

zλlogpi(czλ)=1σλ(ϵ(zλ,c)ϵ(zλ)).\nabla_{z_\lambda} \log p_i(c\mid z_\lambda)= -\frac{1}{\sigma_\lambda} \left( \epsilon^*(z_\lambda,c)-\epsilon^*(z_\lambda) \right).
  • 第二式表示 guidance 其實是在放大 conditional score,並扣掉 unconditional score。
  • 當 w = 0 時就是一般 conditional sampling;w 增大時,條件一致性提高,但 mode coverage 會下降。

模型結構

  1. 單一 diffusion network:輸入 noisy sample z_lambda、噪聲等級與 condition c,輸出 denoising score。
  2. 訓練階段:以機率 p_uncond 把 c 替換成空條件,讓同一個模型同時學到 conditional 與 unconditional 兩種模式。
  3. 推論階段:每個 diffusion step 都做兩次前向,一次帶 c,一次帶空條件。
  4. Guidance 組合:用上式合成 tilde{epsilon},再送入標準 reverse diffusion sampler。
  5. 方法本質:CFDG 並不是新增一個外部模組,而是把 guidance 完全內化進生成模型本身,因此訓練與部署都比 classifier guidance 更乾淨。