拡散モデルは、まずデータに段階的にノイズを加え、次にそのノイズを段階的に取り除く方法を学習することで新しいコンテンツを生成する生成モデルであり、現在の画像生成の主流手法の一つです。画像を直接描くのではなく、純粋なノイズから出発し、ノイズを一歩ずつ取り除いて、画面をゆっくりと浮かび上がらせます。
まずノイズを加え、次に取り除く:二つの逆の過程
順方向の過程はノイズを加えることです。実在の画像を取り、固定された手順でランダムなノイズを層のように混ぜていくと、多くのステップの後、画像は元の姿がまったく分からないノイズになります。この過程に学習は不要で、規則に従って画面を乱すだけです。
逆方向の過程はノイズを取り除くことであり、生成時に使う方向です。モデルはランダムなノイズの塊から出発し、ノイズの一部を予測して取り除き、少し鮮明な結果を得て、さらに反復を続けて、最終的に完全な新しい画像を生成します。生成の起点はランダムなノイズであり、既存の画像ではありません。
学習で学ぶのはノイズの予測
学習ではモデルに画像を暗記させるのではなく、ノイズの予測を練習させます。ノイズが加えられた画像と加えたステップ数が与えられたとき、混ぜ込まれたノイズが何かを正確に推測させるのです。同じ画像を異なる程度までノイズ化し、モデルに繰り返し練習させます。
ノイズを予測できるようになると、ノイズ除去の根拠が得られます。各ステップで予測したノイズの一部を差し引くたびに、画面は実データらしい姿に少しずつ近づきます。モデルが学ぶのはデータ自体の分布の法則であるため、学習データに一度も現れなかった新しい組み合わせを生成でき、元の画像を複写するわけではありません。
ステップ数が速度を決め、品質にも影響する
拡散モデルの生成は反復的で、1ステップでは少ししか変わらないため、通常は1枚の画像を完成させるのに数十ステップが必要です。ステップ数が多いほど1回あたりの変化は小さくなり、画面は安定しやすく細部もきれいになりやすい一方、時間は長くなります。ステップ数が少なすぎると変化の幅が大きくなり、構造のゆがみや細部のぼやけが起きやすくなります。
これが拡散モデルの明らかな弱点でもあります。一度で完成させる生成方式と比べ、速度は本質的に遅くなります。その後の高速サンプリングや蒸留の技術は、いずれも品質の低下をできるだけ抑えながら、必要なステップ数を減らすことを核心としています。
GAN、自回帰生成との違い
GAN は生成器と識別器の敵対的学習に頼り、一度で完全な結果を出力します。高速ですが、学習が不安定で、多様性が不足することもあります。自回帰生成は文章を書くように、1ピクセルまたは小さなブロックを一つずつ順番に生成します。論理は明確ですが、誤差が蓄積しやすいという弱点があります。
拡散モデルは学習が比較的安定し、生成結果は多様で、細部も制御しやすいのが特徴です。多段階の反復と引き換えに品質と安定性を得ており、代償は推論速度です。三種類の手法に絶対的な代替関係はなく、主にトレードオフが異なります。
よくある二つの誤解
一つ目の誤解は、拡散モデルが既存の画像をぼかしてから復元するものだと思い込むことです。ノイズを加えて取り除くのは、学習時に学習課題を作るための方法にすぎません。実際の生成時、入力はランダムなノイズとテキストプロンプトなどの条件だけであり、復元すべき元の画像は存在せず、出力はまったく新しい画像です。
二つ目の誤解は、生成時に何らかの元画像を改変していると思い込むことです。ユーザーが自ら元画像を提供し、変更の度合いを制御するのは画像から画像への変換といった専用モードだけであり、テキストから画像を生成する通常の過程とは別のものです。
Stable Diffusion は拡散モデルの最も代表的な応用の一つであり、潜在拡散を採用しています。まず画像をより小さな潜在空間に圧縮し、そこでノイズの追加と除去を行い、最後に画像へ復号します。これにより計算量が大幅に減り、一般的なグラフィックカードでも動作します。