拡散モデル

機械学習分野における**拡散モデル**（かくさんモデル、英:diffusion model）は潜在変数モデルの一種で、**拡散確率モデル**（かくさんかくりつモデル）とも呼ばれる。これは変分ベイズ法を用いて訓練されたマルコフ連鎖である。拡散モデルの目標とするところは、データの各点が潜在空間上で拡散していく振る舞いをモデル化することで、データ集合のもつ潜在構造を学習することにある。コンピュータビジョンの分野では、これはガウス雑音によってぼやけた画像から雑音を除去するために、拡散過程を反転させる学習を通じて訓練されたニューラルネットワークに相当する。コンピュータビジョンで用いられる一般的な拡散モデルの枠組みを表現する3つの例が、拡散モデルの雑音除去、ノイズ条件付きスコアネットワーク、そして確率微分方程式である。

拡散モデルは非平衡熱力学を動機として、2015年に導入された。

拡散モデルは画像の雑音除去、修復、超解像、画像生成、データ圧縮など様々な操作に応用できる。例えば画像生成モデルはランダムノイズの画像を初期値とし、自然画像の拡散過程を逆向きに学習することによって、新たな自然画像を生成することが可能となる。2022年4月13日に公開されたOpenAIの文章画像生成モデルDALL-E 2は最近の例である。DALL-E 2は拡散モデルを、画像生成モデルの事前分布と最終的な画像生成のデコーダの両方に用いている。拡散モデルを利用したデータ圧縮には符号化が不要と言った利点があり、従来の最高性能の圧縮手法に比べても性能が高い。

## 数学的原理

### 画像生成
画像生成という問題を考える。x を画像とし、画像空間上の確率密度関数をp(x)とおく。もしp(x)自体が与えられているならば、特定の画像が生成される確率を明確にすることができるが、一般には確率を知ることは難しい。

たいていの場合、特定の画像が生成される具体的な確率には興味がない。むしろ興味の対象は、その特定の画像が近傍の画像と比較してどの程度生成されやすいかである。例えば2本のひげが生えた猫の画像があるとき、その画像のわずかな変種（たとえば3本のひげが生えた猫の画像や、何らかのガウス雑音が加わった画像）と比較してどの程度生じやすいのか、が問題である。

したがって、興味の対象はp(x)そのものではなく、むしろ\nabla_x \ln p(x)である。これは2つの効果をもたらす。
* 第一にp(x)を正規化する必要がなく、\tilde p(x) = Cp(x)を用いることができる。ここでC = \int \tilde p(x) dx > 0は任意の定数であり、具体的な値は計算に何の影響も与えない。
* 第二に、p(x)とその近傍画像の確率p(x + dx)を、\frac{p(x)}{p(x+dx)} =e^{-\langle \nabla_x \ln p, dx \rangle}によって比較できる。

スコア関数をs(x) := \nabla_x \ln p(x)とおくと、s(x)はp(x)から（SGLD）を用いた標本抽出を可能にする。これは本質的にマルコフ連鎖モンテカルロ法の無限小バージョンである。

### スコア関数の学習
スコア関数はnoising-denoisingによって学習可能である。

## 主要な変種
### 分類器誘導
あらゆる画像群から標本抽出するのではなく、画像に関する記述によって条件付けされた範囲から抽出することを考える。一般的な画像群から取り出さず、例えば「赤い目の黒猫」といった記述に合致する画像から取り出すということである。一般に、これはp(x|y)という分布上での標本抽出を意味する。ここで画像xは全ての画像の範囲から得られるのに対して、画像yの範囲はある画像のクラスに限定される（「赤い目の黒猫」はかなり詳細なクラスであり、それに対して「猫」はかなり漠然とした記述である）。

雑音のある通信路モデルの観点に立つことで、この過程を以下のように理解することができる。記述yが与えられた条件のもとで画像xを生成しようとするとき、画像を生成したい人は実のところ画像xを思い描いているのだが、その画像は雑音のある通信路を通ってきたために文字化けした結果、記述yとして受信されている、と想像するのである。この場合、画像生成とは生成したい人が本来思い描いていたxを推定する操作に他ならない。

言い換えると、条件付き画像生成は単に「文字で表現された言語を画像で表現された言語に翻訳する」ということである。そこで雑音のある通信路モデルと同様に、ベイズの定理から
p(x|y) \propto p(y|x)p(x) 
を得る。すなわち、もしも全画像空間に関する良質なモデル（p(x)）と、画像→クラスの良質な翻訳器（p(y|x)）が得られるのであれば、それらから労せずしてクラス→画像の翻訳器を得られるということである。

SGLDでは以下の等式を用いる。\nabla_x \ln p(x|y) = \nabla_x \ln p(y|x) + \nabla_x \ln p(x) ここで\nabla_x \ln p(x)は前述のように学習したスコア関数であり、\nabla_x \ln p(y|x)は微分可能な画像分類器を用いて導かれる。

### 温度の導入
分類器誘導型の拡散モデルではp(x|y)から標本抽出を行うが、これは最大事後確率による推定値\arg\max_x p(x|y)の周辺に集中することになる。もしモデルを最尤推定値\arg\max_x p(y|x)に強制的に近づけたいのであれば、以下の式を用いればよい。p_\beta(x|y) \propto p(y|x)^\beta p(x) ここで\beta > 0 は逆温度とみなすことができる。拡散モデルの文脈においては、\betaは誘導スケールと呼ばれることが多い。\betaが大きいほど、モデルに対して\arg\max_x p(y|x)周辺に集中した分布からの標本抽出を強制する。これはしばしば生成される画像の品質を改善する。

温度の導入は、SGLDにおいて\nabla_x \ln p_\beta(x|y) = \beta\nabla_x \ln p(y|x) + \nabla_x \ln p(x) とおくだけで実現できる。

### 分類器フリー誘導（CFG）

分類器p(y|x)が無い場合でも、画像モデル自体から以下のように分類器を抽出することが可能である。\nabla_x \ln p_\beta(x|y) = (1-\beta) \nabla_x \ln p(x) + \beta \nabla_x \ln p(x|y) このようなモデルは通常、(x, y)と(x, None)の双方を与えることで訓練され、それによって\nabla_x\ln p(x|y)と\nabla_x\ln p(x)をともにモデル化できる。

CFGはGLIDEやDALL-E、Google Imagenといったモデルの必要不可欠な部分となっている。

## 脚注

## 参考文献
* 
* 岡野原大輔：「生成AIのしくみ〈流れ〉が画像・音声・動画をつくる」、岩波書店 (岩波科学ライブラリー 328) 、ISBN 978-4-00-029728-8 (2024年12月20日)。※ 数式を避けて言葉で解説された入門書。
* Catherine Higham, Desmond J. Higham, and Peter Grindrod: "Diffusion Models for Generative Artificial Intelligence: An Introduction for Applied Mathematicians", SIAM Review, Vol.67, No.3 (2025).

## 関連文献
* Guidance: a cheat code for diffusion models. Good overview up to 2022.

## 関連項目
* 拡散過程
* マルコフ連鎖
* 変分ベイズ法
* 変分オートエンコーダー