CFGとは?
ざっくり言えば、CFG(Classifier-Free Guidance)は 「プロンプトにどれだけ強く従わせるか」を決める係数 です。
- 値を上げるほど:プロンプトに強く従おうとします
- 値を下げるほど:モデル本来の「それっぽい自然な画像」に寄りやすくなります
ただし、CFGが活きるのは、テキストエンコーダがプロンプトをきちんと理解でき、モデルに十分な表現力がある場合に限られます。
プロンプト・モデル・Conditioningの設計が主役で、CFGはあくまで 微調整のつまみ です。
CFGの仕組み
内部では、拡散モデルは「ノイズの予測」を2通り計算しています。
- positive:プロンプトを入れた場合(conditional)
- negative:プロンプトを無視した場合(unconditional)
ComfyUIでは、これを次のような式で混ぜ合わせています。
output = negative + guidance_scale × (positive - negative)
ここで guidance_scale が CFGの値 です。
この式が意味するのは、「プロンプトあり」と「プロンプトなし」の予測の差分をどれだけ増幅するか です。
- 値が大きいほど:
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値を想定しているかは、配布ページやドキュメントで確認しておきましょう。