\[
\newcommand{\bs}{\boldsymbol}
\newcommand{\bsX}{\boldsymbol{X}}
\newcommand{\bf}{\mathbf}
\newcommand{\msc}{\mathscr}
\newcommand{\mca}{\mathcal}
\newcommand{\T}{\text{T}}
\newcommand{\rme}{\mathrm{e}}
\newcommand{\rmi}{\mathrm{i}}
\newcommand{\rmj}{\mathrm{j}}
\newcommand{\rmd}{\mathrm{d}}
\newcommand{\rmm}{\mathrm{m}}
\newcommand{\rmb}{\mathrm{b}}
\newcommand{\and}{\land}
\newcommand{\or}{\lor}
\newcommand{\exist}{\exists}
\newcommand{\sube}{\subseteq}
\newcommand{\lr}[3]{\left#1 #2 \right#3}
\newcommand{\intfy}{\int_{-\infty}^{+\infty}}
\newcommand{\sumfy}[1]{\sum_{#1=-\infty}^{+\infty}}
\newcommand{\vt}{\vartheta}
\newcommand{\ve}{\varepsilon}
\newcommand{\vp}{\varphi}
\newcommand{\Var}{\text{Var}}
\newcommand{\Cov}{\text{Cov}}
\newcommand{\edef}{\xlongequal{def}}
\newcommand{\prob}{\text{P}}
\newcommand{\Exp}{\text{E}}
\newcommand{\t}[1]{\text#1}
\newcommand{\N}{\mathbb{N}}
\newcommand{\Z}{\mathbb{Z}}
\newcommand{\Q}{\mathbb{Q}}
\newcommand{\R}{\mathbb{R}}
\newcommand{\C}{\mathbb{C}}
\newcommand{\versionofnewcommand}{\text{260125}}
\]
DDPM: Denoising Diffusion Probablistic Models
一个重要的思想:
\[
\text{Computer Drawing}\quad \Leftrightarrow\quad \text{Random Number Sampling}
\]
在校内课程中, 已经稍微了解过一点扩散模型了, 现在对这个工作做进一步的说明.
正向过程
若要从一张图片得到高斯球噪声 \(N(0,\sigma^2I)\), 可以一次又一次地叠加噪声:
\[
X_0\overset{N_1}\to X_1\overset{N_2}\to X_2\overset{N_3}\to\cdots\overset{N_T}\to X_T
\]
如果它的逆过程可以实现, 就可以从一个球噪声生成原图像 \(X_0\). 这便是主要思想. 接下来, 首先考察正向叠加噪声的过程:
\[
\boxed{X_t=\sqrt{\alpha_t}\cdot X_{t-1}+\sqrt{1-\alpha_t}\cdot\ve,\quad \ve\sim N(0,I)}
\]
先不要管为什么要这么写, 这是一个参数 trick, 后面会发现这样设置参数非常有用. 我们再往下写一项:
\[
\begin{aligned}
X_t
=&\ \sqrt{\alpha_t}\cdot X_{t-1}
+\sqrt{1-\alpha_t}\cdot\ve_1\\
=&\ \sqrt{\alpha_t}\cdot(\sqrt{\alpha_{t-1}}\cdot X_{t-2}
+\sqrt{1-\alpha_{t-1}}\cdot\ve_2)
+\sqrt{1-\alpha_t}\cdot\ve_1\\
=&\ \sqrt{\alpha_t\alpha_{t-1}}\cdot X_{t-2}
\underline{+\sqrt{1-\alpha_t}\cdot\ve_1
+\sqrt{\alpha_t(1-\alpha_{t-1})}\cdot\ve_2}_{\ \text{noise term}}\\
\end{aligned}
\]
其中, noise term 为两个 Gaussian 的叠加, 得到方差为 \((1-\alpha_t)+\alpha_t(1-\alpha_{t-1})\) 且均值为 \(0\) 的 Gaussain. 因此可以合并, 于是有:
\[
\begin{aligned}
&&X_t
=&\ \sqrt{\alpha_t\alpha_{t-1}}\cdot X_{t-2}
+\sqrt{1-\alpha_t\alpha_{t-1}}\cdot\ve\\
\Rightarrow && X_t =&\ \sqrt{\prod_{k=1}^t\alpha_k}\cdot X_0+\sqrt{1-\prod_{k=1}^t\alpha_k}\cdot\ve
\end{aligned}
\]
定义 \(\overline{\alpha_t}=\displaystyle\prod_{k=1}^t\alpha_k\), 则得到
\[
\boxed{X_t=\sqrt{\overline{\alpha_t}}\cdot X_0+\sqrt{1-\overline{\alpha_t}}\cdot\ve}
\]
反向过程
最核心地, 我们想知道这个函数的形式:
\[
\tP(X_{t-1}|X_t,X_0)=\tP(X_t|X_{t-1},X_0)\cdot\frac{\tP(X_{t-1}|X_0)}{\tP(X_t|X_0)}
\]
好在经过 Bayes 公式处理后得到的三个分布都是高斯的:
\[
\begin{aligned}
\tP(X_t|X_{t-1},X_0) &\sim N(\sqrt{\alpha_t}\ X_{t-1},\ (1-\alpha_t)I)\\
\tP(X_{t}|X_0) &\sim N(\sqrt{\overline{\alpha_t}}\ X_0,\ (1-\overline{\alpha_t})I)\\
\tP(X_{t-1}|X_0) &\sim N(\sqrt{\overline{\alpha_{t-1}}}\ X_0,\ (1-\overline{\alpha_{t-1}})I)
\end{aligned}
\]
我们只需关注指数项的二次型中发生的事情. 因为我们最关心的是期望和方差, 这两个信息都在二次型中充分体现. 先写出来:
\[
\begin{aligned}
\frac{(X_t-\sqrt{\alpha_t}\ X_{t-1})^2}{1-\alpha_t}
-\frac{(X_{t}-\sqrt{\overline{\alpha_{t}}}\ X_0)^2}{1-\overline{\alpha_{t}}}
+\frac{(X_{t-1}-\overline{\alpha_{t-1}}\ X_0)^2}{1-\overline{\alpha_{t-1}}}
\end{aligned}
\]
面对这一大坨, 我们想做的事很简单. 为了得到均值和方差, 对 \(X_{t-1}\) 配方就好了. Just some notations! 展开!
\[
\begin{aligned}
&\ \frac{{X_t}^2-2\sqrt{\alpha_t}\ X_tX_{t-1}+\alpha_t{X_{t-1}}^2}{1-\alpha_t}
-\frac{{X_t}^2-2\sqrt{\overline{\alpha_{t}}}\ X_{t}X_0+\overline{\alpha_{t}}{X_0}^2}
{1-\overline{\alpha_{t}}}
+\frac{{X_{t-1}}^2-\sqrt{\overline{\alpha_{t-1}}}\ X_{t-1}X_0+\overline{\alpha_{t-1}}{X_0}^2}
{1-\overline{\alpha_t}}\\
=&\ \lr({ \frac{\alpha_t}{1-\alpha_t} + \frac{1}{1-\overline{\alpha_{t-1}}} }){X_{t-1}}^2
-2\lr({ \frac{\sqrt{\alpha_t}\ X_t}{1-\alpha_t}
+\frac{\sqrt{\overline{\alpha_{t-1}}}\ X_0}{1-\overline{\alpha_{t-1}}} })X_{t-1}
+C(X_0,X_t)
\end{aligned}
\]
首先, 方差肯定是二次项系数的倒数了:
\[
\Var=\lr({ \frac{\alpha_t}{1-\alpha_t} + \frac{1}{1-\overline{\alpha_{t-1}}} })^{-1}
=\lr({\frac{1-\overline{\alpha_t}}{(1-\alpha_t)(1-\overline{\alpha_{t-1}})}})^{-1}
=\frac{(1-\alpha_t)(1-\overline{\alpha_{t-1}})}{1-\overline{\alpha_t}}
\]
均值则为
$$
\text{Mean}=\displaystyle{\frac{ \displaystyle\frac{\sqrt{\alpha_t}\ X_t}{1-\alpha_t}
+\frac{\sqrt{\overline{\alpha_{t-1}}}\ X_0}{1-\overline{\alpha_{t-1}}} }
{\displaystyle \frac{\alpha_t}{1-\alpha_t} + \frac{1}{1-\overline{\alpha_{t-1}}} }}
=\frac{(1-\overline{\alpha_{t-1}})\sqrt{\overline{\alpha_{t}}}}{1-\overline{\alpha_{t}}}X_t
+\frac{(1-\alpha_t)\sqrt{\overline{\alpha_{t-1}}}}{1-\overline{\alpha_{t}}}X_0
$$
这下得到了一个非常对称的形式. 不过还有一个问题, 我们这里好像一步到位了? 我们直接就把 \(X_0\) 作为估计条件用上了, 步子迈得这么大, 效果不会很好的. 事实上, 我们是在根据加上去的噪声 \(\ve\) 作估计. 所以, 由 \(X_t=\sqrt{\overline{\alpha_t}}\cdot X_0+\sqrt{1-\overline{\alpha_t}}\cdot\ve\), 我们把 \(X_0\) 替换掉:
\[
\begin{aligned}
\text{Mean}
=&\ \frac{(1-\overline{\alpha_{t-1}})\sqrt{{\alpha_{t}}}}
{1-\overline{\alpha_{t}}}X_t
+\frac{(1-\alpha_t)\sqrt{\overline{\alpha_{t-1}}}}
{1-\overline{\alpha_{t}}}X_0\\
=&\ \frac{(1-\overline{\alpha_{t-1}})\sqrt{{\alpha_{t}}}}
{1-\overline{\alpha_{t}}}X_t
+\frac{(1-\alpha_t)\sqrt{\overline{\alpha_{t-1}}}}
{1-\overline{\alpha_{t}}}
\lr({\frac{1}{\sqrt{\overline{\alpha_t}}}
(X_t-\sqrt{1-\overline{\alpha_t}}\cdot\ve)})\\
=&\ \lr({\frac{(1-\overline{\alpha_{t-1}})\sqrt{{\alpha_{t}}}}
{1-\overline{\alpha_{t}}}
+\frac{(1-{\alpha_{t}})\sqrt{\overline{\alpha_{t-1}}}}
{(1-\overline{\alpha_{t}})\sqrt{\overline{\alpha_{t}}}}})X_t
-\frac{(1-{\alpha_{t}})\sqrt{\overline{\alpha_{t-1}}}}
{\sqrt{1-\overline{\alpha_{t}}}\cdot\sqrt{\overline{\alpha_{t}}}}\cdot\ve\\
=&\ \frac{(1-\overline{\alpha_{t-1}})\ \sqrt{{\alpha_{t}}}\cdot\sqrt{\overline{\alpha_{t}}}
+(1-\alpha_t)\sqrt{\overline{\alpha_{t-1}}}}
{1-\overline{\alpha_{t}}}\cdot\frac{1}{\sqrt{\overline{\alpha_{t}}}}\ X_t
-\frac{(1-{\alpha_{t}})}
{\sqrt{1-\overline{\alpha_{t}}}\cdot\sqrt{{\alpha_{t}}}}\cdot\ve\\
\end{aligned}
\]
其中,
\[
\begin{aligned}
&(1-\overline{\alpha_{t-1}})\ \sqrt{{\alpha_{t}}}\cdot\sqrt{\overline{\alpha_{t}}}
+(1-\alpha_t)\sqrt{\overline{\alpha_{t-1}}}\\
=&\ \sqrt{{\alpha_{t}}}\cdot\sqrt{\overline{\alpha_{t}}}\
-\ \sqrt{\overline{\alpha_{t-1}}}\cdot \overline{\alpha_t}\
+\ \sqrt{\overline{\alpha_{t-1}}}\
-\ \sqrt{{\alpha_{t}}}\cdot\sqrt{\overline{\alpha_{t}}}\\
=& \sqrt{\overline{\alpha_{t-1}}}\cdot(1-\overline{\alpha_{t}})
\end{aligned}
\]
从而化简得:
\[
\boxed{\text{Mean} = \frac{1}{\sqrt{\alpha_t}}\lr({X_t-\frac{1-{\alpha_{t}}}
{\sqrt{1-\overline{\alpha_{t}}}}\cdot\ve})}
\]
以及方差:
\[
\boxed{\Var=\frac{(1-\alpha_t)(1-\overline{\alpha_{t-1}})}{1-\overline{\alpha_t}}
\xlongequal{def}\frac{1-\overline{\alpha_{t-1}}}{1-\overline{\alpha_t}}\cdot\beta_t}
\]
这个结果如此优美, 一方面是参数 trick 猛猛发力的结果, 另一方面是 Gaussian 的简洁性质带来的便利, 我们竟然只需要做一个对二次型 (平方项) 配方这一完全初等的动作, 就能得到这个优雅且重要的结论. 甚至连东北雨姐也忍不住赞叹:
艾玛太带派了老铁!你瞅你给我这大公式造得水灵灵,
雨姐这43码大汗脚好悬没让你给化简到三寸了嗷
