目录
论文链接:https://arxiv.org/abs/2006.11239
扩散现象
物质将由高浓度区域向低浓度区域转移,直至均匀分布的现象。
向水中滴一滴墨水,墨水将弥散开来填满整杯水。
DDPM 思想
运用“扩散”的思想,向一张清晰的图片不断添加噪声,直至最终成为纯噪声。
大胆地假设,我们将该过程反过来,试图从一张纯噪声中一步步减去噪声,恢复出清晰的图片,
如果该假设可以实现,这正是生成图片 的过程!
前向过程(扩散过程)
前向过程以马尔可夫链描述 is fixed to Markov chain
该过程就是逐渐地加入高斯噪声(每一步都加,且都以权重 加入,该权重随步数
变化)
高斯噪声
高斯噪声是一种常见的随机噪声,也称为正态分布噪声。它是由高斯分布(正态分布)产生的随机信号。
如何理解?
比如,假设有一个温度传感器,它每隔一秒测量一次环境温度。由于环境中存在各种随机因素,例如气象条件的变化、电磁干扰等,这些随机因素会导致测量结果的一定程度的波动和不确定性。
如果我们将这些随机波动建模为高斯噪声,那么温度传感器的测量值就会呈现出高斯分布的特性。
即值的概率分布满足高斯分布。
回到式中
从标准高斯分布中 采样出第
步要加的噪声
并予以权重 ,分布变为
论文中文字部分未提及的是,往图片中加噪声时,图片也要予以权重
于是新图片 ,为
的分布加上了一个偏置,改变了均值
即 服从分布
于是就有了文中的式子
注意到,每一次添加噪声都是往里加高斯分布,而高斯分布的和仍是高斯分布,这样一来,只要我们有步数 ,我们便可以直接用
直接表达出
高斯分布的和
数学归纳法
这里文中用 代替了
推演得每一次加噪声就是在权重那里乘上新权重(连乘)
至此,无论多少步添加噪声,实际上都可以用公式一步算出最终图像
(如上图中最后一行所示)
参数的选择
文中没有将参数 /
设置为可学习的,而是设置为定值。
实施中将 设置为线性变大的小系数(从
到
)。
逆向过程(去噪过程)
我们想要逆向地,通过 得到
的分布,
前面我们做的一切都是正向的,会发现该逆向分布一时无法表达
等式右边的概率均是前向的,都可以用我们前面推导的表达式表达
也就是不同高斯分布的相乘相除
得出的分布表达式正比于(略去前面的系数)
拆开合并同类项,为 配方
的系数即是方差倒数
,再利用该方差去看第二项
的系数
可以得到均值 的表达式,再带入用
、 第
步加入噪声
表达的式子
这样,我们便获得了 分布的均值
该均值中的 是我们不知道的,在论文后续的说明中我们会知道
其实就是我们训练神经网络要预测的东西(通过
和
)
看回逆向过程的定义
看上图右边的式子,下标 代表参数通过神经网络学习
我们已经有了 ,对于方差
设置为了
,在实验中,
、
得到的结果都是相似的。
在前向过程参数的选择中,我们知道 其实设定成了不拿来给神经网络学习的常数,所以该方差事实上也是常数。
来看算法
左边是训练模型的过程
在我们的数据集中抽出样本
在 到
中随机选取一个整数
(注意是随机选取,该
仅是这张图片的加噪步数)
随机选取的步数 保证了模型的鲁棒性,避免了模型学到奇怪的东西比如我只要去掉某固定步数的噪声就可以完成任务
接着在高斯分布中采样一个噪声 ,即前文中的
让神经网络去学习预测噪声 ,其中
对与 ground truth 噪声取2-范数做梯度下降直至收敛
右边是模型的推理过程
从高斯分布中随机选取出噪声作为
对于从 到
的每一步,都从高斯分布中抽出一个
在前面逆向过程的推导我们有 的均值与方差
所以便有了式子
如此重复,直到求出 ,就是我们想要的图片。