-
基本概念
-
与VAE比较
-
Diffusion Model算法
详细说明每行的意思
Training
1:循环执行2-5
2:sample一张干净的图片(一般用x0表示一张干净的图,就是资料库里的图
3:从1到T中取一个整数作为t
4:从平均值(mean)=0,方差(variance)=1的normal distribution中sample出ε,大小与image一致,是一张全是噪音的图片
5:红框:x0与ε做梯度下降(其中weight是事先定好的从α1到αT),得到带有噪音的图片(α越大得到的图片带有的噪音占比越大);εθ(…):预测生成的噪音图片;ε:目标噪音;ε-εθ(…):目标与预测之间的差距
第5行式子详细展开
真实Training的过程与之前想象的过程不太一样
为什么不一样可以看下一节的数学推导(数学警告!!!),不知道也不影响,只是要知道真实训练是什么样的。
Sampling:
1:先从normal distribution中sample一张全是噪音的图像xT
2:循环T次,denoise
3:从normal distribution中sample一张噪音图像z
4:带入计算得到下一次循环的图像xt-1;εθ(…):预测生成的噪音图片;xt:上一张图像
Q:为什么还要加上σtz这一项?
A:下一节详细说明
第4行式子详细展开
- 影像生成模型本质上的共同目标:从distribution中sample一个向量,输入神经网络,输出图像x,无数x构成一个生成图像的分布,而我们的目标就是找一个分布,越接近真实图像分布的越好
同理由文字生成图像
文字只是相当于加入了一个条件限制(condition)
Q:这么衡量真实的与寻找的distribution之间的相似度呢?
A:最大似然估计Maximum Likelihood Estimation
θ*的详细计算(数学警告!)
补充:
倒数第二行增加了与θ无关的一项,为了能将式子合并;
kl divergence:KL散度,用来衡量两个概率分布之间的差异,KL越大,分布差异越大,可以理解为最大似然估计=最小KL散度(Maximum Likelihood=Minimize KL Divergence)
先看一下VAE是怎么计算Pθ(x)的
(我有一篇写过VAE,请见:https://blog.csdn.net/Transfattyacids/article/details/130473587)
- DDPM(Denoising Diffusion Probabilistic Models)的计算
同理可得DDPM的下界
现在开始对演算公式进行详细说明
下图为前向扩散的示意图
即,下一个生成图像=高斯分布(随机变量,均值,方差)
其中β是一个已经设定好的超参数序列,从1到T,逐渐增大(DDPM中,β1=0.0004,βT=0.02)
我们会发现,噪声只由β序列和xt-1所决定(固定的而非可学习的过程),且生成xt-1时只依赖于xt,可以得出在添加噪声的过程中,是一个马尔科夫链过程,进而得出在计算xt时不需要逐步计算至xt,只需知道x0和β序列即可得出xt(下图中两次生成的噪音是相互独立的:Ind.)
红框内两个噪音可以合并为一个
以此类推,从x0到xt是可以通过一次sample,一步到位的
我们的目标是求lower bound的最大值
对其进行变换,附计算过程(看看就好)
论文地址:https://arxiv.org/pdf/2208.11970.pdf
最后得到真正的lower bound
共有3项,其中与神经网络相关的有第1和3项(第1项计算过程类似3),所以目标转为maximum第3项
Q:蓝框中的式子怎么计算?
我们只知道前向传播的计算,即下述3项的计算
q(xt-1|xt,x0)的含义:已知x0和xt(中间过程不知道),求xt-1
通过上述3项得出q(xt-1|xt,x0)
得出式子
里面的3个q(…)的distribution都是已知的,开始进行计算(数学警告!带入硬推)
论文地址:https://arxiv.org/pdf/2208.11970.pdf
可得xt-1的Gaussian distribution的mean和variance
接下来计算KL散度(红框内容)
可以带入公式,也可以简化计算(目标:求KL散度的最小值)
思想:KL越小两个分布越接近,其中一个分布是固定的,另一个可以改变其mean值(variance不变),使两个分别越接近越好
所以我们就只需要训练Denoise Model,让两个distribution越接近越好
具体步骤:
Sample出x0,通过公式计算出xt
将xt与t输入Denoise,输出xt-1的mean的预测值
对mean的式子进行推算整理(替换x0)
注意,在得到的式子中只有ε是需要通过神经网络来预测的(其他的参数都是已经定好的或是可以推算出来的)
同时,我们也可以看到,得到的式子与上一节论文中给出的推演算法是一样的(红框内容)
补充:
Q:为什么不预测β(α=1-β)
A:论文在一开始有说明,训练β并不会带来更好的结果
Q:增加σtz(加入variance)的目的?(为什么不直接取mean?)
A:(论文中没有给出很明确的解答,以下为李宏毅老师的猜测)增加σtz相当于增加随机性,这样会使denoise的效果好