拡散モデル
Diffusion Model ・ かくさんもでる
ノイズを少しずつ取り除く逆過程を学習し、純粋なノイズから画像などを生成するモデル。
✦ 30秒で試す — 航海AIの絵は、砂嵐を何十回も削って彫り出される1回で戻した点の集まりは、どうなる?予想してみる概要
拡散モデル(Diffusion Model)は、「きれいな画像に少しずつノイズを加えて壊していく過程」を逆向きにたどることで、純粋なノイズから画像を生成するモデルです。Stable Diffusion、DALL-E 2・DALL-E 3、Google の Imagen、動画の Sora など、2022年以降の画像・動画生成 AI の多くがこの仕組みを土台にしています。ただし「画像生成 AI =拡散モデル」ではありません。2021年の初代 DALL-E は、画像を離散的なトークンの列に変えて Transformer で1つずつ並べる自己回帰方式で、拡散に切り替わったのは DALL-E 2 からです。Midjourney は方式を公開していません。
直感的には「彫刻」に似ています。彫刻家が石の塊から少しずつ余分な部分を削って像を彫り出すように、拡散モデルはランダムなノイズの塊から少しずつノイズを取り除き、数十ステップかけて意味のある画像を彫り出します。各ステップの仕事は「いまの画像に乗っているノイズはどれか」を予測することだけで、それを担うのがニューラルネットワークです。一発で絵を描かせるのではなく、易しい小仕事を何十回も重ねるという一見遠回りな定式化が、驚くほど高品質で多様な生成を可能にしました。画像にとどまらず、音声・動画・タンパク質や分子の構造の生成にも応用が広がっています。
なぜ生まれたか
拡散モデル以前、画像生成の主役は2014年に登場した GAN(敵対的生成ネットワーク)でした。GAN は画像を作る生成器と、本物か偽物かを見分ける識別器という2つのネットワークを競わせて学習します。この競争の均衡を保つのが難しく、学習が発散したり、生成器が識別器を騙しやすい少数のパターンばかり出す「モード崩壊」に陥ったりと、安定して訓練すること自体が職人芸でした。もう1つの有力候補だった VAE(変分オートエンコーダ)は学習こそ安定していましたが、生成した画像がぼやけがちでした。
拡散モデルは「一発で生成するのをやめる」ことでこの板挟みを抜けました。生成という難問を、「わずかなノイズを取り除く」という易しい問題の繰り返しに分解したのです。アイデア自体は2015年に Sohl-Dickstein らが非平衡熱力学から着想して提案していましたが、長く画質で GAN に及びませんでした。2020年に Ho らの DDPM(Denoising Diffusion Probabilistic Models)が学習の目標を「足したノイズを当てる」という単純な回帰に整理して画質を一気に引き上げ、同じ頃 Song らは、ノイズの乗ったデータ分布の「スコア(確率が高くなる方向)」を学ぶ流れ(2019年のスコアベース生成モデル)と拡散モデルが、確率微分方程式という1つの枠組みで同じものとして書けることを示しました(2021年)。各ステップの学習は素直な回帰なので、GAN のような不安定な競争がなく、機械学習の教科書どおりに訓練できます。2021年には Dhariwal と Nichol が「拡散モデルは画質で GAN に勝つ」と題した論文を出し、生成モデルの主役が交代しました。
詳細
前向き過程と逆過程
拡散モデルは対になる2つの過程で定義されます。前向き過程(forward process)は、学習データの画像に小さなガウスノイズ(正規分布に従う乱数)を何百〜千ステップかけて加えていき、最後は完全なノイズにする過程です。これは決まった式で計算するだけで、学習は要りません。しかも途中のステップ t の画像は、元の画像 x0 と1回分のノイズ ε から直接 xt = √ᾱt·x0 + √(1−ᾱt)·ε(ᾱt はステップ t までに残る元の信号の割合)と一発で作れます。
学習するのは逆過程(reverse process)の方です。ランダムに選んだステップ t について、上の式でノイズ入りの画像を作り、「加えたノイズ ε を当てる」ようにネットワーク εθ(xt, t) を訓練します。損失は予測したノイズと本物のノイズの二乗誤差 ‖ε − εθ(xt, t)‖² だけです。ネットワークには U-Net(画像を縮めてから拡げる畳み込みネットワーク)や、近年は Transformer ベースの DiT が使われます。生成時は純粋なノイズから出発し、予測したノイズを少しずつ差し引きながら t を T から 0 へ逆向きに進めて、画像を復元します。
スコアという見方 — なぜ小さな一歩なら当てられるのか
逆過程の1歩が何をしているかは、「スコア」という見方で整理できます。ノイズの強さ σ で揺らしたデータの分布を考えると、ある点 x に立って「元のデータはどちらにありそうか」を指す矢印が、空間のどこにでも引けます。これが確率の対数の勾配 ∇log p(x)、つまりスコアで、ノイズ予測はこの矢印と向きが逆なだけの同じ情報です(ε の予測 ≈ −σ × スコア)。DDPM のノイズ予測も Song らのスコア推定も、同じ矢印の場を学んでいるわけです。
ノイズが大きいとき、この矢印は「だいたい真ん中の方」をゆるく指すだけです。雲の中の1点から見て、元が星のどの腕だったかは決められないからです。ここで一気に「元の点」を答えさせると、ありえる候補の平均、つまり形の崩れた中心付近が答えになります。これが一発生成でぼやける理由です。ノイズを少しだけ減らしてから次の矢印を読み直すと、場は徐々に細かな形を指すようになり、最後の数歩で輪郭が決まります。確率微分方程式の見方では、この逆向きの歩みは乱数を足しながら進む「逆向き SDE」としても、乱数を足さずに決定的に進む常微分方程式(probability flow ODE)としても書けます。後者のおかげで、少ないステップで大股に進むサンプラー(DDIM など)が作れるようになりました。
下の部品では、星形に並んだ点群を学習データに見立てています。点1つが画像1枚に当たり、本物の画像は数万〜数百万次元の空間の1点ですが、ここでは2次元です。ノイズを加えて雲にしてから、逆過程を1ステップずつ進めてみてください。途中の点をつまんで外へ放り出したり、「1回で戻す」と比べたりすると、矢印の場に沿った小さな一歩の積み重ねで分布が彫り出される様子が見えます。
まず「ノイズを加える」で、星形の点群(学習データ)を壊してみてください。
点1つが画像1枚に当たります(本物の画像は数万〜数百万次元、ここは2次元)。矢印は「いまの点から見て、元のデータはどちらにありそうか」を示すノイズ除去の場で、星形のデータから計算した理想の答え(学習済みネットワークが近づこうとするもの)です。
テキストで条件付ける
「テキストから画像を生成する」機能は、この逆過程に条件を付けることで実現します。プロンプトのテキストをテキストエンコーダ(CLIP のテキスト側など)で埋め込みのベクトル列に変換し、各ステップのノイズ予測がそれを注意機構(cross-attention)経由で参照します。すると場の矢印が「猫の絵になる方向」へ曲がります。条件の効き具合は classifier-free guidance(CFG)で調整するのが定番です。同じネットワークに、条件ありと条件なしの両方でノイズを予測させ、ε = ε条件なし + w·(ε条件あり − ε条件なし) のように差を w 倍に強調します。w を上げるほどプロンプトに忠実になりますが、上げすぎると色が飽和し多様性が失われます。画像生成ツールの「CFG スケール」はこの w です。
潜在拡散 — Stable Diffusion の工夫
素朴に実装すると、高解像度画像のピクセルそのものの上で数十ステップの推論を回すことになり、計算コストが膨大です。Rombach らの潜在拡散モデル(LDM、2022年)は、拡散を行う場所を変えました。まず VAE で画像を小さな「潜在表現」に圧縮し(512×512 の画像なら 64×64×4 で、値の数は約48分の1)、その小さな空間で拡散と逆拡散を行い、最後に VAE のデコーダで画像に戻します。細かな画素の質感はデコーダに任せ、構図や意味を決める重い反復だけを小さな空間で回す分業です。これで計算量が大きく減り、家庭用の GPU でも動くようになりました。2022年8月に Stable Diffusion として重みとコードが公開されたことも相まって、画像生成が一気に一般へ広がった転換点です。
ネットワークの骨格も入れ替わりつつあります。Peebles と Xie の DiT(2022年)は U-Net の代わりに Transformer で潜在のパッチ列を処理し、モデルを大きくするほど素直に画質が上がることを示しました。Sora のような動画生成や、Stable Diffusion 3・FLUX などの近年のモデルはこの系統で、学習の定式化も、ノイズと画像を直線で結ぶ経路を学ぶ flow matching(rectified flow)という拡散の近縁へ移っています。「少しずつ変形して分布を運ぶ」という骨組みは同じです。
GAN との対比と高速化
GAN と比べると、拡散モデルは「学習が安定し、多様性と画質が高い」代わりに「生成に何十ステップもの推論が要り遅い」という関係です。この速度の弱点に対しては、少ないステップで大股に進むサンプラー(DDIM、DPM-Solver など)や、多ステップの拡散モデルを数ステップ・1ステップで同じ結果を出す生徒モデルに写し取る蒸留(Consistency Models、LCM、敵対的蒸留など)が発展し、ほぼリアルタイムの生成も可能になっています。蒸留した生徒は速い代わりに、多様性やプロンプトへの細かい追従がいくらか落ちることがあります。
応用の広がりと実務の論点
拡散モデルの応用は静止画にとどまりません。動画生成、音声・音楽生成、さらには創薬におけるタンパク質や分子の構造生成にも同じ枠組みが使われています。テキスト・画像・音声をまたぐ生成 AI の一角として、マルチモーダル化の流れの中核にある技術です。
実務で扱うときの論点は3つあります。1つ目は推論コストで、ステップ数×モデルの大きさで効いてくるため、量子化や蒸留による軽量化が実用上重要です。2つ目は再現性で、同じプロンプトでも乱数のシード・サンプラー・ステップ数・CFG スケールが違えば別の画像になるので、成果物にはこれらの設定を必ず記録します。3つ目は権利の問題で、学習データの著作権や生成物の権利、実在の人物に似せた生成の扱いは技術だけでは解決しきれません。商用で使うときは、モデルのライセンスと学習データの出自を確認することが欠かせません。
試問
星形に並んだ点を学習データに見立てた画面です(点1つが画像1枚)。「ノイズを加える」で点を揺らして雲にし、「逆過程を1ステップ」で少しずつノイズを取り除いて戻せます。「1回で戻す」は、いまの位置から元の点を一度に推定して、そこへ飛ばします。
まず「ノイズを加える」で、星形の点群(学習データ)を壊してみてください。
点1つが画像1枚に当たります(本物の画像は数万〜数百万次元、ここは2次元)。矢印は「いまの点から見て、元のデータはどちらにありそうか」を示すノイズ除去の場で、星形のデータから計算した理想の答え(学習済みネットワークが近づこうとするもの)です。
