Diffusion模型学习笔记

Diffusion模型学习笔记

首先来思考一个问题,如果一滴墨水在滴管上,旁边有一盆清水,我们可以认为这个系统很有”规律“。如果把墨水滴进清水里,墨水在清水中”扩散“看来,那么我们得到了一盘滴了墨水的清水。相对刚刚来说,可以感觉到这个体系更”复杂“了。

我们可以认为”滴加墨水“的这一步为”加噪“,很好理解,如同在水中增加了”噪音“一样。而困难的是如何对水进行”复原“,也就是把滴入水盆中的墨水”收回去“。

前向过程

为了完成”复原“的目的,我们首先需要有一些训练的内容。这其中包括原始图片和最后的噪音图片。

我们先来思考如何通过一个原始图片,得到一个最后的噪音图片。这个过程称为前向过程

我们可以认为图片的加噪是逐渐的,因此可以认为原始图片是\(x_0\),每一步在其中加噪得到下一张图片,\(x_1,x_2...\)然后得到最终的噪音图片\(x_N\)。其中自然而然地我们可以想到,加噪的“程度”需要一个单独的数据来调整。我们称这个程度为\(\beta\),同时\(\alpha_t=1-\beta_t\)。同时我们可以容易想到,随着图片中的噪音越来越多,想要让它更“复杂”,需要加的噪音也就越多,即\(\beta\)需要越来越大

\[x_t = \sqrt{a_{t}}x_{t-1}+\sqrt{1-a_t}z_1 \]

观察公式不难发现,\(x_t\)的关系与\(x_{t-1}\)也就是上一步的图片状态有关。那么我们来思考一下\(x_{t-1}\)的状态:

\[x_{t-1} = \sqrt{a_{t-1}}x_{t-2}+\sqrt{1-a_{t-1}}z_2 \]

那么我们带入一下可以发现:

\[x_t = \sqrt{a_ta_{t-1}}x_{t-2}+\sqrt{a_t(1-a_{t-1})}z_2+\sqrt{1-a_t}z_1 \]

\(z1,z2\)都服从高斯分布,我们发现它前面乘以了一个系数,那么这会导致方差改变。即\(z1,z2\)都服从以下分布:

\[N(0,1-\alpha_t)\\ N(0,\alpha_t(1-\alpha_{t-1})) \]

我们对其做加法得到:

\[x_t = \sqrt{a_ta_{t-1}}x_{t-2}+\sqrt{1-a_ta_{t-1}}z_2 \]

我们再次观察发现,\(x_t\)任意时刻的分布只需要知道初始分布\(x_0\)以及\(t\)

因为:

\[x_t = \sqrt{\overline a}x_0+\sqrt{1-\overline a}z_t \]

由此我们就发现可以快速地完成前向过程,即加噪的过程。

复原(Reverse)

接下来我们来思考一下复原的过程,从\(x_0\)可以快速地得到带噪音的图片\(x_T\),那么我们可以从\(x_T\)直接逆推得到\(x_0\)的情况吗?显然,这是不可以的。甚至即使是从\(x_T\)得到\(x_{T-1}\)也是靠“猜”的。那么,我们如何完成复原(reverse)的过程呢?

我们先不考虑\(x_T\)\(x_0\)的问题,我们来思考一下,如何得到\(x_{T-1}\)呢?

来回顾一下刚刚做的事情:我们完成了从\(x_{T-1}\)\(x_T\)的加噪变化,那么如何从\(x_T\)得到\(x_{T-1}\)呢?贝叶斯公式!

Training and Sampling

这里的数学过程太多了,我跳过了一下。

我们接下来思考,\(x_T\)是由\(x_0\)算出来的,\(x_T\)可以由上面的公式来被\(x_0\)代换。

到最后我们可以发现,还剩一个未知量无法解决:\(z_T\)

这个\(z_T\)也就是加入的噪音量,很显然这是不可以求解的,无法公式推导。

那么我们用神经网络去解决的,就是求近似的\(z_T\),也就是我们去求解这个噪音。

接下来就遇到了一个问题,怎么去用神经网络求这个\(z_T\)呢?怎么弄损失?用数据标注去搞?(这显然不行,有这本事可以人脑解决马赛克了)

我们再回头来看前向过程。我们的进行了一个用原始图像加噪的过程,聪明的你现在可能就想到解决方案了!

我们先用原始图像进行前向过程加噪,这时候我们的噪音是由我们自己加上去的,因此我们当然知道噪音\(z\)。我们得到噪音图片之后,再进行后向过程对图像进行复原,把复原之后的结果和我们加噪的实际结果进行对比,这样不就知道损失了吗!!!

我们再进行具体的Training的时候,要注意选取的的时刻\(t\)是随机的。因为如果固定\(t\)不变,容易让模型学到一些其他的特殊规律而不是普适的规律。

整个训练分为两个阶段

  1. Training。随机选取出时刻\(t\)进行前向过程,使用模型预测噪声,得出计算出的噪声与实际噪声的差值,传播到网络中更新参数。
  2. Sampling。通过刚刚Training得到的噪音\(z\)来进行reverse,进行后向过程
posted @ 2023-09-23 18:06  连海生  阅读(33)  评论(0编辑  收藏  举报