4047 个字词
20 分钟
流模型 Chapter2——去噪扩散概率模型(DDPM)
首次发布: 2025-10-07
... 次访问

DDPM(Denoising Diffusion Probabilistic Models)是一种基于扩散过程的生成模型。它通过逐步向数据中添加噪声来模拟数据的生成过程,然后学习一个逆向过程来去除噪声,从而生成新的数据样本。

2.1 扩散模型的正向过程#

2.1.1 扩散过程#

物理启发

扩散过程是一种概率方法,它将复杂的数据分布(例如图像)转换为一个更简单的分布(例如高斯噪声)。受物理学概念的启发,该过程逐步向原始数据中注入少量噪声,最终得到一个标准高斯分布 N(0,Id)\mathcal{N}(0, I_d)

数学形式

数学上,给定一个数据分布 q0(x0)q_0(x_0),我们在每一步逐步添加噪声 βtϵtN(0,βtId)\sqrt{\beta_t}\epsilon_t \sim \mathcal{N}(0, \beta_t I_d),其中我们将 tt 步后的新数据分布表示为 qt(xt)q_t(x_t)。这个过程可以用以下方程描述:

xt=wtxt1+βtϵt,ϵtN(0,Id),t=1,2,,Tx_t = w_t x_{t-1} + \sqrt{\beta_t}\epsilon_t, \quad \epsilon_t\sim \mathcal{N}(0, I_d), \quad t= 1, 2 ,\ldots, T

其中 0<wt10 \lt w_t \le 1βt\beta_t 是一个小的正常数,控制每一步添加的噪声量。

2.1.2 wtw_t 的选取#

稳态均值

最终,我们希望达到一个状态,使得数据分布 qT(xT)q_T(x_T) 近似于一个标准高斯分布 N(0,Id)\mathcal{N}(0, I_d)。这对 wtw_t 的选取提出了要求。当 TT \rightarrow \infty 时,变量 xTx_T 的期望变为

E(xT)=E(wTxT1)+βTE(ϵT)=wTE(xT1)=wTwT1E(xT2)==t=1TwtE(x0)wmaxTE(x0)\begin{aligned} E(x_T) &= E(w_T x_{T-1}) + \sqrt{\beta_T}E(\epsilon_T) = w_{T} E(x_{T-1}) \\ &= w_Tw_{T-1} E(x_{T-2}) = \cdots = \prod_{t=1}^T w_t E(x_{0}) \le w_{max}^T E(x_{0}) \end{aligned}

只要 wmax=max{wt}t=1T<1w_{max} = \max\{w_t\}_{t=1}^T < 1,当 TT \rightarrow \infty 时,xTx_T 的期望将指数级收敛到 0。

稳态方差

至于方差,有

Var(xT)=Var(wTxT1)+Var(βTϵT)=wT2Var(xT1)+βTId=wT2wT12Var(xT2)+βTId+wT2βT1Id==t=1Twt2Var(x0)+βTId+wT2βT1Id++wT2wT12w22β1Id\begin{aligned} Var(x_T) &= Var(w_T x_{T-1}) + Var(\sqrt{\beta_T}\epsilon_T) \\ &= w_T^2 Var(x_{T-1}) + \beta_T I_d \\ &= w_T^2w_{T-1}^2 Var(x_{T-2}) + \beta_T I_d + w_T^2 \beta_{T-1} I_d \\ &= \cdots \\ &= \prod_{t=1}^T w_t^2 Var(x_{0}) + \beta_T I_d + w_T^2 \beta_{T-1} I_d + \cdots + w_T^2w_{T-1}^2 \cdots w_2^2 \beta_1 I_d \end{aligned}

这里,如果我们令 wt=1βtw_t = \sqrt{1 - \beta_t},可以发现方差满足

Var(xT)=t=1T(1βt)Var(x0)+βTId+(1βT)βT1Id++(1βT)(1βT1)(1β2)β1Id=t=1T(1βt)Var(x0)+(1(1βT)+(1βT)βT1++(1βT)(1βT1)(1β2))β1Id=t=1T(1βt)Var(x0)+(1(1βT)(1βT1)+(1βT)(1βT1)βT2++(1βT)(1βT1)(1β2))β1Id=t=1T(1βt)Var(x0)+[1t=1T(1βt)]IdαmaxTVar(x0)+[1αminT]Id\begin{aligned} Var(x_T) &= \prod_{t=1}^T (1 - \beta_t) Var(x_{0}) + \beta_T I_d + (1 - \beta_T) \beta_{T-1} I_d + \cdots + (1 - \beta_T)(1 - \beta_{T-1}) \cdots (1 - \beta_2) \beta_1 I_d\\ &= \prod_{t=1}^T (1 - \beta_t) Var(x_{0}) + (1 - (1 - \beta_T) + (1 - \beta_T)\beta_{T-1} + \cdots + (1 - \beta_T)(1 - \beta_{T-1})\cdots(1 - \beta_2)) \beta_1 I_d\\ &= \prod_{t=1}^T (1 - \beta_t) Var(x_{0}) + (1 - (1 - \beta_T)(1 - \beta_{T-1}) + (1 - \beta_T)(1 - \beta_{T-1})\beta_{T-2} + \cdots + (1 - \beta_T)(1 - \beta_{T-1})\cdots(1 - \beta_2)) \beta_1 I_d\\ &= \prod_{t=1}^T (1 - \beta_t) Var(x_{0}) + [1 - \prod_{t=1}^T (1 - \beta_t)] I_d \\ &\le \alpha_{max}^T Var(x_{0}) + [1 - \alpha_{min}^T] I_d \end{aligned}

只要 αmax=max{1βt}t=1T<1\alpha_{max} = \max\{1 - \beta_t\}_{t=1}^T < 10<αmin=min{1βt}t=1T<10 < \alpha_{min} = \min\{1 - \beta_t\}_{t=1}^T < 1,当 TT \rightarrow \infty 时,xTx_T 的方差将收敛到 1。

参数选取

因此,从以上分析可以看出,为了达到最终的标准高斯分布,我们可以选择参数

wt=1βtw_t = \sqrt{1 - \beta_t}

其中 βt\beta_t 满足 0<βt<10 < \beta_t < 1 以确保 wt<1w_t < 11βt<11 - \beta_t < 1

2.1.3 初始分布假设#

现在我们将扩散过程定义如下

xt=1βtxt1+βtϵt,ϵtN(0,Id),t=1,2,,Tx_t = \sqrt{1 - \beta_t}x_{t-1} + \sqrt{\beta_t}\epsilon_t, \quad \epsilon_t\sim \mathcal{N}(0, I_d), \quad t= 1, 2 ,\ldots, T

根据前面的分析,我们证明了 xTx_T 的均值和方差均符合标准高斯分布的要求。但是为了实现最终分布 qT(xT)q_T(x_T) 收敛到 N(0,Id)\mathcal{N}(0, I_d),我们还需要做一个合理的假设。

这里,我们假设初始数据分布 q0(x0)q_0(x_0) 是一个高斯分布,并且 ϵt\epsilon_txtx_t 独立。在这种条件下,根据高斯分布的性质,我们可以证明每一步的分布 qt(xt)q_t(x_t) 也是一个高斯分布,这就可以保证最终 qT(xT)q_T(x_T) 收敛到 N(0,Id)\mathcal{N}(0, I_d)

2.1.4 前向 Markovian 链#

扩散过程是一步步分布变化的过程,我们可以用以下形式表示每一个时间步的分布

q(xtxt1)=N(xt;1βtxt1,βtI)qt(xt)=q(xtxt1)q(xt1xt2)q(x0)dxt1dxt2dx1dx0=q(xt,xt1,,x1,x0)dxt1dxt2dx1dx0\begin{aligned} q(x_t | x_{t-1}) &= \mathcal{N}(x_t; \sqrt{1 - \beta_t}x_{t-1}, \beta_tI) \\ q_t(x_t) &= \int q(x_t | x_{t-1}) q(x_{t-1} | x_{t-2}) \dots q(x_0) dx_{t-1}dx_{t-2}\dots dx_1dx_0 \\ &= \int q(x_t, x_{t-1}, \dots, x_1, x_0) dx_{t-1}dx_{t-2}\dots dx_1dx_0 \\ \end{aligned}

仔细观察,可以看出这个过程是一个马尔可夫链。当前变量 xtx_t 只依赖于前一个变量 xt1x_{t-1} 和噪声 ϵt\epsilon_t,而不依赖于其他更早的历史状态。

由上式,我们可以得到初始数据分布 q0(x0)q_0(x_0)qt(xt)q_t(x_t) 的直接关系式,直接给出从 x0x_0xtx_t 的单步转换。

q(xtx0)=N(xt;αˉtx0,(1αˉt)Id)qt(xt)=q(xtx0)q0(x0)dx0\begin{aligned} q(x_t|x_0) &= \mathcal{N}(x_t; \sqrt{\bar\alpha_t} x_0, (1 - \bar\alpha_t)I_d) \\ q_t(x_t) &= \int q(x_t | x_0) q_0(x_0) dx_0 \end{aligned}

其中 αt=1βt\alpha_t = 1 - \beta_tαˉt=s=1tαs\bar\alpha_t = \prod_{s=1}^t\alpha_s

现在,我们完成了扩散过程的建模。然而,不幸的是,我们需要很长的时间步长 TT 才能达到最终的高斯分布,计算时间成本大。为了加快收敛速度,直观上我们可以将 βt\beta_t 设置得更大,更接近 1,这样每一步添加的噪声就更大。但事实上,我们并不能将 βt\beta_t 设置得过大,否则数据分布 qt(xt)q_t(x_t) 会与原始数据分布 q0(x0)q_0(x_0) 偏离太多,这将使逆向扩散过程很难学习。

2.2 扩散模型的逆向过程#

2.2.1 逆向 Markovian 链#

逆向过程

在去噪扩散概率模型(DDPM)中,逆向过程旨在将纯高斯噪声 xTx_T 转换回真实的数据样本 x0x_0。从概念上讲,这是前向(加噪)过程的逆过程,同样被建模为一个马尔可夫链,一次一个时间步地逐步完成去噪。通过学习,我们就可以使用逆向过程逐步还原出服从真实数据分布 q0(x0)q_0(x_0) 的样本。

数学形式

用数学语言来说,我们将以当前步状态 xtx_t 为条件,前一步状态 xt1x_{t-1}条件分布建模为

pθt(xt1xt)=N(xt1;μθt(xt,t),Σθt(xt,t))pθt,,θT(xt1)=pθt(xt1xt)pθt+1(xtxt+1)pθT(xT1xT)p(xT)dxtdxt+1dxT\begin{aligned} p_{\theta_t}(x_{t-1}|x_t) &= \mathcal{N}(x_{t-1}; \mu_{\theta_t}(x_t, t), \Sigma_{\theta_t}(x_t, t)) \\ p_{\theta_t, \dots, \theta_T}(x_{t-1}) &= \int p_{\theta_t}(x_{t-1} | x_{t}) p_{\theta_{t+1}}(x_{t} | x_{t+1}) \dots p_{\theta_T}(x_{T-1}|x_T)p(x_T) dx_{t}dx_{t+1}\dots dx_T \\ \end{aligned}

其中我们使用 pθt(xt1xt)p_{\theta_t}(x_{t-1}|x_t) 来表示学习到的条件分布。μθt\mu_{\theta_t}Σθt\Sigma_{\theta_t} 是均值和协方差,由一个参数为 θt\theta_t 的神经网络模型参数化表示。由于神经网络具有强大的函数逼近能力,可以肯定这样的单步逆向分布是可以通过学习得到的。

简化假设

为了使问题易于处理,我们对每一步 tt 使用相同的参数 θ\theta,而不是 TT 个不同的参数 θt\theta_t。因此,逆向过程可以表示为 pθ(xt1xt)p_\theta(x_{t-1} | x_t)

pθ(xt1xt)=N(xt1;μθ(xt,t),Σθ(xt,t))pθ(xt1)=pθ(xt1xt)pθ(xtxt+1)pθ(xT1xT)pθ(xT)dxtdxt+1dxT\begin{aligned} p_{\theta}(x_{t-1}|x_t) &= \mathcal{N}(x_{t-1}; \mu_{\theta}(x_t, t), \Sigma_{\theta}(x_t, t)) \\ p_{\theta}(x_{t-1}) &= \int p_{\theta}(x_{t-1} | x_{t}) p_{\theta}(x_{t} | x_{t+1}) \dots p_{\theta}(x_{T-1}|x_T)p_\theta(x_T) dx_{t}dx_{t+1}\dots dx_T \\ \end{aligned}

其中 p(xT)=N(0,Id)p(x_T) = \mathcal{N}(0, I_d)

2.2.2 初始的目标函数:ELBO#

从KLD开始

作为一个生成模型,DDPM 的最终目标是通过 pθ(x0)p_\theta(x_0) 来近似 q0(x0)q_0(x_0)。因此,我们使用 KL 散度来衡量 q0(x0)q_0(x_0)pθ(x0)p_\theta(x_0) 之间的差异,并试图最小化它。

minθDKL[q0(x0)pθ(x0)]=Ex0q0(x0)[logq0(x0)logpθ(x0)]\min_\theta \mathbb{D}_\mathrm{{KL}}[q_0(x_0) \| p_\theta(x_0)] = \mathbb{E}_{x_0 \sim q_0(x_0)} \left[\log q_0(x_0) - \log p_\theta(x_0) \right]

然而,直接优化这个目标是棘手的,因为它需要计算边缘分布 pθ(x0)p_\theta(x_0),这涉及到对所有可能的噪声路径进行积分。为了解决这个问题,我们展开 KL 散度,并注意到由于 logq0(x0)\log q_0(x_0)θ\theta 无关

minθDKL[q0(x0)pθ(x0)]=minθEx0q0(x0)[logq0(x0)logpθ(x0)]=maxθEx0q0(x0)[logpθ(x0)]\min_\theta \mathbb{D}_\mathrm{KL}[q_0(x_0) \| p_\theta(x_0)] = \min_\theta \mathbb{E}_{x_0 \sim q_0(x_0)} \left[\log q_0(x_0) - \log p_\theta(x_0) \right] = \max_\theta \mathbb{E}_{x_0 \sim q_0(x_0)} \left[\log p_\theta(x_0)\right]

使用 Jensen 不等式推导出一个可处理的下界

logpθ(x0)=logpθ(x0,x1,,xT)dx1dxT=logpθ(x0,x1,,xT)q(x1,,xTx0)q(x1,,xTx0)dx1dxT=logEx1,,xTq(x1,,xTx0)[pθ(x0,x1,,xT)q(x1,,xTx0)]Ex1,,xTq(x1,,xTx0)[logpθ(x0,x1,,xT)q(x1,,xTx0)]\begin{aligned} \log p_\theta(x_0) &= \log \int p_\theta(x_0, x_1, \dots, x_T) dx_1\dots dx_T \\ &= \log \int \frac{p_\theta(x_0, x_1, \dots, x_T)}{q(x_1, \dots, x_T | x_0)}q(x_1, \dots, x_T | x_0) dx_1\dots dx_T \\ &= \log \mathbb{E}_{x_1, \dots, x_T \sim q(x_1, \dots, x_T|x_0)} \left[ \frac{p_\theta(x_0, x_1, \dots, x_T)}{q(x_1, \dots, x_T | x_0)} \right] \\ &\geq \mathbb{E}_{x_1, \dots, x_T \sim q(x_1, \dots, x_T|x_0)} \left[ \log \frac{p_\theta(x_0, x_1, \dots, x_T)}{q(x_1, \dots, x_T | x_0)}\right] \end{aligned}

得到 ELBO

定义

LELBO=Ex0,x1,,xTq(x0,x1,,xT)[logpθ(x0,x1,,xT)q(x1,,xTx0)]\mathcal{L}_{\text{ELBO}} = \mathbb{E}_{x_0, x_1, \dots, x_T \sim q(x_0, x_1, \dots, x_T)} \left[ \log \frac{p_\theta(x_0, x_1, \dots, x_T)}{q(x_1, \dots, x_T | x_0)}\right]

通过最大化证据下界(ELBO) LELBO\mathcal{L}_{\text{ELBO}},我们可以间接优化 q0(x0)q_0(x_0)pθ(x0)p_\theta(x_0) 之间的 KL 散度

maxθLELBO=Eq(x0,x1,,xT)[logpθ(x0,x1,,xT)q(x1,,xTx0)]=Eq(x0,x1,,xT)[logp(xT)t=1Tpθ(xt1xt)t=1Tq(xtxt1)]=Eq(x0,x1,,xT)[logp(xT)+t=1Tlogpθ(xt1xt)t=1Tlogq(xtxt1)]\begin{aligned} \max_\theta \mathcal{L}_{\text{ELBO}} &= \mathbb{E}_{q(x_0, x_1, \dots, x_T)} \left[ \log \frac{p_\theta(x_0, x_1, \dots, x_T)}{q(x_1, \dots, x_T | x_0)}\right] \\ &= \mathbb{E}_{q(x_0, x_1, \dots, x_T)} \left[ \log \frac{p(x_T) \prod_{t=1}^T p_\theta(x_{t-1}|x_t)}{\prod_{t=1}^T q(x_t | x_{t-1})}\right] \\ &= \mathbb{E}_{q(x_0, x_1, \dots, x_T)} \left[ \log p(x_T) + \sum_{t=1}^T \log p_\theta(x_{t-1}|x_t) - \sum_{t=1}^T \log q(x_t | x_{t-1})\right] \end{aligned}

现在我们使用一个关键技巧,通过应用缩放和分组来重新排列各项。关键步骤是使用后验分布 q(xt1xt,x0)q(x_{t-1}|x_t, x_0) 重写求和项。

LELBO=Eq(x0,x1,,xT)[logp(xT)+t=1Tlogpθ(xt1xt)t=1Tlogq(xtxt1)]=Eq(x0,x1,,xT)[logp(xT)+logpθ(x0x1)+t=2Tlogpθ(xt1xt)logq(x1x0)t=2Tlogq(xtxt1)]=Eq(x0,x1,,xT)[logp(xT)+logpθ(x0x1)+t=2Tlogpθ(xt1xt)logq(x1x0)t=2Tlogq(xt1xt,x0)q(xtx0)q(xt1x0)]=Eq(x0,x1)[logpθ(x0x1)]Eq(x0,x1)[logq(x1x0)]+EN(0,Id)[logp(xT)]+t=2TEq(xt1,xt)[logpθ(xt1xt)]t=2TEq(xt1,xt,x0)[logq(xt1xt,x0)]t=2TEq(x0,xt)[logq(xtx0)]+t=2TEq(x0,xt1)[logq(xt1x0)]=Eq(x0,x1)[logpθ(x0x1)]Eq(x0,x1)[logq(x1x0)]+EN(0,Id)[logp(xT)]+t=2TEq(xt1,xt)[logpθ(xt1xt)]t=2TEq(xt1,xt,x0)[logq(xt1xt,x0)]t=2TEq(x0,xt)[logq(xtx0)]+t=1T1Eq(x0,xt)[logq(xtx0)]=Eq(x0,x1)[logpθ(x0x1)]Eq(x0,x1)[logq(x1x0)]+EN(0,Id)[logp(xT)]+t=2TEq(xt1,xt)[logpθ(xt1xt)]t=2TEq(xt1,xt,x0)[logq(xt1xt,x0)]Eq(x0,xT)[logq(xTx0)]+Eq(x0,x1)[logq(x1x0)]=Eq(x0,x1)[logpθ(x0x1)]+t=2TEq(x0,xt1,xt)[logpθ(xt1xt)q(xt1xt,x0)]+Eq(x0,xT)[logp(xT)q(xTx0)]=Eq(x0,x1)[logpθ(x0x1)]t=2TEq(x0,xt)[DKL[q(xt1xt,x0)pθ(xt1xt)]]Eq(x0)[DKL[q(xTx0)p(xT)]]\begin{aligned} \mathcal{L}_{\text{ELBO}} &= \mathbb{E}_{q(x_0, x_1, \dots, x_T)} \left[ \log p(x_T) + \sum_{t=1}^T \log p_\theta(x_{t-1}|x_t) - \sum_{t=1}^T \log q(x_t | x_{t-1})\right] \\ &= \mathbb{E}_{q(x_0, x_1, \dots, x_T)} \left[ \log p(x_T) + \log p_\theta(x_0|x_1) + \sum_{t=2}^T \log p_\theta(x_{t-1}|x_t) - \log q(x_1 | x_0) - \sum_{t=2}^T \log q(x_t | x_{t-1})\right] \\ &= \mathbb{E}_{q(x_0, x_1, \dots, x_T)} \left[ \log p(x_T) + \log p_\theta(x_0|x_1) + \sum_{t=2}^T \log p_\theta(x_{t-1}|x_t) - \log q(x_1 | x_0) - \sum_{t=2}^T \log \frac{q(x_{t-1} | x_t, x_0) q(x_t | x_0)}{q(x_{t-1} | x_0)}\right] \\ &= \mathbb{E}_{q(x_0, x_1)} [\log p_\theta(x_0|x_1)] - \mathbb{E}_{q(x_0, x_1)} [\log q(x_1 | x_0)] + \mathbb{E}_{\mathcal{N}(0, I_d)} [\log p(x_T)] + \sum_{t=2}^T \mathbb{E}_{q(x_{t-1}, x_t)} [\log p_\theta(x_{t-1}|x_t)] - \sum_{t=2}^T \mathbb{E}_{q(x_{t-1}, x_t, x_0)} [\log q(x_{t-1} | x_t, x_0)] - \sum_{t=2}^T \mathbb{E}_{q(x_{0}, x_t)} [\log q(x_t | x_0)] + \sum_{t=2}^T \mathbb{E}_{q(x_0, x_{t-1})} [\log q(x_{t-1} | x_0)] \\ &= \mathbb{E}_{q(x_0, x_1)} [\log p_\theta(x_0|x_1)] - \mathbb{E}_{q(x_0, x_1)} [\log q(x_1 | x_0)] + \mathbb{E}_{\mathcal{N}(0, I_d)} [\log p(x_T)] + \sum_{t=2}^T \mathbb{E}_{q(x_{t-1}, x_t)} [\log p_\theta(x_{t-1}|x_t)] - \sum_{t=2}^T \mathbb{E}_{q(x_{t-1}, x_t, x_0)} [\log q(x_{t-1} | x_t, x_0)] - \sum_{t=2}^T \mathbb{E}_{q(x_{0}, x_t)} [\log q(x_t | x_0)] + \sum_{t=1}^{T-1} \mathbb{E}_{q(x_0, x_{t})} [\log q(x_{t} | x_0)] \\ &= \mathbb{E}_{q(x_0, x_1)} [\log p_\theta(x_0|x_1)] - \mathbb{E}_{q(x_0, x_1)} [\log q(x_1 | x_0)] + \mathbb{E}_{\mathcal{N}(0, I_d)} [\log p(x_T)] + \sum_{t=2}^T \mathbb{E}_{q(x_{t-1}, x_t)} [\log p_\theta(x_{t-1}|x_t)] - \sum_{t=2}^T \mathbb{E}_{q(x_{t-1}, x_t, x_0)} [\log q(x_{t-1} | x_t, x_0)] -\mathbb{E}_{q(x_0, x_T)} [\log q(x_T | x_0)] + \mathbb{E}_{q(x_0, x_1)} [\log q(x_1 | x_0)] \\ &= \mathbb{E}_{q(x_0, x_1)} [\log p_\theta(x_0|x_1)] + \sum_{t=2}^T \mathbb{E}_{q(x_0, x_{t-1}, x_t)} \left[\log \frac{p_\theta(x_{t-1}|x_t)}{q(x_{t-1} | x_t, x_0)}\right] + \mathbb{E}_{q(x_0, x_T)} \left[\log \frac{p(x_T)}{q(x_T | x_0)}\right] \\ &= \mathbb{E}_{q(x_0, x_1)} [\log p_\theta(x_0|x_1)] - \sum_{t=2}^T \mathbb{E}_{q(x_0, x_t)} \left[\mathbb{D}_{\text{KL}}[q(x_{t-1}|x_t, x_0) \| p_\theta(x_{t-1}|x_t)]\right] - \mathbb{E}_{q(x_0)} \left[\mathbb{D}_{\text{KL}}[q(x_T|x_0) \| p(x_T)]\right] \end{aligned}

这里目标函数的分解揭示了以下的物理意义

  1. 重构项: Eq(x0,x1)[logpθ(x0x1)]\mathbb{E}_{q(x_0, x_1)} [\log p_\theta(x_0|x_1)] - 给定 x1x_1 重构 x0x_0 的对数似然函数。

  2. 去噪项: t=2TEq(x0,xt)[DKL(q(xt1xt,x0)pθ(xt1xt))]\sum_{t=2}^T \mathbb{E}_{q(x_0, x_t)} [\mathbb{D}_{\text{KL}}(q(x_{t-1}|x_t, x_0) \| p_\theta(x_{t-1}|x_t))] - 真实后验与学习到的先验之间的 KL 散度。

  3. 先验匹配项: Eq(x0)[DKL(q(xTx0)p(xT))]\mathbb{E}_{q(x_0)} [\mathbb{D}_{\text{KL}}(q(x_T|x_0) \| p(x_T))] - 确保最终分布与标准高斯分布匹配。

LELBO=Eq(x0,x1)[logpθ(x0x1)]t=2TEq(x0,xt)[DKL[q(xt1xt,x0)pθ(xt1xt)]]Eq(x0)[DKL[q(xTx0)p(xT)]]\begin{aligned} \mathcal{L}_{\text{ELBO}} &= \mathbb{E}_{q(x_0, x_1)} [\log p_\theta(x_0|x_1)] - \sum_{t=2}^T \mathbb{E}_{q(x_0, x_t)} \left[\mathbb{D}_{\text{KL}}[q(x_{t-1}|x_t, x_0) \| p_\theta(x_{t-1}|x_t)]\right] - \mathbb{E}_{q(x_0)} \left[\mathbb{D}_{\text{KL}}[q(x_T|x_0) \| p(x_T)]\right] \end{aligned}

2.2.3 为什么使用真实后验?#

问题:为什么我们使用包含 x0x_0 的真实后验 q(xt1xt,x0)q(x_{t-1}|x_t, x_0)而不是标准的逆向条件分布 q(xt1xt)q(x_{t-1}|x_t)

答:

(i) 损失函数:在 ELBO 中,我们用于逆向过程的分布是真实后验 q(xt1xt,x0)q(x_{t-1}|x_t, x_0),而不是逆向条件分布 q(xt1xt)q(x_{t-1}|x_t)

(ii) 闭式表达式:因为真实后验

q(xt1xt,x0)=N(xt1;μ~t(xt,x0),β~tId)q(x_{t-1}|x_t, x_0) = \mathcal{N}\left(x_{t-1}; \tilde{\mu}_t(x_t, x_0), \tilde{\beta}_t I_d\right)

具有已知的、解析的均值和方差。相比之下,逆向条件分布

q(xt1xt)=q(xt1xt,x0)q(x0xt)dx0q(x_{t-1}\mid x_t) = \int q(x_{t-1}\mid x_t,x_0)\,q(x_0\mid x_t)\,dx_0

没有闭式解,因此无法明确写出。

使用真实后验 q(xt1xt,x0)q(x_{t-1}|x_t, x_0) 作为我们学习的目标 pθ(xt1xt)p_\theta(x_{t-1}|x_t) 是一个非常聪明的选择。虽然 pθp_\theta 在去噪时无法获取真实的 x0x_0,但通过在训练时让它模仿以 x0x_0 为条件的“理想”去噪步骤,模型就能学会如何有效地逆转扩散过程。本质上,我们给了模型一个“答案”,让它学习如何从带噪的 xtx_t 中猜出这个答案。

2.2.4 真实后验的推导#

最后,我们需要推导真实后验 q(xt1xt,x0)q(x_{t-1}|x_t, x_0) 的方程。根据贝叶斯定理

q(xt1xt,x0)=q(xtxt1,x0)q(xt1x0)q(xtx0)q(x_{t-1}|x_t, x_0) = \frac{q(x_t|x_{t-1}, x_0) q(x_{t-1}|x_0)}{q(x_t|x_0)}

由于前向过程的马尔可夫性质,xtx_t 仅依赖于 xt1x_{t-1} 而不直接依赖于 x0x_0

q(xtxt1,x0)=q(xtxt1)q(x_t|x_{t-1}, x_0) = q(x_t|x_{t-1})

因此

q(xt1xt,x0)=q(xtxt1)q(xt1x0)q(xtx0)q(x_{t-1}|x_t, x_0) = \frac{q(x_t|x_{t-1}) q(x_{t-1}|x_0)}{q(x_t|x_0)}

在前向过程中,我们已知

  • q(xtxt1)=N(xt;αtxt1,βtId)q(x_t|x_{t-1}) = \mathcal{N}(x_t; \sqrt{\alpha_t} x_{t-1}, \beta_t I_d)
  • q(xt1x0)=N(xt1;αˉt1x0,(1αˉt1)Id)q(x_{t-1}|x_0) = \mathcal{N}(x_{t-1}; \sqrt{\bar\alpha_{t-1}} x_0, (1-\bar\alpha_{t-1}) I_d)
  • q(xtx0)=N(xt;αˉtx0,(1αˉt)Id)q(x_t|x_0) = \mathcal{N}(x_t; \sqrt{\bar\alpha_t} x_0, (1-\bar\alpha_t) I_d)

取对数并关注涉及 xt1x_{t-1} 的项

logq(xt1xt,x0)=logq(xtxt1)+logq(xt1x0)logq(xtx0)+const\begin{aligned} \log q(x_{t-1}|x_t, x_0) &= \log q(x_t|x_{t-1}) + \log q(x_{t-1}|x_0) - \log q(x_t|x_0) + \text{const} \end{aligned}

展开高斯项

logq(xtxt1)=12βtxtαtxt12+constlogq(xt1x0)=12(1αˉt1)xt1αˉt1x02+constlogq(xtx0)=12(1αˉt)xtαˉtx02+const\begin{aligned} \log q(x_t|x_{t-1}) &= -\frac{1}{2\beta_t} \|x_t - \sqrt{\alpha_t} x_{t-1}\|^2 + \text{const} \\ \log q(x_{t-1}|x_0) &= -\frac{1}{2(1-\bar\alpha_{t-1})} \|x_{t-1} - \sqrt{\bar\alpha_{t-1}} x_0\|^2 + \text{const} \\ \log q(x_t|x_0) &= -\frac{1}{2(1-\bar\alpha_t)} \|x_t - \sqrt{\bar\alpha_t} x_0\|^2 + \text{const} \end{aligned}

展开二次项并收集 xt12x_{t-1}^2xt1x_{t-1} 和常数的系数

(i) 对于 xt12x_{t-1}^2 的系数

αt2βt12(1αˉt1)=12(αtβt+11αˉt1)-\frac{\alpha_t}{2\beta_t} - \frac{1}{2(1-\bar\alpha_{t-1})} = -\frac{1}{2} \left( \frac{\alpha_t}{\beta_t} + \frac{1}{1-\bar\alpha_{t-1}} \right)

由于 βt=1αt\beta_t = 1 - \alpha_tαˉt=αtαˉt1\bar\alpha_t = \alpha_t \bar\alpha_{t-1}

αtβt+11αˉt1=αt1αt+11αˉt1=1αˉtβt(1αˉt1)\frac{\alpha_t}{\beta_t} + \frac{1}{1-\bar\alpha_{t-1}} = \frac{\alpha_t}{1-\alpha_t} + \frac{1}{1-\bar\alpha_{t-1}} = \frac{1-\bar\alpha_t}{\beta_t(1-\bar\alpha_{t-1})}

(ii) 对于 xt1x_{t-1} 的系数

αtxtβt+αˉt1x01αˉt1\frac{\sqrt{\alpha_t} x_t}{\beta_t} + \frac{\sqrt{\bar\alpha_{t-1}} x_0}{1-\bar\alpha_{t-1}}

配方后,我们得到一个高斯分布,其均值和方差为

方差:

β~t=1αˉt11αˉtβt\tilde{\beta}_t = \frac{1-\bar\alpha_{t-1}}{1-\bar\alpha_t} \beta_t

均值:

μ~t(xt,x0)=αt(1αˉt1)1αˉtxt+αˉt1βt1αˉtx0\tilde{\mu}_t(x_t, x_0) = \frac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})}{1-\bar\alpha_t} x_t + \frac{\sqrt{\bar\alpha_{t-1}}\beta_t}{1-\bar\alpha_t} x_0

因此,真实后验分布的闭式表达式为

q(xt1xt,x0)=N(xt1;μ~t(xt,x0),β~tId)q(x_{t-1}|x_t, x_0) = \mathcal{N}\left(x_{t-1}; \tilde{\mu}_t(x_t, x_0), \tilde{\beta}_t I_d\right)

其中

μ~t(xt,x0)=αt(1αˉt1)1αˉtxt+αˉt1βt1αˉtx0β~t=1αˉt11αˉtβt\begin{aligned} \tilde{\mu}_t(x_t, x_0) &= \frac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})}{1-\bar\alpha_t} x_t + \frac{\sqrt{\bar\alpha_{t-1}}\beta_t}{1-\bar\alpha_t} x_0 \\ \tilde{\beta}_t &= \frac{1-\bar\alpha_{t-1}}{1-\bar\alpha_t} \beta_t \end{aligned}

这个闭式表达式至关重要,因为它允许我们解析地计算 ELBO 中的 KL 散度,而无需通过采样来估计。

2.2.5 重参数化技巧#

ELBO 公式提供了理论基础,但由于复杂的 KL 散度项,直接优化仍然具有挑战性。DDPM 的关键洞见是使用重参数化技巧,将去噪目标转换为一个简单的噪声预测任务。

噪声预测

我们可以重参数化逆向分布 pθ(xt1xt)p_\theta(x_{t-1}|x_t) 的均值 μθ(xt,t)\mu_\theta(x_t, t),使其预测在前向过程中添加的噪声 ϵ\epsilon,而不是直接学习均值。

回想一下,给定 xtx_tx0x_0,我们可以将真实后验 q(xt1xt,x0)q(x_{t-1}|x_t, x_0) 的均值表示为

μ~t(xt,x0)=αt(1αˉt1)1αˉtxt+αˉt1βt1αˉtx0\tilde \mu_t(x_t, x_0) = \frac{\sqrt{\alpha_t}(1 - \bar\alpha_{t-1})}{1 - \bar\alpha_t} x_t + \frac{\sqrt{\bar\alpha_{t-1}}\beta_t}{1 - \bar\alpha_t} x_0

我们可以将前向过程方程 x0=xt1αˉtϵαˉtx_0 = \frac{x_t - \sqrt{1 - \bar\alpha_t}\epsilon}{\sqrt{\bar\alpha_t}} 代入后验均值中

μ~t(xt,x0)=αt(1αˉt1)1αˉtxt+αˉt1βt1αˉtxt1αˉtϵαˉt=1αt(xtβt1αˉtϵ)\begin{aligned} \tilde \mu_t(x_t, x_0) &= \frac{\sqrt{\alpha_t}(1 - \bar\alpha_{t-1})}{1 - \bar\alpha_t} x_t + \frac{\sqrt{\bar\alpha_{t-1}}\beta_t}{1 - \bar\alpha_t} \cdot \frac{x_t - \sqrt{1 - \bar\alpha_t}\epsilon}{\sqrt{\bar\alpha_t}} \\ &= \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{\beta_t}{\sqrt{1 - \bar\alpha_t}} \epsilon \right) \end{aligned}

这表明我们可以将我们学习到的均值参数化

μθ(xt,t)=1αt(xtβt1αˉtϵθ(xt,t))\mu_\theta(x_t, t) = \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{\beta_t}{\sqrt{1 - \bar\alpha_t}} \epsilon_\theta(x_t, t) \right)

其中 ϵθ(xt,t)\epsilon_\theta(x_t, t) 是一个预测噪声的神经网络。由此,逆向扩散过程可以表示为

pθ(xt1xt)=N(xt1;1αt(xtβt1αˉtϵθ(xt,t)),β~tId)p_\theta(x_{t-1}|x_t) = \mathcal{N}\left(x_{t-1}; \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{\beta_t}{\sqrt{1 - \bar\alpha_t}} \epsilon_\theta(x_t, t) \right), \tilde{\beta}_t I_d\right)

这里我们直接使用从真实后验配置的方差 β~t=1αˉt11αˉtβt\tilde{\beta}_t = \frac{1-\bar\alpha_{t-1}}{1-\bar\alpha_t} \beta_t

2.2.6 简化的损失函数#

通过这种参数化,去噪项中复杂的 KL 散度可以被简化。在我们的例子中,两个分布具有相同的协方差矩阵 β~tId\tilde{\beta}_t I_d

  • q(xt1xt,x0)=N(xt1;μ~t(xt,x0),β~tId)q(x_{t-1}|x_t, x_0) = \mathcal{N}(x_{t-1}; \tilde{\mu}_t(x_t, x_0), \tilde{\beta}_t I_d)
  • pθ(xt1xt)=N(xt1;μθ(xt,t),β~tId)p_\theta(x_{t-1}|x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t, t), \tilde{\beta}_t I_d)

由于 Σ1=Σ2=β~tId\Sigma_1 = \Sigma_2 = \tilde{\beta}_t I_d,我们有

  • logΣ2Σ1=0\log \frac{|\Sigma_2|}{|\Sigma_1|} = 0
  • tr(Σ21Σ1)=d\text{tr}(\Sigma_2^{-1}\Sigma_1) = d (其中 dd 是维度)

因此,

DKL[q(xt1xt,x0)pθ(xt1xt)]=12β~tμ~t(xt,x0)μθ(xt,t)2=12β~tβt2αt(1αˉt)ϵϵθ(xt,t)2\mathbb{D}_{\text{KL}}[q(x_{t-1}|x_t, x_0) \| p_\theta(x_{t-1}|x_t)] = \frac{1}{2\tilde{\beta}_t} \left\| \tilde{\mu}_t(x_t, x_0) - \mu_\theta(x_t, t) \right\|^2 = \frac{1}{2\tilde{\beta}_t} \cdot \frac{\beta_t^2}{\alpha_t(1 - \bar\alpha_t)} \left\| \epsilon - \epsilon_\theta(x_t, t) \right\|^2

β~t=1αˉt11αˉtβt\tilde{\beta}_t = \frac{1-\bar\alpha_{t-1}}{1-\bar\alpha_t} \beta_t 代入

DKL[q(xt1xt,x0)pθ(xt1xt)]=βt221αˉt11αˉtβtαt(1αˉt)ϵϵθ(xt,t)2=βt2(1αˉt)2βt(1αˉt1)αt(1αˉt)ϵϵθ(xt,t)2=βt2(1αˉt1)αtϵϵθ(xt,t)2\begin{aligned} \mathbb{D}_{\text{KL}}[q(x_{t-1}|x_t, x_0) \| p_\theta(x_{t-1}|x_t)] &= \frac{\beta_t^2}{2 \cdot \frac{1-\bar\alpha_{t-1}}{1-\bar\alpha_t} \beta_t \cdot \alpha_t(1 - \bar\alpha_t)} \left\| \epsilon - \epsilon_\theta(x_t, t) \right\|^2 \\ &= \frac{\beta_t^2 \cdot (1-\bar\alpha_t)}{2\beta_t \cdot (1-\bar\alpha_{t-1}) \cdot \alpha_t(1 - \bar\alpha_t)} \left\| \epsilon - \epsilon_\theta(x_t, t) \right\|^2 \\ &= \frac{\beta_t}{2(1-\bar\alpha_{t-1}) \alpha_t} \left\| \epsilon - \epsilon_\theta(x_t, t) \right\|^2 \end{aligned}

这给了我们加权的噪声预测损失。经过大量的实验,DDPM 的作者发现,去掉这个加权项(将其设置为常数)实际上能提高性能,从而得到简单的损失函数

Lsimple=EtUniform(1,T),x0q(x0),ϵN(0,Id)[ϵϵθ(αˉtx0+1αˉtϵ,t)2]\mathcal{L}_{\text{simple}} = \mathbb{E}_{t \sim \text{Uniform}(1,T), x_0 \sim q(x_0), \epsilon \sim \mathcal{N}(0,I_d)} \left[ \left\| \epsilon - \epsilon_\theta(\sqrt{\bar\alpha_t} x_0 + \sqrt{1 - \bar\alpha_t} \epsilon, t) \right\|^2 \right]

其中 xt=αˉtx0+1αˉtϵx_t = \sqrt{\bar\alpha_t} x_0 + \sqrt{1 - \bar\alpha_t} \epsilon

这个公式将复杂的变分优化问题转化为一个直接的去噪任务:给定一个带噪图像 xtx_t 和时间步 tt,预测被添加的噪声 ϵ\epsilon

2.2.7 训练算法#

得到简化的损失函数后,训练过程也就变得异常简单了

  1. 采样一个随机时间步 tUniform(1,T)t \sim \text{Uniform}(1, T)
  2. 采样噪声 ϵN(0,Id)\epsilon \sim \mathcal{N}(0, I_d)
  3. 创建带噪图像 xt=αˉtx0+1αˉtϵx_t = \sqrt{\bar\alpha_t} x_0 + \sqrt{1 - \bar\alpha_t} \epsilon
  4. 使用神经网络预测噪声 ϵθ(xt,t)\epsilon_\theta(x_t, t)
  5. 计算损失 ϵϵθ(xt,t)2\left\| \epsilon - \epsilon_\theta(x_t, t) \right\|^2

这种优雅的简化解释了为什么 DDPM 既有理论上的原则性(通过 ELBO 推导),又在实践中有效(通过简单的噪声预测目标)。

2.3 DDPM 的 SDE#

2.3.1 前向过程的 SDE#

已知离散表达式中扩散过程的公式为

xi=1βixi1+βiϵi, ϵiN(0,Id),i=1,,Tx_i = \sqrt{1 - \beta_i} x_{i-1} + \sqrt{\beta_i} \epsilon_i, \ \epsilon_i \sim \mathcal{N}(0, I_d), \quad i = 1, \cdots, T

x~t=xi,x~t1T=xi1,ϵ~t=ϵi,β~t=Tβi\tilde x_t = x_i, \tilde x_{t - \frac{1}{T}} = x_{i-1}, \tilde \epsilon_t = \epsilon_i, \tilde\beta_t = T\beta_i,由此得到

x~t=11Tβ~tx~t1T+1Tβ~tϵ~t, ϵtN(0,Id),t=1T,2T,,1\tilde x_t = \sqrt{1 - \frac{1}{T}\tilde\beta_t}\tilde x_{t-\frac{1}{T}} + \sqrt{\frac{1}{T}\tilde\beta_t}\tilde\epsilon_t, \ \epsilon_t \sim \mathcal{N}(0, I_d), \quad t = \frac{1}{T}, \frac{2}{T}, \cdots, 1

β~t0\tilde\beta_t \to 0 时,使用泰勒展开,有

x~t=(112Tβ~t)x~t1T+1Tβ~tϵ~t\tilde x_t = (1 - \frac{1}{2T}\tilde\beta_t)\tilde x_{t-\frac{1}{T}} + \sqrt{\frac{1}{T}\tilde\beta_t}\tilde\epsilon_t

现在我们记 Δt=1T\Delta t = \frac{1}{T},得到

x~t=(1Δt2β~t)x~tΔt+Δtβ~tϵ~t\tilde x_t = (1 - \frac{\Delta t}{2}\tilde\beta_t)\tilde x_{t-\Delta t} + \sqrt{\Delta t\tilde\beta_t}\tilde\epsilon_t

dw=ϵdtdw = \epsilon\sqrt{dt} 替换后一项,其中 dwdw 是维纳过程,并令 Δt0\Delta t \to 0 (即 TT \to \infty),有

x~tx~tΔt=Δt2β~tx~tΔt+Δtβ~tϵ~tΔx~t=Δt2β~tx~tΔt+β~tdw~\begin{aligned} &\tilde x_t - \tilde x_{t-\Delta t} = - \frac{\Delta t}{2}\tilde\beta_t\tilde x_{t-\Delta t} + \sqrt{\Delta t\tilde\beta_t}\tilde\epsilon_t \\ &\Delta \tilde x_t = - \frac{\Delta t}{2}\tilde\beta_t\tilde x_{t-\Delta t} + \sqrt{\tilde\beta_t}d\tilde w \\ \end{aligned}

更换符号,得到最终前向扩散过程的 SDE 为

dxt=βt2xtdt+βtdw\boxed{ dx_t = - \frac{\beta_t}{2} x_{t}dt + \sqrt{\beta_t}dw \\ }

2.3.2 逆向过程的 SDE#

根据 Anderson 定理,可以得到逆向过程的 SDE 为

dxt=[βt2xtβtxtlogpt(xt)]dt+βtdwˉ\boxed{ dx_t = \left[- \frac{\beta_t}{2} x_{t} - \beta_t \nabla_{x_t} \log p_t(x_t)\right]dt + \sqrt{\beta_t}d\bar w \\ }

2.3.3 连续化 DDPM#

当采用 DDPM 连续化后的 SDE 进行建模时,可以采用后续章节中介绍的动态分数匹配模型方法,利用神经网络 sθ(xt,t)s_\theta(x_t, t)xlogpt(xt)\nabla_x \log p_t(x_t) 进行建模,从而利用模拟逆向 SDE 的方式进行采样。

dxtdt=βt2xtβtsθ(xt,t)+βtdwˉ\frac{dx_t}{dt} = - \frac{\beta_t}{2} x_{t} - \beta_t s_\theta(x_t, t) + \sqrt{\beta_t}d\bar w
流模型 Chapter2——去噪扩散概率模型(DDPM)
https://adalovelemon.github.io/blog/posts/content/coursenotes/generativeai/flowmodels/chapter2/
Author
Ada Lovelemon
Published at
2025-10-07

留言板