DDPM

1. 大致流程

1.1 宏观流程

1.2 训练过程

1.3 推理过程

2. 对比GAN

2.1 GAN流程

2.2 相比GAN优点

训练过程更稳定,损失函数指向性更强(loss数值大小指示训练效果好坏)

3. 详细流程

3.1 扩散阶段

如下图,X0为初始干净图像,XT由X0逐步添加噪声所得到



具体到一次Xt-1到Xt的扩散过程如下图,Zt为此时刻添加的随机噪声(服从标准正态分布),β随着时间t从0到T的过程逐步线性增大,通常扩散次数T选择1000(2000也行),选择这样的次数主要是希望最后得到的是一个完全噪声的图片,而不是还能看出图片中的内容



如上得到了每一步之间的扩散步骤,那么由最初的X0扩散到最终的XT,推导过程如下:

  1. 先用α替换掉β

  2. Xt由Xt-2表示

  3. Xt由X0表示

  4. t换成T来表示(最终XT是一个服从标准正态分布的随机噪声,即可以约等于噪声Z,即αT拔约等于0)

3.2 去噪重建阶段

  1. 大体过程

    如下图,在去噪重建的过程中,先随机采样一个随机噪声XT,将XT放入U-Net预测噪声Z,然后将XT去除噪声Z得到XT-1,再将XT-1放入U-Net预测噪声...重复上述过程,直至最终预测出X0

  2. 用于预测噪声的U-Net如下,传入噪声Xt和t,t可以理解为positional embedding,因为在前向的扩散过程中每一时刻添加的噪声强度是不一样的,所以在进行预测的时候,预测出的每一时刻的噪声强度也是不一样的

  3. 如上我们已经可以使用U-Net预测出每一时刻的噪声了,那我们怎么通过预测出的噪声预测书上一时刻的图片呢?也就是怎么得到如下图的推理公式呢?

  4. 如下一系列图片即进行上述问题的推理

    首先观察如何从Xt得到Xt-1,利用贝叶斯公式进行如下转化



    然后根据如下扩散过程推出上述每一部分的表达式





    然后根据标准正态分布,求出整体表达式















    最终得出XT到XT-1的表达式



    如上,便完成了一次使用U-Net预测出的噪声对随机采样的噪声去噪,接下来就是从XT一直去噪到X0的过程

4. 论文算法

4.1 Training

实际的训练过程中,没有如上所描述的那样繁琐,总的来说如下:

repeat
在均匀分布T里随机采一个t
随机采样一个标准分布的噪声ε
使用t和ε计算出Xt
将Xt和t放入U-Net预测出噪声(εθ(Xt,t)即为U-Net)
计算εθ和ε损失
until 收敛

4.2 Sampling

去噪的生成过程中,需要注意一点,当逐步去噪到t=1时,不需要再随机采样一个标准正态分布的Z,因为此时求的是X0(最后的干净图片),干净图片再添加一个噪声就变得不干净了。

【Deep Learning】DDPM的更多相关文章

  1. 【Deep Learning】一、AutoEncoder

    Deep Learning 第一战: 完成:UFLDL教程 稀疏自编码器-Exercise:Sparse Autoencoder Code: 学习到的稀疏参数W1: 参考资料: UFLDL教程 稀疏自 ...

  2. 【Deep Learning】genCNN: A Convolutional Architecture for Word Sequence Prediction

    作者:Mingxuan Wang.李航,刘群 单位:华为.中科院 时间:2015 发表于:acl 2015 文章下载:http://pan.baidu.com/s/1bnBBVuJ 主要内容: 用de ...

  3. 【Deep Learning】林轩田机器学习技法

    这节课的题目是Deep learning,个人以为说的跟Deep learning比较浅,跟autoencoder和PCA这块内容比较紧密. 林介绍了deep learning近年来受到了很大的关注: ...

  4. 【Deep Learning】两层CNN的MATLAB实现

    想自己动手写一个CNN很久了,论文和代码之间的差距有一个银河系那么大. 在实现两层的CNN之前,首先实现了UFLDL中与CNN有关的作业.然后参考它的代码搭建了一个一层的CNN.最后实现了一个两层的C ...

  5. 【Deep Learning】Hinton. Reducing the Dimensionality of Data with Neural Networks Reading Note

    2006年,机器学习泰斗.多伦多大学计算机系教授Geoffery Hinton在Science发表文章,提出基于深度信念网络(Deep Belief Networks, DBN)可使用非监督的逐层贪心 ...

  6. 【deep learning】斯坦福CS231n—深度学习与计算机视觉(资料汇总)

    官网 链接:CS231n: Convolutional Neural Networks for Visual Recognition Notes: 链接:http://cs231n.github.io ...

  7. 【Deep Learning】RNN LSTM 推导

    http://blog.csdn.net/Dark_Scope/article/details/47056361 http://blog.csdn.net/hongmaodaxia/article/d ...

  8. 【Deep Learning】RNN的直觉理解

    https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/

  9. 【Deep learning】NLP

    http://www.tuicool.com/articles/EvaQJnJ http://cs224d.stanford.edu/syllabus.html

  10. 【deep learning学习笔记】注释yusugomori的DA代码 --- dA.h

    DA就是“Denoising Autoencoders”的缩写.继续给yusugomori做注释,边注释边学习.看了一些DA的材料,基本上都在前面“转载”了.学习中间总有个疑问:DA和RBM到底啥区别 ...

随机推荐

  1. Winform多线程访问UI控件问题

    Winform多线程无法访问UI控件,考虑使用委托方法解决.

  2. 【C++小程序】《我要抽签》b1.0做好了~

    也许是的,得横空出世了 如你所见 这款基于\(C++\)能模仿Mrs. Yao抽签系统的cpp终于做完了啦~ 初期功能很少.\(BUG\)极多. 所以为了您的体验:) 请遵守格式 代码: #inclu ...

  3. oracle从1到10生成顺序号

    oracle从1到10生成顺序号,脚本案例如下: select 'ABAB'|| lpad(level,5,0) as serial_no from dual connect by level< ...

  4. Bootstrap4布局(简要)

    目录 什么是Bootstrap 布局基础 布局容器 相应断点 z-index 网格系统 12栅格 重排序 列偏移 弹性盒子 什么是Bootstrap Bootstrap是目前最流行的一套前端开发框架, ...

  5. Delphi数据库备份

    此处代码只是测试代码,仅仅是测试 //环境:D7+SQL Server 2008 1 unit Unit1; 2 3 interface 4 5 uses 6 Windows, Messages, S ...

  6. input_subsys 输入子系统框架分析

    在linux内核中 已做好各类驱动的框架,驱动程序也属于内核的一部分,我们可以在原有的驱动上修改,来匹配我们自已的硬件,也可以自已编写符合内核驱动框架的驱动程序.出于学习的目的,便于更好的理解各类驱动 ...

  7. 西电oj109题处理字符串

    问题描述 从键盘输入一个字符串,将该字符串按下述要求处理后输出: 将ASCII码大于原首字符的各字符按原来相互间的顺序关系集中在原首字符的左边, 将ASCII码小于等于原首字符的各字符按升序集中在原首 ...

  8. 上位机-串口通信详解(以RS232为例))

    1.什么是串口通信? 写这个的时候我在想应该怎么解释串口通信,因为串口通信很多朋友不了解的原因是涉及到硬件的知识,对于没有相关专业知识的朋友很难理解串口通信.所以我这里只做部分的解释,需要了解更多硬件 ...

  9. egret 当前运行环境

    if(egret.Capabilities.runtimeType == egret.RuntimeType.WXGAME){}

  10. rosetta Resfile语法和约束

    介绍 参考:https://www.rosettacommons.org/docs/latest/rosetta_basics/file_types/resfiles resfile包含输入到Pack ...