DDIM とオイラー法は何が違うか
カテゴリ:deeplearning
オイラー法はノイズを付与する euler_ancestral があるが、この記事ではノイズを付与しない euler と DDIM を比較する。DDIM はノイズを付与することもできるが、ノイズ項 \(\eta = 0\) とする。
DDIM とオイラー法はどちらも確定的 (deterministic) だが、更新式(微分方程式の近似方法)が異なるため、同じモデルでも出力画像が一致しない。具体的には、DDIM は DDPM の確率過程を ODE 化し、解析解に基づく更新式 を使うのに対し、オイラー法は微分方程式を近似して更新する。
DDIM は解析解なのでステップ数を減らしても画像は変わらないが、オイラー法は近似解なのでステップ数を減らすと誤差が大きくなる。
モデル \(\epsilon_\theta\) はノイズを推定する ε pred とする。
DDIM の更新式 \(\eta = 0\)
一般形:
\[ x_{x-1} = \sqrt{\alpha_{t-1}}\cdot \hat{x}_0 + \sqrt{1-\alpha_{t-1}}\cdot \epsilon_\theta (x_t, t) + \eta \cdot \sigma_t \cdot z\]\(\eta = 0\) なのでノイズ項が消え:
\[ x_{x-1} = \sqrt{\alpha_{t-1}}\cdot \hat{x}_0 + \sqrt{1-\alpha_{t-1}}\cdot \epsilon_\theta (x_t, t)\]再構成されたクリーン画像の推定式:
\[ \hat{x}_0 = \dfrac{x_t - \sqrt{1-\alpha_t}\epsilon_\theta (x_t, t)}{\sqrt{\alpha_t}}\]代入して1ステップの更新式を計算すると:
\[ x_{t-1} = \sqrt{\dfrac{\alpha_{t-1}}{\alpha_t}}x_t + \left ( \sqrt{1-\alpha_{t-1}} - \sqrt{\dfrac{\alpha_{t-1}}{\alpha_t}} \sqrt{1-\alpha_t} \right ) \epsilon_\theta(x_t, t)\]これは解析解ベースの厳密な ODE ステップで理論上は誤差がゼロ。
オイラー法の更新式
オイラー法は ODE の数値解法の1つで、微分方程式:
\[ \dfrac{dx_t}{dt} = -\dfrac{1}{2}\beta_t x_t - \beta_t \epsilon_\theta(x_t, t)\]を時間離散化して:
\[ x_{x-1} = x_t + \Delta t \cdot \left ( -\dfrac{1}{2}\beta_t x_t - \beta_t \epsilon_\theta (x_t, t) \right )\]スケジューラーでは以下の形で使われることが多い:
\[ x_{t-1} = \sqrt{\dfrac{\alpha_{t-1}}{\alpha_t}}x_t + \left ( \sqrt{\dfrac{\alpha_{t-1}}{\alpha_t}} - 1 \right ) \epsilon_\theta (x_t, t)\]両者の違い
両者の違いはノイズの前の係数だけだ。
| 手法 | ノイズの前の係数 |
|---|---|
| DDIM | \(\sqrt{1-\alpha_{t-1}} - \sqrt{\dfrac{\alpha_{t-1}}{\alpha_t}} \sqrt{1-\alpha_t}\) |
| オイラー | \( \sqrt{\dfrac{\alpha_{t-1}}{\alpha_t}} - 1\)   |