Classifier-Free Diffusion Guidance (CFG, 2021)

김민서·2024년 8월 30일
0

Diffusion Models

목록 보기
8/8

0. Abstract

  • Classifier Guidance
    • mode coverage와 sample fidelity 간의 trade-off를 조절할 수 있도록 하는 방법
    • diffusion model의 score estimate에 별개 classifier의 gradient를 섞어서 샘플링
    • 추가 classifier의 학습을 필요로 함
  • Classifier-free Guidance (CFG)
    • classifier 없이, 오로지 생성모델만으로도 guidance를 줄 수 있다!
    • unconditional & conditional generative model 두 개를 학습시켜서 score estimate을 섞는다

1. Introduction

  • Classifier Guidance
    • 추가 classifier를 준비하고, 샘플링 시 거기서 나온 log probability의 gradient를 얻음
    • classifier gradient를 diffusion model의 score estimate와 합쳐서 샘플링함
    • classifier gradient의 비중을 조절하면 Inception score와 FID score 간의 trade-off를 조절할 수 있다
  • classifier를 없애고 싶다!
    • 여기에 필요한 classifier는 clean X, noisy image에 대한 classifier이므로 pre-trained classifier를 이용할 수 없다. 모델 하나 만들 때마다 번거롭게 새로 학습해야 함
    • classifier-guided sampling은 classifier를 속이기 위한 gradient-based adversarial attack 기법의 일종으로도 볼 수 있음
      • classifier를 타겟해서 걔에 적용되는 metric(FID, IS)의 성능을 편법으로 올리는 느낌
  • Classifier-Free Guidance
    • classifier를 없앴다
    • unconditional & conditional diffusion models를 동시에 학습시킴
    • 두 모델에서 나온 score를 합쳐서 샘플링
    • classifier guidance와 마찬가지로 FID/IS tradeoff를 조절할 수 있었다
    • pure Diffusion Models도 다른 생성모델들처럼 high fidelity sample을 만들 수 있음을 보였다

2. Background

3. Guidance

3.1. Classifier Guidance

  • toy example

  • 구할 수 있는 것

    • diffusion score ϵθ(zλ,c)σλzλ log p(zλ,c)\epsilon_{\theta}(z_{\lambda},c)\approx -\sigma_{\lambda}\nabla_{z_{\lambda}}\ \mathrm{log}\ p(z_{\lambda},c)
    • auxiliary classifier model의 gradient pθ(czλ)p_{\theta}(c|z_{\lambda})
  • modified score
    ϵ~θ(zλ,c)=ϵθ(zλ,c)w σλzλ log pθ(czλ)σλzλ [log p(zλc) + w log pθ(czλ)]\begin{aligned} \tilde{\epsilon}_{\theta}(z_{\lambda},c) &= \epsilon_{\theta}(z_{\lambda},c) - w\ \sigma_{\lambda}\nabla_{z_{\lambda}}\ \mathrm{log}\ p_{\theta}(c|z_{\lambda})\\ &\approx -\sigma_{\lambda}\nabla_{z_{\lambda}}\ [\mathrm{log}\ p(z_{\lambda}|c)\ +\ w\ \mathrm{log}\ p_{\theta}(c|z_{\lambda})]\end{aligned}

    • 여기서 ww는 classifier guidance의 세기를 조절하는 parameter
  • 샘플링 시 기존의 ϵθ\epsilon_{\theta} 대신 ϵθ~\tilde{\epsilon_{\theta}}를 사용하면 생성물의 distribution은 아래와 같다
    p~θ(zλc) pθ(zλc) pθ(czλ)w\tilde{p}_{\theta}(z_{\lambda}|c)\ \propto p_{\theta}(z_{\lambda}|c)\ p_{\theta}(c|z_{\lambda})^{w}

    • 뒤에 곱해지는 pθ(czλ)wp_{\theta}(c|z_{\lambda})^{w}이 label cc에 분류될 가능성이 높아지는 방향으로 샘플 생성을 유도한다
  • 가지고 있는 diffusion model이 unconditional model이라면?

    • ww 대신 w+1w+1을 쓰면 된다
      • ϵ~θ(zλ,c)=ϵθ(zλ)(w+1) σλzλ log pθ(czλ)\tilde{\epsilon}_{\theta}(z_{\lambda},c) = \epsilon_{\theta}(z_{\lambda}) - (w+1)\ \sigma_{\lambda}\nabla_{z_{\lambda}}\ \mathrm{log}\ p_{\theta}(c|z_{\lambda})
    • p~θ(zλc) pθ(zλc) pθ(czλ)wpθ(zλ) pθ(czλ)w+1\tilde{p}_{\theta}(z_{\lambda}|c)\ \propto p_{\theta}(z_{\lambda}|c)\ p_{\theta}(c|z_{\lambda})^{w} \propto p_{\theta}(z_{\lambda})\ p_{\theta}(c|z_{\lambda})^{w+1} 이기 때문
      • bayes rule로 간단하게 유도할 수 있음
    • 이론적으론 그렇지만 실험적으로는 conditional model 쓸 때가 성능이 더 좋았다고 함

3.2. Classifier Free Guidance

  • unconditional & conditional model training

    • ϵθ(zλ)\epsilon_{\theta}(z_{\lambda})를 예측하는 uncondtional model pθ(z)p_{\theta}(z)
    • ϵθ(zλ,c)\epsilon_{\theta}(z_{\lambda},c)를 예측하는 conditional model pθ(zc)p_{\theta}(z|c)
    • 실제로는 conditional model 하나만 학습하고, uncondtional model의 경우 cc 자리에 null token을 넣었음
    • 학습 시 일정 확률 puncondp_{\mathrm{uncond}}로 given training token cc를 null로 바꾸어서 conditional/unconditional settings를 동시에 학습함
  • CFG sampling
    ϵ~θ(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})

  • inspired by an implicit classifier

    • CFG가 실제로 classifier를 사용하지는 않지만, 간접적으로 classifier의 역할을 한다고 볼 수 있다
    • implicit classifier p(czλ)p(zλc)/p(zλ)p(c|z_{\lambda}) \propto p(z_{\lambda}|c)/p(z_{\lambda})
    • 생성모델을 통해 exact score ϵ(zλ,c), ϵ(zλ)\epsilon^{*}(z_{\lambda},c),\ \epsilon^{*}(z_{\lambda})를 구할 수 있다는 것은 p(zλc), p(zλ)p(z_{\lambda}|c),\ p(z_{\lambda})를 구할 수 있다는 말과 같다
    • 따라서 CFG는 implicit하게 classifier guidance를 구현한 것이라고 볼 수 있음
  • classifier > inverting a generative model

    • 이렇게 Bayes rule을 이용하여 생성모델을 뒤집으면 classifier의 역할을 하게 할 수 있다
    • 그러나 이전 연구들에 의하면, 실제 data distribution을 완벽하게 모사하는 생성모델을 뒤집더라도 그냥 classifier를 이기지는 못했다고 함

0개의 댓글