拡散モデル — ノイズを加えて、戻す
絵にノイズを振りかけて壊すのは誰にでもできます。拡散モデルの発想は、その壊れていく過程を逆再生する方法だけを学習すること。Stable Diffusion や動画生成AIの心臓部であるこの仕組みを、点群と 16×16 の小さな画像を動かしながら理解します。
1. 発想の転換 — 壊すのは簡単、「直す」を学ぶ
VAE や GAN は「ノイズ z → データ」という一発の大ジャンプを1つのネットワークに学ばせました。拡散モデルはこの難problemを分割します。
- 前方拡散(固定・学習不要):データに少しずつガウスノイズを加え、T ステップかけて完全なノイズにする。ただの計算で、失敗しようがない。
- 逆拡散(ここを学習):各ステップで「少しだけノイズを取り除く」方法をニューラルネットに学ばせる。学習後は純ノイズから T 回のデノイズでデータを生成する。
2. 前方拡散 — データが雲になるまで
ステップ t でのノイズの混ざり具合は、係数 ᾱt(アルファバー)で決まります。便利なことに、途中を経由せずどの t へも一発でジャンプできる閉じた式があります。
下のデモは、渦巻き状に並んだ2次元の点群(=データセット)にノイズを加えていく様子です。スライダーで t を動かすと、渦巻きが徐々にほどけて、最後はただのガウス雲になります。紫の線は、いくつかの点がたどる軌跡です。
3. 逆拡散 — ノイズの中から形が浮かぶ
逆向きに戻るには、各地点で「どちらへ動けばよりデータらしくなるか」という矢印(ベクトル場)が分かれば十分です。この矢印の正体がスコア ∇x log p(x)(対数密度の勾配)で、実は「混ざっているノイズ ε を当てる」ことと等価です。ネットワーク εθ の学習目標は驚くほど単純な回帰です:
下のデモでは、ガウス雲からスタートした点群が、スコアのベクトル場(この教材では渦巻きへ向かう場を解析的に計算)に従って段々と渦巻きに戻っていきます。最初は大まかな配置、後半で細部が決まる——粗→細の順に形が現れるのが拡散生成の特徴です。
4. 画像で見るデノイズ — 「1000回の小さな引き算」
今度は 16×16 ピクセルの「画像」で同じことを見ます。スライダーが右端なら純ノイズ、左へ動かすほどノイズが引き算されて絵が現れます。DDPM の逆ステップは1歩ぶんのノイズを取り除く式です:
5. 条件付き生成 — プロンプトが「目的地」を変える
ここまでの逆拡散は「とにかくデータらしいもの」へ向かうだけでした。テキスト条件付き生成では、プロンプトの埋め込みを U-Net / Transformer にcross-attention で注入し、デノイズの方向を「その説明文らしい画像」の方へ曲げます。つまりプロンプトは逆拡散の目的地を切り替えるスイッチです。
6. まとめと現在地
- 前方拡散はただの計算(xt = √ᾱ x₀ + √(1−ᾱ) ε)。逆拡散だけを学習する。
- 学習は「混ぜたノイズを当てる」単純な回帰。スコア ∇log p と等価で、安定に訓練できる。
- 生成は粗→細へ進む小さなデノイズの繰り返し。ステップ数と品質はトレードオフで、DDIM・蒸留が高速化を担う。
- 条件付けは cross-attention による注入+classifier-free guidance。プロンプトが逆拡散の目的地を決める。