跳转至

DDPM vs DDIM

整个扩散模型的思路就是对一张原始的图片进行加噪然后去噪的过程,DDPM 和 DDIM 涉及的问题就是怎么加噪和去噪的

DDPM

前向过程 (Forward Process)

前向过程是一个马尔可夫链,逐步向数据 \(x_{t-1}\) 中加入高斯噪声得到 \(x_t\)

\[ P(x_t | x_{t-1}) = \mathcal{N}(x_t; \sqrt{\alpha_t} x_{t-1}, \beta_t I) \]

其中 \(\alpha_t = 1 - \beta_t\)。我们可以通过重参数化技巧来采样 \(x_t\)

\[ x_t = \sqrt{\alpha_t} x_{t-1} + \sqrt{\beta_t} \varepsilon_t, \quad \varepsilon_t \sim \mathcal{N}(0, I) \]

那么对于任意时刻,我们可以直接从初始图像 \(x_0\) 计算任意时刻 \(t\)\(x_t\)

\[ \begin{aligned} x_t &= \sqrt{\alpha_t} x_{t-1} + \sqrt{\beta_t} \varepsilon_t \\ &= \sqrt{\alpha_t} (\sqrt{\alpha_{t-1}} x_{t-2} + \sqrt{\beta_{t-1}} \varepsilon_{t-1}) + \sqrt{\beta_t} \varepsilon_t \\ &= \sqrt{\alpha_t \alpha_{t-1}} x_{t-2} + \sqrt{\alpha_t \beta_{t-1}} \varepsilon_{t-1} + \sqrt{\beta_t} \varepsilon_t \\ &= \dots \\ &= \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \varepsilon \end{aligned} \]

其中:

  • \(\bar{\alpha}_t = \prod_{i=1}^t \alpha_i\)

  • 噪声项合并利用了高斯分布的可加性:\(\sqrt{1 - \bar{\alpha}_t} \varepsilon\) 等价于原式中一系列噪声项的叠加。

最终 \(x_t\) 的分布为:

\[ x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \varepsilon_t, \quad \varepsilon_t \sim \mathcal{N}(0, I) \]

对应的概率分布写作:

\[ P(x_t | x_0) = \mathcal{N}(x_t; \sqrt{\bar{\alpha}_t} x_0, (1 - \bar{\alpha}_t)I) \]

贝叶斯后验推导 (Posterior Derivation)

为了进行反向生成,我们需要求 \(P(x_{t-1} | x_t)\),但在训练时,我们通常利用 \(x_0\) 作为条件。根据贝叶斯公式:

\[ P(x_{t-1} | x_t, x_0) = \frac{P(x_t | x_{t-1}, x_0) P(x_{t-1} | x_0)}{P(x_t | x_0)} \]

由于马尔可夫性质,\(P(x_t | x_{t-1}, x_0) = P(x_t | x_{t-1})\),因此:

\[ P(x_{t-1} | x_t, x_0) = \frac{P(x_t | x_{t-1}) P(x_{t-1} | x_0)}{P(x_t | x_0)} \]

这三项我们都已知(均为高斯分布):

  1. \(P(x_t | x_{t-1})\): 前向过程定义。

  2. \(P(x_{t-1} | x_0)\): 类似 \(P(x_t|x_0)\) 的推导。

  3. \(P(x_t | x_0)\): 前向过程一步到位的公式。

我们将上述三项代入,分别计算方差 \(\sigma^2\) 和均值 \(\tilde{\mu}_t\)

方差部分:

\[ \sigma^2 = \frac{\beta_t (1 - \bar{\alpha}_{t-1})}{\alpha_t(1 - \bar{\alpha}_{t-1})+\beta_t} \]

均值部分:

\[ \tilde{\mu}_t(x_t, x_0) = \frac{\sqrt{\bar{\alpha}_{t-1}} \beta_t}{1 - \bar{\alpha}_t} x_0 + \frac{\sqrt{\alpha_t} (1 - \bar{\alpha}_{t-1})}{1 - \bar{\alpha}_t} x_t \]

此时我们并不知道真实的 \(x_0\),而在前向过程我们已经有了

\[ x_0 = \frac{1}{\sqrt{\bar{\alpha}_t}}(x_t - \sqrt{1-\bar{\alpha}_t}\varepsilon_t) \]

代入上式,然后现在的未知量就是 \(\varepsilon_t\), 也就是加的噪声,这就是我们需要用神经网络去拟合的。

\[ \varepsilon_\theta(x_t,t) \]

这个噪声的预测需要两个参数,一个是加噪后的结果 \(x_t\) 还有时间步的信息 \(t\)。这样我们就可以得到 \(P(x_{t-1} | x_t)\),然后我们就可以完成从 \(x_t\)\(x_{t-1}\) 的去噪过程了。

\[ x_{t-1} = \frac{1}{\sqrt{\alpha_t}}(x_t - \frac{\beta_t}{\sqrt{1-\bar{\alpha_t}}}\varepsilon_{\theta(x_t,t)})+\sigma_t \varepsilon \]

DDIM

DDIM 的核心思想是反向过程不再局限于马尔可夫链假设。

在标准的 DDPM 中,反向过程是:

\[ P(x_{t-1} | x_t, x_0) = \frac{P(x_t | x_{t-1}, x_0) P(x_{t-1} | x_0)}{P(x_t | x_0)} \]

我们能不能假设 \(P(x_{t-1} | x_t, x_0)\) 为任意分布,但是需要满足上面这个等式,假设 \(P(x_{t-1} | x_t, x_0)\) 为正态分布,设为

\[ P(x_{t-1} | x_t, x_0) \sim \mathcal{N}(mx_t+kx_0,\sigma^2 I) \]

即:

\[ x_{t-1} = kx_0 + mx_t + \sigma\varepsilon \]

然后将 \(x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \varepsilon_t\) 带入上式,得到

\[ x_{t-1} = kx_0 + m(\sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \varepsilon_t) + \sigma \varepsilon \]

合并同类项,并合并离散型随机变量,得到

\[ x_{t-1} = (k+m\sqrt{\bar{\alpha_t}})x_0 + \varepsilon', \varepsilon' \sim \mathcal{N}(0,m^2(1-\bar{\alpha_t})+\sigma^2) \]

根据前向过程,我们有

\[ x_{t-1} = \sqrt{\bar{\alpha}_{t-1}} x_0 + \sqrt{1 - \bar{\alpha}_{t-1}} \varepsilon, \quad \varepsilon \sim \mathcal{N}(0, I) \]

比较系数可以得到

\[ m = \frac{\sqrt{1 - \bar{\alpha}_{t-1} - \sigma^2}}{\sqrt{1 - \bar{\alpha}_t}}, \qquad k = \sqrt{\bar{\alpha}_{t-1}} - \sqrt{1 - \bar{\alpha}_{t-1} - \sigma^2}\cdot \frac{\sqrt{\bar{\alpha}_t}}{\sqrt{1 - \bar{\alpha}_t}} \]

从而带入到之前的分布中去,可以得到

\[ P(x_{t-1}|x_t) \sim \mathcal{N}(\sqrt{\bar{\alpha}_{t-1}}x_0 + \sqrt{1 - \bar{\alpha}_{t-1} - \sigma^2}\frac{x_t - \sqrt{\bar{\alpha}_t}x_0}{\sqrt{1-\bar{\alpha}_t}},\sigma^2I) \]

这里的 \(x_0\) 和之前一样,用

\[ x_0 = \frac{1}{\sqrt{\bar{\alpha}_t}}(x_t - \sqrt{1-\bar{\alpha}_t}\varepsilon_t) \]

进行替换,然后对于这个 \(\varepsilon_t\) 还是用神经网络拟合得到,从而我们可以得到采样公式

\[ x_{t-1} =\sqrt{\bar{\alpha}_{t-1}}(\frac{x_t - \sqrt{1-\bar{\alpha}_t} \varepsilon_{\theta}}{\bar{\alpha}_{t}}) + \sqrt{1 - \bar{\alpha}_{t-1} - \sigma^2} \varepsilon_{\theta} + \sigma^2 \varepsilon) \]

我们可以发现,这里 \(\sigma\) 的取值和等式是否成立是无关的,通常取 0, 然后这里 \(\varepsilon_{\theta}\) 代表的是第 \(t\) 个时间步预测给图像加的噪,由于我们未做马尔可夫假设,不需要严格遵守 \(x_t \rightarrow x_{t-1}\),可以跨任意步。

从而得到去噪的公式,对于 \(s < z,z\le T\),有

\[ x_{s} =\sqrt{\bar{\alpha}_{s}}(\frac{x_z - \sqrt{1-\bar{\alpha}_z} \varepsilon_{\theta}(x_t,t)}{\bar{\alpha}_{z}}) + \sqrt{1 - \bar{\alpha}_{s}} \varepsilon_{\theta} ) \]

评论区

对你有帮助的话请给我个赞和 star => GitHub stars
欢迎跟我探讨!!!