Diffusion Model

茴香豆 Lv5

生成模型的主要分支:

这里主要介绍扩散模型。

Diffusion model的主要流程

扩散模型分为前向和后向过程。

  • 前向过程:对训练图像添加n次噪声,使其最终结果符合高斯分布

  • 后向过程:将高斯噪声进行n次去噪,使其还原为原来的训练图像

前向过程

假设真实图像中的数据分布为 x_0 \sim q(x) ,接下来我们定义一个前向扩散过程,我们通过 T 步不断向样本 x_0 添加一些高斯噪声,这样我们会得到 T 个添加了高斯噪声的图像 x_1,x_2,...x_T 。每步添加的高斯噪声的大小由变量(训练过程中动态变化) \{ \beta_t \in (0,1) \}_{t=1}^T 控制。以 N(x_T;\mu, \sum) 表示在分布 N(\mu, \sum) X=x_T 时的概率样本概率值。

在扩散过程(正向过程)中,通过对任意的初始样本 x_0 连续地添加 T 次高斯噪声,可获得包含一条样本的轨迹 x_1,x_2,...x_T ,并且当 T 趋于无穷时,原始样本 x_0 的特征完全消失,成为标准高斯噪声。从概率分布的角度而言,如果定义初始样本(训练样本)的概率分布为 q(x_0) ,则通过无限次地扩散动作,实现了从初始样本分布到标准高斯分布的映射,即 q(x_T) = N(0,1)

当然,扩散过程连续添加的高斯噪声并不是任意的,其具体的限定规则为:

q(x_t|x_{t-1}) = N(\sqrt{1-\beta_t}x_{t-1},\beta_t I) 其中 \beta_1 < \beta_2 < ... < \beta_T

样本 x_t 的均值 \sqrt{1-\beta_t}x_{t-1} 相比于样本 x_{t-1} 将更趋于 0 ,而方差也随着 t 的增加而逐渐向 I 趋近。

接下来我们定义:

\alpha_t = 1 - \beta_t , 以及 \bar{\alpha}_t = \prod_{i=1}^{t} \alpha_i

这样先定规则就变成了:

q(x_t|x_{t-1}) = N(\sqrt{\alpha_t}x_{t-1},(1-\alpha_t) I)

在实际获取 x_t 时,可先从 N(0,I) 中随机采样获取 z_{t-1} ,然后对其进行变换得到符合上式的样本,即

(1) x_t = \sqrt{\alpha_t}x_{t-1} + \sqrt{1-\alpha_t}z_{t-1}

需要强调的是,在 x_{t-1} 的基础上通过添加噪声 z_{t-1} 获得 x_t 时,需要先缩小 x_{t-1} 的数值以获得均值,然后在此基础上再叠加高斯噪声 z_{t-1} ,而并非直接在 x_{t-1} 上添加噪声。

类似的,在 t-1 时刻也有关系

(2) x_{t-1} = \sqrt{\alpha_{t-1}}x_{t-2} + \sqrt{1-\alpha_{t-1}}z_{t-2}

(2) 代入 (1) 中得
x_t = \sqrt{\alpha_t \alpha_{t-1}}x_{t-2} + \sqrt{1-\alpha_t \alpha_{t-1}}\bar{z}_{t-2} 其中 \bar{z}_{t-2} \sim N(0,I)

递推可以得到 x_t x_0 的关系

x_t = \sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t} \bar{z}_0

其中 \bar{z}_0 仍为从 N(0,1) 采样的噪声。

此时我们可以得到结论,当给定初始样本 x_0 时,样本 x_t 的分布为

q(x_t|x_0) = N(\sqrt{\bar{\alpha}_t}x_{t-1},(1-\bar{\alpha}_t) I)

上式表明,对于某个给定 x_0 ,其在多次扩散中,始终对应于一个高斯分布,如上图所示,且该高斯分布逐渐趋近标准高斯分布。

后向过程

如果我们能够将前向过程逆向,那我们将通过对标准高斯噪声输入不断进行采样,来还原输入图像。 \beta_t 足够小时,在扩散过程的逆过程(生成过程)中, q(x_{t-1}|x_t) 也将近似符合高斯分布。不幸的是,我们不能很好的预估 q(x_{t-1}|x_t) ,因为前向过程中所有的均值方差都是已知的,而逆向过程中的均值方法均未知。所以我们需要学习每个 t 时刻的均值和方差,也就是说我们要根据训练样本集合 \{x_0^{(1)},x_0^{(2)},...,x_0^{(N)} \} 学习到足够好的 \tilde{\mu}(x_t) \tilde{\sum}(x_t) ,从而使得逆向过程能够产生足够好的样本。

此时我们可以构建生成模型 p_{\theta}(x_{0:T}) ,则

p_{\theta}(x_{0:T}) = p(x_T) \prod_{t=1}^Tp_{\theta}(x_{t-1}|x_t)

p_{\theta}(x_{t-1}|x_{t}) = N(x_{t-1};\mu_{\theta}(x_t,t),\sum_{\theta}(x_t,t))

p(x_T) = N(x_T;0,I)

tips

为什么 \beta 要随时间逐渐变大?

  • 因为原始图像稍微加一点噪声就会有很大的变化,随着噪声越加越多,只有添加的噪声变大才能体现出添加噪声的变化。

为什么要构建前向扩散过程?

  • 因为扩散过程中隐含着重要的可逆性质:当 \beta_t 足够小时,在扩散过程的逆过程(生成过程)中, q(x_{t-1}|x_t) 也将近似符合高斯分布。
  • Title: Diffusion Model
  • Author: 茴香豆
  • Created at : 2023-02-27 16:32:18
  • Updated at : 2023-02-28 17:22:16
  • Link: https://hxiangdou.github.io/2023/02/27/Diffusion-Model/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments