CFGとは?

ざっくり言えば、CFG(Classifier-Free Guidance)は 「プロンプトにどれだけ強く従わせるか」を決める係数 です。

  • 値を上げるほど:プロンプトに強く従おうとします
  • 値を下げるほど:モデル本来の「それっぽい自然な画像」に寄りやすくなります

ただし、CFGが活きるのは、テキストエンコーダがプロンプトをきちんと理解でき、モデルに十分な表現力がある場合に限られます。

プロンプト・モデル・Conditioningの設計が主役で、CFGはあくまで 微調整のつまみ です。


CFGの仕組み

内部では、拡散モデルは「ノイズの予測」を2通り計算しています。

  • positive:プロンプトを入れた場合(conditional)
  • negative:プロンプトを無視した場合(unconditional)

ComfyUIでは、これを次のような式で混ぜ合わせています。

output = negative + guidance_scale × (positive - negative)

ここで guidance_scaleCFGの値 です。

この式が意味するのは、「プロンプトあり」と「プロンプトなし」の予測の差分をどれだけ増幅するか です。

  • 値が大きいほどpositive - negative の差分が強調され、プロンプトの方向に強く引っ張られます
  • 値が小さいほど:プロンプトの影響は弱まり、negative(モデル本来の傾向)寄りになります

CFGの値と「ちょうどよさ」

モデルやサンプラーによって最適なCFGの値は異なりますが、とりあえず7〜9 を使っておけばよいでしょう。

CFGを強くすれば、プロンプトの効きを増やすことができると言いましたが、それは

  • テキストエンコーダがプロンプト内容を理解しており
  • モデルがそのイメージを表現できる性能を持っている

ときのみです。これが出来ないのに、CFGを上げても生成結果は良くなりません。


CFG = 1 の特別な意味

CFGの中でも、1 という値は少し特別です。 先ほどの式に guidance_scale = 1 を代入してみましょう。

output = negative + 1 × (positive - negative)
       = positive

negative の情報が打ち消され、positive だけ が残ります。

このとき起きることは次の2つです。

1. 計算量の削減

negative(unconditional)の推論が不要になるため、CFG > 1 のときと比べて ステップあたりの計算量をほぼ半分にできます(実装によります)。

画像生成を高速化する手法はいろいろありますが、最も簡単なのが CFG = 1 を使うこと です。ただし、CFGによるプロンプトの強さ調整ができなくなるため、多くのモデルでは他のパラメータで代替しています。

2. Negative Promptが無効になる

出力は positive のみになるので、Negative Promptが効かなくなります
negative 側にどんなテキストを入れても、式の上でキャンセルされてしまうためです。

注意点

高速化モデルと呼ばれるものは、大抵がCFG = 1 を前提に学習されています。
このようなモデルでCFGを1より大きな値にすると 壊れた画像が出力されてしまうため、モデルがどのCFG値を想定しているかは、配布ページやドキュメントで確認しておきましょう。