扩散模型实战(一):基本原理介绍

news2024/9/23 1:39:24

       扩散模型(Diffusion Model)是⼀类⼗分先进的基于物理热⼒学中的扩散思想的深度学习⽣成模型,主要包括前向扩散和反向扩散两个过程。⽣成模型除了扩散模型之外,还有出现较早的VAE(Variational Auto-Encoder,变分⾃编码器)和GAN(Generative Adversarial Net,⽣成对抗⽹络)等。

生成模型

       在深度学习中,⽣成模型的⽬标是根据给定的样本(训练数据)⽣成新样本。⾸先给定⼀批训练数据X,假设其服从某种复杂的真实分布p(x),则给定的训练数据可视为从该分布中采样的观测样本x。如果能够从这些观测样本中估计出训练数据的真实分布,不就可以从该分布中源源不断地采样出新的样本了吗?⽣成模型实际上就是这么做的,它的作⽤是估计训练数据的真实分布,并将其假定为q(x)。在深度学习中,这个过程称为拟合⽹络。

       那么问题来了,怎么才能知道估计的分布q(x)和真实分布p(x)的差距⼤不⼤呢?⼀种简单的思路是要求所有的训练数据样本采样⾃q(x)的概率最⼤。这种思路实际上来⾃统计学中的最⼤似然估计思想,它也是⽣成模型的基本思想之⼀,因此⽣成模型的学习⽬标就是对训练数据的分布进⾏建模。

扩散过程

       最⼤似然估计思想已经在⼀些模型(如VAE)上应⽤并取得了不错的效果。扩散模型可看作⼀个更深层次的VAE。扩散模型的表达能⼒更加丰富,⽽且其核⼼在于扩散过程。

       扩散的思想来⾃物理学中的⾮平衡热⼒学分⽀。⾮平衡热⼒学专⻔研究某些不处于热⼒学平衡中的物理系统,其中最为典型的研究案例是⼀滴墨⽔在⽔中扩散的过程。在扩散开始之前,这滴墨⽔会在⽔中的某个地⽅形成⼀个⼤的斑点,我们可以认为这是这滴墨⽔的初始状态,但要描述该初始状态的概率分布则很困难,因为这个概率分布⾮常复杂。随着扩散过程的进⾏,这滴墨⽔随着时间的推移逐步扩散到⽔中,⽔的颜⾊也逐渐变成这滴墨⽔的颜⾊,如图1-1所示。此时,墨⽔分⼦的概率分布将变得更加简单和均匀,这样我们就可以很轻松地⽤数学公式来描述其中的概率分布了。

       在这种情况下,⾮平衡热⼒学就派上⽤场了,它可以描述这滴墨⽔随时间推移的扩散过程中每⼀个“时间步”(旨在将连续的时间过程离散化)状态的概率分布。若能够想到办法把这个过程反过来,就可以从简单的分布中逐步推断出复杂的分布。

     公认最早的扩散模型DDPM(Denoising Diffusion Probabilistic Model)的扩散原理就由此⽽来,不过仅有上述条件依然很难从简单的分布倒推出复杂的分布。DDPM还做了⼀些假设,例如假设扩散过程是⻢尔可夫过程 (即每⼀个时间步状态的概率分布仅由上⼀个时间步状态的概率分布加上当前时间步的⾼斯噪声得到),以及假设扩散过程的逆过程是⾼斯分布等。

图片

图1-1 一滴墨水在水中扩散分布的示意图

       DDPM的扩散过程如图1-2和1-3所示,具体分为前向过程和反向过程两部分。扩散模型是一种潜变量模型,它使用固定的马尔可夫链映射到潜在空间。该链逐步向数据中添加噪声,以获得近似后验值,其中为与x0具有相同维数的潜变量。在下面的图中,我们可以看到这样一个马尔可夫链。

图片

图1-2 前向过程

       最后,图像逐渐变为纯高斯噪声。训练扩散模型的目标是学习逆向过程,即训练。通过沿着这条链向后遍历,我们可以生成新的数据。

图片

图1-3 反向过程

1)前向过程

       前向过程是给数据添加噪声的过程。假设给定一批训练数据,数据分布为x_0\sim q(x_0),其中,0表示初始,即还没有开始扩散。如前所述,将前向加噪过程分为离散的多个时间步 T ,在每一个时间步 t ,给上一个时间步t-1的数据x_{t-1};添加高斯噪声,从而生成带有噪声(简称"带噪")的数据x_t,同时数据x_t ,也会被送入下个时间步 t +1以继续添加噪声。其中,噪声的方差是由一个位于区间(0,1)的固定值\beta _t确定的,均值则由固定值\beta _t和当前时刻"带噪"的数据分布确定。在反复迭代和加噪(即添加噪声) T 次之后,只要 T 足够大,根据马尔可夫链的性质,最终就可以得到纯随机噪声分布的数据,即类似稳定墨水系统的状态。

      接下来,我们用简单的公式描述一下上述过程。从时间步 t -1到时间步 t 的单步扩散加噪过程的数学表达式如下:

图片

       最终的噪声分布数学表达式如下:

图片

2)反向过程

       前向过程是将数据噪声化的过程,反向过程则是"去噪"的过程,即从随机噪声中迭代恢复出清晰数据的过程。

       要从采样自高斯噪声x_t\sim \mathbb{N}(0,I)的一个随机噪声中恢复出原始数据x_0,就需要道反向过程中每一步的图像分布状态转移。类似地, DDPM 也将反向过程定义为一个马尔可夫链,只不过这个马尔可夫链是由一系列用神经网络参数化的高斯分布组成的,也就是需要训练的扩散模型。

       从时间步 t 到时间步 t -1的单步反向"去噪"过程的数学表达式如下:

图片

       由于反向过程的每一步都是参数化的高斯分布,因此可以分别求高斯分布的均值和方贝叶斯公式推导的过程,最终得到时间步 t -1的高斯分布 q(x_{t-1}|x_t,x_0),的均值和方差的数学公式如下:

图片

       可以看出,方差是一个定量(扩散过程参数固定),而均值是一个依赖于x_0 和x_t的函数,因此需要使用扩散模型来优化参数。

3)优化目标

       扩散模型预测的是噪声残差,即要求后向过程中预测的噪声分布与前向过程中噪声分布的“距离”最小。

       下面我们从另一个角度来看看扩散模型。如果把中间产生的变量看成隐变量的话,那么扩散模型其实是一种包含 T 个隐变量的模型,因此可以看成更深层次的 VAE ,而 VAE 的损失函数可以使用变分推断来得到变分下界( variational lower bound )。

       扩散模型的最终优化目标的数学表达式如下:

图片

     可以看出,在训练 DDPM 时,只要用一个简单的 MSE ( Mean Squared Error ,均方误差)损失来最小化时向过程施加的噪声分布和后向过程预测的噪声分布,就能实现最终的优化目标。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/839866.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【TypeScript】初识TypeScript和变量类型介绍

TypeScript 1,TypeScript是什么?2,类型的缺失带来的影响3,Ts搭建环境-本博主有专门的文章专说明这个4,使用tsc对ts文件进行编译5,TS运行初体验简化Ts运行步骤解决方案1解决方案2(常见) 开始学习…

【探索Linux】—— 步步学习强大的命令行工具 P.1(Linux简介)

目录 前言 一、Linux简介 二、linux的不同发行版本 三、Linux的开源性质 四、Linux的特点 五、Linux代码演示(仅供参考) 总结 前言 前面我们讲了C语言的基础知识,也了解了一些数据结构,并且讲了有关C的一些知识&#xff…

如何将本地的conda算法库打包到无网络的服务器用于部署

如何将本地的conda算法库打包到无网络的服务器用于部署 1、先安装conda-pack库,2、将本地的虚拟环境进行打包3、登录远程服务器,切换到conda安装目录,将本地生成的tar文件复制到该目录下4、新建文件夹,例如yus_env,这个…

并查集练习 —岛屿数量(解法一)

题目: 给定一个二维数组matrix(char[][]),里面的值不是1就是0,上、下、左、右相邻的1认为是一片岛。返回matrix中岛的数量。 本题共有2种解法,本篇先介绍最快的一种解法—递归。 分析: 递归的方…

65 # 实现 http-server 里的 gzip 压缩

用 zlib 来实现 gzip 压缩 服务端优化都是:压缩 缓存 前端可以通过 webpack 插件进行压缩 gzip 根据替换来实现的,重复率越高,压缩后的结果越小 const zlib require("zlib"); const fs require("fs"); const path …

K8S kubeadm搭建

kubeadm搭建整体步骤 1)所有节点进行初始化,安装docker引擎和kubeadm kubelet kubectl 2)生成集群初始化配置文件并进行修改 3)使用kubeadm init根据初始化配置文件生成K8S的master控制管理节点 4)安装CNI网络插件&am…

分页Demo

目录 一、分页对象封装 分页数据对象 分页查询实体类 实体类用到的utils ServiceException StringUtils SqlUtil BaseMapperPlus,> BeanCopyUtils 二、示例 controller service dao 一、分页对象封装 分页数据对象 import cn.hutool.http.HttpStatus; import com.…

EditPlus连接Linux系统远程操作文件

EditPlus是一套功能强大的文本编辑器! 1.File ->FTP->FTP Settings; 2.Add->Description->FTP server->Username->Password->Subdirectory->Advanced Options 注意:这里的Subdirectory设置的是以后上传文件的默认…

C. Mark and His Unfinished Essay - 思维

分析: 直接模拟操作会mle,可以每次复制记录对应源字符串的下标,可以记录每次字符串增加的长度的左右端点下标,可以发现左端点与读入的l是对应的,因此就可以向前移到l的位置,这样层层递归,就能找…

HCIE-Datacom真题和机构资料

通过认证验证的能力 具备坚实的企业网络跨场景融合解决方案理论知识,能够使用华为数通产品及解决方案进行企业园区网络、广域互联网络及广域承载网络的规划、建设、维护及优化,能够胜任企业网络全场景专家岗位(包括客户经理、项目经理、售前…

jenkins安装部署

安装jdk 方式一:压缩包 cd / mkdir java_home cd / cd java_home tar -zxvf jdk-8u311-linux-x64.tar.gz ls 修改配置 vi /etc/profile 最后一行追加内容: #Java Env export JAVA_HOME/java_home/jdk1.8.0_311 export JRE_HOME${JAVA_HO…

微波光子的参数:动态范围

微波光子的参数:无杂散动态范围 无杂散动态范围的定义 微波光子链路中的非线性失真主要由电光调制器的非线性调制产生,这些非线性失真可以分为谐波失真和交调失真两类。图1.2(a)给出了光信号在调制器内被一个频率为10 GHz的射频…

两个PPT内置神器,速成页面排版

1.word转PPT (1)调整word文字层级 word中设置好文档一级标题、二级标题、正文等层级。 tips:大纲视图,ctrl选中多个文字,可以同时定义标题层级。 (2)ppt中导入word文档 (3&#x…

webpack基础知识五:说说Loader和Plugin的区别?编写Loader,Plugin的思路?

一、区别 前面两节我们有提到Loader与Plugin对应的概念,先来回顾下 loader 是文件加载器,能够加载资源文件,并对这些文件进行一些处理,诸如编译、压缩等,最终一起打包到指定的文件中plugin 赋予了 webpack 各种灵活的…

esp32c3 xiao 脚本记录

oled显示网络时间, wifi链接网络 // ntp_get_date.h #include "time.h"String week[8] {"Sun", "Mon", "Tues", "Wednes", "Thur", "Fri", "Sat" };void printLocalTime(Adafruit_SSD1306 …

[ MySQL ] — 数据库环境安装、概念和基本使用

目录 安装MySQL 获取mysql官⽅yum源 安装mysql yum 源 安装mysql服务 启动服务 登录 方法1:获取临时root密码 方法2:无密码 方法3:跳过密码认证 配置my.cnf 卸载环境 设置开机启动(可以不设) 常见问题 安装遇到秘钥过期的问题&…

C语言阶段性测试题

大家好,我是深鱼~ 【前言】:本部分是C语言初阶学完阶段性测试题,最后一道编程题有一定的难度,需要多去揣摩,代码敲多了,自然就感觉不难了,加油,铁汁们!!&…

2023-08-05——JVM 栈

栈 stack 栈:数据结构 程序数据结构算法 栈:先进后出,后进先出 好比一个:桶 队列:先进先出(FIFO :First Input First Out) 好比一个:管道 栈:喝多了吐。队列…

Qt 信号与槽

信号与槽(signal & slot)是Qt编程的基础,使Qt中处理界面各个组件的交互操作变得更加直观和简单。 信号(Signal)就是在特定情况下被发射的事件,如PushButton最常见的信号就是鼠标单击时发射的clicked()…

K8S系列文章之 服务部署核心概念

主要讲述如何在K8s中部署应用。 首先,我们在实战项目中经常会用到的一些概念 PodDeploymentServiceNamespacesDNS 使用上一篇文章,我们重建Kind K8s环境,并部署一个可以从本地访问的简单网页,加深理解。 环境(配置) centos7Doc…