Skip to main content

Classifier-Free Guidance

Classifier-Free Guidance は、別途 classifier を用意せずに、conditional model と unconditional model の prediction を組み合わせて generation を誘導する方法です。

基本 idea

Training 時には、condition yy を与える場合と、condition を落とす場合を混ぜて model を training します。これによって、同じ model が次の二つを予測できるようになります。

  • Conditional prediction: ϵθ(xt,t,y)\epsilon_\theta(x_t, t, y)
  • Unconditional prediction: ϵθ(xt,t,)\epsilon_\theta(x_t, t, \varnothing)

Sampling 時には、二つの prediction を組み合わせます。

ϵ~θ(xt,t,y)=(1+w)ϵθ(xt,t,y)wϵθ(xt,t,)\tilde{\epsilon}_\theta(x_t, t, y) = (1 + w)\epsilon_\theta(x_t, t, y) - w\epsilon_\theta(x_t, t, \varnothing)

ここで、ww は guidance scale です。

利点

Classifier-Free Guidance は、追加の classifier を training する必要がありません。そのため、text-to-image model などで広く使われています。

Guidance scale を大きくすると condition への忠実度は上がりやすくなりますが、diversity が下がることがあります。

数式で見る guidance の意味

Classifier-Free Guidance は、conditional score と unconditional score の差を使って、condition yy に沿う方向を強めていると解釈できます。Noise prediction では次の形で書かれます。

ϵ~θ=ϵθ(xt,t,)+s(ϵθ(xt,t,y)ϵθ(xt,t,))\tilde{\epsilon}_\theta =\epsilon_\theta(x_t,t,\varnothing) +s\left(\epsilon_\theta(x_t,t,y)-\epsilon_\theta(x_t,t,\varnothing)\right)

ここで、ss は guidance scale です。s=1s=1 では通常の conditional prediction に近く、s>1s>1 では conditional と unconditional の差分をさらに強調します。

この式の気持ちは、「condition を与えたときに denoising 方向がどれだけ変わるか」を取り出し、その差分を強く足すことで prompt への忠実度を上げる、というものです。ただし、ss を大きくしすぎると、model が学習時に見た自然な denoising 分布から外れやすくなり、過飽和、破綻、多様性低下が起こります。

関連ページ