TL

分類器フリーガイダンスと条件付き拡散生成

別途の分類器を学習せず、条件付きと無条件のスコアを外挿するだけで、プロンプト忠実度を自在に強められる仕組みがわかる。品質と多様性のトレードオフや過飽和の正体まで一気に押さえられます。

応用拡散モデルガイダンス条件付き生成生成モデルサンプリング最終更新: 2026-06-21
TL;DR要点だけ先に
  • 1.分類器フリーガイダンス(CFG)は、条件付きスコアと無条件スコアの差を増幅して外挿することで、別の分類器なしに条件への忠実度を高める。
  • 2.ガイダンススケール w を上げるほどプロンプト忠実度は増すが多様性が下がり、過大だと過飽和や破綻が起きる。w は品質と多様性のつまみである。
  • 3.学習時に条件をランダムにドロップして条件付き/無条件の両モデルを1つのネットワークに同居させる。これが分類器ガイダンスの勾配を不要にする鍵。

条件付き生成のスコアを分解する

条件付き拡散モデルの目的は、条件 c(テキスト、クラスラベルなど)を与えたときのデータ分布 p(x|c) からサンプリングすることです。スコアベース生成モデル で見たとおり、拡散モデルのサンプリングは各時刻のスコア ∇_x log p_t(x) を辿る操作に帰着します。条件付きでは、辿るべきは条件付きスコア ∇_x log p_t(x|c) です。

ここで Bayes の定理を対数微分すると、条件付きスコアが2つの項に綺麗に分解されます。

log p(x|c) = log p(x) + log p(c|x) − log p(c)

∇_x log p(x|c) = ∇_x log p(x) + ∇_x log p(c|x)

最後の ∇_x log p(c)x を含まないので勾配が消えます。残るのは無条件スコア ∇_x log p(x) と、分類器の勾配 ∇_x log p(c|x) です。この分解こそ、ガイダンス手法すべての出発点です。

分類器ガイダンス:別モデルの勾配を借りる

素朴な実装が 分類器ガイダンス(classifier guidance) です。上の分解をそのまま使い、ノイズ付き画像 x_t を入力に条件 c を当てる分類器 p_φ(c|x_t) を別途学習し、その勾配をサンプリングに足し込みます。忠実度を強めたいときは勾配にスケール w を掛けます。

∇_x log p_t(x|c) ≈ ∇_x log p_t(x) + w · ∇_x log p_φ(c|x_t)

w を1より大きくすると、条件 c を強く満たす方向へサンプルが押され、クラス忠実度(条件への一致度)が上がります。これは実質的に条件付き分布を p(x)·p(c|x)^w の形へ鋭くする操作に相当します。

分類器ガイダンスの実務的な弱点

分類器ガイダンスには厄介な制約があります。第一に、各ノイズレベルの x_t を正しく分類できるノイズ頑健な分類器を別途学習する必要があり、パイプラインが二重になります。第二に、敵対的攻撃と同様にサンプリングが分類器の勾配を悪用し、人間には条件と無関係に見えるのに分類器だけを満足させる方向へ進みがちです。第三に、テキストのような連続・高次元の条件には、そもそも素直な分類器を組みにくいです。

分類器フリーガイダンス:分類器を消す

分類器フリーガイダンス(classifier-free guidance, CFG) の発想は、邪魔な ∇_x log p(c|x)別モデルではなく拡散モデル自身で表現することです。分解の式を ∇_x log p(c|x) について解き直します。

∇_x log p(c|x) = ∇_x log p(x|c) − ∇_x log p(x)

右辺は、条件付きスコアと無条件スコアのです。両方とも拡散モデルが直接予測できる量なので、外部の分類器は要りません。これを最初の分類器ガイダンスの式に代入すると、CFG の中核となる外挿式が得られます。

∇_x log p̃(x|c) = ∇_x log p(x) + w · [ ∇_x log p(x|c) − ∇_x log p(x) ]
              = (1 − w) · ∇_x log p(x) + w · ∇_x log p(x|c)

実装ではスコアの代わりにノイズ予測 ε_θ で書くのが普通です(両者は単なるスケール変換で、詳しくは 拡散モデル を参照)。

ε̃(x_t, c) = ε_θ(x_t, ∅) + w · [ ε_θ(x_t, c) − ε_θ(x_t, ∅) ]

ここで は「条件なし(空条件)」を表す特別なトークンです。1回のサンプリングステップで条件付き予測 ε_θ(x_t, c) と無条件予測 ε_θ(x_t, ∅) の2回フォワードを走らせ、その差をスケール w で外挿します。

なぜ「外挿」と呼ぶのか

w = 0 なら無条件予測そのもの、w = 1 なら条件付き予測そのものです。w が 1 を超えると、条件付きと無条件を結ぶ直線を条件付き側へ突き抜けて進みます。これは内挿(2点の間)ではなく外挿(2点を結んだ線の外側)であり、「条件付きが無条件と違う方向」を増幅する操作です。つまり CFG は「条件があることで初めて立ち上がる成分」だけを取り出して強調しているわけです。

ガイダンススケール w:品質と多様性のつまみ

w はサンプリング時に自由に変えられるハイパーパラメータで、生成の性格を直接決めます。慣習として CFG の実装では s = w を「ガイダンススケール」と呼び、s = 1 がガイダンスなし、s を上げるほど条件を強めます(論文の表記により w1+w の定義差があるため、実装の規約を必ず確認してください)。

ガイダンススケール条件忠実度多様性典型的な症状
小さい(1付近)弱い高いプロンプトを無視しがち。ぼやけ・無難な出力
中程度(3〜8程度)良好適度実務の常用域。忠実度と多様性のバランス点
大きい(15超など)過剰低い過飽和・コントラスト過多・モード崩壊・破綻

この挙動の理由は明快です。外挿は条件付き分布を p(x|c) ∝ p(x)·p(c|x)^w の形へ鋭くします。指数 w が大きいほど分布は条件を満たす高確率モードへ集中し、サンプルは「いかにも条件 c らしい」典型例に寄ります。その代償として、条件を満たすが珍しいサンプルが切り捨てられ、多様性が落ちます。これは生成モデルの評価で使う精度(precision)と再現率(recall)のトレードオフに対応し、忠実度(precision 寄り)と網羅性(recall 寄り)を w で連続的に動かしていると解釈できます。

過飽和:w を上げすぎると何が壊れるか

ガイダンススケールを過大にすると、ノイズ予測の外挿量が大きくなりすぎ、デノイジングの各ステップで画素値が許容レンジ(例えば [-1, 1])を超えて飛び出します。これがクランプ(範囲への押し込め)と相互作用し、色が原色に張り付く過飽和、コントラストの異常な強調、不自然なエッジやアーティファクトを生みます。対策として、各ステップで条件付き予測の統計(標準偏差)に合わせて外挿後の値を再スケールする「ダイナミックスレッショルディング」や、CFG の適用区間を高ノイズ帯に限る手法が使われます。要は外挿は強い増幅であり、無制限に効かせると分布の外へサンプルを押し出してしまうということです。

学習時の条件ドロップ:1つのネットワークに2役を持たせる

CFG が成立する前提は、同一のネットワークが条件付き予測と無条件予測の両方を出せることです。これを達成するのが学習時の 条件ドロップアウト(condition dropout) です。

各学習ステップで、確率 p_uncond(典型的には10〜20%程度)で条件 c を空条件 に置き換えてから損失を計算します。残りのステップは通常どおり条件 c を与えます。これだけで、1つのモデルが「条件あり」と「条件なし(マージナル分布)」の両方のデノイジングを同時に学習します。

# 学習ループ内(擬似コード)
def training_step(x0, c, model, p_uncond=0.1):
    t = sample_timestep()
    eps = sample_noise_like(x0)
    x_t = add_noise(x0, eps, t)          # 前向き拡散

    # 確率 p_uncond で条件を空条件に落とす
    if random() < p_uncond:
        c_in = NULL_TOKEN                # ∅(無条件)
    else:
        c_in = c                         # 条件あり

    eps_pred = model(x_t, t, c_in)
    return mse(eps_pred, eps)            # ノイズ予測回帰

# サンプリング時の CFG 合成
def cfg_eps(model, x_t, t, c, scale):
    eps_uncond = model(x_t, t, NULL_TOKEN)
    eps_cond   = model(x_t, t, c)
    return eps_uncond + scale * (eps_cond - eps_uncond)

この設計の効用は大きく3つあります。第一に、ノイズ頑健な分類器を別途学習する必要が消えます(学習も推論も拡散モデル1つで完結)。第二に、テキストのような任意の条件埋め込みをそのまま扱えます(分類器ガイダンスのように離散クラスに縛られません)。第三に、空条件 を共有することで無条件側の学習データが条件付きデータと同一になり、両者のスコアが整合した同じ多様体上で定義されます。

実装上の落とし穴と定石

p_uncond を小さくしすぎると無条件側が未学習になり外挿の基準点が不安定になります。逆に大きすぎると条件付き能力が落ちます。10%前後が広く使われる出発点です。また空条件 は「ゼロベクトル」ではなく、学習可能な専用埋め込みや、テキストなら空文字列のエンコード結果を使うのが一般的です。サンプリングは条件付き/無条件の2回フォワードが必要なので、ガイダンスを使うと計算量が単純におよそ2倍になる点も設計時に見込んでおきます。

まとめ:分類器を畳み込んだ一つのモデル

論点分類器ガイダンス分類器フリーガイダンス
追加モデルノイズ頑健な分類器が別途必要不要。拡散モデル1つで完結
勾配源p(c|x) の勾配を外部から注入条件付きと無条件の差で内部表現
条件の型離散クラスに向くテキスト等の任意埋め込みに強い
弱点分類器を悪用した破綻が起きやすいサンプリングが約2倍の計算量
共通の挙動w で忠実度↑・多様性↓同左。過大で過飽和・崩壊

CFG の本質は、Bayes 分解で現れる分類器項 ∇_x log p(c|x) を、条件付きスコアと無条件スコアのとして拡散モデル内部に畳み込んだことにあります。これにより別モデルが消え、外挿スケール w という1本のつまみで忠実度と多様性を連続的に制御できるようになりました。w は単なる強度ではなく、条件付き分布を p(c|x)^w で鋭くする指数であり、上げすぎれば過飽和とモード崩壊を招きます。背景となるスコアの考え方は スコアベース生成モデル、拡散の前向き・逆向き過程の全体像は 拡散モデル、生成手法全体の中での位置づけは 生成モデルの系統図 を合わせて読むと、現代の条件付き生成の骨格が一本につながります。

AI/機械学習 Article

分類器フリーガイダンスと条件付き拡散生成を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

拡散モデル

比較で見る軸

難易度: advanced / カテゴリ: AI/機械学習 / タグ数: 5

導入後に効く点

ガイダンススケール w を上げるほどプロンプト忠実度は増すが多様性が下がり、過大だと過飽和や破綻が起きる。w は品質と多様性のつまみである。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
advanced
カテゴリ
AI/機械学習
タグ数
5

判断チェックリスト

  • 自社の用途が「拡散モデル / ガイダンス」に近いか確認する。
  • 強みである「分類器フリーガイダンス(CFG)は、条件付きスコアと無条件スコアの差を増幅して外挿することで、別の分類器なしに条件への忠実度を高める。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

拡散モデルガイダンス条件付き生成生成モデルサンプリング拡散モデルガイダンス条件付き生成
参考: 公式情報