跳转至
\[ \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码大汗脚好悬没让你给化简到三寸了嗷

image-20250716000312637