🌃

【入門】拡散モデルのエッセンス

に公開

はじめに

2025 年のいま、拡散モデルは静止画だけでなく 動画・テキスト へと射程を拡げています。たとえば OpenAI の Sora は最長 1 分の映像を一括生成し、拡散的アプローチが時空間モデリングでも威力を示すことを証明しました。さらに Google DeepMind が Google I/O 2025 で発表した Gemini Diffusion は “テキストを拡散で生成する” という大胆な試みで、従来の自己回帰型 LLM を遥かに凌ぐ低レイテンシを目指しています。

こうした急激な進歩が示すのは、「拡散」という魔法のようなアイデアが依然として生成 AI の中心にあり続ける――という事実です。

岡野原 大輔氏による「拡散モデル データ生成技術の数理」(Amazon)は、まさにその魔法の謎に真正面から挑んだ一冊です。本書は拡散モデルの「なぜうまくいくのか」を理論的に解き明かし、その数学的美しさと実用性の両面を丁寧に描写しています。

ただし、その理論的な深遠さゆえに、初めて拡散モデルに触れる方にとってはやや険しい道のりに感じられるかもしれません。そこで本記事では、本書への架け橋として、拡散モデルの数理的エッセンスを可能な限りわかりやすく紐解いていきます。

この記事が、皆様にとって拡散モデルという魅力的な世界への扉を開く鍵となり、そして本書との出会いへと導く道標となることを願っています。

本記事の構成

  • 第1章:生成モデルとは?
  • 第2章:拡散モデルとは?SBMとDDPM
  • 第3章:確率微分方程式 (SDE) と拡散モデル
  • 第4章:条件付け、効率化、対称性
『ゼロから作るDeep Learning ❺ ―生成モデル編』も初学者の方にはおすすめです!

拡散モデルを、実装を実際に動かしながら学びたい方には、斎藤 康毅氏の『ゼロから作るDeep Learning ❺ ―生成モデル編』(Amazon)の第8~10章が絶好の入門書となります。

DDPM をはじめ、U-Net、条件付き拡散モデル、分類器ガイダンス/分類器無しガイダンス、Latent Diffusion まで、昨今ではより重要な拡散モデルの技法についてすべて PyTorch で一から組み立てる実装が収録されており、本書『拡散モデル データ生成技術の数理』で示された理論を手を動かして確かめられる構成になっています。

さあ、数式という羅針盤を手に、果てしない拡散モデルの世界へ踏み出しましょう。

第1章:生成モデルとは?

この章のゴール:
この章では、拡散モデルを理解するための土台となる「生成モデル」の基本的な考え方と、従来の生成モデルが抱えていた課題、そしてその課題を解決する鍵となる「スコア関数」と「スコアマッチング」という概念について学びます。特に、拡散モデルの核心的なアイデアに繋がる「デノイジングスコアマッチング」の重要性を理解することを目指します。

1.1 生成モデル:データを「創り出す」AI技術

まず初めに、「生成モデル(Generative Models)」とは一体何でしょうか?
一言で言えば、学習データの特徴を捉え、そのデータと似た新しいデータを自動的に生成する能力を持つモデルのことです。例えば、たくさんの猫の画像データを学習した生成モデルは、これまで見たことのない新しい猫の画像を生成することができます。あるいは、多くの楽曲データを学習すれば、新しいメロディを創り出すことも可能です。

生成モデルの主な目的は、以下の2つに大別できます。

  1. データ生成(サンプリング): モデルが学習したデータ分布 p_{data}(\mathbf{x}) に従う新しいサンプル \mathbf{x}_{new} を生成すること。これが最も直感的で華やかな応用例です。
  2. 尤度評価(密度推定): 与えられたデータ \mathbf{x} が、モデルが学習したデータ分布 p_{\bm{\theta}}(\mathbf{x}) から生成されたものである確率(尤度)を評価すること。これにより、異常検知などにも応用できます。

本書では、特に高次元で複雑なデータ(例えば、高解像度の画像や長い音声波形)を扱う際の生成モデルの学習とサンプリングの難しさに焦点を当てています。

1.1.1 高次元データの生成はなぜ難しい?

私たちが普段目にする画像や音声は、コンピュータにとっては非常に高次元なデータです。例えば、1024x1024ピクセルのカラー画像は、1024 \times 1024 \times 3 \approx 300万次元のベクトルとして表現されます。このような高次元空間では、データ点が非常に疎に存在するため、データの本質的な構造を捉えるのが極めて困難になります。これは「次元の呪い(Curse of Dimensionality)」として知られる問題です。

しかし、希望もあります。多くの場合、高次元空間に存在するデータは、実際にはその空間全体に広がっているわけではなく、より低次元の「多様体(Manifold)」と呼ばれる構造の上に分布していると考えられています。これを「多様体仮説(Manifold Hypothesis)」と呼びます。生成モデルの目標の一つは、この隠れた多様体構造を学習し、その多様体上に新しいデータ点を生成することと言えるでしょう。

1.2 エネルギーベースモデル(EBM):確率分布をエネルギーで表現する

生成モデルの具体的なアプローチの一つとして、「エネルギーベースモデル(Energy-Based Models, EBMs)」があります。EBMは、データの「もっともらしさ」を「エネルギー」という概念で表現します。直感的には、データがもっともらしい(つまり、学習データに近い)ほどエネルギーが低く、もっともらしくないほどエネルギーが高いと考えます。

あるデータ \mathbf{x} の確率密度 p_{\bm{\theta}}(\mathbf{x}) は、エネルギー関数 E_{\bm{\theta}}(\mathbf{x})\bm{\theta} はモデルのパラメータ)を用いて以下のように定義されます。

p_{\bm{\theta}}(\mathbf{x}) = \frac{\exp(-E_{\bm{\theta}}(\mathbf{x}))}{Z(\bm{\theta})} \tag{1.1}

この関係性を視覚的に理解するために、図1を見てみましょう。


図1:エネルギーベースモデル(EBM)の概念図。データがもっともらしい(エネルギーが低い)領域ほど、確率密度が高くなる様子を示しています。

図1に示すように、エネルギー関数 E_{\bm{\theta}}(\mathbf{x}) が低い「谷」の部分では、対応する確率密度 p_{\bm{\theta}}(\mathbf{x}) が高くなり、データが存在しやすいことを表します。逆に、エネルギーが高い「山」の部分では、確率密度は低くなります。

ここで、\exp(\cdot) は指数関数です。エネルギーが低いほど \exp(-E_{\bm{\theta}}(\mathbf{x})) の値は大きくなり、確率密度も高くなります。
分母の Z(\bm{\theta}) は「分配関数(Partition Function)」または「正規化定数」と呼ばれ、確率分布の総和(連続値の場合は積分)が1になるように正規化するためのものです。

Z(\bm{\theta}) = \int \exp(-E_{\bm{\theta}}(\mathbf{x})) d\mathbf{x} \tag{1.2}

この積分は、データ \mathbf{x} の取りうる全ての空間にわたって行われます。

EBMの魅力は、エネルギー関数 E_{\bm{\theta}}(\mathbf{x}) の設計自由度が高い点にあります。例えば、ニューラルネットワークを用いて複雑なエネルギー関数を定義することができます。

1.2.1 EBMの大きな壁:分配関数の計算

EBMは非常に柔軟で表現力の高いモデルですが、大きな課題を抱えています。それは、分配関数 Z(\bm{\theta}) の計算が非常に困難であるという点です。
式 (1.2) を見るとわかるように、Z(\bm{\theta}) を計算するには、データ空間全体にわたる積分を実行する必要があります。高次元データの場合、この積分は現実的な時間内に計算することがほぼ不可能です。

この分配関数の計算困難性は、EBMの学習(パラメータ \bm{\theta} の最適化)や、EBMからのサンプリングを難しくする主要な原因となります。

1.3 生成モデルの学習:データに近づけるには?

生成モデルを学習するとは、モデルのパラメータ \bm{\theta} を調整して、モデルが生成するデータの分布 p_{\bm{\theta}}(\mathbf{x}) を、実際の訓練データの分布 p_{data}(\mathbf{x}) にできるだけ近づけることです。
最も一般的な学習方法は「最尤推定(Maximum Likelihood Estimation, MLE)」です。

最尤推定では、訓練データセット D = \{\mathbf{x}^{(1)}, \mathbf{x}^{(2)}, \dots, \mathbf{x}^{(N)}\} が与えられたとき、これらのデータがモデル p_{\bm{\theta}}(\mathbf{x}) から生成される同時確率(尤度)を最大化するようなパラメータ \bm{\theta} を見つけます。各データが独立に生成されると仮定すると、尤度関数 L(\bm{\theta}) は以下のように書けます。

L(\bm{\theta}) = \prod_{i=1}^{N} p_{\bm{\theta}}(\mathbf{x}^{(i)})

実際には、積の形よりも和の形の方が扱いやすいため、対数を取った「対数尤度関数 \mathcal{L}(\bm{\theta})」を最大化します。

\mathcal{L}(\bm{\theta}) = \log L(\bm{\theta}) = \sum_{i=1}^{N} \log p_{\bm{\theta}}(\mathbf{x}^{(i)}) \tag{1.3}

この対数尤度を最大化するために、通常は勾配上昇法(または損失関数として負の対数尤度を考え、勾配降下法)を用います。つまり、\mathcal{L}(\bm{\theta})\bm{\theta} に関する勾配 \nabla_{\bm{\theta}} \mathcal{L}(\bm{\theta}) を計算し、その方向に \bm{\theta} を更新していきます。

1.3.1 EBMの最尤推定の難しさ

EBMの対数尤度は、式 (1.1) を用いると、

\log p_{\bm{\theta}}(\mathbf{x}) = -E_{\bm{\theta}}(\mathbf{x}) - \log Z(\bm{\theta})

と書けます。したがって、訓練データ全体に対する対数尤度は、

\mathcal{L}(\bm{\theta}) = -\sum_{i=1}^{N} E_{\bm{\theta}}(\mathbf{x}^{(i)}) - N \log Z(\bm{\theta})

となります。この勾配 \nabla_{\bm{\theta}} \mathcal{L}(\bm{\theta}) を計算しようとすると、\nabla_{\bm{\theta}} \log Z(\bm{\theta}) という項が現れます。
\log Z(\bm{\theta}) の勾配は、

\nabla_{\bm{\theta}} \log Z(\bm{\theta}) = \frac{1}{Z(\bm{\theta})} \nabla_{\bm{\theta}} Z(\bm{\theta}) = \frac{1}{Z(\bm{\theta})} \int (\nabla_{\bm{\theta}} \exp(-E_{\bm{\theta}}(\mathbf{x}))) d\mathbf{x} = \mathbb{E}_{\mathbf{x} \sim p_{\bm{\theta}}(\mathbf{x})} [-\nabla_{\bm{\theta}} E_{\bm{\theta}}(\mathbf{x})]

と変形できます[1]。これは、モデル分布 p_{\bm{\theta}}(\mathbf{x}) の下での -\nabla_{\bm{\theta}} E_{\bm{\theta}}(\mathbf{x}) の期待値を意味します。この期待値を計算するためには、p_{\bm{\theta}}(\mathbf{x}) からサンプリングする必要がありますが、これもまた分配関数 Z(\bm{\theta}) が未知であるため困難です(MCMCなどのサンプリング手法が必要となり、計算コストが高い)。

このように、分配関数の存在がEBMの学習を非常に難しくしているのです。

1.4 スコア関数:確率分布の「坂道」を捉える

ここで、拡散モデルを理解する上で非常に重要な概念である「スコア関数(Score Function)」が登場します。
スコア関数 \mathbf{s}(\mathbf{x}) とは、対数確率密度 \log p(\mathbf{x}) の、データ \mathbf{x} に関する勾配として定義されます。

\mathbf{s}(\mathbf{x}) := \nabla_\mathbf{x} \log p(\mathbf{x}) \tag{1.4}

スコア関数は、d 次元のデータ \mathbf{x} に対して d 次元のベクトルを返します。
このベクトルは、各データ点 \mathbf{x} において、確率密度が最も急峻に増加する方向とその大きさを示しています。言い換えれば、スコア関数はデータ空間内での確率分布の「地形」のようなものを描き出し、より「もっともらしい」データ点へと導く「坂道」の情報を提供してくれます。

1.4.1 スコア関数の重要な性質:分配関数からの解放

EBM p_{\bm{\theta}}(\mathbf{x}) = \exp(-E_{\bm{\theta}}(\mathbf{x})) / Z(\bm{\theta}) のスコア関数を計算してみましょう。

\nabla_\mathbf{x} \log p_{\bm{\theta}}(\mathbf{x}) = \nabla_\mathbf{x} (-E_{\bm{\theta}}(\mathbf{x}) - \log Z(\bm{\theta}))

ここで注目すべきは、\log Z(\bm{\theta}) の項です。Z(\bm{\theta})\mathbf{x} に依存しないため、\mathbf{x} で微分すると \bm{0} になります。

\nabla_\mathbf{x} \log Z(\bm{\theta}) = \bm{0}

したがって、EBMのスコア関数は、

\mathbf{s}_{\bm{\theta}}(\mathbf{x}) = \nabla_\mathbf{x} \log p_{\bm{\theta}}(\mathbf{x}) = -\nabla_\mathbf{x} E_{\bm{\theta}}(\mathbf{x}) \tag{1.5}

となり、分配関数 Z(\bm{\theta}) に依存しません!
これは非常に強力な性質です。分配関数の計算困難性というEBMの大きな壁を回避できる可能性を示唆しています。もし、データ分布 p_{data}(\mathbf{x}) のスコア関数 \nabla_\mathbf{x} \log p_{data}(\mathbf{x}) を何らかの方法で推定できれば、分配関数を計算することなくデータ生成モデルを構築できるかもしれません。

1.5 スコアマッチング:未知のスコア関数をどう学習するか?

スコア関数が有用であることはわかりましたが、問題は、真のデータ分布 p_{data}(\mathbf{x}) は未知であるため、そのスコア関数 \nabla_\mathbf{x} \log p_{data}(\mathbf{x}) も直接は計算できないことです。
そこで登場するのが「スコアマッチング(Score Matching)」という考え方です。

スコアマッチングの目標は、パラメータ \bm{\theta} を持つモデル \mathbf{s}_{\bm{\theta}}(\mathbf{x}) を用いて、真のデータ分布のスコア関数 \nabla_\mathbf{x} \log p_{data}(\mathbf{x}) を近似することです。
つまり、\mathbf{s}_{\bm{\theta}}(\mathbf{x}) \approx \nabla_\mathbf{x} \log p_{data}(\mathbf{x}) を目指します。

1.5.1 明示的スコアマッチング(Explicit Score Matching, ESM)

最も直接的なアプローチは、モデルのスコア \mathbf{s}_{\bm{\theta}}(\mathbf{x}) と真のスコア \nabla_\mathbf{x} \log p_{data}(\mathbf{x}) の間の二乗誤差の期待値を最小化することです。これを明示的スコアマッチング(ESM)と呼びます。
目的関数 J_{ESM}(\bm{\theta}) は以下のように定義されます。

J_{ESM}(\bm{\theta}) = \frac{1}{2} \mathbb{E}_{\mathbf{x} \sim p_{data}(\mathbf{x})} [\| \mathbf{s}_{\bm{\theta}}(\mathbf{x}) - \nabla_\mathbf{x} \log p_{data}(\mathbf{x}) \|^2] \tag{1.6}

\| \cdot \|^2 はベクトルのL2ノルムの二乗(各要素の二乗和)を表します。期待値 \mathbb{E}_{\mathbf{x} \sim p_{data}(\mathbf{x})} は、訓練データからのサンプリングで近似できます。
しかし、この目的関数には依然として未知の \nabla_\mathbf{x} \log p_{data}(\mathbf{x}) が含まれているため、このままでは計算できません。

1.5.2 暗黙的スコアマッチング(Implicit Score Matching, ISM)

幸いなことに、Hyvärinen (2005) によって、真のスコア \nabla_\mathbf{x} \log p_{data}(\mathbf{x}) を直接使わずにスコアマッチングを実現する目的関数が提案されました。これを暗黙的スコアマッチング(ISM)またはHyvärinenスコアマッチングと呼びます[2]
(いくつかの仮定のもとで)式 (1.6) と定数項を除いて等価な目的関数 J_{ISM}(\bm{\theta}) は以下のように書けます。

J_{ISM}(\bm{\theta}) = \mathbb{E}_{\mathbf{x} \sim p_{data}(\mathbf{x})} \left[ \sum_{j=1}^{d} \left( \partial_j \mathbf{s}_{\bm{\theta},j}(\mathbf{x}) + \frac{1}{2} \mathbf{s}_{\bm{\theta},j}(\mathbf{x})^2 \right) \right] \tag{1.7}

ここで、d はデータの次元、\mathbf{s}_{\bm{\theta},j}(\mathbf{x}) はモデルスコア \mathbf{s}_{\bm{\theta}}(\mathbf{x})j 番目の要素、\partial_j \mathbf{s}_{\bm{\theta},j}(\mathbf{x}) = \frac{\partial \mathbf{s}_{\bm{\theta},j}(\mathbf{x})}{\partial \mathbf{x}_j}\mathbf{s}_{\bm{\theta},j}(\mathbf{x})\mathbf{x}_j に関する偏微分です。
よりコンパクトに書くと、

J_{ISM}(\bm{\theta}) = \mathbb{E}_{\mathbf{x} \sim p_{data}(\mathbf{x})} \left[ \text{tr}(\nabla_\mathbf{x} \mathbf{s}_{\bm{\theta}}(\mathbf{x})) + \frac{1}{2} \|\mathbf{s}_{\bm{\theta}}(\mathbf{x})\|^2 \right] \tag{1.8}

となります。ここで、\text{tr}(\nabla_\mathbf{x} \mathbf{s}_{\bm{\theta}}(\mathbf{x})) は、スコア関数 \mathbf{s}_{\bm{\theta}}(\mathbf{x}) のヤコビ行列 \nabla_\mathbf{x} \mathbf{s}_{\bm{\theta}}(\mathbf{x}) のトレース(対角成分の和)です。
この目的関数 J_{ISM}(\bm{\theta}) は、訓練データ \mathbf{x} とモデルのスコア \mathbf{s}_{\bm{\theta}}(\mathbf{x}) だけで計算できるため、実際に学習に用いることができます。

ISMの簡易的な導出 (1次元の場合):
J_{ESM}(\bm{\theta}) = \frac{1}{2} \int p_{data}(\mathbf{x}) (\mathbf{s}_{\bm{\theta}}(\mathbf{x}) - (\log p_{data}(\mathbf{x}))')^2 d\mathbf{x}
を展開し、部分積分などを用いると(p_{data}(\mathbf{x})\mathbf{s}_{\bm{\theta}}(\mathbf{x})が無限遠で0に収束するなどの境界条件が必要)、
J_{ESM}(\bm{\theta}) = \int p_{data}(\mathbf{x}) (s'_{\bm{\theta}}(\mathbf{x}) + \frac{1}{2}\mathbf{s}_{\bm{\theta}}(\mathbf{x})^2) d\mathbf{x} + C
という形に変形できます。ここで C\bm{\theta} に依存しない定数です。

ISMの課題:
ISMは画期的な手法ですが、いくつかの課題があります。

  1. 計算コスト: \text{tr}(\nabla_\mathbf{x} \mathbf{s}_{\bm{\theta}}(\mathbf{x})) の計算には、スコア関数 \mathbf{s}_{\bm{\theta}}(\mathbf{x}) の出力次元 d に対して d 回の逆伝播(backpropagation)が必要になる場合があり、高次元データでは計算コストが非常に大きくなります(O(d^2) の計算量、または O(d) 回の逆伝播)。
  2. 過学習: 特にデータが少ない場合や高次元の場合、モデルが訓練データに過剰適合しやすくなる傾向があります。

1.6 デノイジングスコアマッチング(Denoising Score Matching, DSM):拡散モデルへの道

ISMの計算コストと過学習の問題を解決するために提案されたのが、「デノイジングスコアマッチング(Denoising Score Matching, DSM)」です (Vincent, 2011)[3]。これが、拡散モデルの根幹をなすアイデアへと繋がっていきます。

DSMの基本的な考え方は、元データ \mathbf{x} に既知のノイズ分布(例えばガウスノイズ)からサンプリングしたノイズ \bm{\epsilon} を加えて攪乱データ \tilde{\mathbf{x}} を作り、この攪乱データ分布 p_{\sigma}(\tilde{\mathbf{x}}) のスコアを学習するというものです。

まず、元データ \mathbf{x} \sim p_{data}(\mathbf{x}) に対して、平均 \mathbf{x}、分散 \sigma^2 \mathbf{I} のガウス分布から攪乱データ \tilde{\mathbf{x}} を生成する過程を考えます。
つまり、\tilde{\mathbf{x}} = \mathbf{x} + \bm{\epsilon} であり、\bm{\epsilon} \sim \mathcal{N}(\bm{0}, \sigma^2 \mathbf{I}) です。
このときの条件付き確率分布 p_{\sigma}(\tilde{\mathbf{x}}|\mathbf{x}) は、

p_{\sigma}(\tilde{\mathbf{x}}|\mathbf{x}) = \mathcal{N}(\tilde{\mathbf{x}}; \mathbf{x}, \sigma^2 \mathbf{I}) = \frac{1}{(2\pi\sigma^2)^{d/2}} \exp\left(-\frac{\|\tilde{\mathbf{x}}-\mathbf{x}\|^2}{2\sigma^2}\right) \tag{1.9}

となります。
このノイズを加えた後の攪乱データ \tilde{\mathbf{x}} の分布を p_{\sigma}(\tilde{\mathbf{x}}) と書くと、

p_{\sigma}(\tilde{\mathbf{x}}) = \int p_{\sigma}(\tilde{\mathbf{x}}|\mathbf{x}) p_{data}(\mathbf{x}) d\mathbf{x} \tag{1.10}

となります。DSMの目標は、この攪乱データ分布 p_{\sigma}(\tilde{\mathbf{x}}) のスコア \nabla_{\tilde{\mathbf{x}}} \log p_{\sigma}(\tilde{\mathbf{x}}) をモデル \mathbf{s}_{\bm{\theta}}(\tilde{\mathbf{x}}, \sigma) で近似することです。
しかし、\nabla_{\tilde{\mathbf{x}}} \log p_{\sigma}(\tilde{\mathbf{x}}) は依然として p_{data}(\mathbf{x}) に依存するため、直接計算できません。

ここで巧妙なのは、学習対象を \nabla_{\tilde{\mathbf{x}}} \log p_{\sigma}(\tilde{\mathbf{x}}) ではなく、条件付き分布のスコア \nabla_{\tilde{\mathbf{x}}} \log p_{\sigma}(\tilde{\mathbf{x}}|\mathbf{x}) に変更する点です。
\nabla_{\tilde{\mathbf{x}}} \log p_{\sigma}(\tilde{\mathbf{x}}|\mathbf{x}) は、式 (1.9) から簡単に計算できます。

\nabla_{\tilde{\mathbf{x}}} \log p_{\sigma}(\tilde{\mathbf{x}}|\mathbf{x}) = \nabla_{\tilde{\mathbf{x}}} \left( -\frac{\|\tilde{\mathbf{x}}-\mathbf{x}\|^2}{2\sigma^2} - \frac{d}{2}\log(2\pi\sigma^2) \right) = -\frac{\tilde{\mathbf{x}}-\mathbf{x}}{\sigma^2} \tag{1.11}

これは、加えられたノイズ \bm{\epsilon} = \tilde{\mathbf{x}}-\mathbf{x}-\frac{1}{\sigma^2} 倍したものに他なりません。
DSMの目的関数 J_{DSM}(\bm{\theta}) は、この既知のターゲットスコアとの二乗誤差の期待値として定義されます。

J_{DSM}(\bm{\theta}) = \frac{1}{2} \mathbb{E}_{\mathbf{x} \sim p_{data}(\mathbf{x})} \mathbb{E}_{\tilde{\mathbf{x}} \sim p_{\sigma}(\tilde{\mathbf{x}}|\mathbf{x})} \left[ \left\| \mathbf{s}_{\bm{\theta}}(\tilde{\mathbf{x}}, \sigma) - \nabla_{\tilde{\mathbf{x}}} \log p_{\sigma}(\tilde{\mathbf{x}}|\mathbf{x}) \right\|^2 \right] \tag{1.12}

式 (1.11) を代入すると、

J_{DSM}(\bm{\theta}) = \frac{1}{2} \mathbb{E}_{\mathbf{x} \sim p_{data}(\mathbf{x})} \mathbb{E}_{\bm{\epsilon} \sim \mathcal{N}(\bm{0}, \sigma^2 \mathbf{I})} \left[ \left\| \mathbf{s}_{\bm{\theta}}(\mathbf{x}+\bm{\epsilon}, \sigma) - \left(-\frac{\bm{\epsilon}}{\sigma^2}\right) \right\|^2 \right] \tag{1.13}

となります。
この目的関数は、訓練データ \mathbf{x}、そこからサンプリングしたノイズ \bm{\epsilon}(または \tilde{\mathbf{x}})、そしてモデルのスコア \mathbf{s}_{\bm{\theta}}(\tilde{\mathbf{x}}, \sigma) だけで計算可能です。ISMで問題となったヤコビ行列のトレース計算は不要です。

DSMの重要なポイント:
驚くべきことに、このDSMの目的関数 (1.12) を最小化することは、元のノイズが加えられていないデータのスコアではなく、ノイズが加えられたデータ分布 p_{\sigma}(\tilde{\mathbf{x}}) のスコア \nabla_{\tilde{\mathbf{x}}} \log p_{\sigma}(\tilde{\mathbf{x}}) を学習することと(定数項を除いて)等価になります。
つまり、J_{DSM}(\bm{\theta}) は、

\frac{1}{2} \mathbb{E}_{\tilde{\mathbf{x}} \sim p_{\sigma}(\tilde{\mathbf{x}})} [\| \mathbf{s}_{\bm{\theta}}(\tilde{\mathbf{x}}, \sigma) - \nabla_{\tilde{\mathbf{x}}} \log p_{\sigma}(\tilde{\mathbf{x}}) \|^2] + C

と書けるのです(C\bm{\theta} に依存しない定数)。
これは、DSMが実質的に「ノイズ除去(denoising)」を通じてスコアを学習していることを意味します。モデル \mathbf{s}_{\bm{\theta}}(\tilde{\mathbf{x}}, \sigma) は、ノイズが乗ったデータ \tilde{\mathbf{x}} から、元のクリーンなデータ \mathbf{x} を復元するために必要な「方向」(つまり \nabla_{\tilde{\mathbf{x}}} \log p_{\sigma}(\tilde{\mathbf{x}}|\mathbf{x}))を予測するように学習されますが、結果として、それはノイズが乗ったデータ全体の分布 p_{\sigma}(\tilde{\mathbf{x}}) のスコア関数を捉えることになるのです。

DSMのプロセスを図2に示します。


図2:デノイジングスコアマッチング(DSM)の概念図。元データにノイズを加え、その攪乱データから元のノイズ(または関連するスコア)を予測することで学習します。

図2のように、DSMはまず元データ \mathbf{x} に既知のノイズ \bm{\epsilon} を加えて攪乱データ \tilde{\mathbf{x}} を生成します。そして、モデル \mathbf{s}_{\bm{\theta}}(\tilde{\mathbf{x}}, \sigma) が、この \tilde{\mathbf{x}} から条件付き分布のスコア \nabla_{\tilde{\mathbf{x}}} \log p_{\sigma}(\tilde{\mathbf{x}}|\mathbf{x})(これは実質的に加えられたノイズ \bm{\epsilon} の情報を反映しています)を予測するように学習されます。

このDSMは、以下の利点があります。

  1. 計算効率: ヤコビ行列のトレース計算が不要なため、高次元データでも効率的に学習できます。
  2. 過学習抑制: データにノイズを加えることで、一種のデータ拡張(data augmentation)の効果があり、モデルの過学習を抑制する傾向があります。
  3. 任意のノイズ分布: 理論上はガウスノイズでなくても、微分可能であれば他のノイズ分布も使用可能です。

この「ノイズを加えてスコアを学習する」というDSMのアイデアが、拡散モデルの基本的な考え方へと直接繋がっていきます。拡散モデルでは、様々なレベルのノイズをデータに加えて、それぞれのノイズレベルに対応するスコア関数を学習していくことになります。

1.6.1 スコア関数を手に入れたらどうする?ランジュバン・モンテカルロ法

さて、スコアマッチング(特にDSM)によって、データ分布(またはノイズが加えられたデータ分布)のスコア関数 \mathbf{s}_{\bm{\theta}}(\mathbf{x}) \approx \nabla_\mathbf{x} \log p(\mathbf{x}) を学習できたとしましょう。このスコア関数を使って、どうやって新しいデータを生成(サンプリング)するのでしょうか?

ここで活躍するのが「ランジュバン・モンテカルロ法(Langevin Monte Carlo, LMC)」または「ランジュバン動力学(Langevin Dynamics)」と呼ばれるMCMC(マルコフ連鎖モンテカルロ)法の一種です。
LMCは、以下の更新式に従ってデータ点 \mathbf{x} を逐次的に更新し、最終的に目標分布 p(\mathbf{x}) からのサンプルを生成します。

\mathbf{x}_{k+1} = \mathbf{x}_k + \alpha \mathbf{s}_{\bm{\theta}}(\mathbf{x}_k) + \sqrt{2\alpha} \mathbf{u}_k \tag{1.14}

ここで、

  • \mathbf{x}_kk ステップ目のデータ点。
  • \mathbf{s}_{\bm{\theta}}(\mathbf{x}_k)\mathbf{x}_k における学習済みスコア関数 \nabla_\mathbf{x} \log p(\mathbf{x}_k) の近似値。
  • \alpha > 0 はステップサイズ。
  • \mathbf{u}_k は標準正規分布 \mathcal{N}(\bm{0}, \mathbf{I}) からサンプリングされるノイズ。

この更新式は、二つの項からなります。

  1. 勾配項 \alpha \mathbf{s}_{\bm{\theta}}(\mathbf{x}_k): スコア関数の方向にデータ点を移動させます。スコア関数は確率密度が高くなる方向を指すため、この項はデータ点をより「もっともらしい」領域へと導く役割を果たします。
  2. ノイズ項 \sqrt{2\alpha} \mathbf{u}_k: ランダムなノイズを加えることで、データ点が局所的な確率の山に囚われるのを防ぎ、確率分布全体を探索できるようにします。

ステップサイズ \alpha が十分に小さく、k を十分に大きく(つまり更新を十分な回数繰り返す)すると、\mathbf{x}_k の分布は目標分布 p(\mathbf{x}) に収束することが知られています。
こうして、学習したスコア関数 \mathbf{s}_{\bm{\theta}}(\mathbf{x}) を用いて、目標分布からのサンプリングが可能になるのです。

1.7 第1章のまとめ:拡散モデルへの道筋

この章では、生成モデルの基本的な概念から出発し、EBMとその課題である分配関数の計算困難性を見てきました。そして、その困難性を回避する鍵としてスコア関数 \nabla_\mathbf{x} \log p(\mathbf{x}) を導入し、それをデータから学習する手法であるスコアマッチング(ESM、ISM)を学びました。
特に、計算効率が高く、拡散モデルの基礎となるデノイジングスコアマッチング(DSM)は、データにノイズを加えてそのノイズを除去する過程でスコアを学習するという重要なアイデアを提示しました。
最後に、学習したスコア関数を用いて実際にデータをサンプリングする手法としてランジュバン・モンテカルロ法を紹介しました。

これらの概念は、次章以降で解説する拡散モデル(スコアベースモデルやDDPM)を理解するための非常に重要な基礎となります。特に「ノイズを付加し、そのノイズ(またはスコア)を予測/除去する」というテーマは、拡散モデル全体を貫く中心的なアイデアです。

ここまでの流れのポイント:

  • 生成モデルは新しいデータを創り出す。高次元データは難しい。
  • EBMはエネルギーで確率を表現するが、分配関数が計算困難。
  • スコア関数 \nabla_\mathbf{x} \log p(\mathbf{x}) は確率分布の「坂道」を示し、分配関数に依存しない。
  • スコアマッチングは未知のスコア関数を学習する枠組み。
    • ISMは真のスコアが不要だが、計算コストが高い。
    • DSMはデータにノイズを加え、そのノイズを除去するタスクを通じてスコアを学習。計算効率が良い。
  • 学習したスコア関数はランジュバン動力学でサンプリングに使える。

これらの知識を元に、いよいよ次章では拡散モデルの具体的な仕組みに入っていきます。

第2章:拡散モデルとは?SBMとDDPM

この章のゴール:
この章では、いよいよ現代の拡散モデルの主役である「スコアベースモデル(Score-Based Models, SBM)」と「デノイジング拡散確率モデル(Denoising Diffusion Probabilistic Models, DDPM)」という2つの強力なアプローチを詳しく見ていきます。それぞれのモデルがどのようにデータを生成し、どのように学習するのかを理解し、最終的にはこれら一見異なるモデルが「シグナルノイズ比」という統一的な視点から捉えられることを学びます。

前章で学んだスコアマッチング、特にデノイジングスコアマッチング(DSM)とランジュバン動力学が、SBMの基礎となります。一方、DDPMは潜在変数モデルとしての側面を持ち、変分推論の枠組みで学習されます。これらのモデルの数学的な仕組みと、それらがもたらす驚異的なデータ生成能力の源泉に迫りましょう。

2.1 スコアベースモデル(SBM):複数ノイズレベルでのスコア学習と生成

第1章の最後で、デノイジングスコアマッチング(DSM)を使えば、データに単一レベルのノイズ \sigma を加えた攪乱分布 p_{\sigma}(\tilde{\mathbf{x}}) のスコア関数 \mathbf{s}_{\bm{\theta}}(\tilde{\mathbf{x}}, \sigma) \approx \nabla_{\tilde{\mathbf{x}}} \log p_{\sigma}(\tilde{\mathbf{x}}) を学習できることを見ました。そして、学習したスコア関数を用いてランジュバン動力学でサンプリングが可能になります。再掲しますと、

\mathbf{x}_{k+1} = \mathbf{x}_k + \alpha \mathbf{s}_{\bm{\theta}}(\mathbf{x}_k) + \sqrt{2\alpha} \mathbf{u}_k \tag{1.14}

しかし、この単一ノイズレベルのDSMにはいくつかの課題がありました。

  1. 低密度領域のスコア学習の困難性: 元のデータ分布 p_{data}(\mathbf{x}) がほとんど存在しないような低密度領域では、ノイズを加えたとしてもサンプルが少なく、その領域でのスコア関数の学習が不正確になりがちです。特に、元のデータが高次元空間内の低次元多様体上に集中している場合、多様体から離れた領域のスコアはうまく学習できません。
  2. モード間の接続性: データ分布が複数のモード(確率の山)を持つ場合、それらのモード間は通常、確率密度が非常に低い領域となります。単一の強いノイズを加えるとモード構造が破壊されてしまいますが、弱いノイズではモード間を繋ぐスコアが学習できず、サンプリング時に全てのモードを探索できない可能性があります。
  3. 初期サンプルの選択: ランジュバン動力学を開始する初期サンプル \mathbf{x}_0 をどこから持ってくるかが問題です。もし初期サンプルが低密度領域にあれば、不正確なスコアに導かれてうまくサンプリングできないかもしれません。

これらの課題に対処するために登場したのが、「スコアベース生成モデリング(Score-Based Generative Modeling)」、またはその初期の代表的な手法である「ノイズ条件付きスコアネットワーク(Noise Conditional Score Network, NCSN)」です。SBMという呼称は、より広範なスコアベースのアプローチを指すこともありますが、ここではSong & Ermon (2019, 2020)らによる複数ノイズレベルを用いるアプローチを指すこととします[4][5]

2.1.1 複数ノイズレベルの導入

SBMの核心的なアイデアは、単一ではなく、複数の異なる強さのノイズレベル \{\sigma_1 > \sigma_2 > \dots > \sigma_L > 0\} を用意し、それぞれのノイズレベルで攪乱されたデータ分布のスコア関数を学習するというものです。通常、\sigma_1 は非常に大きなノイズ(元データがほぼ正規分布ノイズになる程度)、\sigma_L は非常に小さなノイズ(元データにわずかなノイズが加わる程度)とします。

なぜ複数のノイズレベルを使うのでしょうか?

  • 大きなノイズレベル (\sigma_{large}):
    • 元データ \mathbf{x} に大きなノイズを加えると、攪乱データ \tilde{\mathbf{x}} の分布 p_{\sigma_{large}}(\tilde{\mathbf{x}}) は、元データの複雑な構造がほぼ失われ、滑らかで単純な分布(例えば、ほぼガウス分布)に近づきます。
    • このような単純な分布のスコアは学習しやすく、また、異なるモード間も接続されやすくなります。
    • 低密度領域でもノイズによってデータが「水増し」されるため、スコア学習が多少安定します。
  • 小さなノイズレベル (\sigma_{small}):
    • 元データ \mathbf{x} に小さなノイズを加えた場合、攪乱データ \tilde{\mathbf{x}} の分布 p_{\sigma_{small}}(\tilde{\mathbf{x}}) は、元データの詳細な構造を保持しています。
    • このスコアを学習することで、データの細部を正確に捉えることができます。

SBMでは、これらの異なるノイズレベルに対応するスコア関数を、単一のニューラルネットワーク \mathbf{s}_{\bm{\theta}}(\tilde{\mathbf{x}}, \sigma_i) で学習します。このネットワークは、攪乱データ \tilde{\mathbf{x}} と現在のノイズレベル \sigma_i の両方を入力として受け取り、その条件下でのスコアを出力します。

学習時の目的関数は、各ノイズレベル \sigma_i でのDSMの目的関数の重み付き和となります。

J_{SBM}(\bm{\theta}) = \sum_{i=1}^{L} w_i \cdot \mathbb{E}_{\mathbf{x} \sim p_{data}(\mathbf{x})} \mathbb{E}_{\tilde{\mathbf{x}} \sim p_{\sigma_i}(\tilde{\mathbf{x}}|\mathbf{x})} \left[ \left\| \mathbf{s}_{\bm{\theta}}(\tilde{\mathbf{x}}, \sigma_i) - \nabla_{\tilde{\mathbf{x}}} \log p_{\sigma_i}(\tilde{\mathbf{x}}|\mathbf{x}) \right\|^2 \right] \tag{2.1}

ここで、w_i は各ノイズレベルに対する重みです。Song & Ermon (2020) の研究では、w_i = \sigma_i^2 とすると、各項のスケールが揃い学習が安定することが示唆されています。これは、スコアの大きさが \sigma_i^{-1} に比例する傾向があるため、損失項 \|\mathbf{s}_{\bm{\theta}} - (-\bm{\epsilon}/\sigma_i^2)\|^2 の中の \mathbf{s}_{\bm{\theta}} がおおよそ \sigma_i^{-1} スケールとなり、それを二乗して \sigma_i^{-2}、それに w_i = \sigma_i^2 を掛けると各項が同程度のスケールになるという考え方です。

ネットワークがノイズそのものを予測する場合の目的関数(DDPMなど)

実際には、目的関数はノイズ予測の形でも書けます。

\mathbf{s}_{\bm{\theta}}(\tilde{\mathbf{x}}, \sigma_i)-\frac{\bm{\epsilon}_{\bm{\theta}}(\tilde{\mathbf{x}}, \sigma_i)}{\sigma_i^2} のようにノイズ予測部 \bm{\epsilon}_{\bm{\theta}} を持つと考えると、ターゲットスコア \nabla_{\tilde{\mathbf{x}}} \log p_{\sigma_i}(\tilde{\mathbf{x}}|\mathbf{x}) = -\frac{\bm{\epsilon}}{\sigma_i^2} との比較なので、

J_{SBM}(\bm{\theta}) = \sum_{i=1}^{L} w'_i \cdot \mathbb{E}_{\mathbf{x} \sim p_{data}(\mathbf{x})} \mathbb{E}_{\bm{\epsilon} \sim \mathcal{N}(\bm{0}, \sigma_i^2 \mathbf{I})} \left[ \left\| \bm{\epsilon}_{\bm{\theta}}(\mathbf{x}+\bm{\epsilon}, \sigma_i) - \bm{\epsilon} \right\|^2 \right] \tag{2.2}

という形も考えられます(w'_iw_i/\sigma_i^4 に対応)。

DDPMの論文などでは、このノイズ予測の形 \bm{\epsilon}_{\bm{\theta}} で定式化されることが多いです。重要なのは、どちらの形式でも、学習されたネットワークが各ノイズレベルでのデータ分布の勾配情報(スコア)を捉えるということです。

スコア予測とノイズ予測の等価性については、本記事の2.3.2節で深堀りしていきます。

2.1.2 SBMによるサンプリング:アニールド・ランジュバン動力学

複数のノイズレベルでスコア関数 \mathbf{s}_{\bm{\theta}}(\tilde{\mathbf{x}}, \sigma_i) を学習した後、どのようにしてデータをサンプリングするのでしょうか?

SBMでは、「アニールド・ランジュバン動力学(Annealed Langevin Dynamics)」と呼ばれる手法を用います。これは、シミュレーテッドアニーリング(焼きなまし法)のアイデアとランジュバン動力学を組み合わせたものです。

そのサンプリングプロセスをまずは図3に概念的に示します。

図3:SBMのアニールド・ランジュバン動力学。最も高いノイズレベルから徐々にノイズレベルを下げながら、各レベルでランジュバン動力学を適用し、サンプルを精緻化していきます。

これは、以下のようにまとめられます。

アルゴリズム 2.1:SBMサンプリング

  • 入力:
    • ノイズレベルの降順リスト: \sigma_1 > \sigma_2 > \dots > \sigma_L
      • (\sigma_1 が最も高いノイズレベル、\sigma_L が最も低いノイズレベル)
    • スコアモデル: \mathbf{s}_{\bm{\theta}}(\mathbf{x}, \sigma_i)
    • 基本ステップサイズ: \alpha
    • 各ノイズレベルでのランジュバンステップ数: K
  • 出力:
    • 最終生成サンプル: \mathbf{x}
  • 手順:
    1. 初期化:
      • Initialize \mathbf{x} \quad \text{(例: } \mathcal{N}(\bm{0}, \sigma_1^2 \mathbf{I}) \text{ からサンプリング)}
        // 最も高いノイズレベル \sigma_1 に対応する分布から開始
    2. 反復処理:
      • For i = 1, \dots, L:
        //「アニールステップ」i のループ。\sigma_1 \to \sigma_L へとノイズレベルが下がっていく
        1. 現在のノイズレベルは \sigma_i です。
        2. アニールステップ i におけるステップサイズ \alpha_i を設定します。
          \alpha_i := \alpha \cdot (\sigma_i^2 / \sigma_1^2)
          // これは、現在のアニールステップ i が高いほど、\sigma_1^2 (最大ノイズ分散) との比率でステップサイズが小さくなるように調整する一例です。
        3. For k = 1, \dots, K:
          // ランジュバンステップのループ
          1. \mathbf{u}_k \sim \mathcal{N}(\bm{0}, \mathbf{I})
          2. (オプション: if i=L and k=K then \mathbf{u}_k \leftarrow \bm{0})
            // 最も低いノイズレベルの最後のステップではノイズを加えない
          3. \mathbf{x} \leftarrow \mathbf{x} + \alpha_i \mathbf{s}_{\bm{\theta}}(\mathbf{x}, \sigma_i) + \sqrt{2\alpha_i} \mathbf{u}_k \quad (2.3)
    3. 最終サンプル:
      • Return \mathbf{x}
        (この \mathbf{x} が最終サンプルとなります)

なぜこのアルゴリズムがうまくいくのか?

  • 高いノイズレベル (\sigma_1) で開始: 最初は非常にノイジーで滑らかな分布 (\sigma_1 に対応) からサンプリングを始めます。ここでは、データの全体的な構造(例えば、複数のモードが存在するなら、それらの大まかな位置関係)を捉えることを目指します。スコア \mathbf{s}_{\bm{\theta}}(\mathbf{x}, \sigma_1) は、このぼやけた分布の勾配に従ってサンプルを動かします。
  • ノイズレベルの低減 (アニーリング): アニールステップ i が進むにつれて、ノイズレベル \sigma_i は徐々に低くなります (\sigma_1 \to \sigma_L)。ターゲットとする分布も徐々に元データの分布 p_{data}(\mathbf{x}) に近づいていき、より詳細な構造が現れてきます。各ステップで適用されるスコア \mathbf{s}_{\bm{\theta}}(\mathbf{x}, \sigma_i) も、その時点でのターゲット分布の勾配を反映します。
  • 低いノイズレベル (\sigma_L) で終了: 最終的には、非常に低いノイズレベル \sigma_L でのスコア \mathbf{s}_{\bm{\theta}}(\mathbf{x}, \sigma_L) を用いてサンプリングを行います。これにより、データの細部や高品質なテクスチャが生成されることが期待されます。

このアニーリングのプロセスは、最初は高温(大きなノイズ)で自由に動き回っていた粒子が、徐々に温度を下げる(ノイズを小さくする)ことでエネルギーの低い安定した状態(もっともらしいデータ)に落ち着く様子に似ています。

SBMは、この複数ノイズレベルでの学習とアニールド・ランジュバン動力学によるサンプリングによって、高品質な画像生成などで大きな成功を収めました。

2.2 デノイジング拡散確率モデル(DDPM):潜在変数モデルとしての拡散過程

SBMがスコア関数の直接的な推定とMCMCサンプリングに焦点を当てていたのに対し、「デノイジング拡散確率モデル(Denoising Diffusion Probabilistic Models, DDPM)」は、潜在変数モデルの枠組みで拡散過程を定式化します (Ho et al., 2020)[6]。DDPMは、そのシンプルさと優れた性能から、現在の拡散モデル研究の主流の一つとなっています。

DDPMは、大きく分けて2つの過程からなります。これらの過程を図4に示します。


図4:DDPMの拡散過程と逆拡散(生成)過程。拡散過程でデータは徐々にノイズに変換され、逆拡散過程では学習されたモデルがノイズからデータを復元します。

  1. 拡散過程(Forward Process / Diffusion Process): データに徐々にノイズを加えていき、最終的には既知の単純なノイズ分布(通常は標準正規分布)に変換する過程。これは固定された過程であり、学習は不要です。
  2. 逆拡散(生成)過程(Reverse Process / Denoising Process): ノイズ分布から出発し、学習されたニューラルネットワークを使って徐々にノイズを除去していき、元データを復元する過程。この逆拡散過程のモデルを学習します。

2.2.1 拡散過程:データをノイズへと拡散させる

拡散過程では、元のデータサンプル \mathbf{x}_0 \sim p_{data}(\mathbf{x}) から出発し、T ステップかけて徐々にガウスノイズを加えていきます。各ステップ t \in \{1, \dots, T\} での潜在変数 \mathbf{x}_t は、\mathbf{x}_{t-1} から以下のようにマルコフ的に生成されます。

q(\mathbf{x}_t | \mathbf{x}_{t-1}) := \mathcal{N}(\mathbf{x}_t; \sqrt{1-\beta_t}\mathbf{x}_{t-1}, \beta_t \mathbf{I}) \tag{2.4}

ここで、

  • \{\beta_t\}_{t=1}^T はノイズの分散を制御するスケジュール(0 < \beta_1 < \beta_2 < \dots < \beta_T < 1)。
  • \mathbf{I} は単位行列。

\sqrt{1-\beta_t}\mathbf{x}_{t-1} をわずかに縮小させ、一方で \beta_t \mathbf{I} はそのステップで加えられるノイズの分散を表します。

このマルコフ連鎖を T ステップ繰り返すと、\mathbf{x}_T は元のデータ \mathbf{x}_0 の情報をほとんど失い、ほぼ純粋なノイズ(例えば、標準正規分布 \mathcal{N}(\bm{0},\mathbf{I}))に従うようになります(\beta_t のスケジュールを適切に選べば)。

拡散過程の重要な性質として、\mathbf{x}_0 が与えられたときの任意の時刻 t\mathbf{x}_t の分布 q(\mathbf{x}_t|\mathbf{x}_0) を解析的に(つまり、途中の \mathbf{x}_1, \dots, \mathbf{x}_{t-1} を経由せずに直接)計算できる点があります。

\alpha_t = 1-\beta_t とし、\bar{\alpha}_t = \prod_{s=1}^t \alpha_s と定義すると、\mathbf{x}_t は以下のように書けます。

\mathbf{x}_t = \sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1-\bar{\alpha}_t}\bm{\epsilon} \tag{2.5}

ここで、\bm{\epsilon} \sim \mathcal{N}(\bm{0},\mathbf{I}) です。

つまり、q(\mathbf{x}_t|\mathbf{x}_0) は、

q(\mathbf{x}_t|\mathbf{x}_0) = \mathcal{N}(\mathbf{x}_t; \sqrt{\bar{\alpha}_t}\mathbf{x}_0, (1-\bar{\alpha}_t)\mathbf{I}) \tag{2.6}

となります。これは、時刻 t における \mathbf{x}_t が、\mathbf{x}_0\sqrt{\bar{\alpha}_t} 倍に縮小したものに、分散 (1-\bar{\alpha}_t)\mathbf{I} のガウスノイズを加えたものであることを意味します。

T が大きくなるにつれて \bar{\alpha}_T \to 0 となるように \beta_t を設定すれば、\mathbf{x}_T\mathbf{x}_0 にほとんど依存しなくなり、\mathcal{N}(\bm{0},\mathbf{I}) に近づきます。

なお、式(2.6)の証明は本記事では省略します。

2.2.2 逆拡散過程:ノイズからデータを復元する

拡散過程がデータをノイズへと変換するのに対し、逆拡散過程はその逆、つまり純粋なノイズ \mathbf{x}_T \sim \mathcal{N}(\bm{0},\mathbf{I}) から出発して、徐々にノイズを除去し、元のデータに近いサンプル \mathbf{x}_0 を生成することを目指します。

この逆拡散過程は、各ステップ t\mathbf{x}_t から \mathbf{x}_{t-1} を予測する確率分布 p_{\bm{\theta}}(\mathbf{x}_{t-1}|\mathbf{x}_t) としてモデル化されます。

p_{\bm{\theta}}(\mathbf{x}_{t-1}|\mathbf{x}_t) = \mathcal{N}(\mathbf{x}_{t-1}; \bm{\mu}_{\bm{\theta}}(\mathbf{x}_t, t), \Sigma_{\bm{\theta}}(\mathbf{x}_t, t)) \tag{2.7}

ここで、\bm{\mu}_{\bm{\theta}}(\mathbf{x}_t, t)\Sigma_{\bm{\theta}}(\mathbf{x}_t, t) は、時刻 t と現在の状態 \mathbf{x}_t を入力とするニューラルネットワークによって予測されます。

DDPMの論文では、分散 \Sigma_{\bm{\theta}}(\mathbf{x}_t, t) は固定値(例えば \beta_t \mathbf{I}\tilde{\beta}_t \mathbf{I} = \frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_t}\beta_t \mathbf{I})とし、平均 \bm{\mu}_{\bm{\theta}}(\mathbf{x}_t, t) のみをニューラルネットワークで学習することが提案されています。

2.2.3 DDPMの学習:変分下限(ELBO)の最大化

DDPMの学習は、変分オートエンコーダ(VAE)と同様に、対数尤度 \log p_{\bm{\theta}}(\mathbf{x}_0) の変分下限(Evidence Lower Bound, ELBO)を最大化することによって行われます。

ELBOは以下のように定義されます(導出の詳細はDDPMの元論文 (Ho et al., 2020) の付録Aなどを参照してください)。

\text{ELBO}(\bm{\theta}) := \mathbb{E}_{q(\mathbf{x}_{1:T}|\mathbf{x}_0)} \left[ \log \frac{p_{\bm{\theta}}(\mathbf{x}_{0:T})}{q(\mathbf{x}_{1:T}|\mathbf{x}_0)} \right]

学習の目標は、この \text{ELBO}(\bm{\theta}) を最大化することです。実際には従来の損失関数スタイルに合わせて、負のELBO(Negative ELBO)を最小化するアプローチを取ります。

L(\bm{\theta}) := -\text{ELBO}(\bm{\theta})

この損失関数 L(\bm{\theta}) は、\text{ELBO}(\bm{\theta}) を展開して各項の符号を反転させることで、以下のように複数の「最小化すべき」項の和として分解できます。式変形を省略して結果を示しますと、

\begin{align} L(\bm{\theta}) \tag{2.8} = &\mathbb{E}_q [ \underbrace{D_{KL}(q(\mathbf{x}_T|\mathbf{x}_0) \| p(\mathbf{x}_T))}_{L_T} \notag \\ &+ \sum_{t=2}^{T} \underbrace{D_{KL}(q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) \| p_{\bm{\theta}}(\mathbf{x}_{t-1}|\mathbf{x}_t))}_{L_{t-1}} \notag \\ &\underbrace{- \log p_{\bm{\theta}}(\mathbf{x}_0|\mathbf{x}_1)}_{L_0} \notag ] \end{align}

ここで、

  • \mathbb{E}_q は、\mathbf{x}_0 \sim p_{data}(\mathbf{x}_0)(データ分布からのサンプリング)および \mathbf{x}_{1:T} \sim q(\mathbf{x}_{1:T}|\mathbf{x}_0)\mathbf{x}_0 から始まる拡散過程)に対する期待値を表します。
  • D_{KL}(q\|p)qp の間のカルバック・ライブラー(KL)ダイバージェンスです。
  • L_T = D_{KL}(q(\mathbf{x}_T|\mathbf{x}_0) \| p(\mathbf{x}_T)): 最終的な潜在変数 \mathbf{x}_T の分布 q(\mathbf{x}_T|\mathbf{x}_0) が事前分布 p(\mathbf{x}_T)(通常、標準正規分布 \mathcal{N}(\bm{0},\mathbf{I}))に近づくように促す項です。拡散過程の設計により、q(\mathbf{x}_T|\mathbf{x}_0)\mathbf{x}_0 にほとんど依存せず p(\mathbf{x}_T) に近くなるため、この項はしばしば定数として扱われたり、学習において重み付けが小さかったりします。
  • L_{t-1} = D_{KL}(q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) \| p_{\bm{\theta}}(\mathbf{x}_{t-1}|\mathbf{x}_t)) (t \in [2,T]): 各タイムステップ t における逆拡散過程 p_{\bm{\theta}}(\mathbf{x}_{t-1}|\mathbf{x}_t) が、解析的に計算可能な真の事後分布 q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) を模倣するように学習するための項です。これがDDPMにおけるノイズ除去ステップの学習の主要部分です。
  • L_0 = - \log p_{\bm{\theta}}(\mathbf{x}_0|\mathbf{x}_1): 最終的なデータ \mathbf{x}_0 を再構成するステップ\mathbf{x}_1 から \mathbf{x}_0 を生成)における負の対数尤度です。この項を最小化することは、元データ \mathbf{x}_0 の再構成尤度 p_{\bm{\theta}}(\mathbf{x}_0|\mathbf{x}_1) を最大化することに相当し、「再構成項」とも呼ばれます。

学習の目標は、この損失関数 L(\bm{\theta}) を最小化することです。これは、

  • KLダイバージェンスである L_T および L_{t-1} の各項を最小化すること(モデルの分布をターゲットの分布に近づけること)、
  • そして、L_0 = -\log p_{\bm{\theta}}(\mathbf{x}_0|\mathbf{x}_1) 項を最小化すること(元データの再構成品質を高めること)
    を意味します。

なお、q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) が解析的に求めることができる証明や、解析的な表記は本記事では省略します。

DDPMの目的関数の簡略化:
Ho et al. (2020) は、このELBOの式をさらに変形し、より直感的で扱いやすい目的関数を導出しました。
特に、p_{\bm{\theta}}(\mathbf{x}_{t-1}|\mathbf{x}_t) の平均 \bm{\mu}_{\bm{\theta}}(\mathbf{x}_t, t) を適切にパラメータ化することで、各KLダイバージェンスの項(特に t \ge 2 の項)は、実質的に拡散過程で加えられたノイズ \bm{\epsilon} を予測するタスクに帰着されることを示しました。

式 (2.5) \mathbf{x}_t = \sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1-\bar{\alpha}_t}\bm{\epsilon} を変形すると、\mathbf{x}_0 = \frac{1}{\sqrt{\bar{\alpha}_t}}(\mathbf{x}_t - \sqrt{1-\bar{\alpha}_t}\bm{\epsilon}) となります。
これと、q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) の平均が \tilde{\bm{\mu}}_t(\mathbf{x}_t, \mathbf{x}_0) = \frac{\sqrt{\bar{\alpha}_{t-1}}\beta_t}{1-\bar{\alpha}_t}\mathbf{x}_0 + \frac{\sqrt{\alpha_t}(1-\bar{\alpha}_{t-1})}{1-\bar{\alpha}_t}\mathbf{x}_t と書けることを利用し、
p_{\bm{\theta}}(\mathbf{x}_{t-1}|\mathbf{x}_t) の平均 \bm{\mu}_{\bm{\theta}}(\mathbf{x}_t, t) がこの \tilde{\bm{\mu}}_t(\mathbf{x}_t, \mathbf{x}_0) に近くなるように学習します。
\bm{\mu}_{\bm{\theta}}(\mathbf{x}_t, t) を、ニューラルネットワーク \bm{\epsilon}_{\bm{\theta}}(\mathbf{x}_t, t) を用いて、

\bm{\mu}_{\bm{\theta}}(\mathbf{x}_t, t) = \frac{1}{\sqrt{\alpha_t}} \left( \mathbf{x}_t - \frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}} \bm{\epsilon}_{\bm{\theta}}(\mathbf{x}_t, t) \right) \tag{2.9}

とパラメータ化します[7]。ここで、\bm{\epsilon}_{\bm{\theta}}(\mathbf{x}_t, t) は、時刻 t における状態 \mathbf{x}_t から、元々 \mathbf{x}_0 に加えられたノイズ \bm{\epsilon} を予測するニューラルネットワークです。
このとき、ELBOの主要な損失項は、以下のような単純な二乗誤差の形になります。

L_{simple}(\bm{\theta}) = \mathbb{E}_{t \sim U(1,T), \mathbf{x}_0 \sim p_{data}(\mathbf{x}), \bm{\epsilon} \sim \mathcal{N}(\bm{0},\mathbf{I})} \left[ \left\| \bm{\epsilon} - \bm{\epsilon}_{\bm{\theta}}(\sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1-\bar{\alpha}_t}\bm{\epsilon}, t) \right\|^2 \right] \tag{2.10}

つまり、DDPMの学習は、ランダムに選んだ時刻 t で元データ \mathbf{x}_0 にノイズ \bm{\epsilon} を加えた \mathbf{x}_t = \sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1-\bar{\alpha}_t}\bm{\epsilon} から、元のノイズ \bm{\epsilon} を予測するニューラルネットワーク \bm{\epsilon}_{\bm{\theta}}(\mathbf{x}_t, t) を訓練する、という非常にシンプルなタスクになります。

この目的関数は、SBMのノイズ予測型の目的関数 (2.2) と非常に似ていることに気づくでしょう(重みやノイズのスケールは異なりますが、本質的にノイズ予測タスクである点は共通しています)。

以下にDDPMの学習アルゴリズムを示します。

アルゴリズム 2.2:DDPMの学習

  • 入力:
    • 訓練データ分布: p_{data}(\mathbf{x})
    • ノイズスケジュール: \beta_1, \dots, \beta_T
      • (これらから \alpha_t = 1-\beta_t および \bar{\alpha}_t = \prod_{s=1}^t \alpha_s が計算される)
    • ノイズ予測モデル(ニューラルネットワーク): \bm{\epsilon}_{\bm{\theta}}(\mathbf{x}_t, t)
    • 学習率: \eta
  • 出力:
    • 学習済みノイズ予測モデル: \bm{\epsilon}_{\bm{\theta}}
  • 手順:
    1. モデルパラメータ \bm{\theta} をランダムに初期化します。
    2. 収束するまで以下を繰り返します:
      1. 訓練データから元データ \mathbf{x}_0 \sim p_{data}(\mathbf{x}) をサンプリングします。
      2. タイムステップ t\{1, \dots, T\} から一様ランダムにサンプリングします。
        t \sim \text{Uniform}(\{1, \dots, T\})
      3. 標準正規分布からノイズ \bm{\epsilon} \sim \mathcal{N}(\bm{0}, \mathbf{I}) をサンプリングします。
      4. 式 (2.5) を用いて、時刻 t におけるノイズが加えられたデータ \mathbf{x}_t を計算します。
        \mathbf{x}_t := \sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1-\bar{\alpha}_t}\bm{\epsilon}
      5. 現在のモデル \bm{\epsilon}_{\bm{\theta}}(\mathbf{x}_t, t) を用いて、加えられたノイズ \bm{\epsilon} を予測します。
      6. 損失関数 L_{simple} (式 (2.10) の期待値の中身) を計算します。
        L := \| \bm{\epsilon} - \bm{\epsilon}_{\bm{\theta}}(\mathbf{x}_t, t) \|^2
      7. 損失 L に関してモデルパラメータ \bm{\theta} の勾配 \nabla_{\bm{\theta}} L を計算します。
      8. 勾配降下法などを用いてモデルパラメータを更新します。
        \bm{\theta} \leftarrow \bm{\theta} - \eta \nabla_{\bm{\theta}} L
    3. 学習済みモデルを返します:
      • Return \bm{\epsilon}_{\bm{\theta}}

このアルゴリズムは非常にシンプルで、各イテレーションでデータにノイズを加え、そのノイズを予測するというタスクを繰り返すだけです。この単純さにもかかわらず、DDPMは非常に高品質なデータ生成を実現できます。

2.2.4 DDPMによるサンプリング

DDPMの学習が終われば、学習済みのノイズ予測モデル \bm{\epsilon}_{\bm{\theta}}(\mathbf{x}_t, t) を使って、純粋なノイズから高品質なデータを生成することができます。サンプリングプロセスは、学習時とは逆方向に、時刻 T から時刻 1 へとステップを戻していきます。

以下にDDPMのサンプリングアルゴリズムを示します。

アルゴリズム 2.3:DDPM サンプリング

  • 入力:
    • 学習済みノイズ予測モデル: \bm{\epsilon}_{\bm{\theta}}(\mathbf{x}_t, t)
    • ノイズスケジュールから導出される定数: \alpha_t, \beta_t, \bar{\alpha}_t (for t=1, \dots, T)
    • サンプリング時のノイズの分散の選択: \sigma_t^2
      • 例1: \sigma_t^2 = \tilde{\beta}_t = \frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_t}\beta_t (for t > 1), \sigma_1^2 = 0
      • 例2: \sigma_t^2 = \beta_t (for t > 1), \sigma_1^2 = 0
  • 出力:
    • 生成サンプル: \mathbf{x}_0
  • 手順:
    1. 初期化:
      • \mathbf{x}_T \sim \mathcal{N}(\bm{0}, \mathbf{I})
        // 最もノイズの多い状態(通常は標準正規分布)からサンプリングを開始
    2. 反復処理 (逆拡散ステップ):
      • For t = T, T-1, \dots, 1:
        // 時刻 t から t-1 へとノイズを除去していくループ
        1. 現在の状態は \mathbf{x}_t、時刻は t です。

        2. 標準正規分布からノイズ \mathbf{u} \sim \mathcal{N}(\bm{0}, \mathbf{I}) をサンプリングします。
          (ただし、t=1 の場合は \sigma_1=0 とするため、\mathbf{u} は使用されないか、形式的に \mathbf{u}=\bm{0} とします)

        3. 学習済みモデル \bm{\epsilon}_{\bm{\theta}}(\mathbf{x}_t, t) を用いて、現在の状態 \mathbf{x}_t に含まれると予測されるノイズ成分を取得します。

        4. 式 (2.11) に従って、\mathbf{x}_{t-1} を計算します。

          \mathbf{x}_{t-1} = \frac{1}{\sqrt{\alpha_t}} \left( \mathbf{x}_t - \frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}} \bm{\epsilon}_{\bm{\theta}}(\mathbf{x}_t, t) \right) + \sigma_t \mathbf{u} \tag{2.11}

          // 第1項がノイズ除去(デノイジング)の主要部分。
          // 第2項が確率的な要素を導入し、サンプルの多様性を確保する。

    3. 最終サンプル:
      • Return \mathbf{x}_0
        (この \mathbf{x}_0 が最終的な生成サンプルとなります)

このプロセスを T 回繰り返すことで、初期のランダムノイズ \mathbf{x}_T から、元データ分布に近いサンプル \mathbf{x}_0 が得られます。各ステップで、モデル \bm{\epsilon}_{\bm{\theta}}(\mathbf{x}_t, t) が現在の \mathbf{x}_t からノイズ成分を予測し、それを \mathbf{x}_t から効果的に取り除くことで、よりクリーンな状態 \mathbf{x}_{t-1} へと近づけていきます。

サンプリング時のノイズ項 \sigma_t \mathbf{u} は、生成されるサンプルの多様性を高める役割を果たしますが、その大きさ \sigma_t の選択は生成品質に影響を与えることがあります。

2.3 SBMとDDPMの統一:シグナルノイズ比(SNR)という視点

ここまで、SBMとDDPMを個別に見てきましたが、どちらも学習時の目的関数が、「ノイズが加えられたデータから、元のノイズまたはそれに類する情報(スコア)を予測する」という形になっています。また、サンプリングも、学習したモデルを使ってノイズを徐々に除去していくという点で共通の構造を持っています(いわゆる逆拡散過程)。

これらのモデルの核心的な違いは、データにノイズを加えていく拡散過程の定義と、学習ターゲットの具体的な形式(スコア関数か、ノイズそのものか) にあります。

  • SBM (NCSN) の拡散過程と学習ターゲット:

    • 拡散過程: 元データ \mathbf{x}_0 に対し、標準偏差 \sigma_i のガウスノイズ \bm{\epsilon} \sim \mathcal{N}(\bm{0}, \mathbf{I}) を加えます。攪乱データ \tilde{\mathbf{x}} = \mathbf{x}_0 + \sigma_i \bm{\epsilon} は、p_{\sigma_i}(\tilde{\mathbf{x}}|\mathbf{x}_0) = \mathcal{N}(\tilde{\mathbf{x}}; \mathbf{x}_0, \sigma_i^2 \mathbf{I}) に従います。元シグナル \mathbf{x}_0 のスケールは変化せず、ノイズの分散 \sigma_i^2 のみが変化します。
    • 学習ターゲット: スコア関数 \nabla_{\tilde{\mathbf{x}}} \log p_{\sigma_i}(\tilde{\mathbf{x}}|\mathbf{x}_0) をモデル \mathbf{s}_{\bm{\theta}}(\tilde{\mathbf{x}}, \sigma_i) で予測します。
  • DDPM の拡散過程と学習ターゲット:

    • 拡散過程: 元データ \mathbf{x}_0 に対し、時刻 t における攪乱データ \mathbf{x}_t = \sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1-\bar{\alpha}_t}\bm{\epsilon}\bm{\epsilon} \sim \mathcal{N}(\bm{0}, \mathbf{I}))は、q(\mathbf{x}_t|\mathbf{x}_0) = \mathcal{N}(\mathbf{x}_t; \sqrt{\bar{\alpha}_t}\mathbf{x}_0, (1-\bar{\alpha}_t)\mathbf{I}) に従います。元シグナル \mathbf{x}_0\sqrt{\bar{\alpha}_t} 倍にスケールダウンされ、ノイズの分散は (1-\bar{\alpha}_t) となります。
    • 学習ターゲット: 加えられたノイズ \bm{\epsilon} をモデル \bm{\epsilon}_{\bm{\theta}}(\mathbf{x}_t, t) で予測します。

これらの違いにもかかわらず、Kingma et al. (2021) や Song et al. (2020, "Score-Based Generative Modeling through Stochastic Differential Equations") などの研究により、SBMとDDPMは実は同じ枠組みの特殊なケースとして統一的に理解できることが示されました。その鍵となるのが「シグナルノイズ比(Signal-to-Noise Ratio, SNR)」という概念です。

ここからは、必要がある時以外は SBM と DDPM を特に区別せず、あわせて "拡散モデル" と呼ぶことにします。

2.3.1 シグナルノイズ比の定義

時刻 t (またはノイズレベル \sigma_i) における攪乱データ \mathbf{x}_t (または \tilde{\mathbf{x}}) が、\mathbf{x}_t = (\text{シグナル成分}) + (\text{ノイズ成分}) のように書けるとします。
ここで、シグナル成分は元データ \mathbf{x}_0 に由来する部分、ノイズ成分は加えられたランダムノイズ \bm{\epsilon} に由来する部分です。

シグナルノイズ比 (SNR) は、シグナル成分のパワー(分散のスケール)とノイズ成分のパワー(分散)の比として定義されます。

簡単のため、元データ \mathbf{x}_0 および標準ノイズ \bm{\epsilon} の各要素は平均0、分散1であると仮定します(つまり、各成分の分散が1であり、共分散は0。\text{Var}(\mathbf{x}_{0,j})=1, \text{Var}(\bm{\epsilon}_j)=1 for all j)。

  • SBM (NCSN) の場合:
    \tilde{\mathbf{x}} = \mathbf{x}_0 + \sigma_i \bm{\epsilon}

    • シグナル成分: \mathbf{x}_0 (パワー(各成分の分散): 1)
    • ノイズ成分: \sigma_i \bm{\epsilon} (パワー(各成分の分散): \sigma_i^2)
      したがって、
    \text{SNR}_{SBM}(\sigma_i) = \frac{1}{\sigma_i^2} \tag{2.12}

    ノイズレベル \sigma_i を大きくしていく(SBMのサンプリングでは \sigma_1 > \dots > \sigma_L とノイズレベルが下がっていくので、学習時は様々な \sigma_i を考える)場合を考えると、

    • \text{SNR}_{SBM}(\sigma_i) は減少します。特に、SBMのサンプリング初期の大きなノイズ \sigma_1 ではSNRは小さく、サンプリング終盤の小さなノイズ \sigma_L ではSNRは大きくなります。拡散の方向(ノイズを増やしていく方向)で見れば、\sigma_i0 \to \infty となるに従い、SNRは \infty \to 0 と単調に減少します。
    • 一方、\text{Var}(\tilde{\mathbf{x}})=1+\sigma_i^2 は大きくなっていきます。なのでSBMの拡散過程は、分散発散型拡散過程 (Variance-Exploding Diffusion Process) と呼ばれます。
  • DDPMの場合:
    \mathbf{x}_t = \sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1-\bar{\alpha}_t}\bm{\epsilon}

    • シグナル成分: \sqrt{\bar{\alpha}_t}\mathbf{x}_0 (パワー(各成分の分散): \bar{\alpha}_t)
    • ノイズ成分: \sqrt{1-\bar{\alpha}_t}\bm{\epsilon} (パワー(各成分の分散): 1-\bar{\alpha}_t)
      したがって、
    \text{SNR}_{DDPM}(t) = \frac{\bar{\alpha}_t}{1-\bar{\alpha}_t} \tag{2.13}

    時刻 t が進む(t: 0 \to T)につれて、

    • \bar{\alpha}_t1 \to 0 と減少するため、\text{SNR}_{DDPM}(t)\infty \to 0 と単調に減少します。
    • 一方、\text{Var}(\mathbf{x}_t)=\bar{\alpha}_t+(1-\bar{\alpha}_t)=1 は一定となります。なのでDDPMの拡散過程は、分散保存型拡散過程 (Variance-Preserving Diffusion Process) と呼ばれます。

どちらのモデルも、拡散過程(ノイズを増やしていく過程)が進むほど、シグナルよりもノイズが支配的になる(SNRが低下する)という共通の性質を持っています。このSNRは、異なるノイズスケジュールやパラメータ化を持つ拡散モデル間での「シグナルの相対的な強さ/ノイズの相対的な弱さ」を比較するための共通の尺度となります。

2.3.2 スコア予測とノイズ予測の等価性

SBMが学習するスコア関数 \nabla_{\mathbf{x}_t} \log q(\mathbf{x}_t|\mathbf{x}_0) と、DDPMが学習するノイズ \bm{\epsilon} の間には、以下のような関係があります。

まずは攪乱データ \mathbf{x}_t (または \tilde{\mathbf{x}}) が、\mathbf{x}_t = (\text{シグナル成分}) + (\text{ノイズ成分}) と表せることを、より厳密に \mathbf{x}_t = a(t)\mathbf{x}_0 + b(t)\bm{\epsilon} と定めます。

これを用いて、q(\mathbf{x}_t|\mathbf{x}_0)\mathbf{x}_t に関する勾配(スコア)を計算すると、

\begin{aligned} \nabla_{\mathbf{x}_t} \log q(\mathbf{x}_t|\mathbf{x}_0) &= \nabla_{\mathbf{x}_t} \left( -\frac{1}{2b^2(t)} ||\mathbf{x}_t - a(t)\mathbf{x}_0||^2 - \text{const} \right) \\ &= -\frac{\mathbf{x}_t - a(t)\mathbf{x}_0}{b^2(t)} \\ &= -\frac{b(t)\bm{\epsilon}}{b^2(t)} = -\frac{\bm{\epsilon}}{b(t)} \end{aligned} \tag{2.14}

となります。つまり、真のノイズ \bm{\epsilon} を予測することと、真のスコア \nabla_{\mathbf{x}_t} \log q(\mathbf{x}_t|\mathbf{x}_0) を予測することは、b(t) というスケール因子を除いて等価です。

具体的には、\bm{\epsilon} = -b(t) \nabla_{\mathbf{x}_t} \log q(\mathbf{x}_t|\mathbf{x}_0) という関係があります。

SBMの目的関数 式(2.1) は、モデル \mathbf{s}_{\bm{\theta}}(\mathbf{x}_t, t) が真のスコア \nabla_{\mathbf{x}_t} \log q(\mathbf{x}_t|\mathbf{x}_0) を予測するように学習します。
DDPMの目的関数 式(2.10) は、モデル \bm{\epsilon}_{\bm{\theta}}(\mathbf{x}_t, t) が真のノイズ \bm{\epsilon} を予測するように学習します。
したがって、\mathbf{s}_{\bm{\theta}}(\mathbf{x}_t, t) \approx -\bm{\epsilon}_{\bm{\theta}}(\mathbf{x}_t, t)/b(t) という関係が期待されます。

この関係性から、DDPMの学習目的関数 式(2.10) は、スコアマッチングの目的関数に書き換えることができます。

||\bm{\epsilon} - \bm{\epsilon}_{\bm{\theta}}||^2 = ||-b(t)\mathbf{s}_{true} - (-b(t)\mathbf{s}_{\bm{\theta}})||^2 = b^2(t) ||\mathbf{s}_{true} - \mathbf{s}_{\bm{\theta}}||^2

ここで、 \mathbf{s}_{true} = \nabla_{\mathbf{x}_t} \log q(\mathbf{x}_t|\mathbf{x}_0) とし、\mathbf{s}_{\bm{\theta}} はモデルが予測するスコアです。

つまり、DDPMの目的関数は、重み b^2(t) が付いたスコアマッチングの目的関数と見なすことができます。

L_{DDPM} = \mathbb{E} [ ||\bm{\epsilon} - \bm{\epsilon}_{\bm{\theta}}||^2 ] = \mathbb{E} [ b^2(t) || \nabla_{\mathbf{x}_t}\log q(\mathbf{x}_t|\mathbf{x}_0) - \mathbf{s}_{\bm{\theta}}(\mathbf{x}_t,t) ||^2 ]

ここで、 \mathbf{s}_{\bm{\theta}}(\mathbf{x}_t,t) = -\bm{\epsilon}_{\bm{\theta}}(\mathbf{x}_t,t)/b(t) です。

書籍ではさらに、一般化された拡散過程 q(\mathbf{x}_t|\mathbf{x}_s) (s<t) や、それに対応する逆拡散過程 p(\mathbf{x}_s|\mathbf{x}_t) を考え、その平均 \bm{\mu}_{\bm{\theta}}(\mathbf{x}_t, s, t) が、

  1. \hat{\mathbf{x}}_0(\mathbf{x}_t;t) (時刻 t\mathbf{x}_t から予測された元のデータ \mathbf{x}_0) を用いる形式 (書籍の式2.14)
  2. \hat{\bm{\epsilon}}_{\bm{\theta}}(\mathbf{x}_t;t) (時刻 t\mathbf{x}_t から予測されたノイズ) を用いる形式 (書籍の式2.15)
  3. \mathbf{s}_{\bm{\theta}}(\mathbf{x}_t;t) (時刻 t\mathbf{x}_t から予測されたスコア) を用いる形式 (書籍の式2.16)

の3通りで表現できることを示しています。これらはすべて等価な表現であり、モデルが何を予測ターゲットとするか(\mathbf{x}_0, \bm{\epsilon}, スコア)の選択肢を与えます。

以下ではしばらく、1.の再構成的な形式を念頭に置いて議論します。

そして、DDPMと同様にELBOを最大化する枠組みで考えると、最終的な目的関数は、各タイムステップ i (時刻 s_i から t_i へ) における \mathbf{x}_0 の予測誤差 ||\mathbf{x}_0 - \hat{\mathbf{x}}_{\bm{\theta}}(\mathbf{x}_{t_i}; t_i)||^2 に対して、SNR(s_i) - SNR(t_i) という重みが付いた形として表すことができます。

L_T(\mathbf{x}_0) = \frac{1}{2} \sum_{i=1}^T (SNR(s_i) - SNR(t_i)) \mathbb{E}_{\bm{\epsilon} \sim \mathcal{N}(\bm{0},\mathbf{I})} \left[ ||\mathbf{x}_0 - \hat{\mathbf{x}}_{\bm{\theta}}(\mathbf{x}_{t_i}; t_i)||^2 \right] \tag{2.15}

ここで

  • s_i < t_i であり、SNR(t) は単調減少するので SNR(s_i) - SNR(t_i) > 0 です。
  • \mathbf{x}_t = a(t)\mathbf{x}_0 + b(t)\bm{\epsilon} です。

この重みは、SNRが大きく変化する(つまりノイズレベルが大きく変わる)ステップほど、元のデータ \mathbf{x}_0 の予測精度を重視することを示唆しています。

2.3.3 連続時間モデル

拡散モデルの理論をさらに深めるために、時間ステップを離散的な t=0, 1, \dots, T から連続的な t \in [0, 1] へと拡張します。
このときに、拡散過程が確率微分方程式(SDE)によって一般的に記述できることは第3章で詳しく議論します。

この連続時間モデルの枠組みでは、目的関数は時刻 t における予測誤差の積分として表現されます。

\begin{aligned} L_\infty(\mathbf{x}_0) &= -\frac{1}{2} \mathbb{E}_{\bm{\epsilon} \sim \mathcal{N}(\bm{0},\mathbf{I}), t \sim U[0,1]} \left[ SNR'(t) ||\mathbf{x}_0 - \hat{\mathbf{x}}_{\bm{\theta}}(\mathbf{x}_t; t)||^2 \right] \\ &= -\frac{1}{2} \int_0^1 SNR'(t) \mathbb{E}_{\bm{\epsilon} \sim \mathcal{N}(\bm{0},\mathbf{I})} \left[||\mathbf{x}_0 - \hat{\mathbf{x}}_{\bm{\theta}}(\mathbf{x}_t; t)||^2 \right] dt \end{aligned} \tag{2.16}

ここで、\mathbf{x}_t = a(t)\mathbf{x}_0 + b(t)\bm{\epsilon} です。

元のデータ \mathbf{x}_0 と、時刻 t でのノイズ付きデータ \mathbf{x}_t から予測した \hat{\mathbf{x}}_{\bm{\theta}}(\mathbf{x}_t; t) との間の二乗誤差に対して、SNR(t) の時間微分 SNR'(t) に比例する重みを付けて積分した形になっています。

2.3.4 ノイズスケジュールによらず同じ解が得られる

Karrasら (2022) の研究 "Elucidating the Design Space of Diffusion-Based Generative Models" では、驚くべきことに、拡散モデルの学習は、具体的なノイズスケジュール(a(t), b(t) の選び方、つまりSDEの具体的な形)にあまり依存せず、主にSNRの範囲に依存することが示されました。つまり、時刻の両端 SNR_{min}=SNR(1), SNR_{max}=SNR(0) の2点のみに依存します。

具体的には、時刻 t の代わりに、SNRの対数 \lambda = \log SNR(t) を新たな「時刻(またはノイズレベル)」と見なして目的関数を書き換えると、その形式は元のノイズスケジュールにほとんど依存しなくなります。

これは、SBM(分散発散型拡散過程に対応)とDDPM(分散保存型拡散過程に対応)が、連続時間の極限では、本質的に同じ関数(時刻 \lambda に応じて適切なノイズ \bm{\epsilon} またはスコア \mathbf{s} を予測する関数)を学習していることを強く示唆しています。

したがって、学習の際には、SNRの範囲を適切にカバーすることが重要であり、具体的なスケジュールの選択は二次的な問題である可能性があります。

2.3.5 学習可能なノイズスケジュール

これまではノイズスケジュール \beta_t や、連続時間での a(t), b(t) を事前に固定していましたが、これらを学習可能なパラメータとすることも研究されています。例えば、Kingmaら (2021) "Variational Diffusion Models" では、ELBOを最大化するようにノイズスケジュール自体も学習する手法を提案しています。

これにより、データセットやモデル構造に対してより最適な拡散過程を自動的に見つけ出し、性能を向上させることが期待されます。具体的には、単調増加関数 \gamma_{\bm{\theta}}(t) をニューラルネットワークのパラメータ \bm{\theta} で特徴づけ、SNR(t) = \exp(-\gamma_{\bm{\theta}}(t)) のようにSNRを定義し、\gamma_{\bm{\theta}}(t) を学習します。

2.4 第2章のまとめ:拡散モデルの二大潮流とその融合

この章では、拡散モデルの代表的な2つのアプローチであるスコアベースモデル(SBM)とデノイジング拡散確率モデル(DDPM)について詳しく学びました。

  • SBM (NCSN):
    • 複数のノイズレベル \{\sigma_i\} を導入。
    • 各ノイズレベルで攪乱されたデータのスコア \mathbf{s}_{\bm{\theta}}(\tilde{\mathbf{x}}, \sigma_i) をDSMで学習。
    • アニールド・ランジュバン動力学を用いて、高ノイズレベルから低ノイズレベルへと徐々にサンプルを精緻化。
  • DDPM:
    • 固定された拡散過程 q(\mathbf{x}_t|\mathbf{x}_{t-1}) でデータ \mathbf{x}_0 をノイズ \mathbf{x}_T へ。
    • 学習可能な逆拡散(生成)過程 p_{\bm{\theta}}(\mathbf{x}_{t-1}|\mathbf{x}_t) でノイズからデータを復元。
    • 学習はELBO最大化、実質的には各時刻 t\mathbf{x}_t から加えられたノイズ \bm{\epsilon} を予測する \bm{\epsilon}_{\bm{\theta}}(\mathbf{x}_t, t) を訓練。

そして、これらのモデルは、一見異なる定式化をしているように見えても、本質的には「ノイズを加え、その影響を除去する」という共通の原理に基づいており、「シグナルノイズ比(SNR)」という概念を通じて統一的に理解できることを見ました。

この統一的理解は、次章で議論する連続時間拡散モデル(SDE)への橋渡しとなります。SDEを用いることで、ノイズスケジュールの選択やサンプリング方法がより柔軟になり、拡散モデルの理論的基盤が一層強固になります。

ここまでの流れのポイント:

  • SBMは複数ノイズレベルでスコアを学習し、アニールド・ランジュバン動力学でサンプリング。
  • DDPMは拡散過程でノイズを加え、逆拡散過程でノイズを除去するモデルを学習。学習はノイズ予測タスクに帰着。
  • SBMとDDPMは、ノイズスケジュールの設定や損失の重み付けは異なるが、本質的には同じ拡散・逆拡散の原理に基づいている。
  • シグナルノイズ比(SNR)が、両者を結びつける重要な概念。

次章では、これらのモデルを時間連続な枠組みへと拡張し、確率微分方程式(SDE)の世界へと足を踏み入れます。

第3章:確率微分方程式 (SDE) と拡散モデル

この章のゴール:
この章では、第2章で学んだ離散的な時間ステップで定義されていた拡散モデル(SBMやDDPM)を、時間的に連続な枠組みへと拡張します。そのための主要な数学的ツールが「確率微分方程式(Stochastic Differential Equations, SDEs)」です。SDEを用いることで、拡散過程と逆拡散過程を統一的に記述し、ノイズスケジュールの設計やサンプリング手法にさらなる柔軟性をもたらします。さらに、SDEから導かれる決定論的な「確率フロー常微分方程式(Probability Flow Ordinary Differential Equations, ODEs)」という概念も導入し、これが拡散モデルの理解と応用に新たな道を開くことを見ていきます。この章を通じて、拡散モデルの数学的基盤をより深く、そしてエレガントに捉えることを目指します。

3.1 確率微分方程式(SDE):ランダムネスを伴う変化を記述する

まず、確率微分方程式(SDE)とは何か、その基本的な形を見ていきましょう。
SDEは、時間の経過とともに状態が変化するシステムを記述する方程式ですが、その変化にランダムな要素(ノイズ)が含まれる場合に使われます。
一般的なSDEは以下のような形で書かれます。

d\mathbf{x}_t = \mathbf{f}(\mathbf{x}_t, t) dt + \mathbf{G}(\mathbf{x}_t, t) d\mathbf{w}_t \tag{3.1}

ここで、

  • \mathbf{x}_t \in \mathbb{R}^d は時刻 t におけるシステムの状態(d次元ベクトル)。
  • d\mathbf{x}_t は微小時間 dt の間の \mathbf{x}_t の変化量。
  • \mathbf{f}(\mathbf{x}_t, t): \mathbb{R}^d \times \mathbb{R}_{\ge 0} \to \mathbb{R}^d は「ドリフト係数」と呼ばれ、システムの決定論的な変化の方向と大きさを記述します。
  • \mathbf{G}(\mathbf{x}_t, t): \mathbb{R}^d \times \mathbb{R}_{\ge 0} \to \mathbb{R}^{d \times d} は「拡散係数」と呼ばれ、ランダムな変動の大きさを制御します。
  • d\mathbf{w}_t は「ウィーナー過程(Wiener Process)」または「ブラウン運動(Brownian Motion)」の微小変化量を表します。ウィーナー過程 \mathbf{w}_t は、平均が \bm{0} で、微小時間 dt の間に分散 dt \cdot \mathbf{I}\mathbf{I}は単位行列)だけ変化するようなランダムな過程です。つまり、d\mathbf{w}_t \sim \mathcal{N}(\bm{0}, dt \cdot \mathbf{I}) と考えることができます。

式 (3.1) は、状態 \mathbf{x}_t の微小変化 d\mathbf{x}_t が、決定論的なドリフト項 \mathbf{f}(\mathbf{x}_t, t)dt と、ランダムな拡散項 \mathbf{G}(\mathbf{x}_t, t)d\mathbf{w}_t の和で与えられることを意味しています。
SDEの解 \mathbf{x}_t は、初期値 \mathbf{x}_0 とドリフト・拡散係数によって定まりますが、ウィーナー過程のランダム性により、同じ初期値から出発しても異なる軌跡(パス)を描きます。

なお、拡散モデルで扱うSDEは、多くの場合、式 (3.1) の一般形から以下のように特殊化されます。
まず、ドリフト係数 \mathbf{f}(\mathbf{x}_t, t) は、状態 \mathbf{x}_t に対して線形であり、その比例係数が時間 t のみに依存するスカラー関数 f(t) であるとします。すなわち、\mathbf{f}(\mathbf{x}_t, t) = f(t)\mathbf{x}_t となります。
次に、拡散係数 \mathbf{G}(\mathbf{x}_t, t) は、状態 \mathbf{x}_t には依存せず、時間 t のみに依存するスカラー関数 g(t) によって決まる対角行列 g(t)\mathbf{\mathbf{I}} とします。ここで \mathbf{\mathbf{I}}d \times d の単位行列です。これは、ノイズが各次元で独立に、同じ強度 g(t) で加えられることを意味します。
これらの仮定を式 (3.1) に代入すると、次のSDEが得られます。

d\mathbf{x}_t = f(t) \mathbf{x}_t dt + g(t) d\mathbf{w}_t \tag{3.1改}

ここで、

  • f(t): \mathbb{R}_{\ge 0} \to \mathbb{R} は時間にのみ依存するスカラー値の関数。
  • g(t): \mathbb{R}_{\ge 0} \to \mathbb{R} は時間にのみ依存するスカラー値の関数。

この式 (3.1改) は、多くの拡散モデルで用いられる基本的なSDEの形であり、解析や実装が比較的容易になります。ドリフト項 f(t)\mathbf{x}_t dt がデータの平均的な構造を、拡散項 g(t)d\mathbf{w}_t が注入されるノイズの大きさを時間依存で制御します。以降の議論では基本的には一般的な式 (3.1) の場合で証明をしますが、必要に応じて式 (3.1改) を用います。

3.2 SBMとDDPMをSDEで表現する:連続時間への拡張

第2章で見たSBMやDDPMの拡散過程は、時間ステップを無限に小さくする極限を取ることで、特定の形のSDEとして表現することができます。

3.2.1 SBM (NCSN) と分散発散型SDE (VE-SDE)

SBM(特にNCSN)では、データに様々な強さのガウスノイズ \mathcal{N}(\bm{0}, \sigma_i^2 \mathbf{I}) を加えていました。
この過程を連続時間で考えると、時刻 t が進むにつれてノイズの分散 \sigma^2(t) が増加していくSDEに対応します。
具体的には、以下のようなSDEが考えられます(Song et al., 2020, SDE論文)。

d\mathbf{x}_t = \sqrt{\frac{d[\sigma^2(t)]}{dt}} d\mathbf{w}_t \tag{3.2}

ここで、\sigma^2(t) は時刻 t におけるノイズの分散で、t=0\sigma^2(0)=0(元データ \mathbf{x}_0)、t が大きくなるにつれて \sigma^2(t) も増加します。ドリフト項は \bm{0} です(f(t)=0 を仮定)。

このSDEは、分散が時間とともに大きくなっていくため、「分散発散型SDE(Variance Exploding SDE, VE-SDE)」と呼ばれます。

このSDEの解 \mathbf{x}_t は、\mathbf{x}_0 が与えられたとき、\mathbf{x}_t \sim \mathcal{N}(\mathbf{x}_0, \sigma^2(t)\mathbf{I}) となります。これは、SBMで各ノイズレベル \sigma_i でデータ \mathbf{x}_0\mathcal{N}(\bm{0}, \sigma_i^2 \mathbf{I}) のノイズを加えていた状況と整合します。

3.2.2 DDPM と分散保存型SDE (VP-SDE)

一方、DDPMの拡散過程 q(\mathbf{x}_t | \mathbf{x}_{t-1}) = \mathcal{N}(\mathbf{x}_t; \sqrt{1-\beta_t}\mathbf{x}_{t-1}, \beta_t \mathbf{I}) は、離散時間ステップを連続時間に移行すると、以下のようなSDEに対応します。

d\mathbf{x}_t = -\frac{1}{2}\beta(t)\mathbf{x}_t dt + \sqrt{\beta(t)}d\mathbf{w}_t \tag{3.3}

ここで、\beta(t) は時刻 t におけるノイズの増加率に関連する関数です(DDPMの離散的な \beta_t に対応)。
このSDEは、ドリフト項 -\frac{1}{2}\beta(t)\mathbf{x}_t dt が状態 \mathbf{x}_t を原点方向に引き戻す効果を持ち、拡散項 \sqrt{\beta(t)}d\mathbf{w}_t がノイズを加えます。

適切に \beta(t) を設定すると、\mathbf{x}_t の分散が(初期の短い時間を除いて)ほぼ一定に保たれるか、あるいは特定の範囲に収束するようになります。そのため、このSDEは「分散保存型SDE(Variance Preserving SDE, VP-SDE)」と呼ばれます。

このSDEの解 \mathbf{x}_t は、\mathbf{x}_0 が与えられたとき、\mathbf{x}_t \sim \mathcal{N}(\exp(-\frac{1}{2}\int_0^t \beta(s)ds)\mathbf{x}_0, (1-\exp(-\int_0^t \beta(s)ds))\mathbf{I}) のような形になります。これはDDPMの式 (2.6) q(\mathbf{x}_t|\mathbf{x}_0) = \mathcal{N}(\mathbf{x}_t; \sqrt{\bar{\alpha}_t}\mathbf{x}_0, (1-\bar{\alpha}_t)\mathbf{I}) と対応しており、\sqrt{\bar{\alpha}_t} = \exp(-\frac{1}{2}\int_0^t \beta(s)ds) となります。

VE-SDEとVP-SDEは、拡散モデルで用いられる代表的なSDEの二つのクラスです。これらを用いることで、離散的なノイズスケジュールに縛られず、連続的な時間軸上で拡散過程を柔軟に設計できます。

3.3 逆時間SDE:ノイズからデータを生成するSDE

拡散過程がSDE d\mathbf{x}_t = \mathbf{f}(\mathbf{x}_t, t) dt + \mathbf{G}(\mathbf{x}_t, t) d\mathbf{w}_t で記述されるとき、その逆拡散過程(時刻 T から 0 へと時間を遡り、ノイズ \mathbf{x}_T から元データ \mathbf{x}_0 を生成する過程)もまた、別のSDEで記述できることが知られています (Anderson, 1982)[8]

この「逆時間SDE(Reverse-Time SDE)」は、以下のような形を取ります。

\begin{aligned} d\mathbf{x}_t = &[\mathbf{f}(\mathbf{x}_t, t) - \nabla \cdot [\mathbf{G}(\mathbf{x}_t, t)\mathbf{G}(\mathbf{x}_t, t)^T] - [\mathbf{G}(\mathbf{x}_t, t)\mathbf{G}(\mathbf{x}_t, t)^T] \nabla_{\mathbf{x}_t} \log p_t(\mathbf{x}_t)] dt \\ &+ \mathbf{G}(\mathbf{x}_t, t) d\bar{\mathbf{w}}_t \end{aligned} \tag{3.4}

ここで、

  • d\mathbf{x}_t は時間を逆向きに(dt < 0)進めたときの \mathbf{x}_t の変化量。
  • p_t(\mathbf{x}_t) は時刻 t における \mathbf{x}_t の(周辺)確率密度。
  • \nabla_{\mathbf{x}_t} \log p_t(\mathbf{x}_t) は時刻 t における \mathbf{x}_t のスコア関数。
  • d\bar{\mathbf{w}}_t は逆向き時間のウィーナー過程。

また、拡散モデル用に簡略化された式 d\mathbf{x}_t = f(t) \mathbf{x}_t dt + g(t) d\mathbf{w}_t \quad (3.1改) の場合なら、上式は \mathbf{f}(\mathbf{x}_t, t)=f(t)\mathbf{x}_t, \mathbf{G}(\mathbf{x}_t, t)=g(t)\mathbf{\mathbf{I}} を代入することで以下のように簡略化されます。

d\mathbf{x}_t = [f(t)\mathbf{x}_t - g(t)^2 \nabla_{\mathbf{x}_t} \log p_t(\mathbf{x}_t)] dt + g(t) d\bar{\mathbf{w}}_t \tag{3.4改}

この逆時間SDEこそが生成過程であり、非常に重要です。
なぜなら、もし各時刻 t におけるスコア関数 \nabla_{\mathbf{x}_t} \log p_t(\mathbf{x}_t) を知っていれば(あるいはモデル \mathbf{s}_{\bm{\theta}}(\mathbf{x}_t, t) で近似できれば)、このSDEを数値的に解くことで、ノイズ \mathbf{x}_T \sim p_T(\mathbf{x}_T) (通常は \mathcal{N}(\bm{0},\mathbf{I}) など)から出発して、元データに近いサンプル \mathbf{x}_0 \sim p_0(\mathbf{x}_0)p_0p_{data} の近似)を生成できるからです。

実際には、真のスコア関数 \nabla_{\mathbf{x}_t} \log p_t(\mathbf{x}_t) は未知であるため、これを学習によって得られたスコアモデル \mathbf{s}_{\bm{\theta}}(\mathbf{x}_t, t) で近似します。この近似モデルを式 (3.4改) に代入すると、サンプリングに用いる具体的なSDEは次のように得られます。

d\mathbf{x}_t = [f(t)\mathbf{x}_t - g(t)^2 \mathbf{s}_{\bm{\theta}}(\mathbf{x}_t, t)] dt + g(t) d\bar{\mathbf{w}}_t \tag{3.5}

このSDE (3.5) を、オイラー・丸山法のような数値積分手法(SDEソルバー)を用いて、t=T から t=0 へと時間を遡る方向に解くことで、所望のデータを生成(SDEサンプリング)することができます。このアプローチは、ODEベースのサンプラー(後述の式 (3.8))と対比され、SDE特有の確率的な要素(d\bar{\mathbf{w}}_t)を含む生成パスを取ります。

SDEを用いた拡散と生成のプロセスを図5に概念的に示します。

図5:SDEによる拡散と逆時間SDEによる生成。順時間SDEでデータ分布はノイズ分布に滑らかに変化し、逆時間SDEでは学習したスコア関数を用いてノイズからデータを生成します。

これは、SBMでアニールド・ランジュバン動力学を用いていたことや、DDPMで逆ステップをモデル化していたことの、より一般的で連続的な表現と見なすことができます。

3.3.1 スコア関数の学習

前述のとおり逆時間SDE (3.5) を用いてサンプリングするためには、スコア関数 \nabla_{\mathbf{x}_t} \log p_t(\mathbf{x}_t) を学習する必要があります。

これは、第1章で学んだスコアマッチング(特にDSM)や、第2章でSBM/DDPMが見たノイズ予測の考え方を、連続時間のSDEに拡張することで実現できます。

SDE d\mathbf{x}_t = f(t)\mathbf{x}_tdt + g(t)d\mathbf{w}_t が与えられたとき、初期データ \mathbf{x}_0 \sim p_{data}(\mathbf{x}) から時刻 t までSDEを(仮想的に)動かして得られる \mathbf{x}_t の条件付き分布 p_{0t}(\mathbf{x}_t|\mathbf{x}_0) は、多くの場合ガウス分布 \mathcal{N}(\mathbf{x}_t; \bm{\mu}_t(\mathbf{x}_0), \Sigma_t) の形をしています(VE-SDEやVP-SDEではそうなります)。

このとき、条件付きスコア \nabla_{\mathbf{x}_t} \log p_{0t}(\mathbf{x}_t|\mathbf{x}_0) は解析的に計算できます(例えばガウス分布なら -\Sigma_t^{-1}(\mathbf{x}_t - \bm{\mu}_t(\mathbf{x}_0)))。

これを用いて、DSMと同様の目的関数でスコアモデル \mathbf{s}_{\bm{\theta}}(\mathbf{x}_t, t) を学習します。

\begin{aligned} &J_{SDE}(\bm{\theta}) \\ &= \mathbb{E}_{t \sim U(0,T)} \left[ \lambda(t)\mathbb{E}_{\mathbf{x}_0 \sim p_{data}(\mathbf{x})} \mathbb{E}_{\mathbf{x}_t \sim p_{0t}(\mathbf{x}_t|\mathbf{x}_0)} \left[ \left\| \mathbf{s}_{\bm{\theta}}(\mathbf{x}_t, t) - \nabla_{\mathbf{x}_t} \log p_{0t}(\mathbf{x}_t|\mathbf{x}_0) \right\|^2 \right] \right] \end{aligned} \tag{3.6}

ここで、\lambda(t) は時刻 t に依存する重み付け関数で、学習の安定性や生成品質に影響します。Song et al. (2020, SDE論文)では、\lambda(t) = g(t)^2 とすることが提案されています。これは、スコアのスケールと損失のスケールを適切に調整する役割があります。

驚くべきことに、この目的関数で学習された \mathbf{s}_{\bm{\theta}}(\mathbf{x}_t, t) は、条件付きスコア \nabla_{\mathbf{x}_t} \log p_{0t}(\mathbf{x}_t|\mathbf{x}_0) をターゲットにしているにも関わらず、結果として(周辺)スコア \nabla_{\mathbf{x}_t} \log p_t(\mathbf{x}_t) の良い近似を与えることが示されています。これはDSMが攪乱分布のスコアを学習できたのと同様の原理です。

学習されたスコアモデル \mathbf{s}_{\bm{\theta}}(\mathbf{x}_t, t) を用いた逆時間SDE (3.5) を、オイラー・丸山法などのSDEソルバーでシミュレーションすることで、サンプリングが可能になります。(具体的なサンプリングアルゴリズムは本記事では省略します。)

3.4 確率フローODE:決定論的な生成経路

SDEはランダムなウィーナー過程を含むため、同じ初期値から出発しても毎回異なるサンプルが生成されます。これは多様なサンプルを得る上では良いのですが、時には決定論的な生成経路が欲しい場合もあります(例えば、潜在空間での補間や、尤度を正確に計算したい場合など)。

驚くべきことに、任意のSDE d\mathbf{x}_t = \mathbf{f}(\mathbf{x}_t, t) dt + \mathbf{G}(\mathbf{x}_t, t) d\mathbf{w}_t \quad (3.1) に対して、それと全く同じ周辺確率分布 p_t(\mathbf{x}_t) の時間発展を与えるような、対応する常微分方程式(ODE)が存在すること(書籍ではこの事実を丁寧に証明していますが、本記事では省略)が知られています。このODEは「確率フローODE(Probability Flow ODE)」と呼ばれます。

式 (3.1) に対応する確率フローODEは以下の形で与えられます。

d\mathbf{x}_t = \left[ \mathbf{f}(\mathbf{x}_t, t) - \frac{1}{2} g(t)^2 \nabla_{\mathbf{x}_t} \log p_t(\mathbf{x}_t) \right] dt \tag{3.7}

このODEにはランダムなウィーナー項 d\mathbf{w}_t が含まれていないことに注目してください。つまり、このODEは決定論的です。初期値 \mathbf{x}_0 を与えれば、解の軌道 \mathbf{x}_t は一意に定まります。
このODEを時刻 0 から T まで解くと、データ \mathbf{x}_0 はノイズ \mathbf{x}_T へと決定論的に変換されます。逆に、時刻 T から 0 へと(時間を逆向きに)解くと、ノイズ \mathbf{x}_T からデータ \mathbf{x}_0 へと決定論的に復元されます。

ここでも、スコア関数 \nabla_{\mathbf{x}_t} \log p_t(\mathbf{x}_t) が鍵となっています。スコアモデル \mathbf{s}_{\bm{\theta}}(\mathbf{x}_t, t) でこれを近似すれば、以下のODEを数値的に解くことでデータ生成が可能です。

d\mathbf{x}_t = \left[ \mathbf{f}(\mathbf{x}_t, t) - \frac{1}{2} g(t)^2 \mathbf{s}_{\bm{\theta}}(\mathbf{x}_t, t) \right] dt \tag{3.8}

3.4.1 確率フローODEの利点

確率フローODEを用いることには、いくつかの重要な利点があります。

  1. 決定論的サンプリング: ODEソルバー(例えばルンゲ・クッタ法など)を用いることで、高速かつ安定したサンプリングが可能です。SDEソルバーよりも少ないステップ数で高品質なサンプルが得られることが多いです。決定論的な生成パスのイメージを図6に示します。

    図6:確率フローODEによる決定論的な生成パス。各初期ノイズ \mathbf{x}(T) は、確率フローODEによって一意のデータサンプル \mathbf{x}(0) へと写像されます(可逆変換)。

  2. 正確な尤度計算: ODEは状態空間の体積変化を伴う可逆な変換を定義するため、変数変換の公式を用いて、元データの尤度 p_0(\mathbf{x}_0) を、対応するノイズ \mathbf{x}_T の既知の尤度 p_T(\mathbf{x}_T) (例えば正規分布の尤度)とヤコビアンの行列式から正確に計算することができます[9]

    \log p_0(\mathbf{x}_0) = \log p_T(\mathbf{x}_T(\mathbf{x}_0)) + \int_0^T \nabla_{\mathbf{x}_t} \cdot \left( \mathbf{f}(\mathbf{x}_t, t) - \frac{1}{2}g(t)^2 \mathbf{s}_{\bm{\theta}}(\mathbf{x}_t,t) \right) dt

    ここで \nabla_{\mathbf{x}_t} \cdot (\dots) は発散(divergence)で、ヤコビアンのトレースに相当します。この積分内の発散項の計算には、Hutchinsonのトレース推定量などが用いられます。

  3. 潜在空間の操作: データ \mathbf{x}_0 とノイズ \mathbf{x}_T がODEによって一対一に対応付けられるため、\mathbf{x}_T の空間(潜在空間)で補間を行ったり、意味のある操作をしたりすることが容易になります。

3.5 SDEとODEを用いた拡散モデルの一般的な枠組み

これまでの議論をまとめると、SDEとODEを用いた拡散モデルは以下のような一般的な枠組みで捉えることができます。

  1. 順時間SDEの選択: まず、データ \mathbf{x}_0 をノイズ \mathbf{x}_T へと変換する拡散過程を記述するSDE d\mathbf{x}_t = f(t)\mathbf{x}_tdt + g(t)d\mathbf{w}_t を選択します(例:VE-SDE, VP-SDE)。
  2. スコアモデルの学習: 選択したSDEに基づき、各時刻 t におけるスコア関数 \nabla_{\mathbf{x}_t} \log p_t(\mathbf{x}_t) を近似するニューラルネットワーク \mathbf{s}_{\bm{\theta}}(\mathbf{x}_t, t) を、目的関数 (3.6) などを用いて学習します。
  3. サンプリング:
    • SDEサンプラー: 学習した \mathbf{s}_{\bm{\theta}}(\mathbf{x}_t, t) を用いて、対応する逆時間SDE (3.5) を数値的に解き、ノイズ \mathbf{x}_T からサンプル \mathbf{x}_0 を生成します。
    • ODEサンプラー: 学習した \mathbf{s}_{\bm{\theta}}(\mathbf{x}_t, t) を用いて、対応する確率フローODE (3.8) を(時間を逆向きに)数値的に解き、ノイズ \mathbf{x}_T からサンプル \mathbf{x}_0 を生成します。ODEサンプラーは、より少ない評価回数で高品質なサンプルを生成できる傾向があります。

このSDE/ODEベースの枠組みは、SBMやDDPMを特殊なケースとして含みつつ、より広範で柔軟な拡散モデルの設計を可能にします。例えば、異なるSDEを選んだり、ODEソルバーのテクニックを応用したりすることで、生成品質やサンプリング速度を改善する研究が活発に行われています。

3.6 拡散モデルの持つ特徴(SDE/ODEの視点から)

SDE/ODEの視点から見ると、拡散モデルがなぜこれほど成功しているのか、その特徴がより明確になります。

  1. モードカバー能力: 拡散過程でデータ分布全体が滑らかなノイズ分布に変換されるため、(固定された)認識モデルは原理的にデータ分布の全てのモードを捉えます。
    • これに対しGANやVAEなどの従来の潜在変数モデルでは、認識モデルが事後分布のすべてのモードをカバーできず、一部しかカバーしないモード崩壊(事後崩壊)が起きることが少なくないです。
  2. 学習の安定性: スコアマッチングの目的関数は、GANのような敵対的学習に比べて安定して最適化しやすいとされています。
  3. 複雑な問題を簡単な部分問題に分解:
    • 周波数成分の分解: 拡散過程は、高周波成分から低周波成分へと徐々に情報を破壊していくと解釈できます。逆拡散過程では、まず低周波の大まかな構造を生成し、次に高周波の詳細を加えていく、という階層的な生成を行います。
    • 時間ステップごとの単純化: 各時刻 t でのスコア/ノイズ予測は、比較的単純な(局所的な)タスクであり、これを多数積み重ねることで複雑なデータ生成を実現します。
  4. 条件付けの容易さ: スコア関数 \nabla_\mathbf{x} \log p(\mathbf{x}|y) は、ベイズの定理から \nabla_\mathbf{x} \log p(\mathbf{x}) + \nabla_\mathbf{x} \log p(y|\mathbf{x}) のように分解できる場合があり、条件 y を組み込みやすい構造をしています(詳細は第4章)。
  5. 対称性の組み込み: データやタスクが持つ対称性(例えば、画像の並進不変性や分子の回転不変性)を、スコアモデル \mathbf{s}_{\bm{\theta}}(\mathbf{x}_t,t) の設計に反映させることで、学習効率や汎化性能を向上させることができます(詳細は第4章)。

一方で、SDE/ODEベースの拡散モデルにも課題は残っています。

  1. サンプリング速度: SDE/ODEを数値的に解くには、多数の関数評価(スコアモデルの推論)が必要となり、サンプリングに時間がかかる場合があります。ODEサンプラーや専用の高速化手法の研究が進んでいます。
  2. 汎化メカニズムの完全な理解: なぜ拡散モデルがこれほど多様で高品質なサンプルを生成できるのか、その汎化能力の理論的な解明はまだ途上にあります。

3.7 第3章のまとめ:連続時間への飛躍とその恩恵

この章では、拡散モデルの理論を時間連続な枠組みへと拡張し、確率微分方程式(SDE)と確率フロー常微分方程式(ODE)という強力な数学的ツールを導入しました。

  • SBMやDDPMといった離散時間モデルは、それぞれVE-SDEやVP-SDEという連続時間SDEの離散化として捉え直すことができます。
  • 任意のSDEに対して、その逆拡散過程を記述する逆時間SDEが存在し、これはスコア関数 \nabla_{\mathbf{x}_t} \log p_t(\mathbf{x}_t) を用いてサンプリングを可能にします。
  • スコア関数は、連続時間版のDSMのような目的関数で学習できます。
  • さらに、各SDEには対応する決定論的な確率フローODEが存在し、これは高速なサンプリング、正確な尤度計算、潜在空間操作といった利点をもたらします。

このSDE/ODEベースの統一的な視点は、拡散モデルの設計と解析に大きな柔軟性と深い洞察を与えてくれます。
次章では、この強力な基盤の上に、拡散モデルをさらに発展させるための様々な技術(条件付き生成、効率化、対称性の考慮など)を見ていきます。

ここまでの流れのポイント:

  • SDEはランダムな変化を記述する方程式。VE-SDEとVP-SDEが拡散モデルで重要。
  • 逆時間SDEは、スコア関数を使ってノイズからデータを生成する経路を記述。
  • スコア関数は連続時間版DSMで学習可能。
  • 確率フローODEは、SDEに対応する決定論的な方程式。高速サンプリングや尤度計算に有利。
  • SDE/ODEフレームワークは、拡散モデルの柔軟性と理解を深める。

第4章:条件付け、効率化、対称性

この章のゴール:
前章までで、拡散モデルの基本的な理論(SBM、DDPM)とそのSDE/ODEによる連続時間表現を学びました。この章では、これらの基礎の上に、拡散モデルの性能をさらに向上させ、応用範囲を広げるための重要な「発展」について解説します。具体的には、ユーザーの意図を反映したデータを生成するための「条件付き生成」、計算コストを削減し実用性を高めるための「効率化」、そして特定のデータ構造が持つ「対称性」をモデルに組み込む手法に焦点を当てます。これらの発展が、拡散モデルを単なる学術的な興味から、実社会で広く利用される強力なツールへと押し上げた原動力となっています。

4.1 条件付き生成:意のままにデータを創り出す

これまでの議論では、主に訓練データ全体の分布 p(\mathbf{x}) を学習し、そこから無条件に新しいサンプルを生成する「無条件生成(Unconditional Generation)」を扱ってきました。しかし、多くの実用的な応用では、何らかの条件 y (例えば、テキスト記述、画像カテゴリ、参照画像など)に基づいて、その条件に合ったデータ \mathbf{x} を生成する「条件付き生成(Conditional Generation)」p(\mathbf{x}|y) が求められます。

拡散モデルは、そのスコアベースの性質から、条件付き生成を比較的自然に実現できます。基本的には、無条件のスコア \nabla_\mathbf{x} \log p_t(\mathbf{x}) の代わりに、条件付きスコア \nabla_\mathbf{x} \log p_t(\mathbf{x}|y) を学習または推定し、これを逆時間SDEや確率フローODEのサンプリングに用いればよいのです。

4.1.1 分類器ガイダンス(Classifier Guidance)

条件付きスコア \nabla_\mathbf{x} \log p_t(\mathbf{x}|y) を得るための一つのアプローチが「分類器ガイダンス(Classifier Guidance)」です (Dhariwal & Nichol, 2021)[10]
まず、ベイズの定理を用いると、条件付き対数尤度は以下のように分解できます。

\log p_t(\mathbf{x}|y) = \log p_t(y|\mathbf{x}) + \log p_t(\mathbf{x}) - \log p_t(y)

この両辺を \mathbf{x} で微分すると(\log p_t(y)\mathbf{x} に依存しないので消える)、

\nabla_\mathbf{x} \log p_t(\mathbf{x}|y) = \nabla_\mathbf{x} \log p_t(y|\mathbf{x}) + \nabla_\mathbf{x} \log p_t(\mathbf{x}) \tag{4.1}

となります。ここで、

  • \nabla_\mathbf{x} \log p_t(\mathbf{x}) は、無条件拡散モデル(例えばSBMやDDPM)で学習したスコア \mathbf{s}_{\bm{\theta}}(\mathbf{x},t) です。
  • \nabla_\mathbf{x} \log p_t(y|\mathbf{x}) は、ノイズが乗ったデータ \mathbf{x}_t (ここでは \mathbf{x} と表記) から条件 y を予測する分類器 p_t(y|\mathbf{x}) の入力 \mathbf{x} に関する勾配です。この分類器は、拡散モデルとは別に、ノイズの乗ったデータで訓練する必要があります。

つまり、無条件スコア \mathbf{s}_{\bm{\theta}}(\mathbf{x},t) に、分類器の勾配 \nabla_\mathbf{x} \log p_t(y|\mathbf{x}) を加えることで、条件付きスコアを近似的に得ることができます。

さらに、分類器の勾配の寄与を調整するガイダンススケール \gamma > 0 を導入し、

\nabla_\mathbf{x} \log \hat{p}_t(\mathbf{x}|y) = \mathbf{s}_{\bm{\theta}}(\mathbf{x},t) + \gamma \nabla_\mathbf{x} \log p_t(y|\mathbf{x}) \tag{4.2}

として、この調整後のスコアをサンプリングに用います。\gamma > 1 とすると、条件 y への忠実度を高める効果があり(ただし、多様性が損なわれる可能性もある)、\gamma = 0 なら無条件生成に戻ります。

分類器ガイダンスの利点と課題:

  • 利点: 既存の無条件拡散モデルに、後から分類器を追加するだけで条件付き生成が可能になる。
  • 課題:
    • ノイズレベルごとに頑健な分類器 p_t(y|\mathbf{x}) を別途訓練する必要があり、手間とコストがかかる。
    • 分類器の勾配計算が不安定になることがある。

4.1.2 分類器無しガイダンス(Classifier-Free Guidance)

分類器ガイダンスの課題を解決するために提案されたのが、「分類器無しガイダンス(Classifier-Free Guidance)」です (Ho & Salimans, 2022)[11]。これは現在、拡散モデルによる条件付き生成の主流な手法となっています。

分類器無しガイダンスの巧妙な点は、単一のニューラルネットワークで、条件付きスコア \mathbf{s}_{\bm{\theta}}(\mathbf{x},t,y) と無条件スコア \mathbf{s}_{\bm{\theta}}(\mathbf{x},t,\varnothing) の両方を学習することです。ここで \varnothing は「条件なし」を表す特別なトークンです。
学習時、一定の確率(例えば10-20%)で条件 y をこの \varnothing トークンに置き換えてモデルを訓練します。
これにより、モデルは \mathbf{s}_{\bm{\theta}}(\mathbf{x},t,y) \approx \nabla_\mathbf{x} \log p_t(\mathbf{x}|y)\mathbf{s}_{\bm{\theta}}(\mathbf{x},t,\varnothing) \approx \nabla_\mathbf{x} \log p_t(\mathbf{x}) の両方を同時に学習することになります。

サンプリング時には、これらの学習済みスコアを用いて、以下のように目的のスコアを合成します。

\hat{s}_{\bm{\theta}}(\mathbf{x},t,y) = (1+w)\mathbf{s}_{\bm{\theta}}(\mathbf{x},t,y) - w \mathbf{s}_{\bm{\theta}}(\mathbf{x},t,\varnothing) \tag{4.3}

または、しばしば次のような形が用いられます。

\hat{s}_{\bm{\theta}}(\mathbf{x},t,y) = \mathbf{s}_{\bm{\theta}}(\mathbf{x},t,\varnothing) + w (\mathbf{s}_{\bm{\theta}}(\mathbf{x},t,y) - \mathbf{s}_{\bm{\theta}}(\mathbf{x},t,\varnothing)) \tag{4.4}

分類器無しガイダンスによるスコア合成のプロセスを図7に示します。

図7:分類器無しガイダンスの概念図。条件付きスコアと無条件スコアを学習した単一モデルを用い、サンプリング時にそれらをガイダンススケール w で合成して最終的なスコアを得ます。

w=0 なら無条件生成 \mathbf{s}_{\bm{\theta}}(\mathbf{x},t,\varnothing) になり、w > 0 で条件 y の影響を強めます。

ここで、w はガイダンススケール(分類器ガイダンスの \gamma に似た役割)です。w=0 なら無条件生成 \mathbf{s}_{\bm{\theta}}(\mathbf{x},t,\varnothing) になり、w > 0 で条件 y の影響を強めます。
なぜこの式がうまくいくのでしょうか?

\log p_t(\mathbf{x}|y) = \log p_t(\mathbf{x}) + \log \frac{p_t(y|\mathbf{x})}{p_t(y)} の両辺を \mathbf{x} で微分すると、
\nabla_\mathbf{x} \log p_t(\mathbf{x}|y) = \nabla_\mathbf{x} \log p_t(\mathbf{x}) + \nabla_\mathbf{x} \log \frac{p_t(y|\mathbf{x})}{p_t(y)} です。

さらに、\mathbf{s}_{\bm{\theta}}(\mathbf{x},t,y) \approx \nabla_\mathbf{x} \log p_t(\mathbf{x}|y)\mathbf{s}_{\bm{\theta}}(\mathbf{x},t,\varnothing) \approx \nabla_\mathbf{x} \log p_t(\mathbf{x}) を代入し移項すると、
\mathbf{s}_{\bm{\theta}}(\mathbf{x},t,y) - \mathbf{s}_{\bm{\theta}}(\mathbf{x},t,\varnothing) \approx \nabla_\mathbf{x} \log \frac{p_t(y|\mathbf{x})}{p_t(y)} となり、これは実質的に分類器の勾配のような役割を果たす項です。

式 (4.4) は、無条件スコアに、この「暗黙的な分類器勾配」を w 倍して加えている形になっており、分類器ガイダンスの式 (4.2) と構造的に似ています。

分類器無しガイダンスの利点:

  • 別途分類器を訓練する必要がない。単一モデルで実現可能。
  • 学習とサンプリングが比較的安定している。
  • ガイダンススケール w を調整することで、生成されるサンプルの忠実度と多様性のトレードオフを制御できる。

この手法は、DALL-E 2やImagen、Stable Diffusionといった最先端のテキスト画像生成モデルで広く採用されています。

4.2 効率化:より速く、より軽く

拡散モデルの大きな課題の一つは、サンプリングに多数のステップ(典型的には数百~数千)が必要で、時間がかかる点です。また、高次元データを直接扱うため、モデルサイズやメモリ消費も大きくなりがちです。これらの問題を解決するための研究も活発に行われています。

4.2.1 高速サンプリング手法

  • DDIM (Denoising Diffusion Implicit Models): Song et al. (2020) によって提案されたDDIMは、DDPMの確率的な逆拡散過程を、対応する(非マルコフ的な)決定論的な生成過程に置き換えることで、より少ないステップ数(例えば20~50ステップ)で高品質なサンプリングを可能にしました[12]

    DDIMの詳細

    DDPMの生成過程が p_{\bm{\theta}}(\mathbf{x}_{t-1}|\mathbf{x}_t) であったのに対し、DDIMは \mathbf{x}_0 を直接予測し、それを用いて \mathbf{x}_{t-1} を決定論的に計算するような更新式を用います。これは実質的に確率フローODEの離散化の一種と見なせます。

    DDIMの更新式(簡略版):
    \mathbf{x}_0^{(t)} = \frac{1}{\sqrt{\bar{\alpha}_t}}(\mathbf{x}_t - \sqrt{1-\bar{\alpha}_t}\bm{\epsilon}_{\bm{\theta}}(\mathbf{x}_t,t)) (現在の\mathbf{x}_tから\mathbf{x}_0を推定)
    \mathbf{x}_{t-1} = \sqrt{\bar{\alpha}_{t-1}}\mathbf{x}_0^{(t)} + \sqrt{1-\bar{\alpha}_{t-1}-\sigma_t^2}\bm{\epsilon}_{\bm{\theta}}(\mathbf{x}_t,t) + \sigma_t \mathbf{u}
    ここで、\sigma_t の値を調整することで、確率的なサンプリング(DDPMに近い)と決定論的なサンプリング(ODEに近い)の間を補間できます。\sigma_t=0 とすると完全に決定論的になります。

  • その他のODEソルバーの活用: 確率フローODEは様々な数値解法(ルンゲ=クッタ法など)で解くことができ、SDEソルバーよりも少ないステップ数で高精度な解が得られる場合があります。

  • 知識蒸留(Knowledge Distillation): 多数のステップで学習した教師モデル(teacher model)の挙動を、より少ないステップで動作する生徒モデル(student model)に模倣させることで、サンプリングを高速化する試みもあります (Progressive Distillationなど)。

4.2.2 潜在拡散モデル(Latent Diffusion Models)

高次元データ(特に画像)を直接拡散モデルで扱うと、計算コスト(時間とメモリ)が非常に大きくなります。この問題を軽減するために提案されたのが「潜在拡散モデル(Latent Diffusion Models, LDM)」です (Rombach et al., 2022, Stable Diffusionの元論文)[13]

LDMのアーキテクチャを図8に示します。

図8:潜在拡散モデル(LDM)のアーキテクチャ。高次元データをオートエンコーダで低次元潜在空間に圧縮し、その潜在空間内で拡散モデルを学習・実行します。

LDMのアイデアは、

  1. まず、VAE(変分オートエンコーダ)やVQ-VAEのような強力なオートエンコーダを用いて、高次元の元データ \mathbf{x}(例:画像空間)を、より低次元の潜在空間 \mathbf{z} へと圧縮します (\mathbf{z} = E(\mathbf{x}))。この潜在空間は、元データの主要な情報を保持しつつ、次元が大幅に削減されています。
  2. 次に、この低次元の潜在空間 \mathbf{z} の中で拡散モデルを学習します。つまり、\mathbf{z} に対してノイズを加え、そのスコアやノイズを予測するモデルを訓練します。
  3. サンプリング時には、潜在空間で拡散モデル(逆拡散過程)を実行して潜在変数 \mathbf{z}_{sample} を生成し、最後にオートエンコーダのデコーダ D(\cdot) を用いて元データ空間のサンプル \mathbf{x}_{sample} = D(\mathbf{z}_{sample}) を復元します。

オートエンコーダによる次元削減のおかげで、拡散モデルが扱うデータの次元が小さくなり、計算コストを大幅に削減できます。それでいて、強力なデコーダを用いることで、高品質な画像を生成することが可能です。
Stable DiffusionはこのLDMのアーキテクチャを採用しており、テキスト条件付けも潜在空間で行うことで、比較的少ない計算資源でも高解像度の画像生成を実現しています。

なお、書籍ではもう1つのアプローチである部分空間拡散モデルについても詳細に述べられていますが、本記事では省略します。

4.3 対称性を考慮した拡散モデル:構造を活かす

多くのデータには、何らかの「対称性(Symmetry)」や「不変性(Invariance)」、「同変性(Equivariance)」が存在します。これらの概念を感覚的に捉えてみましょう。

  • 不変性 (Invariance):
    データに対してある操作(例えば、画像の平行移動)をしても、モデルの出力(例えば、画像が「猫」であるという分類結果)が変わらない性質です。

    • 例:画像分類タスクをCNNで解く場合、画像中の猫が少し右にずれても「猫」と認識されるのは、並進不変性をモデルが(ある程度)学習しているためです。
    • 例:株価変動などの時系列データをRNNで処理する場合、分析の開始時刻が異なっても同じパターンが見いだせるのは、時間移動不変性を仮定しているためです。
  • 同変性 (Equivariance):
    データに対してある操作をすると、モデルの出力もそれに対応して同じように変化する性質です。入力の変換が出力の変換に「追従」するイメージです。

    • 例:画像セグメンテーション(画像内の各ピクセルがどの物体に属するかを識別するタスク)で、入力画像を回転させると、出力されるセグメンテーションマップも同じように回転する場合、モデルは回転同変性を持ちます。
    • 例:グラフデータにおいて、ノードのラベリング順序を変えてもグラフの構造は変わらないことを置換同変性といいます。モデルがノードの埋め込みベクトルを計算する際、入力のノード順序が変われば出力の埋め込みベクトルの順序も対応して変わるが、各ノードに対応する埋め込みベクトル自体は(相対的な関係性を保ったまま)同じになるような性質です。
  • 対称性 (Symmetry):
    不変性や同変性を含む、より広範な概念です。ある操作に対して、対象の何らかの性質が変わらないことを指します。

このような対称性をモデル設計に組み込むことで、学習効率が向上したり、より妥当な(物理法則に合致するなど)サンプルが生成されたりすることが期待できます。

(なお、対称性、不変性、同変性の数式を用いた厳密な定義は本記事では省略します。)

拡散モデルにおいてもスコア関数 \mathbf{s}_{\bm{\theta}}(\mathbf{x},t) やノイズ予測関数 \bm{\epsilon}_{\bm{\theta}}(\mathbf{x},t) が、入力 \mathbf{x} に対する特定の種類の変換に対して同変であるように設計できれば、生成されるサンプルの分布もその対称性を保つことが期待されます。

4.3.2 分子構造生成への応用

例えば、3次元空間における原子座標の集合として表現される分子構造を生成する場合を考えます。分子の物理的特性は、分子全体を平行移動したり回転したりしても変わりません。
このようなSE(3)同変性(3次元特殊ユークリッド群:平行移動と回転の組み合わせ)を考慮した拡散モデルが研究されています (e.g., G-SDE, E(3)-Equivariant Diffusion Models)[14][15]

基本的なアイデアは、

  1. 拡散過程: 分子座標 \mathbf{x}_0 にSE(3)同変な方法でノイズを加えていく。例えば、各原子の座標に独立なガウスノイズを加える過程は、平行移動に対しては同変ですが、回転に対しては同変ではありません。しかし、重心を原点に固定したり、ノイズの加え方を工夫することで、全体の分布がSE(3)不変なノイズ(例えば、全ての原子座標が独立な等方性ガウスノイズに従うなど)に収束するように設計できます。
  2. スコア/ノイズ予測モデル: スコア関数 \mathbf{s}_{\bm{\theta}}(\mathbf{x}_t, t) やノイズ予測関数 \bm{\epsilon}_{\bm{\theta}}(\mathbf{x}_t, t) のニューラルネットワークアーキテクチャを、SE(3)同変性を持つように設計します。これには、同変なメッセージパッシングニューラルネットワーク(例:EGNN, SchNet)などが用いられます。これにより、入力座標 \mathbf{x}_t が回転・平行移動されても、出力されるスコアベクトル(またはノイズベクトル)も同じように回転・平行移動されるようになります。
  3. 逆拡散(生成)過程: この同変なスコア/ノイズ予測モデルを用いて逆時間SDE(またはODE)を解くことで、生成される分子座標もSE(3)対称性を満たす(つまり、どの向きで生成されても統計的に等価である)ことが期待されます。

このような対称性を考慮した拡散モデルは、より物理的に妥当な分子構造の生成や、少ないデータでの効率的な学習に貢献すると考えられています。

4.4 第4章のまとめ:拡散モデルの表現力と実用性の向上

この章では、拡散モデルをより強力で実用的なものにするための3つの主要な発展方向について学びました。

  1. 条件付き生成:
    • 分類器ガイダンス:外部の分類器の勾配を利用して条件付け。
    • 分類器無しガイダンス:単一モデルで条件付き・無条件スコアを学習し、合成してサンプリング。現在の主流。
  2. 効率化:
    • 高速サンプリング:DDIMなどの決定論的(またはそれに近い)サンプラーやODEソルバーの活用。
    • 潜在拡散モデル(LDM):オートエンコーダで低次元潜在空間に圧縮し、そこで拡散モデルを学習することで計算コストを削減。Stable Diffusionの基盤技術。
  3. 対称性の考慮:
    • データの持つ対称性(特に同変性)をスコア/ノイズ予測モデルの設計に組み込むことで、学習効率の向上やより妥当なサンプルの生成を目指す。分子構造生成などで重要。

これらの発展により、拡散モデルは、単に高品質なデータを生成できるだけでなく、ユーザーの意図に沿った生成、計算資源の制約下での利用、そして特定のドメイン知識の組み込みといった、より幅広い要求に応えられるようになってきました。

おわりに

本記事では、拡散モデルの数理的エッセンスを、要点を辿りながら探ってきました。

  • 第1章では、生成モデルの基礎を学び、スコア関数とスコアマッチングという重要な概念を手に入れました。
  • 第2章では、SBMとDDPMという二つのアプローチが、シグナルノイズ比という共通の原理で統一的に理解できることを発見しました。
  • 第3章では、SDEとODEを用いた連続時間の定式化により、拡散モデルの理論的な深さを垣間見ました。
  • 第4章では、条件付き生成、効率化、対称性といった実用的な発展により、拡散モデルがより強力になる仕組みを理解しました。

ただし、これらはあくまで岡野原 大輔氏の著書「拡散モデル データ生成技術の数理」の入り口に過ぎません。実際の書籍には、厳密な数学的導出、詳細な理論展開、そして実装に役立つ具体的な知見が豊富に盛り込まれています。

特に以下のような方にとって、本書は貴重な情報源となるでしょう。

  • 拡散モデルの数学的仕組みを根本から理解したい研究者や学生の方、
  • SBM、DDPM、SDE/ODEベースの手法の関係性を明確に把握したい方、
  • 条件付けや高速化技術の基礎を学びたいエンジニアの方、
  • そして、自身のプロジェクトに拡散モデルを応用したいと考えている実践者の方。

ノイズから意味のあるデータを生成するという、一見不可思議な技術の背後には、美しく整合性のとれた数学的構造が存在します。その全貌を理解することで、きっと新たな視点や応用のアイデアが生まれることでしょう。

本記事が、皆様にとって拡散モデルのより深い世界への案内役となり、本書との出会いへの橋渡しとなれば幸いです。

関連リソース

本記事でスコアマッチングと確率微分方程式を理解した直後に参照すると、2023年以降に登場した拡散モデルの高速化・一般化パラダイム(Consistency/Flow Matching/Rectified Flow)が一気に俯瞰できるようになります。

記事

  • Consistency Models: 1〜4stepsで画像が生成できる、新しいスコアベース生成モデル(Zenn
    拡散モデルから“数ステップ生成”へ向かうアイデアである一貫性損失(Consistency Loss)の導入と実装例を日本語で丁寧に解説。まずはここで高速化の基本概念を押さえます。

  • Latent Consistency Model による蒸留を試してみた(note
    Stable Diffusion を LCM で蒸留し、4 ステップ前後で画像を出力する手順をスクリーンショット付きで公開。1本目で学んだ理論を、手元で実際に動かすのを追体験できます。

  • 要約:Flow Matching for Generative Modeling (Part 1)(Qiita
    “フロー”というより一般的な枠組みを、定理の証明まで掘り下げて日本語で整理。Consistency の次に読むと、拡散モデルを包含する連続ベクトル場の視点へスムーズに接続できます。

  • Flow Matching Guide and Code(arXiv
    フローマッチングの実装付きの包括的なガイドが示されています。

  • Optimal Transport Conditional Flow Matching – 拡散モデルに取って代わる次世代の生成技術?(Zenn
    Flow Matching を最適輸送で正則化し、条件付き生成まで扱う発展形 OT-CFM を解説。前項の基礎を実装レベルでどう拡張するかを学べます。

  • Rectified Flow ①(Zenn
    “直線フロー”を学習して 1 step 生成に迫る最新理論を図解。Flow Matching 系を踏まえた上で読むことで、直線経路の意義と高速化の極限に納得できます。

Youtube動画

  • 【AI論文解説】Consistency ModelsとRectified Flow ~解説編Part1~(YouTube
    Consistency Models と Rectified Flow に関する最新の研究動向を、スライドとともに解説した動画です。理論的背景や実装のポイントを視覚的に理解できます。

  • 【AI論文解説】拡散モデルと自己回帰型モデルの融合 Part1(YouTube
    拡散モデルと自己回帰型モデルの融合に関する論文を紹介し、それぞれのモデルの特徴や統合の意義について解説しています。

実装チュートリアル

  • Hugging Face Diffusion Models Course (Hugging Face)
    拡散モデルの理論から、🤗 Diffusers ライブラリを用いた画像・音声生成、独自モデルの訓練やファインチューニング、条件付き生成、カスタムパイプラインの構築までを網羅した無料のオンラインコースです。Python、深層学習、PyTorchの基礎知識がある方を対象としています。

  • 02_diffusion_models_from_scratch.ipynb (Colab)
    上記Hugging Face Diffusion Models Courseのユニット1に含まれるColabノートブックです。原始的な拡散モデルとDDPMをそれぞれスクラッチで実装することを通じて、ノイズ付加プロセス、U-Netアーキテクチャ、学習方法、サンプリング理論といった拡散モデルの実践的な要素を詳細に学ぶことができます。

脚注
  1. \nabla_{\bm{\theta}} Z(\bm{\theta}) = \nabla_{\bm{\theta}} \int \exp(-E_{\bm{\theta}}(\mathbf{x})) d\mathbf{x} = \int \nabla_{\bm{\theta}} \exp(-E_{\bm{\theta}}(\mathbf{x})) d\mathbf{x} = \int \exp(-E_{\bm{\theta}}(\mathbf{x})) (-\nabla_{\bm{\theta}} E_{\bm{\theta}}(\mathbf{x})) d\mathbf{x}. これを Z(\bm{\theta}) で割ると、\frac{1}{Z(\bm{\theta})} \int \exp(-E_{\bm{\theta}}(\mathbf{x})) (-\nabla_{\bm{\theta}} E_{\bm{\theta}}(\mathbf{x})) d\mathbf{x} = \int p_{\bm{\theta}}(\mathbf{x}) (-\nabla_{\bm{\theta}} E_{\bm{\theta}}(\mathbf{x})) d\mathbf{x} = \mathbb{E}_{\mathbf{x} \sim p_{\bm{\theta}}(\mathbf{x})} [-\nabla_{\bm{\theta}} E_{\bm{\theta}}(\mathbf{x})]. ↩︎

  2. A. Hyvärinen. Estimation of Non-Normalized Statistical Models by Score Matching. Journal of Machine Learning Research, 6:695-709, 2005. ↩︎

  3. P. Vincent. A Connection Between Score Matching and Denoising Autoencoders. Neural Computation, 23(7):1661-1674, 2011. ↩︎

  4. Y. Song and S. Ermon. Generative Modeling by Estimating Gradients of the Data Distribution. NeurIPS 2019. ↩︎

  5. Y. Song and S. Ermon. Improved Techniques for Training Score-Based Generative Models. NeurIPS 2020. ↩︎

  6. J. Ho, A. Jain, and P. Abbeel. Denoising Diffusion Probabilistic Models. NeurIPS 2020. ↩︎

  7. このパラメータ化は、Sohl-Dickstein et al. (2015) の論文で最初に提案され、Ho et al. (2020) で採用されたものです。 ↩︎

  8. B. D. O. Anderson. Reverse-time diffusion equation models. Stochastic Processes and their Applications, 12(3):313–326, 1982. ↩︎

  9. この尤度計算は、Neural ODEs や Normalizing Flows と共通のアイデアです。 ↩︎

  10. P. Dhariwal and A. Nichol. Diffusion Models Beat GANs on Image Synthesis. NeurIPS 2021. ↩︎

  11. J. Ho and T. Salimans. Classifier-Free Diffusion Guidance. arXiv:2207.12598, 2022. ↩︎

  12. J. Song, C. Meng, and S. Ermon. Denoising Diffusion Implicit Models. ICLR 2021. ↩︎

  13. R. Rombach, A. Blattmann, D. Lorenz, P. Esser, and B. Ommer. High-Resolution Image Synthesis with Latent Diffusion Models. CVPR 2022. ↩︎

  14. Y. Xu, J. Liu, Y. Wang, Y. Cao, and S. Ermon. GeoDiff: A Geometric Diffusion Model for Molecular Conformation Generation. ICLR 2022. ↩︎

  15. E. Hoogeboom, V. G. Satorras, C. Vignac, and M. Welling. Equivariant Diffusion for Molecule Generation in 3D. ICML 2022. ↩︎

Discussion