生成扩散模型漫谈(三):DDPM = 贝叶斯 + 去噪
By 苏剑林 | 2022-07-19 | 140407位读者 |到目前为止,笔者给出了生成扩散模型DDPM的两种推导,分别是《生成扩散模型漫谈(一):DDPM = 拆楼 + 建楼》中的通俗类比方案和《生成扩散模型漫谈(二):DDPM = 自回归式VAE》中的变分自编码器方案。两种方案可谓各有特点,前者更为直白易懂,但无法做更多的理论延伸和定量理解,后者理论分析上更加完备一些,但稍显形式化,启发性不足。
在这篇文章中,我们再分享DDPM的一种推导,它主要利用到了贝叶斯定理来简化计算,整个过程的“推敲”味道颇浓,很有启发性。不仅如此,它还跟我们后面将要介绍的DDIM模型有着紧密的联系。
模型绘景 #
再次回顾,DDPM建模的是如下变换流程:
\begin{equation}\boldsymbol{x} = \boldsymbol{x}_0 \rightleftharpoons \boldsymbol{x}_1 \rightleftharpoons \boldsymbol{x}_2 \rightleftharpoons \cdots \rightleftharpoons \boldsymbol{x}_{T-1} \rightleftharpoons \boldsymbol{x}_T = \boldsymbol{z}\end{equation}
其中,正向就是将样本数据$\boldsymbol{x}$逐渐变为随机噪声$\boldsymbol{z}$的过程,反向就是将随机噪声$\boldsymbol{z}$逐渐变为样本数据$\boldsymbol{x}$的过程,反向过程就是我们希望得到的“生成模型”。
正向过程很简单,每一步是
\begin{equation}\boldsymbol{x}_t = \alpha_t \boldsymbol{x}_{t-1} + \beta_t \boldsymbol{\varepsilon}_t,\quad \boldsymbol{\varepsilon}_t\sim\mathcal{N}(\boldsymbol{0}, \boldsymbol{I})\end{equation}
或者写成$p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1})=\mathcal{N}(\boldsymbol{x}_t;\alpha_t \boldsymbol{x}_{t-1},\beta_t^2 \boldsymbol{I})$。在约束$\alpha_t^2 + \beta_t^2 = 1$之下,我们有
\begin{equation}\begin{aligned}
\boldsymbol{x}_t =&\, \alpha_t \boldsymbol{x}_{t-1} + \beta_t \boldsymbol{\varepsilon}_t \\
=&\, \alpha_t \big(\alpha_{t-1} \boldsymbol{x}_{t-2} + \beta_{t-1} \boldsymbol{\varepsilon}_{t-1}\big) + \beta_t \boldsymbol{\varepsilon}_t \\
=&\,\cdots\\
=&\,(\alpha_t\cdots\alpha_1) \boldsymbol{x}_0 + \underbrace{(\alpha_t\cdots\alpha_2)\beta_1 \boldsymbol{\varepsilon}_1 + (\alpha_t\cdots\alpha_3)\beta_2 \boldsymbol{\varepsilon}_2 + \cdots + \alpha_t\beta_{t-1} \boldsymbol{\varepsilon}_{t-1} + \beta_t \boldsymbol{\varepsilon}_t}_{\sim \mathcal{N}(\boldsymbol{0}, (1-\alpha_t^2\cdots\alpha_1^2)\boldsymbol{I})}
\end{aligned}\end{equation}
从而可以求出$p(\boldsymbol{x}_t|\boldsymbol{x}_0)=\mathcal{N}(\boldsymbol{x}_t;\bar{\alpha}_t \boldsymbol{x}_0,\bar{\beta}_t^2 \boldsymbol{I})$,其中$\bar{\alpha}_t = \alpha_1\cdots\alpha_t$,而$\bar{\beta}_t = \sqrt{1-\bar{\alpha}_t^2}$。
DDPM要做的事情,就是从上述信息中求出反向过程所需要的$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t)$,这样我们就能实现从任意一个$\boldsymbol{x}_T=\boldsymbol{z}$出发,逐步采样出$\boldsymbol{x}_{T-1},\boldsymbol{x}_{T-2},\cdots,\boldsymbol{x}_1$,最后得到随机生成的样本数据$\boldsymbol{x}_0=\boldsymbol{x}$。
请贝叶斯 #
下面我们请出伟大的贝叶斯定理。事实上,直接根据贝叶斯定理我们有
\begin{equation}p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t) = \frac{p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1})p(\boldsymbol{x}_{t-1})}{p(\boldsymbol{x}_t)}\label{eq:bayes}\end{equation}
然而,我们并不知道$p(\boldsymbol{x}_{t-1}),p(\boldsymbol{x}_t)$的表达式,所以此路不通。但我们可以退而求其次,在给定$\boldsymbol{x}_0$的条件下使用贝叶斯定理:
\begin{equation}p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0) = \frac{p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1})p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_0)}{p(\boldsymbol{x}_t|\boldsymbol{x}_0)}\end{equation}
这样修改自然是因为$p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1}),p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_0),p(\boldsymbol{x}_t|\boldsymbol{x}_0)$都是已知的,所以上式是可计算的,代入各自的表达式得到:
\begin{equation}p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0) = \mathcal{N}\left(\boldsymbol{x}_{t-1};\frac{\alpha_t\bar{\beta}_{t-1}^2}{\bar{\beta}_t^2}\boldsymbol{x}_t + \frac{\bar{\alpha}_{t-1}\beta_t^2}{\bar{\beta}_t^2}\boldsymbol{x}_0,\frac{\bar{\beta}_{t-1}^2\beta_t^2}{\bar{\beta}_t^2} \boldsymbol{I}\right)\label{eq:p-xt-x0}\end{equation}
推导:上式的推导过程并不难,就是常规的展开整理而已,当然我们也可以找点技巧加快计算。首先,代入各自的表达式,可以发现指数部分除掉$-1/2$因子外,结果是:
\begin{equation}\frac{\Vert \boldsymbol{x}_t - \alpha_t \boldsymbol{x}_{t-1}\Vert^2}{\beta_t^2} + \frac{\Vert \boldsymbol{x}_{t-1} - \bar{\alpha}_{t-1}\boldsymbol{x}_0\Vert^2}{\bar{\beta}_{t-1}^2} - \frac{\Vert \boldsymbol{x}_t - \bar{\alpha}_t \boldsymbol{x}_0\Vert^2}{\bar{\beta}_t^2}\end{equation}
它关于$\boldsymbol{x}_{t-1}$是二次的,因此最终的分布必然也是正态分布,我们只需要求出其均值和协方差。不难看出,展开式中$\Vert \boldsymbol{x}_{t-1}\Vert^2$项的系数是
\begin{equation}\frac{\alpha_t^2}{\beta_t^2} + \frac{1}{\bar{\beta}_{t-1}^2} = \frac{\alpha_t^2\bar{\beta}_{t-1}^2 + \beta_t^2}{\bar{\beta}_{t-1}^2 \beta_t^2} = \frac{\alpha_t^2(1-\bar{\alpha}_{t-1}^2) + \beta_t^2}{\bar{\beta}_{t-1}^2 \beta_t^2} = \frac{1-\bar{\alpha}_t^2}{\bar{\beta}_{t-1}^2 \beta_t^2} = \frac{\bar{\beta}_t^2}{\bar{\beta}_{t-1}^2 \beta_t^2}\end{equation}
所以整理好的结果必然是$\frac{\bar{\beta}_t^2}{\bar{\beta}_{t-1}^2 \beta_t^2}\Vert \boldsymbol{x}_{t-1} - \tilde{\boldsymbol{\mu}}(\boldsymbol{x}_t, \boldsymbol{x}_0)\Vert^2$的形式,这意味着协方差矩阵是$\frac{\bar{\beta}_{t-1}^2 \beta_t^2}{\bar{\beta}_t^2}\boldsymbol{I}$。另一边,把一次项系数拿出来是$-2\left(\frac{\alpha_t}{\beta_t^2}\boldsymbol{x}_t + \frac{\bar{\alpha}_{t-1}}{\bar{\beta}_{t-1}^2}\boldsymbol{x}_0 \right)$,除以$\frac{-2\bar{\beta}_t^2}{\bar{\beta}_{t-1}^2 \beta_t^2}$后便可以得到
\begin{equation}\tilde{\boldsymbol{\mu}}(\boldsymbol{x}_t, \boldsymbol{x}_0)=\frac{\alpha_t\bar{\beta}_{t-1}^2}{\bar{\beta}_t^2}\boldsymbol{x}_t + \frac{\bar{\alpha}_{t-1}\beta_t^2}{\bar{\beta}_t^2}\boldsymbol{x}_0 \end{equation}
这就得到了$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0)$的所有信息了,结果正是式$\eqref{eq:p-xt-x0}$。
去噪过程 #
现在我们得到了$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0)$,它有显式的解,但并非我们想要的最终答案,因为我们只想通过$\boldsymbol{x}_t$来预测$\boldsymbol{x}_{t-1}$,而不能依赖$\boldsymbol{x}_0$,$\boldsymbol{x}_0$是我们最终想要生成的结果。接下来,一个“异想天开”的想法是
如果我们能够通过$\boldsymbol{x}_t$来预测$\boldsymbol{x}_0$,那么不就可以消去$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0)$中的$\boldsymbol{x}_0$,使得它只依赖于$\boldsymbol{x}_t$了吗?
说干就干,我们用$\bar{\boldsymbol{\mu}}(\boldsymbol{x}_t)$来预估$\boldsymbol{x}_0$,损失函数为$\Vert \boldsymbol{x}_0 - \bar{\boldsymbol{\mu}}(\boldsymbol{x}_t)\Vert^2$。训练完成后,我们就认为
\begin{equation}p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t) \approx p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0=\bar{\boldsymbol{\mu}}(\boldsymbol{x}_t)) = \mathcal{N}\left(\boldsymbol{x}_{t-1}; \frac{\alpha_t\bar{\beta}_{t-1}^2}{\bar{\beta}_t^2}\boldsymbol{x}_t + \frac{\bar{\alpha}_{t-1}\beta_t^2}{\bar{\beta}_t^2}\bar{\boldsymbol{\mu}}(\boldsymbol{x}_t),\frac{\bar{\beta}_{t-1}^2\beta_t^2}{\bar{\beta}_t^2} \boldsymbol{I}\right)\label{eq:p-xt}\end{equation}
在$\Vert \boldsymbol{x}_0 - \bar{\boldsymbol{\mu}}(\boldsymbol{x}_t)\Vert^2$中,$\boldsymbol{x}_0$代表原始数据,$\boldsymbol{x}_t$代表带噪数据,所以这实际上在训练一个去噪模型,这也就是DDPM的第一个“D”的含义(Denoising)。
具体来说,$p(\boldsymbol{x}_t|\boldsymbol{x}_0)=\mathcal{N}(\boldsymbol{x}_t;\bar{\alpha}_t \boldsymbol{x}_0,\bar{\beta}_t^2 \boldsymbol{I})$意味着$\boldsymbol{x}_t = \bar{\alpha}_t \boldsymbol{x}_0 + \bar{\beta}_t \boldsymbol{\varepsilon},\boldsymbol{\varepsilon}\sim\mathcal{N}(\boldsymbol{0}, \boldsymbol{I})$,或者写成$\boldsymbol{x}_0 = \frac{1}{\bar{\alpha}_t}\left(\boldsymbol{x}_t - \bar{\beta}_t \boldsymbol{\varepsilon}\right)$,这启发我们将$\bar{\boldsymbol{\mu}}(\boldsymbol{x}_t)$参数化为
\begin{equation}\bar{\boldsymbol{\mu}}(\boldsymbol{x}_t) = \frac{1}{\bar{\alpha}_t}\left(\boldsymbol{x}_t - \bar{\beta}_t \boldsymbol{\epsilon}_{\boldsymbol{\theta}}(\boldsymbol{x}_t, t)\right)\label{eq:bar-mu}\end{equation}
此时损失函数变为
\begin{equation}\Vert \boldsymbol{x}_0 - \bar{\boldsymbol{\mu}}(\boldsymbol{x}_t)\Vert^2 = \frac{\bar{\beta}_t^2}{\bar{\alpha}_t^2}\left\Vert\boldsymbol{\varepsilon} - \boldsymbol{\epsilon}_{\boldsymbol{\theta}}(\bar{\alpha}_t \boldsymbol{x}_0 + \bar{\beta}_t \boldsymbol{\varepsilon}, t)\right\Vert^2\end{equation}
省去前面的系数,就得到DDPM原论文所用的损失函数了。可以发现,本文是直接得出了从$\boldsymbol{x}_t$到$\boldsymbol{x}_0$的去噪过程,而不是像之前两篇文章那样,通过$\boldsymbol{x}_t$到$\boldsymbol{x}_{t-1}$的去噪过程再加上积分变换来推导,相比之下本文的推导可谓更加一步到位了。
另一边,我们将式$\eqref{eq:bar-mu}$代入到式$\eqref{eq:p-xt}$中,化简得到
\begin{equation}
p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t) \approx p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0=\bar{\boldsymbol{\mu}}(\boldsymbol{x}_t)) = \mathcal{N}\left(\boldsymbol{x}_{t-1}; \frac{1}{\alpha_t}\left(\boldsymbol{x}_t - \frac{\beta_t^2}{\bar{\beta}_t}\boldsymbol{\epsilon}_{\boldsymbol{\theta}}(\boldsymbol{x}_t, t)\right),\frac{\bar{\beta}_{t-1}^2\beta_t^2}{\bar{\beta}_t^2} \boldsymbol{I}\right)\end{equation}
这就是反向的采样过程所用的分布,连同采样过程所用的方差也一并确定下来了。至此,DDPM推导完毕~(提示:出于推导的流畅性考虑,本文的$\boldsymbol{\epsilon}_{\boldsymbol{\theta}}$跟前两篇介绍不一样,反而跟DDPM原论文一致。)
推导:将式$\eqref{eq:bar-mu}$代入到式$\eqref{eq:p-xt}$的主要化简难度就是计算
\begin{equation}\begin{aligned}\frac{\alpha_t\bar{\beta}_{t-1}^2}{\bar{\beta}_t^2} + \frac{\bar{\alpha}_{t-1}\beta_t^2}{\bar{\alpha}_t\bar{\beta}_t^2} =&\, \frac{\alpha_t\bar{\beta}_{t-1}^2 + \beta_t^2/\alpha_t}{\bar{\beta}_t^2} = \frac{\alpha_t^2(1-\bar{\alpha}_{t-1}^2) + \beta_t^2}{\alpha_t\bar{\beta}_t^2} = \frac{1-\bar{\alpha}_t^2}{\alpha_t\bar{\beta}_t^2} = \frac{1}{\alpha_t}
\end{aligned}\end{equation}
预估修正 #
不知道读者有没有留意到一个有趣的地方:我们要做的事情,就是想将$\boldsymbol{x}_T$慢慢地变为$\boldsymbol{x}_0$,而我们在借用$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0)$近似$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t)$时,却包含了“用$\bar{\boldsymbol{\mu}}(\boldsymbol{x}_t)$来预估$\boldsymbol{x}_0$”这一步,要是能预估准的话,那就直接一步到位了,还需要逐步采样吗?
真实情况是,“用$\bar{\boldsymbol{\mu}}(\boldsymbol{x}_t)$来预估$\boldsymbol{x}_0$”当然不会太准的,至少开始的相当多步内不会太准。它仅仅起到了一个前瞻性的预估作用,然后我们只用$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t)$来推进一小步,这就是很多数值算法中的“预估-修正”思想,即我们用一个粗糙的解往前推很多步,然后利用这个粗糙的结果将最终结果推进一小步,以此来逐步获得更为精细的解。
由此我们还可以联想到Hinton三年前提出的《Lookahead Optimizer: k steps forward, 1 step back》,它同样也包含了预估(k steps forward)和修正(1 step back)两部分,原论文将其诠释为“快(Fast)-慢(Slow)”权重的相互结合,快权重就是预估得到的结果,慢权重则是基于预估所做的修正结果。如果愿意,我们也可以用同样的方式去诠释DDPM的“预估-修正”过程~
遗留问题 #
最后,在使用贝叶斯定理一节中,我们说式$\eqref{eq:bayes}$没法直接用的原因是$p(\boldsymbol{x}_{t-1})$和$p(\boldsymbol{x}_t)$均不知道。因为根据定义,我们有
\begin{equation}p(\boldsymbol{x}_t) = \int p(\boldsymbol{x}_t|\boldsymbol{x}_0)\tilde{p}(\boldsymbol{x}_0)d\boldsymbol{x}_0\end{equation}
其中$p(\boldsymbol{x}_t|\boldsymbol{x}_0)$是知道的,而数据分布$\tilde{p}(\boldsymbol{x}_0)$无法提前预知,所以不能进行计算。不过,有两个特殊的例子,是可以直接将两者算出来的,这里我们也补充计算一下,其结果也正好是上一篇文章遗留的方差选取问题的答案。
第一个例子是整个数据集只有一个样本,不失一般性,假设该样本为$\boldsymbol{0}$,此时$\tilde{p}(\boldsymbol{x}_0)$为狄拉克分布$\delta(\boldsymbol{x}_0)$,可以直接算出$p(\boldsymbol{x}_t)=p(\boldsymbol{x}_t|\boldsymbol{0})$。继而代入式$\eqref{eq:bayes}$,可以发现结果正好是$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t,\boldsymbol{x}_0)$取$\boldsymbol{x}_0=\boldsymbol{0}$的特例,即
\begin{equation}p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t) = p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0=\boldsymbol{0}) = \mathcal{N}\left(\boldsymbol{x}_{t-1};\frac{\alpha_t\bar{\beta}_{t-1}^2}{\bar{\beta}_t^2}\boldsymbol{x}_t,\frac{\bar{\beta}_{t-1}^2\beta_t^2}{\bar{\beta}_t^2} \boldsymbol{I}\right)\end{equation}
我们主要关心其方差为$\frac{\bar{\beta}_{t-1}^2\beta_t^2}{\bar{\beta}_t^2}$,这便是采样方差的选择之一。
第二个例子是数据集服从标准正态分布,即$\tilde{p}(\boldsymbol{x}_0)=\mathcal{N}(\boldsymbol{x}_0;\boldsymbol{0},\boldsymbol{I})$。前面我们说了$p(\boldsymbol{x}_t|\boldsymbol{x}_0)=\mathcal{N}(\boldsymbol{x}_t;\bar{\alpha}_t \boldsymbol{x}_0,\bar{\beta}_t^2 \boldsymbol{I})$意味着$\boldsymbol{x}_t = \bar{\alpha}_t \boldsymbol{x}_0 + \bar{\beta}_t \boldsymbol{\varepsilon},\boldsymbol{\varepsilon}\sim\mathcal{N}(\boldsymbol{0}, \boldsymbol{I})$,而此时根据假设还有$\boldsymbol{x}_0\sim\mathcal{N}(\boldsymbol{0}, \boldsymbol{I})$,所以由正态分布的叠加性,$\boldsymbol{x}_t$正好也服从标准正态分布。将标准正态分布的概率密度代入式$\eqref{eq:bayes}$后,结果的指数部分除掉$-1/2$因子外,结果是:
\begin{equation}\frac{\Vert \boldsymbol{x}_t - \alpha_t \boldsymbol{x}_{t-1}\Vert^2}{\beta_t^2} + \Vert \boldsymbol{x}_{t-1}\Vert^2 - \Vert \boldsymbol{x}_t\Vert^2\end{equation}
跟推导$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t,\boldsymbol{x}_0)$的过程类似,可以得到上述指数对应于
\begin{equation}p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t) = \mathcal{N}\left(\boldsymbol{x}_{t-1};\alpha_t\boldsymbol{x}_t,\beta_t^2 \boldsymbol{I}\right)\end{equation}
我们同样主要关心其方差为$\beta_t^2$,这便是采样方差的另一个选择。
文章小结 #
本文分享了DDPM的一种颇有“推敲”味道的推导,它借助贝叶斯定理来直接推导反向的生成过程,相比之前的“拆楼-建楼”类比和变分推断理解更加一步到位。同时,它也更具启发性,跟接下来要介绍的DDIM有很密切的联系。
转载到请包括本文地址:https://spaces.ac.cn/archives/9164
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (Jul. 19, 2022). 《生成扩散模型漫谈(三):DDPM = 贝叶斯 + 去噪 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/9164
@online{kexuefm-9164,
title={生成扩散模型漫谈(三):DDPM = 贝叶斯 + 去噪},
author={苏剑林},
year={2022},
month={Jul},
url={\url{https://spaces.ac.cn/archives/9164}},
}
September 1st, 2022
苏神,像请问一下式(10)中,为什么使用约等于号?在我的理解中,$p(x_{t-1}\mid x_t)=\int p(x_{t-1}\mid x_t,x_0)p(x_0\mid x_t)\mathrm dx_0$,而如果用一个确定性的$\bar\mu(x_t)$去预测$x_0$,相当于$p(x_0\mid x_t)$是一个delta函数,只在$x_0=\bar\mu(x_t)$处有非零值。这样的话这个积分直接就变成了$p(x_{t-1}\mid x_t,x_0=\bar\mu(x_t))$,不知道您怎么看。
$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t)$指的是严格准确的$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t)$,$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0=\bar{\boldsymbol{\mu}}(\boldsymbol{x}_t))$则是假设了$p(\boldsymbol{x}_0|\boldsymbol{x}_t)$是狄拉克分布后的结果,它们自然是近似关系(真实的$p(\boldsymbol{x}_0|\boldsymbol{x}_t)$并非狄拉克分布)
明白,假设我们用$q$来表示真实分布,$p_\theta$来表示模型所认为的分布,则相当于$q(\boldsymbol x_{t-1}\mid \boldsymbol x_t)\approx p_\theta(\boldsymbol x_{t-1}\mid \boldsymbol x_t)=p_\theta(\boldsymbol x_{t-1}\mid \boldsymbol x_t,\boldsymbol x_0=\boldsymbol {\bar\mu (x_t)})$。
另外我还有一个问题:在式(13)中,我们直接把采样方差也固定下来了;但是后面的“遗留问题”一章又在讲述对于两种不同情况,如何确定最佳的采样方差。我不是很能搞清楚这两部分之间的逻辑,是否是说(13)是基于$\boldsymbol x_0=\boldsymbol {\bar\mu(x_t)}$这个假设才能建立的,这样确定下来的采样方差并不是最优的(也只有在$\boldsymbol x_0$是单点的时候恰好能满足这个假设)?
是的,“连同采样过程所用的方差也一并确定下来了”是基于$\boldsymbol x_0=\boldsymbol {\bar\mu(x_t)}$可以完成精确预测的。如果不精确预测的情况下,估计方差的一般方法可以参考:https://kexue.fm/archives/9245
September 7th, 2022
公式6的代入得出不是很明白,这里说一下我的思路,请各位指教。
可知
$p(\boldsymbol{x}_{t}|\boldsymbol{x}_{t-1})=\mathcal{N}(\boldsymbol{x}_{t};{\alpha}_t \boldsymbol{x}_{t-1},\bar{\beta}_t^2 \boldsymbol{I})
$
$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_{0})=\mathcal{N}(\boldsymbol{x}_{t-1};\bar{\alpha}_{t-1} \boldsymbol{x}_{0},\bar{\beta}_{t-1}^2 \boldsymbol{I})$
$p(\boldsymbol{x}_{t}|\boldsymbol{x}_{0})=\mathcal{N}(\boldsymbol{x}_{t};\bar{\alpha}_t \boldsymbol{x}_{0},\bar{\beta}_t^2 \boldsymbol{I})$
$p(\boldsymbol{x}_{t}|\boldsymbol{x}_{t-1})*p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_{0})\sim\mathcal{N}(\frac{\bar\alpha_{t-1}\boldsymbol{x}_{0}\cdot\beta_t^2+\alpha_t\boldsymbol{x}_{t-1}\cdot\bar{\beta}_{t-1}^2}{\beta_{t}^2+\bar{\beta}_{t-1}^2},\frac{\beta_t^2\bar{\beta}_{t-1}^2}{\beta_t^2+\bar{\beta}_{t-1}^2} )$
接下来对分布的除法不太好理解了,因为只知道两个标准正态分布的除法服从柯西分布。特此求助一波……
突然有点思路,是使用对数变换将乘除转换成加减吗,感觉是简单多了
这就是直接将$p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1}),p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_0),p(\boldsymbol{x}_t|\boldsymbol{x}_0)$各自的概率密度函数代进去,然后指数部分配方而已呀,并不涉及到分布的卷积、随机变量的组合等运算。
"两个标准正态分布的除法服从柯西分布"这句话说的是两个随机变量的取值相处,本文这一段推导说的是两个随机变量的【概率密度】相处,这是两码事。前一个的结果是柯西分布/t-分布,要用积分算,很麻烦;后一个直接算,就是一个普通的除法,两个指数函数相除就等于底数不变指数相减。
October 5th, 2022
如何理解“数据集服从标准正态分布,p~(x0)=N(x0;0,I)”?这个假设与现实差距很大吧。再者说,如果已知数据集服从标准正态分布,那直接从正态分布采样即可,也就不必费这么大力气去训练diffusion模型了。
这个假设只是用来推导采样方差的一个解析解,然后通过实验来验证它的可用性,没说整个模型都是假设数据集服从标准正态分布。
我们就限定在推导采样方差这件事情上,这样做好处在哪?这个假设太背离实际了,所以给人感觉思路不仅很突兀,而且没什么道理可言,如果只能通过最终实验来验证其可用,那么其他分布不行吗?
论文只是告诉你,$\sigma_t^2=\frac{\bar{\beta}_{t-1}^2\beta_t^2}{\bar{\beta}_t^2}$对应的$\tilde{p}(\boldsymbol{x}_0)$是狄拉克分布,以及$\sigma_t^2=\beta_t^2$对应的$\tilde{p}(\boldsymbol{x}_0)$是标准正态分布,并且通过实验告诉你这两个选择在一般的情况下生成效果都不错。
你是可以假设其他分布,然后推导出其他形式的结果,然后实验验证它的效果。我猜论文想表达的意思应该是:上面两个特例可以看作是两种极端了,但它们推导出来的结果是相近的(两者之比因子$\frac{\bar{\beta}_{t-1}^2}{\bar{\beta}_t^2}$,在$T$足够大时,它近似为1),所以不管哪个结果都应该具有一定的普适性。
我想尽量理解公式的实际含义以及推导背后的逻辑由来。
通过p~(x0)的特殊分布导出方差,这种方式很容易让人产生这样的推想:如果按(16)式采样,最后应得到x0=0;而按(18)式采样,最后得到的x0应该服从标准正态。但事实并非如此,这也是为什么感觉突兀,很想知道作者的动机。查阅原论文,引入这两个极端分布是因为它们对应的是p(xt-1|xt)熵的上下界。从实验结果看控制p(xt-1|xt)熵不对x0生成产生多少影响。
至于为什么两个分布对应的是p(xt-1|xt)熵的上下界,作者没有推导,不知苏老师是否有空指点一下?
它是引用了《Deep Unsupervised Learning using Nonequilibrium Thermodynamics》一文的$(24)$,再结合正态分布的熵跟$\ln \sigma^2$正相关,根据$(24)$式可以算出$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t)$熵的上下界,也就相当于算出了方差的上下界。
该文(24)式我也看了,但是推导出不论X0服从什么分布,条件熵H(Xt|X0)都相同,同理H(Xt-1|X0)也相同。所以不论p(x0)是正态分布还是delta分布,两个分布所对应的上下界都一样。因此不理解DDPM作者“These are the two extreme choices corresponding to upper and lower bounds on reverse process entropy for data with coordinatewise unit variance”的结论是如何得到的?难道是我推导有误?
@elzyyzl|comment-20086
也许这两件事不是同一个证明得出的,DDPM原论文似乎也没说这两者有什么因果关系。
如果你想要关于上下界的直接证明,那么《Deep Unsupervised Learning using Nonequilibrium Thermodynamics》就有;如果你想要上下界对应的$\tilde{p}(\boldsymbol{x}_0)$的推导,本文就有。
October 10th, 2022
beautifully explained, 尤其喜欢预估修正的这个观察角度
October 22nd, 2022
公式12中损失函数的系数$\frac{\bar{\beta}_t^2}{\bar{\alpha}_t^2}$ 怎么可以说省略就省略的,原理是啥?DDPM论文也是按照ELBO推导的,但最后给出效果较好的却是不带系数的$L_{\mathrm{simple}}$, 苏神能否给个通熟易懂的解释?
理论上来说,该系数主要影响采样过程中的方差。但因为我们没有将采样过程中的方差设为可训练参数,所以这个系数的设置对最终结果的影响就不是很明朗了,不如直接简单化,然后用 https://kexue.fm/archives/9245 的方法事后估计方差。
直观上来看,该系数只是$t$的函数,对于同一个$t$,损失是$\frac{\bar{\beta}_t^2}{\bar{\alpha}_t^2}\left\Vert\boldsymbol{\varepsilon} - \boldsymbol{\epsilon}_{\boldsymbol{\theta}}(\bar{\alpha}_t \boldsymbol{x}_0 + \bar{\beta}_t \boldsymbol{\varepsilon}, t)\right\Vert^2$还是$\left\Vert\boldsymbol{\varepsilon} - \boldsymbol{\epsilon}_{\boldsymbol{\theta}}(\bar{\alpha}_t \boldsymbol{x}_0 + \bar{\beta}_t \boldsymbol{\varepsilon}, t)\right\Vert^2$并无实质区别。而网络本身已经将$t$作为条件输入,这会使得每个$t$的模型已经相对独立了,因此精调权重系数的意义不大。
至于哪个更好的理论解释,感觉像是去掉后,模型相对来说更关注$t$较大时(噪声较多时)的重构效果,可能这样更能迫使模型提高去噪能力,从而提高最终效果?
October 25th, 2022
大佬,请教下公式(5)的贝叶斯公式是不是应该是这样啊,$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})}$
是的。但是在DDPM中,$p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1})=p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1}, \boldsymbol{x}_0)$。
因为他服从一阶马尔科夫假设吧。所以当前时间点只依赖于前一个时间点,之前的都可以不考虑。
我觉得不妥,因为根据马尔可夫假设的话,后面的$q(x_t|x_0)$是无法计算的,只知道$q(x_t|x_{t-1})$,我觉得这里只需要理解为已知$x_{t-1}$和$x_0$可以得到$x_t$即可
哪里没法计算了,根据定义有
$$p(\boldsymbol{x}_t|\boldsymbol{x}_0) = \int\cdots\int\int p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1})p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_{t-2})\cdots p(\boldsymbol{x}_1|\boldsymbol{x}_0)d\boldsymbol{x}_{t-1} d\boldsymbol{x}_{t-2}\cdots d\boldsymbol{x}_1$$
就是按照这个定义算出来的。
个人觉得把马尔可夫性表述为:当前状态和$x_{t-1}$之前的历史状态无关容易引起误解,或者说是错误的。
应该表述为:所有历史状态信息对$x_t$的影响完全包含在$x_{t-1}$中。
$x_{t}$是由$x_{0}$一步步得来的,$x_t$当然不可能和$x_{0}$无关,事实上,如果在一个平行宇宙$x_{0}$是另一个值,$x_t$几乎肯定和原宇宙的不一样。
但是我们可以确定的是,我们要知道$x_t$,不需要知道除了$x_{t-1}$之外的如何状态。
所以可以得出:A:同时知道$x_{t-1}$和$x_0$和 B:我们只知道$x_{t-1}$
A和B在估计$x_t$这件事上是完全等价的。
即:$p(x_t|x_{t-1}, x_0) = p(x_t|x_{t-1})$。
但是我们绝不能说 $p(x_{t-1}|x_0)$和$x_0$无关,这也是为什么我说“和历史状态无关”这种马尔可夫性的描述是错误的。
马尔科夫性只是一个名词,人们从这个名词大致能想到接下来会做什么,但实际上这个名词在具体场景下的具体含义,需要用数学公式而不是文字来表达,比如这里最精确的表达方式就是等式$p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1})=p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1}, \boldsymbol{x}_0)$,其他都是对这个公式的诠释。
是的 我之前就是吃了文字表达理解的亏。因为很多书和文章都用类似“和过去状态无关”这样的表达方式,给我造成很多误解。
December 18th, 2022
大佬您好,关于“预估修正”那部分的思辨我有个问题想请教一下:
感觉这块缺少一个误差分析。就是如果你承认从X_t直接denoise到X_0,是一个粗糙的过程,是一个大致的方向。那为什么觉得X_t到X_(t-1)就不粗糙了。他们的误差怎么对比呢?
好问题,但我暂时没有定量的答案,我记录下来了,有空思考。
我在想会不会是因为$X_t$到$X_{t-1}$模型只需学习到如何去掉一个简单的高斯噪声,所以可以估准;而$X_t$到$X_{0}$需要一次去掉很多高斯噪声的叠加,所以估计不准确?但是虽然$X_t$到$X_{0}$的估计不准确,这一步实际上仅仅是为了去掉$X_{t-1}$到$X_{t}$那一步加入的噪声吧(因为逆向也是马尔可夫假设)
1、$\boldsymbol{x}_t$到$\boldsymbol{x}_0$、$\boldsymbol{x}_t$到$\boldsymbol{x}_{t-1}$都相当于单个高斯噪声,只是方差不同;
2、问题不是$\boldsymbol{x}_t$到$\boldsymbol{x}_0$、$\boldsymbol{x}_t$到$\boldsymbol{x}_{t-1}$哪个难度更大,问题是模型学习的目标明明是$\boldsymbol{x}_t$到$\boldsymbol{x}_0$,但为啥间接地构造$\boldsymbol{x}_t$到$\boldsymbol{x}_{t-1}$的过程一步步来反而更好。
苏老师您好,我在想会不会是这个原因:
1、模型学习噪声和$x_0$是等价的,所以每一步都可以看作是在预估$x_0$,这点是确定的,并且在$x_0$附近估计$x_0$肯定比在$x_T$附近估计$x_0$更准确,
2、所以在一开始模型直接生成的$x_0$的并不作为我最终输出的结果,而是代入采样公式$p(x_{t-1}|x_t, x_0)$只向前走一小步,逼近我要生成的$x_0$,也许$x_t$到$x_{t−1}$也是粗糙的,但总是沿着一定方向逼近数据概率密度大的方向,逼近能生成更准确$x_0$的$x_{t−1}$位置。(也可参照score model的相关叙述,数据概率密度大的地方score估计更准确)
所以总结来说并不是$x_t$到$x_{t−1}$的效果比$x_t$到$x_0$更好,而是多步的$x_t$到$x_{t−1}$$x_{t−2}$...到$x_0$比直接一步生成效果好,多步生成本来就是diffusion model的核心嘛。
这个解释既不数学,也不直观~
苏神您好! 最近有一个关于“预估修正”的直观解释(https://arxiv.org/abs/2305.19947),从ODE采样的角度来看,$\bar{\mu}(x_t)\approx x_0$相当于从$x_t$出发做一步step=$t$的数值欧拉近似,因为步长太大就会与ODE轨迹产生较大的偏离,所以一开始对$x_0$的估计会比较粗糙。 而$x_t$到$x_{t-1}$是一个步长更小的数值欧拉近似,会与ODE轨迹贴合的比较好。或者说$x_{t-1}$也可以理解为$x_t$和$\bar{\mu}(x_t)$的一个凸组合。
谢谢推荐,之前收藏了论文,还没看(捂脸)
January 24th, 2023
你好苏老师,作为初学者请问一下您,在公式(5)中,$p(x_{t-1}|x_t,x_0)$是不是理解为给定了$x_t,x_0$求$x_{t-1}$,我之前一直以为这个的意思是$x_{t-1}|x_t$和$x_0$的联合分布概率,绕了不少弯。如果正确理解是前者的话,推导出等号右边的公式是$\frac{p(x_t,x_{t-1})p(x_{t-1},x_0)}{p(x_{t-1})p(x_0,x_t)}$,按理来说只要分子分母上下约分$p(x_{t-1})$就可以整理为$\frac{p(x_t|x_{t-1})p(x_{t-1}|x_0)}{p(x_t|x_0)}(文中结果)$
所以我想问的是,是不是可以认为$x_t,x_{t-1}...$相互独立,这样的话上面的约分$p(x_{t-1})$就没问题了,我是初学者,老师如果有发现明显的错误别生气哈,请老师抽空指点一下这个问题
$p(c|a,b)$的含义从来都是给定$a,b$的前提下出现$c$的概率,我没见过别的定义...
我不大理解你推导的过程,但$(5)$的推导本身很简单,贝叶斯公式是
$$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t) = \frac{p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1})p(\boldsymbol{x}_{t-1})}{p(\boldsymbol{x}_t)}$$
每一项多补上一个条件$\boldsymbol{x}_0$也是成立的,所以
$$p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_t, \boldsymbol{x}_0) = \frac{p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1},\boldsymbol{x}_0)p(\boldsymbol{x}_{t-1}|\boldsymbol{x}_0)}{p(\boldsymbol{x}_t|\boldsymbol{x}_0)}$$
DDPM设计的$p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1},\boldsymbol{x}_0)=p(\boldsymbol{x}_t|\boldsymbol{x}_{t-1})$,所以有式$(5)$。
谢谢您的回答,您说的$每一项多补上一个条件x_0$,那我想问一下为什么后边的$p(x_t|x_{t-1})$变成了$p(x_t|x_{t-1},x_0)$是加了一个$"逗号,"$,而后边的$p(x_{t-1})和p(x_t)$却是加了$"|"$变成了$p(x_{t-1}|x_0),p(x_t|x_0)$呢?只是因为$p(x_t|x_{t-1})$已经有了一个$"|"$吗?还是说有什么别的数学原理或者数学直觉?请苏老师指教
这只是通用的记号约定而已啊,需要什么数学原理啊...$p(c|b,a)$就是给定$a,b$时$c$的概率,$p(b|a)$就是给定$a$时$b$的概率,这是约定。
$p(x_{t−1} |x_{t} ,x_{0} )=\frac{p(x_{t−1},x_{t},x_{0})}{p(x_{t},x_{0})} =\frac{p(x_{0})p(x_{t-1}|x_{0})p(x_{t}|x_{t-1},x_{0})}{p(x_{0})p(x_{t}|x_{0})}$
根据马尔科夫链的性质$p(x_{t}|x_{t-1},x_{0})=p(x_{t}|x_{t-1})$也就有了(5)式的结果
February 23rd, 2023
公式(16)中的方差项:β¯2t−1β2tβ¯2t不是可以化简成1吗?
https://kexue.fm/archives/9181/comment-page-2#comment-21010
June 27th, 2023
想请问一下,苏神是否尝试过以某张确定图像$x_0$作为指导,直接利用概率分布$p(x_{t-1}|x_t,x_0)$来完成T步反向过程?既然这个有解析解,还挺好奇这样做的实际效果如何,比如是否会生成各种原图像$x_0$的变体?以及反向过程中间步骤生成的图像会是什么样的?
应该是生成原封不动的$\boldsymbol{x}_0$。