Stable Diffusion の数学的原理

SDE・スコア関数・潜在拡散の厳密な導出

拡散モデルの概要を前提に、 本記事では Stable Diffusion の背後にある数学を厳密に展開する。 確率微分方程式(SDE)による統一的な定式化、 スコア関数とランジュバン動力学の関係、 VAE 潜在空間での拡散、Classifier-Free Guidance の導出、 DDIM の ODE 解釈を順に解説する。

1. スコア関数とスコアマッチング

スコア関数の定義

確率密度関数 $p(\bx)$ のスコア関数は、対数密度の勾配として定義される:

$$\boldsymbol{s}(\bx) = \nabla_{\bx} \log p(\bx)$$

これはデータ密度が増加する方向を指すベクトル場であり、 $p(\bx)$ を正規化定数なしで特徴づける。

スコア関数を知っていれば、ランジュバン動力学(Langevin dynamics)により $p(\bx)$ からのサンプリングが可能である:

$$\bx_{k+1} = \bx_k + \dfrac{\eta}{2} \nabla_{\bx} \log p(\bx_k) + \sqrt{\eta}\, \bz_k, \quad \bz_k \sim \N(0, I)$$

ステップサイズ $\eta \to 0$、反復回数 $K \to \infty$ の極限で $\bx_K \sim p(\bx)$ に収束する。

スコアマッチング

スコア関数をニューラルネットワーク $\boldsymbol{s}_\theta(\bx)$ で近似する。 直接的なスコアマッチング損失は:

$$\L_{\text{SM}} = \E_{p(\bx)}\left[\dfrac{1}{2}\left\|\boldsymbol{s}_\theta(\bx) - \nabla_{\bx}\log p(\bx)\right\|^2\right]$$

真のスコアが未知なので、ノイズ条件付きスコアマッチング(denoising score matching; Vincent, 2011)を使う。 ノイズ $\sigma$ を加えた分布 $p_\sigma(\tilde{\bx}|\bx) = \N(\tilde{\bx}; \bx, \sigma^2 I)$ に対し:

$$\L_{\text{DSM}} = \E_{\bx \sim p(\bx),\, \tilde{\bx} \sim p_\sigma(\tilde{\bx}|\bx)}\left[\dfrac{1}{2}\left\|\boldsymbol{s}_\theta(\tilde{\bx}, \sigma) - \nabla_{\tilde{\bx}}\log p_\sigma(\tilde{\bx}|\bx)\right\|^2\right]$$

ガウスノイズの場合、条件付きスコアは明示的に計算でき:

$$\nabla_{\tilde{\bx}} \log p_\sigma(\tilde{\bx}|\bx) = -\dfrac{\tilde{\bx} - \bx}{\sigma^2} = -\dfrac{\bepsilon}{\sigma}$$

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

DDPM のノイズ予測ネットワーク $\bepsilon_\theta(\bx_t, t)$ とスコア関数は次の関係で結ばれる (以降、$\beta_t$ をノイズスケジュール、$\alpha_t = 1 - \beta_t$、$\bar{\alpha}_t = \prod_{s=1}^{t}\alpha_s$ とする):

$$\boldsymbol{s}_\theta(\bx_t, t) = -\dfrac{\bepsilon_\theta(\bx_t, t)}{\sqrt{1 - \bar{\alpha}_t}}$$

つまり、拡散モデルの訓練は本質的にスコアマッチングと等価である。

2. SDE による統一的定式化

Song et al. (2021) は、拡散モデルを連続時間の確率微分方程式(SDE)として統一的に定式化した。

p₀(x) データ分布 p_T(x) ≈ N(0, I) 順過程 SDE(ノイズを付加) 逆過程 SDE / ODE(ノイズを除去) t = 0(データ) t = T(ノイズ) 順過程(Itô SDE) dx = f(x, t) dt + g(t) dw f: ドリフト, g: 拡散係数 w: 標準ウィーナー過程 逆過程(Anderson, 1982) dx = [f − g² ∇ₓ log p_t(x)] dt + g d w̄ ∇ₓ log p_t(x): スコア関数 w̄: 逆時間ウィーナー過程
図 1: SDE フレームワークにおける順過程(ノイズ付加)と逆過程(ノイズ除去)

VP-SDE(分散保存型)

DDPM に対応する SDE は次の形をとる:

$$d\bx = -\dfrac{1}{2}\beta(t)\bx\,dt + \sqrt{\beta(t)}\,d\boldsymbol{w}$$

ここで $\beta(t)$ はノイズスケジュールであり、$\beta(t) = \beta_{\min} + (\beta_{\max} - \beta_{\min})t$ が線形スケジュールに対応する。

VE-SDE(分散爆発型)

SMLD(Score Matching with Langevin Dynamics)に対応する:

$$d\bx = \sqrt{\dfrac{d[\sigma^2(t)]}{dt}}\,d\boldsymbol{w}$$

確率フロー ODE

任意の SDE に対し、同じ周辺分布 $p_t(\bx)$ を生成する常微分方程式(ODE)が存在する:

確率フロー ODE

$$\dfrac{d\bx}{dt} = f(\bx, t) - \dfrac{1}{2}g(t)^2 \nabla_{\bx}\log p_t(\bx)$$

SDE との違いはノイズ項 $g(t)\,d\boldsymbol{w}$ がないこと。 決定的であるため、初期値が同じなら同じ軌道を辿る。 DDIM はこの ODE の離散化と解釈できる。

3. DDPM の変分下界の導出

DDPM の訓練目的関数は、データの対数尤度の変分下界(ELBO)から導出される。

対数尤度の下界

$$\log p_\theta(\bx_0) \geq \E_q\left[\log \dfrac{p_\theta(\bx_{0:T})}{q(\bx_{1:T}|\bx_0)}\right] = -\L_{\text{VLB}}$$

変分下界 $\L_{\text{VLB}}$ は 3 種類の項に分解される:

$$\L_{\text{VLB}} = \underbrace{D_{\KL}(q(\bx_T|\bx_0) \| p(\bx_T))}_{\L_T} + \displaystyle\sum_{t=2}^{T} \underbrace{D_{\KL}(q(\bx_{t-1}|\bx_t, \bx_0) \| p_\theta(\bx_{t-1}|\bx_t))}_{\L_{t-1}} - \underbrace{\log p_\theta(\bx_0|\bx_1)}_{\L_0}$$

事後分布の計算

ベイズの定理により、$q(\bx_{t-1}|\bx_t, \bx_0)$ はガウス分布として閉じた形で計算できる:

$$q(\bx_{t-1}|\bx_t, \bx_0) = \N(\bx_{t-1};\, \tilde{\bmu}_t(\bx_t, \bx_0),\, \tilde{\beta}_t I)$$

ここで:

$$\tilde{\bmu}_t(\bx_t, \bx_0) = \dfrac{\sqrt{\bar{\alpha}_{t-1}}\,\beta_t}{1 - \bar{\alpha}_t}\bx_0 + \dfrac{\sqrt{\alpha_t}(1 - \bar{\alpha}_{t-1})}{1 - \bar{\alpha}_t}\bx_t, \quad \tilde{\beta}_t = \dfrac{1 - \bar{\alpha}_{t-1}}{1 - \bar{\alpha}_t}\beta_t$$

再パラメータ化と簡略化損失

$\bx_t = \sqrt{\bar{\alpha}_t}\bx_0 + \sqrt{1-\bar{\alpha}_t}\bepsilon$ を用いて $\bx_0$ を消去し、平均を $\bepsilon$ で表すと:

$$\tilde{\bmu}_t(\bx_t, \bepsilon) = \dfrac{1}{\sqrt{\alpha_t}}\left(\bx_t - \dfrac{\beta_t}{\sqrt{1 - \bar{\alpha}_t}}\bepsilon\right)$$

$p_\theta$ の平均を $\bmu_\theta(\bx_t, t) = \dfrac{1}{\sqrt{\alpha_t}}\left(\bx_t - \dfrac{\beta_t}{\sqrt{1-\bar{\alpha}_t}}\bepsilon_\theta(\bx_t, t)\right)$ と設計すると:

DDPM の簡略化損失

$$\L_{\text{simple}} = \E_{t \sim U[1,T],\, \bx_0,\, \bepsilon \sim \N(0,I)}\left[\left\|\bepsilon - \bepsilon_\theta(\sqrt{\bar{\alpha}_t}\bx_0 + \sqrt{1-\bar{\alpha}_t}\bepsilon,\, t)\right\|^2\right]$$

これは $\L_{\text{VLB}}$ の各項 $\L_{t-1}$ から時間依存の重み係数 $\dfrac{\beta_t^2}{2\sigma_t^2 \alpha_t(1-\bar{\alpha}_t)}$ を 除去(=均一に重み付け)したものであり、実験的により安定した学習を与える。

4. DDIM の ODE 解釈

Song et al. (2020) は、DDPM と同じ学習済みモデル $\bepsilon_\theta$ を使いつつ、 非マルコフ的な逆過程を構成する DDIM を提案した。

DDIM の更新式

$$\bx_{t-1} = \sqrt{\bar{\alpha}_{t-1}}\underbrace{\left(\dfrac{\bx_t - \sqrt{1-\bar{\alpha}_t}\,\bepsilon_\theta(\bx_t, t)}{\sqrt{\bar{\alpha}_t}}\right)}_{\text{"predicted } \bx_0\text{"}} + \underbrace{\sqrt{1-\bar{\alpha}_{t-1} - \sigma_t^2}\,\bepsilon_\theta(\bx_t, t)}_{\text{direction pointing to } \bx_t} + \underbrace{\sigma_t\,\bz_t}_{\text{random noise}}$$

$\sigma_t = 0$ とすると完全に決定的な更新となり、これが DDIM である。 $\sigma_t = \sqrt{\dfrac{(1-\bar{\alpha}_{t-1})}{(1-\bar{\alpha}_t)}\beta_t}$ とすると DDPM に一致する。

DDIM($\sigma_t = 0$)は確率フロー ODE の離散化に対応するため、 タイムステップの部分集合 $\{\tau_1, \tau_2, \ldots, \tau_S\} \subset \{1, \ldots, T\}$($S \ll T$)上で計算すれば、 少ないステップ数でも良好なサンプルが得られる。

逆方向の時間 ← (t = T → 0) x_T ~ N(0,I) x₀ DDPM (SDE, 確率的) DDIM (ODE, 決定的)
図 2: DDPM(SDE・確率的)と DDIM(ODE・決定的)のサンプリング軌道の比較

5. VAE 潜在空間と Latent Diffusion

Stable Diffusion の核心的なアイデアは、ピクセル空間ではなく VAE の潜在空間で拡散を行うことである(Rombach et al., 2022)。

"a cat on mars" CLIP Text Encoder 条件ベクトル c (77×768) z_T ~ N(0, I) U-Net ε_θ(z_t, t, c) 潜在空間での拡散 64×64×4 Cross-Attention × S 回反復 (逆拡散) z₀ VAE Decoder 次元の比較 ピクセル空間: 512×512×3 = 786,432 潜在空間: 64×64×4 = 16,384 → 48倍の次元削減
図 3: Stable Diffusion のパイプライン(テキスト条件・潜在空間での反復ノイズ除去・VAE デコード)

VAE の数学

画像 $\bx \in \R^{H \times W \times 3}$ をエンコーダ $\mathcal{E}$ で潜在変数 $\bz = \mathcal{E}(\bx) \in \R^{h \times w \times c}$ に圧縮し、デコーダ $\mathcal{D}$ で復元する。損失関数は:

$$\L_{\text{VAE}} = \underbrace{\|\bx - \mathcal{D}(\mathcal{E}(\bx))\|^2}_{\text{再構成損失}} + \lambda_{\KL} \cdot \underbrace{D_{\KL}(q(\bz|\bx) \| \N(0, I))}_{\text{KL 正則化}}$$

Stable Diffusion では $f = H/h = W/w = 8$(8 倍ダウンサンプリング)、$c = 4$ を使用する。 VAE は拡散の学習とは独立に事前学習される。

潜在空間での拡散

ピクセル空間の $\bx$ ではなく、潜在変数 $\bz_0 = \mathcal{E}(\bx_0)$ に対して 通常の拡散(ノイズ付加・除去)を行う:

$$\bz_t = \sqrt{\bar{\alpha}_t}\,\bz_0 + \sqrt{1 - \bar{\alpha}_t}\,\bepsilon, \quad \bepsilon \sim \N(0, I)$$ $$\L_{\text{LDM}} = \E_{t, \bz_0, \bepsilon}\left[\|\bepsilon - \bepsilon_\theta(\bz_t, t, c)\|^2\right]$$

生成時は $\bz_T \sim \N(0, I)$ から逆拡散で $\bz_0$ を得た後、 $\hat{\bx} = \mathcal{D}(\bz_0)$ でピクセル空間に戻す。

6. テキスト条件付けの数学

テキストプロンプトは CLIP テキストエンコーダで特徴ベクトル列 $\boldsymbol{c} = [\boldsymbol{c}_1, \ldots, \boldsymbol{c}_L] \in \R^{L \times d_c}$ に変換される。 U-Net 内のCross-Attention 層でこの条件を注入する:

$$\text{Attention}(Q, K, V) = \text{softmax}\left(\dfrac{QK^\top}{\sqrt{d}}\right)V$$ $$Q = W_Q^{(i)} \cdot \varphi_i(\bz_t), \quad K = W_K^{(i)} \cdot \boldsymbol{c}, \quad V = W_V^{(i)} \cdot \boldsymbol{c}$$

$\varphi_i(\bz_t)$ は U-Net の中間表現(第 $i$ 層の特徴マップを平坦化したもの)。 Query は画像特徴から、Key と Value はテキスト特徴から生成される。 これにより、テキストの意味情報が空間的に画像生成を誘導する。

7. Classifier-Free Guidance の導出

条件付き生成の品質を制御する Classifier-Free Guidance(CFG; Ho & Salimans, 2022)の 数学的根拠を示す。

ベイズの定理からの導出

条件付き分布のスコアは:

$$\nabla_{\bz} \log p(\bz|c) = \nabla_{\bz} \log p(\bz) + \nabla_{\bz} \log p(c|\bz)$$

ガイダンス強度 $w$ でスコアを増幅する:

$$\nabla_{\bz} \log p_w(\bz|c) = \nabla_{\bz} \log p(\bz) + w \cdot \nabla_{\bz} \log p(c|\bz)$$

$\nabla_{\bz}\log p(c|\bz) = \nabla_{\bz}\log p(\bz|c) - \nabla_{\bz}\log p(\bz)$ を代入すると:

Classifier-Free Guidance の式

$$\nabla_{\bz}\log p_w(\bz|c) = (1-w)\,\nabla_{\bz}\log p(\bz) + w\,\nabla_{\bz}\log p(\bz|c)$$

ノイズ予測の形で書くと:

$$\tilde{\bepsilon}_\theta(\bz_t, t, c) = (1-w)\,\bepsilon_\theta(\bz_t, t, \varnothing) + w\,\bepsilon_\theta(\bz_t, t, c)$$ $$= \bepsilon_\theta(\bz_t, t, \varnothing) + w\,\bigl(\bepsilon_\theta(\bz_t, t, c) - \bepsilon_\theta(\bz_t, t, \varnothing)\bigr)$$

$w = 1$: 通常の条件付き生成。$w > 1$: テキストへの忠実度を強調。 $w = 7.5$ が Stable Diffusion のデフォルト設定である。

訓練時は、一定確率(通常 10%)でテキスト条件 $c$ を空の条件 $\varnothing$ に置き換える ランダムドロップを行い、単一のモデルで条件付き・無条件の両方を学習させる。

8. ノイズスケジューラの数学

ノイズスケジュール $\{\beta_t\}_{t=1}^T$ の選択は生成品質に大きく影響する。

線形スケジュール(DDPM)

$$\beta_t = \beta_1 + \dfrac{t-1}{T-1}(\beta_T - \beta_1), \quad \beta_1 = 10^{-4},\; \beta_T = 0.02$$

コサインスケジュール(Nichol & Dhariwal, 2021)

$\bar{\alpha}_t$ が均一に減少するよう設計:

$$\bar{\alpha}_t = \dfrac{f(t)}{f(0)}, \quad f(t) = \cos\left(\dfrac{t/T + s}{1 + s} \cdot \dfrac{\pi}{2}\right)^2$$

$s = 0.008$ はオフセット($t = 0$ 付近での $\beta_t$ が小さくなりすぎるのを防止)。

コサインスケジュールは線形スケジュールに比べ、中間ステップでの信号対雑音比(SNR)が より均一に分布し、特に高解像度画像で生成品質が改善する。

信号対雑音比(SNR)

$$\text{SNR}(t) = \dfrac{\bar{\alpha}_t}{1 - \bar{\alpha}_t}$$

$t = 0$ で SNR → ∞(純粋な信号)、$t = T$ で SNR → 0(純粋なノイズ)。 $\L_{\text{simple}}$ は SNR の対数で一様な重み付けに相当する。

9. v-prediction(SD 2.x)

SD 1.x は $\bepsilon$(ノイズ)を予測するが、SD 2.x は v-prediction(Salimans & Ho, 2022)を採用した。 予測対象 $\boldsymbol{v}$ は $\bx_0$ と $\bepsilon$ の線形結合で定義される:

v-prediction の定義

$$\boldsymbol{v}_t = \sqrt{\bar{\alpha}_t}\,\bepsilon - \sqrt{1-\bar{\alpha}_t}\,\bx_0$$

逆に解くと:

$$\hat{\bx}_0 = \sqrt{\bar{\alpha}_t}\,\bx_t - \sqrt{1-\bar{\alpha}_t}\,\boldsymbol{v}_\theta(\bx_t, t)$$ $$\hat{\bepsilon} = \sqrt{1-\bar{\alpha}_t}\,\bx_t + \sqrt{\bar{\alpha}_t}\,\boldsymbol{v}_\theta(\bx_t, t)$$

v-prediction の利点

  • SNR に依存しない安定性:$\bepsilon$-prediction は $t \to 0$(SNR が大きい)で信号が支配的になり勾配が不安定化しうる。 $\boldsymbol{v}$ はノイズと信号の角度パラメータに相当し、$t$ によらず安定した勾配を与える。
  • 数値的安定性:$\text{SNR}(t) \to \infty$ の極限で $\bepsilon$-prediction の損失は発散するが、 $\boldsymbol{v}$-prediction は有界に留まる。

損失関数は単純に予測対象を置き換えるだけである:

$$\L_{\text{v}} = \E_{t, \bx_0, \bepsilon}\left[\|\boldsymbol{v}_t - \boldsymbol{v}_\theta(\bx_t, t)\|^2\right]$$

OpenCLIP ViT-H/14 テキストエンコーダ

SD 1.x は OpenAI の CLIP ViT-L/14(768 次元、約 123M パラメータ)を使用していたが、 SD 2.x は OpenCLIP ViT-H/14(1024 次元、約 354M パラメータ)に変更された。

  • 出力次元の増加:Cross-Attention の Key/Value が 768d → 1024d になり、 テキストの意味表現がより豊かになる。U-Net 側の $W_K, W_V$ 投影行列のサイズも $d_{\text{model}} \times 1024$ に変わる。
  • LAION-2B での訓練:OpenCLIP はオープンなデータセット LAION-2B で訓練されており、 OpenAI CLIP の非公開データセットへの依存を排除する。
  • penultimate layer:SD 2.x ではテキストエンコーダの最終層ではなく 最後から 2 番目の層(penultimate layer)の出力を使用する。 最終層はコントラスト学習の目的に特化しすぎており、 生成タスクには中間層の方がリッチな特徴を持つためである。

768×768 デフォルト解像度

SD 2.1 では訓練解像度が 512×512 から 768×768 に引き上げられた。 潜在空間では $64 \times 64 \to 96 \times 96$(ダウンサンプリング係数 $f = 8$ は不変)となり、 U-Net が処理するトークン数は $64^2 = 4{,}096$ から $96^2 = 9{,}216$ に増加する。 Self-Attention の計算量は $O(n^2)$ なので、約 5 倍の計算コスト増となる。

Negative Prompt と CFG

SD 1.x の CFG(第 7 節)では無条件予測 $\bepsilon_\theta(\bz_t, t, \varnothing)$ に空文字列 $\varnothing$ を使用した。 SD 2.x 以降では、空文字列の代わりにネガティブプロンプト $c_{\text{neg}}$ を指定できる:

Negative Prompt 付き CFG

$$\tilde{\bepsilon}_\theta(\bz_t, t, c, c_{\text{neg}}) = \bepsilon_\theta(\bz_t, t, c_{\text{neg}}) + w\,\bigl(\bepsilon_\theta(\bz_t, t, c) - \bepsilon_\theta(\bz_t, t, c_{\text{neg}})\bigr)$$

$c_{\text{neg}} = \varnothing$ のとき、通常の CFG と一致する。 $c_{\text{neg}} =$ "blurry, low quality" のように指定すると、 ガイダンス方向が「$c_{\text{neg}}$ から $c$ へ向かう方向」になり、 不要な特徴をより積極的に排除できる。

幾何学的には、CFG のガイダンスベクトルは条件付きスコアと無条件スコアの差であり、 negative prompt はこの「基準点」を空文字列から任意のテキストに移動させる操作である。 ガイダンス強度 $w$ が大きいほど、$c_{\text{neg}}$ から $c$ への方向への移動量が増大する。

10. SDXL のアーキテクチャ

SDXL(Podell et al., 2023)は SD 1.x/2.x から大幅に拡張されたアーキテクチャである。

テキスト CLIP ViT-L/14 (768d) OpenCLIP ViT-bigG (1280d) concat (2048d) Base U-Net (3.5B) 潜在空間 128×128×4 Attention: 2段のみ (効率化) マイクロ条件付け • 元画像サイズ (h, w) • クロップ座標 (top, left) • ターゲットサイズ (h, w) z (部分ノイズ除去) Refiner U-Net (6.6B) 最終200ステップを精緻化 OpenCLIP のみ使用 z₀ → VAE Decoder → 1024×1024 画像 SD 1.x との差分 • テキストエンコーダ: 1→2 • 潜在解像度: 64→128 • U-Net: 860M→3.5B • Refiner 追加 (6.6B) • マイクロ条件付け追加 • Attention 2段に削減 • 出力: 512→1024px 合計パラメータ: ~10B
図 4: SDXL のアーキテクチャ(デュアルテキストエンコーダ・マイクロ条件付け・Refiner)

デュアルテキストエンコーダ

SDXL は 2 つのテキストエンコーダの出力を結合する:

$$\boldsymbol{c}_{\text{cross}} = [\boldsymbol{c}_{\text{CLIP-L}};\, \boldsymbol{c}_{\text{OpenCLIP-G}}] \in \R^{77 \times 2048}$$

さらに、OpenCLIP の pooled output(1280 次元)を時間埋め込みに加算して グローバルなテキスト情報をモデルに注入する。

マイクロ条件付け(Size and Crop Conditioning)

訓練データの元サイズとクロップ座標を追加条件として与え、 生成時にターゲットサイズを指定する。 フーリエ特徴量で埋め込み、時間埋め込みに加算する:

$$\boldsymbol{e}_{\text{micro}} = \text{MLP}\bigl(\text{FourierEmbed}(h_{\text{orig}}, w_{\text{orig}}, \text{top}, \text{left}, h_{\text{tgt}}, w_{\text{tgt}})\bigr)$$

これにより、低解像度訓練データから学習した「ぼけ」や「不自然なクロップ」の アーティファクトを生成時に回避できる。

Refiner(精緻化モデル)

Base モデルが初期の大きなノイズ除去を行い($t = T \to t_{\text{switch}}$)、 Refiner が残りの精緻化($t = t_{\text{switch}} \to 0$)を担当する アンサンブル・オブ・エキスパート・デノイザー方式である。 $t_{\text{switch}} \approx 200/1000$ が典型的な切り替え点。

11. Diffusion Transformer(DiT / MM-DiT)

SD 3.0(Esser et al., 2024)は U-Net を完全に廃し、 Diffusion Transformer(DiT; Peebles & Xie, 2023)に基づく MM-DiT(Multimodal DiT)を採用した。

U-Net (SD 1.x / 2.x / XL) Down Mid Up • 画像特徴 → ResBlock + Attention • テキスト → Cross-Attention で注入 • ダウン/アップサンプリング • Skip 接続 画像とテキストは別ストリーム 条件付けの流れ: テキスト → K,V → Cross-Attn → 画像特徴 MM-DiT (SD 3.x) Transformer Block × N (均一構造) • 画像パッチ → トークン列 • テキスト → トークン列 • 両者を同一 Attention で処理 • ダウン/アップサンプリング不要 画像とテキストが対等に交互作用 Joint Attention: [画像トークン; テキストトークン] → Self-Attn
図 5: U-Net(SD 1.x/2.x/XL)と MM-DiT(SD 3.x)のアーキテクチャの比較

DiT の基本構造

潜在変数 $\bz \in \R^{h \times w \times c}$ を $p \times p$ のパッチに分割し、 線形射影でトークン列 $\boldsymbol{T}_{\text{img}} \in \R^{N \times D}$ に変換する($N = hw/p^2$)。 これに位置埋め込みを加え、Transformer ブロックを繰り返す。

MM-DiT(SD 3.0 の Joint Attention)

画像トークンとテキストトークンを連結した系列に対して Self-Attention を計算する:

$$\boldsymbol{T} = [\boldsymbol{T}_{\text{img}};\, \boldsymbol{T}_{\text{txt}}] \in \R^{(N_{\text{img}} + N_{\text{txt}}) \times D}$$ $$\text{JointAttn}(\boldsymbol{T}) = \text{softmax}\left(\dfrac{Q_{\text{all}} K_{\text{all}}^\top}{\sqrt{d}}\right) V_{\text{all}}$$

ただし、画像とテキストで独立の QKV 投影行列を持つ(モダリティごとの特徴抽出)。 Attention 計算自体は統一されるため、テキストと画像が対称的に相互作用する。

AdaLN-Zero(適応的正規化)

DiT では時間ステップ $t$ とテキスト pooled embedding を用いて、 各ブロックの LayerNorm のスケール $\gamma$ とシフト $\beta$、 および残差接続のゲート $\alpha$ を動的に生成する:

$$[\gamma_1, \beta_1, \alpha_1, \gamma_2, \beta_2, \alpha_2] = \text{MLP}(\boldsymbol{e}_t + \boldsymbol{e}_{\text{pool}})$$ $$\hat{\boldsymbol{h}} = \alpha_1 \odot \text{Attention}\bigl(\gamma_1 \odot \text{LN}(\boldsymbol{h}) + \beta_1\bigr) + \boldsymbol{h}$$

テキストエンコーダ(トリプル構成)

SD 3.x は 3 つのテキストエンコーダを使用する:

  • CLIP ViT-L/14(768d): 基本的なテキスト理解
  • OpenCLIP ViT-bigG/14(1280d): 高品質なテキスト-画像対応
  • T5-XXL(4096d): 長文・複雑な指示の理解(言語モデルベース)

T5 の追加により、長い自然言語の指示("a red car parked next to a blue bicycle on a rainy street")への 忠実度が大きく向上する。

12. Flow Matching と Rectified Flow(SD 3.x / FLUX)

SD 3.x と FLUX は、DDPM の「ノイズを徐々に加える/除去する」枠組みを離れ、 Flow Matching(Lipman et al., 2023)/ Rectified Flow(Liu et al., 2023)に基づく。

連続正規化流(CNF)

データ分布 $p_0$ とノイズ分布 $p_1 = \N(0, I)$ を結ぶ時間依存のベクトル場 $\boldsymbol{v}_\theta(\bx, t)$ を学習する。ODE:

$$\dfrac{d\bx_t}{dt} = \boldsymbol{v}_\theta(\bx_t, t), \quad t \in [0, 1]$$

$t = 0$ でデータ $\bx_0$、$t = 1$ でノイズ $\bx_1$ に対応する。 生成時は $\bx_1 \sim \N(0, I)$ から $t = 1 \to 0$ の方向に ODE を解く。

拡散モデル(曲線的な軌道) x₀ (data) x_T (noise) 非線形な遷移 多くのステップが必要 Rectified Flow(直線的な軌道) x₀ (data) x₁ (noise) 線形補間で直線的に接続 少ないステップで高品質
図 6: 拡散モデルの曲線的な軌道と Rectified Flow の直線的な軌道の比較

Flow Matching の損失関数

データ $\bx_0$ とノイズ $\bx_1 \sim \N(0, I)$ の線形補間で 中間状態 $\bx_t$ を定義する:

$$\bx_t = (1 - t)\,\bx_0 + t\,\bx_1$$

この補間に沿った条件付きベクトル場は:

$$\boldsymbol{u}_t(\bx_t | \bx_0, \bx_1) = \bx_1 - \bx_0$$

($\bx_0$ と $\bx_1$ を結ぶ定数速度の直線)。Flow Matching の損失は:

Conditional Flow Matching 損失

$$\L_{\text{CFM}} = \E_{t \sim U[0,1],\, \bx_0 \sim p_0,\, \bx_1 \sim \N(0,I)}\left[\|\boldsymbol{v}_\theta(\bx_t, t) - (\bx_1 - \bx_0)\|^2\right]$$

ネットワーク $\boldsymbol{v}_\theta$ はデータとノイズの差分方向を予測するだけでよい。 DDPM の $\bepsilon$-prediction と形式的に類似するが、 軌道が直線的なため少ないステップでも離散化誤差が小さい

Rectified Flow(ReFlow)

1 回の Flow Matching 学習後、学習済みモデルの軌道からペア $(\hat{\bx}_0, \hat{\bx}_1)$ を再サンプルし、 それらを直線で結び直す reflow 手順を繰り返すと、 軌道がさらに直線に近づき、1〜4 ステップでの生成品質が劇的に改善する。

SD 3.x の具体的な設定

SD 3.0 / 3.5 の Flow Matching 設定

  • 時間 $t \in [0, 1]$: $t = 0$ がデータ、$t = 1$ がノイズ
  • SNR に基づく時間サンプリング: $t$ を logit-normal 分布からサンプル(中間ステップを重視)
  • サンプラ: Euler 法(1 次)または DPM-Solver(高次)で ODE を解く
  • ステップ数: 28〜50 ステップが標準

FLUX のアーキテクチャ

Black Forest Labs の FLUX(2024)は、Rectified Flow + DiT をさらに発展させ:

  • Single/Double ストリームブロック: 浅い層で画像・テキストの Joint Attention(Double)、深い層で画像のみの Self-Attention(Single)に切り替え
  • Rotary Position Embedding: 2D 画像パッチに RoPE を適用し、任意のアスペクト比に対応
  • ガイダンス蒸留: CFG なしでも高品質な生成が可能な蒸留モデル(FLUX.1-schnell は 1〜4 ステップ)
  • CLIP-L + T5-XXL: SD 3.x の 3 エンコーダから OpenCLIP-bigG を外し、T5-XXL を主軸に CLIP-L の pooled 埋め込みを併用する(具体的な構成はチェックポイントや実装によって異なる場合がある)

まとめ

  • スコア関数 $\nabla_\bx \log p(\bx)$ が拡散モデルの理論的基盤であり、ノイズ予測と直接的に対応する
  • SDE フレームワークにより、DDPM や SMLD を統一的に扱い、確率フロー ODE を導出できる
  • DDPM の損失は変分下界(ELBO)から導出され、$\|\bepsilon - \bepsilon_\theta\|^2$ に簡略化される
  • DDIM は確率フロー ODE の離散化であり、少ないステップで決定的に生成できる
  • Latent Diffusion(SD 1.x)は VAE 潜在空間で拡散を行い、48 倍の次元削減を実現する
  • v-prediction(SD 2.x)はノイズと信号の角度パラメータを予測し、数値安定性を改善する
  • SDXL はデュアルテキストエンコーダ、マイクロ条件付け、Refiner で高解像度生成を実現する
  • DiT / MM-DiT(SD 3.x)は U-Net を Transformer に置き換え、画像・テキストの Joint Attention を導入する
  • Flow Matching / Rectified Flow(SD 3.x, FLUX)はデータとノイズを直線で結ぶ ODE を学習し、少ステップ生成を可能にする
  • Classifier-Free Guidance は条件付きスコアの線形結合であり、ベイズの定理から導出される

参考文献

関連記事

よくある質問

Q: 拡散モデルとスコア関数はどう関係するか

A: ノイズ予測ネットワーク $\bepsilon_\theta(\bx_t, t)$ はスコア関数と $\boldsymbol{s}_\theta = -\bepsilon_\theta / \sqrt{1-\bar{\alpha}_t}$ の関係で結ばれる。 つまり拡散モデルの訓練はスコアマッチングと等価である。

Q: なぜ Stable Diffusion は潜在空間で拡散するのか

A: 512×512×3 のピクセル空間(786,432 次元)で拡散すると計算コストが膨大になる。 VAE で 64×64×4 の潜在空間(16,384 次元)に圧縮してから拡散することで、 約 48 倍の次元削減が得られ、計算効率が劇的に向上する。

Q: DDIM はなぜ少ないステップで生成できるのか

A: DDIM は確率フロー ODE の離散化に対応する。 ODE は任意のステップ幅で解くことができるため、 1000 ステップではなく 50〜100 ステップでも良好な画像が生成できる。