基于贝叶斯公式推导Diffusion Model代码案例

Diffusion Model

注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark Flink Kafka Hbase Hive Flume等等~写的都是纯干货,各种顶会的论文解读,一起进步。
今天和大家分享一下基于贝叶斯公式推导Diffusion Model代码案例实战
论文:https://arxiv.org/pdf/2006.11239.pdf
#博学谷IT学习技术支持#


文章目录

  • Diffusion Model
  • 前言
  • 一、什么是Diffusion Model?
  • 二、前向过程
  • 三、逆向过程
  • 四、代码实战
  • 总结


前言

Diffusion Model,这个名字想必大家都听过吧,21年火到爆了,现在研究人也相当多。
目前来看主流的生成模型已经不咋用GAN了,最新的都是Diffusion Model。
GAN要训练俩网络,感觉难度较大,容易不收敛,而且多样性比较差,只关注能骗过判别器就得了。
Diffusion Model用一种更简单的方法来诠释了生成模型该如何学习以及生成,其实感觉更简单。


一、什么是Diffusion Model?

基于贝叶斯公式推导Diffusion Model代码案例_第1张图片
Diffusion Model主要用途和GAN一样,是一个生成模型,同样可以作为图像的超分辨率重构,DALLE 2中文字生成图片等,理念15年就开始有了,不过最近才开始火的,可能主要是因为DALLE 2的关系吧,因为DALLE 2没有采用GAN,而是采用了Diffusion Model。

二、前向过程

基于贝叶斯公式推导Diffusion Model代码案例_第2张图片

这里咱们先看前向过程,其实就是不断往输入数据中加噪声,最后就快变成了个纯噪声
每一个时刻都要添加高斯噪声,后一时刻都是由前一刻是增加噪声得到
其实这个过程可以看过咱们不断构建标签(噪声)的过程,后续会用到
基于贝叶斯公式推导Diffusion Model代码案例_第3张图片

前向过程这里写了一点简单的数学推导,主要是运用了高斯分布的一些性质。
其目的是只要有了原始输入X0的情况下,假设每一时间点的噪音都是服从高斯分布的,那么我就可以推出任意一个时间点的分布Xt或者Xt-1。

三、逆向过程

逆向过程主要要求的是,当Xt时刻输入一张噪音数据和假设已知X0的情况下,如何通过一步步推导,得到Xt-1的过程。
基于贝叶斯公式推导Diffusion Model代码案例_第4张图片

这里运用到了贝叶斯公式,高斯高斯的情况下,后验分布一定也是高斯分布的。
这里的X0是通过求计算Xt时候,求逆得到的。
基于贝叶斯公式推导Diffusion Model代码案例_第5张图片
虽然公式看上去复杂一点,但是无非是一些数学化简,因为一定能计算出高斯分布的期望和方差。
这里唯一推导不出的就是每一时刻的噪声。Zt其实就是我们要估计的每个时刻的噪声。

  1. 这家伙看起来无法直接求解,我们只能训练一个模型来计算了
  2. 这些相关论文里竟然都用Unet这种结构来玩的,可能是编码和解码看着比较舒服
  3. 模型的输入参数有两个,分别是当前时刻的分布和时刻t

也就是说只要我们计算出Zt,就能完成整个逆向过程。
通过一个Unet网络让模型给我们结果吧,模型的输入是每一时刻的Xt,输出是预测的Zt,我们在前向过程中已经有Zt的标签了,所以就是一个普通的监督学习模型。

接下来把这俩阶段汇总到一起,就是终极流程图了
分别对应咱们的前向和后向过程
基于贝叶斯公式推导Diffusion Model代码案例_第6张图片

四、代码实战

代码部分有点多,感兴趣的关注留言,我单独发你。
基于贝叶斯公式推导Diffusion Model代码案例_第7张图片
基于贝叶斯公式推导Diffusion Model代码案例_第8张图片基于贝叶斯公式推导Diffusion Model代码案例_第9张图片基于贝叶斯公式推导Diffusion Model代码案例_第10张图片


总结

今天和大家分享一下基于贝叶斯公式推导Diffusion Model代码案例实战。

你可能感兴趣的:(Python和人工智能,人工智能,python)