前面讲到diffusion算法当中的学习目标是最小化KL divergence(choosing random noise Xy),并且采样生成图片的过程就是通过对p theta进行逆采样的方式来实现的。
逆采样就是要知道逆过程对应的条件概率,p theta xt-1xt,所以在KL divergence的表达式当中自然就想到要把分母按照逆过程的形式展开,毕竟逆过程的条件概率就是要求的东西。
注意展开本质上其实是一个假设,也就是逆过程并不一定要是马尔可夫链(Markov chAIn),蛮横无理的认为它就应该符合马尔可夫链的展开形式,然后再进一步求解,所以它是一个假设。
这种假设对应的生成方式叫做DDPM(Denoising Diffusion Probabilistic Model),比如在设置stable diffusion参数的时候其中有一个叫采样方法,它的有个选项就是DDPM。如果对p theta的展开形式做其他假设就会得到其他的采样方法,比如DDIM就是对应的其他的一种形式的展开方法。
在教程里只介绍DDPM,因为一方面DDPM这种方法是最基本也是最直观的一种采样方法,另一方面只要对DDPM理解足够透彻,其他采样方法只要看看论文,相信想把它搞懂也不是那么难,毕竟它们的本质的思想是一致的,只不过在一些数学的细节的处理方法上有些不同而已。
下面就来按照DDPM的展开形式来接着往下推导,还记得在很久很久以前给出了这个,正向马尔可夫列的展开形式吗?对。现在终于派上用途了,把展开形式带入到分子当中来,稍加整理就得到了下面这样一个表达式。
大家注意到后面这个因子其实有一点像kldivergence,但是它不是,因为这里的分母是PC,XT减1XT,描述的是呃逆采样的过程。所以如果它的分子也是逆过程,比如它是qXT-1XT,那么它就是定义良好的KLdivergence。可惜它不是,因为这里的qxtxt减一顺序反了,看来它不是。
有什么办法可以弥补吗?还真有,通过一通"*操作"之后可以得到下面这个表达式。注意橙色的分子箱虽然多了一个X0,但好在这里的XT减一和XT的顺序对了,也就是这个时候它的分子确实是描述逆过程了。并且还"意外地"发现这里的qxtxt减1x0居然是已知的,就是这里站在旁边等了很久的橙色的表达式。
当然了,前面这一项好像有点啰嗦,但是可以证明只要选定B1=0,那么前面这一项就和待拟合的参数theta是无关的。所以就是这么霸气,就直接把它给忽略掉了。所以损失函数("loss function")也就是这里最小化的目标Ltheta,也就简化成了这样一种形式。
其中这里的每一项把它标记为Lthetat,注意可以证明这里的每一项It都是非负的,是不是又是熟悉的味道?之前讲KLdivergence含义的时候,就提到KLdivergence有一个非常好的性质,就是它一定是非负的。所以对于挤压Ltheta让损失函数最小化的目标就可以通过最小化这里的每一项L thetat来实现。也就是把最小化损失函数的问题就给进一步拆解成最小化每一项这样一个问题了。
这里要强调的是能做拆解的前提就是这里的每个Lthetat都是非负的。其实这个证明我在论文里其实是没有找到的,所以我就自己推了一下。所以如果对这个证明感兴趣,自己又懒得推,可以在评论区留言,我会把详细的推导发给你。
既然现在问题已经拆解了,只需要集中注意力来分析L theta t就可以了。这里的分子就是刚才提到的最右边的橙色表达式,分母ptheta是用来拟合的条件概率函数。因为想把期望的表达式直接给推导出来,所以进一步假设条件概率还是有一个高斯分布的形式。
p thteta所有待拟核的参数theta都被吸收在这里的分布中心mu theta因子当中了。有没有发现这里推的好像就赖上高斯分布了,遇到任何处理不了的奇葩就把它引向高斯分布。这个其实是diffusion算法推导过程当中的一个小伎俩。因为其他概率函数形式本质上是不知道怎么处理的,只会处理高斯分布,所以不赖你赖谁?这就叫一招鲜,吃遍天。
假设也就是PC取高斯分布的假设在什么条件下是合理的?其实前人已经在论文当中已经证明了,当造点水平不大的时候,也就是在正向采样的过程当中,Xt和Xt-1差别不大的时候,逆过程也符合高斯分布,它就是一个合理的假设。
这个证明就不具体展开讲了,因为太过琐碎了,这也是为什么在采样参数的选择过程当中,每个p theta的取值都不会取太大,比如取值一般都是零点零几,零点零零几这个样子,也就是这个原因导致的,因为需要这样一个假设。
有了关于p theta假设以后,就可以直接去积分求解这样一个期望值了,因为这里的数学步骤有一点繁琐,就不把这里的详细的数学步骤给写出来了。同样,如果你感对具体的数学推导比较感兴趣,也可以留言直接问我要这个推导。
总之,最终积分出来的结果是异常简单的,就是这样一个类似方差的表达式。旁边紫色的公式已经站了半天了,现在就把紫色的公式给它带进来,同时把绿色的miu theta写成这种和紫色公式类似的形式,可以把这个公式就看作是关于ipsum随它这个函数的定义,就是这么样规定的。
然后就得到了下面这样一个表达式,注意前面提到epsilont的时候,它的含义是表示的是朝X0添加的噪点,所以这里最小化L thetat的含义也就变得非常直观了,就是让epsilon theta和噪点epsilont越接近越好。
因此epsilont可以看作是噪点epsilont的预测函数,就是要来预测这样一个添加的噪点,噪点的预测函数在编程环节会把它用一个神经网络来给它表示出来。总之根据前面的数学推导就可以把整个训练过程给它描述出来了。也就是这里表述的这样的形式,这里我就不读了,大家可以自己去看。
同样的推理过程可以表示成这样一种形式,在这一节里我已经把数学方面能够细化的地方也尽量细化了,但是相信大多数没有接触过Defusion算法同学看到这里可能还是会有点懵对不对?这很正常,我第一遍看Defusion算法论文的时候也有点看天书的感觉,遇到这种情况我的建议一般就是你再多看几遍就自然能够看懂了。
所以这个视频如果你一遍没看懂可以先把这个教程收藏起来,然后我可以保证的是diffusion算法最核心的思想和数学公式在这个视频里已经全部包含了,所以收藏以后你可以边看边思考,然后再多看几遍,相信你就能够彻底理解diffusion算法了。
如果你还是觉得有些地方我没有讲清楚也欢迎留言,我们一起讨论,下一集就可以正式开始讲解编程了。最后再打个广告,如果喜欢我的视频欢迎关注,带你了解最硬核的AI知识,我们下节课见。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved