本文正在参加「金石计划 . 瓜分6万现金大奖」
碎碎念
不知道是哪个懒鬼,八月份的文章现在才开始看。
之前我写过诸多扩散模型相关的文章,比如
为了防止让人觉得我给自己的其他文章强行引流,所以你们想了解的自己翻翻看哦。我就假设你们都知道扩散模型是什么玩意儿啦。
论文简介
从DDPM开始呢,大家都认为扩散模型就是:一张图片给它一步一步加高斯噪声,当步骤足够多的时候,图片会趋近于纯高斯噪声。我们就可以学习一个模型,给他逐步降噪,直到恢复原图。
之后的诸多文章都是围绕这一点不断进行改进,好像大家都认为扩散模型就得配高斯噪声。但是今天这个文章就是告诉你,离开高斯噪声,扩散模型照样可以工作的。今天的主题是“没有谁离不开谁,扩散模型和高斯噪声也不是绝配”。
看一下下图,就是论文的作者发现,扩散模型的图像退化过程并不是强烈地依赖于其退化方法。
之前我们用的退化方法:添加高斯噪声。
作者团队试了一下:添加添加模糊、动物化、遮盖、像素退化、添加雪花噪点……我们将其称之为确定性退化。
通过这些尝试之后,作者团队发现,如果我们把这些退化都用起来,我们甚至可以构建整个生成模型家族了……
虽然我们将不确定性的噪声转化成了确定性退化,但是这些方法很容易就可以应用到扩散模型中。这一发现让研究人员开始对基于郎之万运动和变分推理的原始扩散模型(狭义扩散模型)提出质疑,也为广义扩散模型的发展奠定了基础。
算法描述
假设我们有一个来自于数据集的图像x0x_0,现在,我们设定退化过程为DD,我们训练的模型将数据重建的过程为RR。
那么对于任意一个数据应该有:
D(x0,0)=x0D(x_0,0) = x_0
R(xt,t)≈x0R(x_t,t) approx x_0
大白话讲就是,一个图x0x_0退化0步的时候还是x0x_0,一个xox_o退化t步得到xtx_t,如果我们
去重建它t步,那就会得到一个接近于x0x_0的图像。
这里我们将DD称为退化算子,将RR称为恢复算子。
在实际应用中,我们只需要通过参数为θ的神经网络实现以下优化目标:
minθEx∼X∥Rθ(D(x,t),t)−x∥min _theta mathbb{E}_{x sim mathcal{X}}left|R_theta(D(x, t), t)-xright|
- xx表示从分布Xmathcal X中采样的随机图像
- ‖·‖表示一个范数,在这个工作里用的是L1范数
因为RθR_theta只是经过一个简单的凸损失训练,因此当执行退化运算的次数t很大的时候,生成的结果会很差,所以作者团队对其采样算法进行了改进。
算法一就是普通的采样过程,我们可以在for循环那里看到,重建过程step是从t到1的,第s次重建获得x0^hat{x_0},x0x_0退化s-1次获得xs−1x_{s-1}。
算法二是cold diffusion改进的采样算法,我们还是只看for循环部分,前边的都一样,到了最后一步那里变了。
原来是我重建好的图像x^0hat x_0退化s-1步之后获得xs−1x_{s-1},现在变成了我们采样的中间结果,减去重建结果x^0hat x_0退化s步之后的结果,再加上重建结果x^0hat x_0退化s-1步之后的结果。可以将其理解为,图片真实退化过程相当于上一步结果减去退化算子DD在对应位置的一次操作。