dskjal
広告
広告

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\)  

広告
広告

カテゴリ