【Stable Diffusion原理剖析】李宏毅2023春机器学习课程笔记
考虑到个人在一些问题上需要李宏毅教授在2023年课程中讲到的内容补充,所以我会把部分李宏毅教授在2023年的课程内容提上来挑着学习,因为是挑着看的,我也不知道会不会全部看完,所以这里就不分EP了。课程的地址:【授权】李宏毅2023春机器学习课程_哔哩哔哩_bilibili。
前言
在2021/2022年的课程笔记博客里面我说听懂这门课需要有一点基本功,数学方面比如线性代数和概率论与统计这一方面的内容,但说是这么说,博主个人目前才区区大一,根本没有时间修概率论这方面的内容,但又偏偏恰好今天的博客是从数学和实操角度对Diffusion Model的原理解析,涉及到了大量概率论方面的推导。那这里我听课的时候也是迷迷糊糊的,读者也就不要指望这篇博客能说出什么东西了,您要是想看也可以当作一个参考。
DDPM中暗藏玄机
首先像说的是,对比Diffusion模型和VAE模型,其实你会发现两者很像,所以等会会对VAE做一点简单的说明。
那么现在我们来说一下DDPM这篇文章,我们之后的基本所有内容都是在简单解析这篇文章,DDPM对于图像生成领域来说是革命性的,原文最早发表于2020.6,这是最早将Diffusion Model运用在图像生成领域的文章!
那在之前浅谈Diffusion Model的原理的博客(【浅谈图像生成模型Diffusion Model原理】李宏毅2023春机器学习课程笔记 – -TobyKSKGD的个人博客-)的时候,我们最后是停在了DDPM的完整演算这里。
我们就从DDPM的演算开始说起,这里要说的就是仔细看这一篇演算就会发现里面是暗藏玄机的。
Training
我们之后会谈到为什么说这里暗藏玄机。我们先来看看这里的完整演算过程。
如下图,Training的第一步先是一个循环的说明,就是一直做2-5行的事情,直到聚合(converged)为止。
然后说两个定义,x0是我们真实的图像,我们一般会说是干净的图像。然后ε是杂讯。
第二步我们要做的就是从x0里面simple出来图像。
第三步我们会从1到T里面simple出来一个数字。
第四步是从一个normal distribution里面simple出来一个杂讯ε。这个distribution的平均mean是0,然后每一个维度的方差(variance)都固定是1。
接着我们就做一个运算。第五步里面这个红色框框里面在做的就是对x0和ε做权重相加(weight sum),就是把x0跟ε用某种比例混合起来得到一个有杂讯的图。然后这个权重weight是我们固定好的α从1到T由大到小排列起来的,T simple到越到就代表说杂讯加得越多。
然后下面是对以上过程更直观的写法。
实际上和现实的差别
在之前说概念的时候,我们说在训练的时候杂讯是一点点加进去的,然后去杂讯也是一点点去的。
但其实在实际上我们操作的时候,加杂讯和去杂讯都是一次性完成的。
Sampling
接着我们来看图像生成的过程。
首先第一步就是simple一个全部都是杂讯的图xT。
然后再是一个重复3-4步的说明。
接着simple出来一个杂讯图z。
然后我们看第四步里面,红色框框里面就是Denoise里noise predictor里输出的杂讯。这个式子再前面一点的这个xT就在前三个步骤里面跑出来的图。
在最后输出的时候,我们会再simple出来一个杂讯加到输出的影像里面去。这个步骤很奇怪啊,这也是这个DDPM里面暗藏玄机的地方。之后我们会说为什么要加这个杂讯进去。
Diffusion Model的原理剖析
影像生成模型本质上的共同目标
影像生成模型本质的共同目标就是先从distribution中simple出向量。然后经过影像生成的Network得到一个生成的图像的distribution。接着我们期望这个生成图像的distribution跟真实图像的distribution越接近越好。
之后我们加上我文字的情况也是差不多的,所以在时候的讲解中为了简洁,我们就先把文字输入的情况给省去了。
Maximum Likelihood Estimation
然后我们说影像生成模型的目标其实都是在做Maximum Likelihood Estimation。
这个Maximum Likelihood Estimation是这个样子的,我们先从真实图像分布中simple出一组图像。
接着我们先来做个定义,Pθ(x)是我们生成出来的图像的distribution,然后Pdata是真实图像的distribution。
现在假设我们可以计算从Pθ,也就是生成图像的distribution中simple出某个图像的概率,当然实际上因为这个Pθ很复杂,我们根本不知道这个Pθ长什么样子,也就无从计算这个概率。
然后Maximum Likelihood Estimation做的就是找一个θ,让Pdata中simple到的图产生出来概率最高。
你可能会问:让从Pdata中simple出来图像的几率越大越好,跟期望Pdata跟Pθ越接近越好有什么关系?
下面这个式子就是在解释这个问题。
上图这个红色框框就相当于Pdata跟Pθ的区别。
总之,经过上面的变化演算,所有影像生成模型的共同目标就是Maximum Likelihood Estimation,也就等同于Minimize KL Divergence。
VAE中计算Pθ(x)的方法
上面部分是我们一般想象的计算方法,但是因为simple出来的图像几乎不可能完完全全一模一样,所以上面的计算方法最后得到的很可能几乎都是0。
然后我们就会用下面这个方法。输入一个z经过Network,得到一个输出G(z),然后我们对这个G(z)做mean,就是Gaussian的Mean。
声明
接下去的地方很多都涉及概率论的推导,个人没听太懂,所以很多地方可能只会放一个课上的PPT。
logP(x)的下界
DDPM中计算Pθ(x)的方式
DDPM当中logP(x)的下限
这里面红色框框的q(x1😡T|x0)指的是x1😡T在给定干净的图像x0的情况下,x1😡T的分布。
q的计算方法
Maximize Eq的计算方式
整体的计算流程:
各个部分放大看:
这里是DDPM文献当中的推导过程。
最下面红色框框部分放大:
如何minimize KL divergence
下图中红色框框中的ε就是实际需要network predict的部分。
这里红色框框实际上对应的就是文献当中计算式的其中一部分:
暗藏玄机里面的奥秘
最后来看看为什么在输出的最后要给结果加一个simple出来的杂讯。也就是在最后的结果里面为什么不直接取Mean,为何不能一次到位?
声明一下,这里DDPM的原文文献里面其实没有讲啦,但是这里李老师做了一个猜想解释,我觉得很有道理,不过要是有错误绝对不是博主本人的错误!
那我们类比文字生成,我们不可以只选可能性最大的情况,不然生成出来的文章很可能跳帧,导致生成出来的文章一直不断复读一段文字。
然后语音处理方面也是一个道理。
所以我们给DIffusion Model的结果加噪,其实是为了加一点结果生成的随机性。
Diffusion Model也可以用在语音合成上
Diffusion Model用在文字处理上
这里要说的是,Diffusion Model不可以直接用在文字处理上面,要做出一些改变,这里就不细说了。
Diffusion Model的核心思想
通过前面的说明你会发现,Diffusion Model的创新点和重点是把AT的优势假如到NAT中。
其实只要用到这个思路,不仅仅是Diffusion Model,其它的Model也一样会有很不错的效果表现。
以上就是对于Diffusion Model的原理剖析。
太强了!
😂