当前位置: 首页 > news >正文

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

       扩散模型(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 ,均方误差)损失来最小化时向过程施加的噪声分布和后向过程预测的噪声分布,就能实现最终的优化目标。

相关文章:

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

扩散模型(Diffusion Model)是⼀类⼗分先进的基于物理热⼒学中的扩散思想的深度学习⽣成模型,主要包括前向扩散和反向扩散两个过程。⽣成模型除了扩散模型之外,还有出现较早的VAE(Variational Auto-Encoder,…...

解决npm ERR! code ERESOLVE -npm ERR! ERESOLVE could not resolve

当使用一份vue源码开发项目时,npm install 报错了 npm ERR! code ERESOLVEnpm ERR! ERESOLVE could not resolvenpm ERR!npm ERR! While resolving: vue-admin-template4.4.0npm ERR! Found: webpack4.46.0npm ERR! node_modules/webpacknpm ERR! webpack"^4.0…...

HttpServletRequest和HttpServletResponse的获取与使用

相关笔记:【JavaWeb之Servlet】 文章目录 1、Servlet复习2、HttpServletRequest的使用3、HttpServletResponse的使用4、获取HttpServletRequest和HttpServletResponse 1、Servlet复习 Servlet是JavaWeb的三大组件之一: ServletFilter 过滤器Listener 监…...

css在线代码生成器

这里收集了许多有意思的css效果在线代码生成器适合每一位前端开发者 布局,效果类: 网格生成器https://cssgrid-generator.netlify.app/ CSS Grid Generator可帮助开发人员使用CSS Grid创建复杂的网格布局。网格布局是创建Web页面的灵活和响应式设计的强…...

在java中如何使用openOffice进行格式转换,word,excel,ppt,pdf互相转换

1.首先需要下载并安装openOffice,下载地址为: Apache OpenOffice download | SourceForge.net 2.安装后,可以测试下是否可用; 3.build.gradle中引入依赖: implementation group: com.artofsolving, name: jodconverter, version:…...

手机变电脑2023之虚拟电脑droidvm

手机这么大的内存,装个app来模拟linux,还是没问题的。 app 装好后,手指点几下确定按钮,等几分钟就能把linux桌面环境安装好。 不需要敲指令, 不需要对手机刷机, 不需要特殊权限, 不需要找驱…...

HDFS中的sequence file

sequence file序列化文件 介绍优缺点格式未压缩格式基于record压缩格式基于block压缩格式 介绍 sequence file是hadoop提供的一种二进制文件存储格式一条数据称之为record&#xff08;记录&#xff09;&#xff0c;底层直接以<key, value>键值对形式序列化到文件中 优…...

【MySQL】检索数据使用数据处理函数

函数 与其他大多数计算机语言一样&#xff0c;SQL支持利用函数来处理数据。函数一般是在数据上执行的&#xff0c;它给数据的转换和处理提供了方便。 函数没有SQL的可移植性强&#xff1a;能运行在多个系统上的代码称为可移植的。多数SQL语句是可移植的&#xff0c;而函数的可…...

【嵌入式学习笔记】嵌入式入门6——定时器TIMER

1.定时器概述 1.1.软件定时原理 使用纯软件&#xff08;CPU死等&#xff09;的方式实现定时&#xff08;延时&#xff09;功能有诸多缺点&#xff0c;如CPU死等、延时不精准。 void delay_us(uint32_t us) {us * 72;while(us--); }1.2.定时器定时原理 使用精准的时基&#…...

GD32F103输入捕获

GD32F103输入捕获程序&#xff0c;经过多次测试&#xff0c;终于完成了。本程序将TIMER2_CH2通道映射到PB0引脚&#xff0c;捕获PB0引脚低电平脉冲时间宽度。PB0是一个按钮&#xff0c;第1次按下采集一个值保存到TIMER2_CountValue1中&#xff0c;第2次按下采集一个值保存到TIM…...

[RT-Thread]基于ARTPI的文件系统认识与搭建

[写作为了记忆,个人最终输出的内容往往是遗忘后最容易捡起的内容,故以此作文] 目录 [写作为了记忆,个人最终输出的内容往往是遗忘后最容易捡起的内容,故以此作文] 前提 内容 认识 基于ARTPI的文件系统的挂载 ROMFS与LFS. &#xff08;默认自动挂载,romfs可读不可写) 搭…...

动态规划+二分查找

题目描述&#xff1a;给定一个区间数组&#xff0c;[[1,2,3],[3,4,2],[2,4,4]]&#xff0c;每个区间有价值&#xff0c;求在获取k个区间的条件下面&#xff0c;求获得的最大的价值&#xff0c;关键是dp的定义和二分查找的写法&#xff08;小于tar额最右下标&#xff09; import…...

8.2小非农ADP数据来袭黄金将会如何表现?

近期有哪些消息面影响黄金走势&#xff1f;黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a; 周二(8月1日)现货黄金价格回落&#xff0c;原因是美元指数升创7月10日以来新高至102.43.美联储官员乐观言论夯实美国经济软着陆预期。此外&#xff0c;中国刺激措施将…...

linux启动oracle

一、启动方法 方法1&#xff1a; Sql代码 cd $ORACLE_HOME/bin #进入到oracle的安装目录 ./dbstart #重启服务器 ./lsnrctl start #重启监听器 ----------------------------------- 方法2&#xff1a; &#xff08;1&#xff09; 以oracle身份登录​​数据库​​&am…...

AssetBundleBrowser导入报错解决方案

第一次导入AssetBundleBrowser遇到报错有 Assets\Scenes\AssetBundles-Browser-master\AssetBundles-Browser-master\Tests\Editor\ABModelTests.cs(13,7): error CS0246: The type or namespace name Boo could not be found (are you missing a using directive or an assem…...

vue-baidu-map-3x 使用记录

在 Vue3 TypeScript 项目中&#xff0c;为了采用 标签组件 的方式&#xff0c;使用百度地图组件&#xff0c;冲浪发现了一个开源库 ovo&#xff0c;很方便&#xff01;喜欢的朋友记得帮 原作者 点下 star ~ vue-baidu-map-3xbaidu-map的vue3/vue2版本&#xff08;支持v2.0、v…...

《GPU并行计算与CUDA编程》笔记

第一个GPU程序 #include <stdio.h>__global__ void square(float* d_out,float* d_in){int idx threadIdx.x;float f d_in[idx];d_out[idx] f * f; }int main(int argc,char** argv){const int ARRAY_SIZE 8;const int ARRAY_BYTES ARRAY_SIZE * sizeof(float);// …...

Shell编程基础(十二)函数

函数 概念定义调用函数综合脚本 概念 和其他编程语言一样&#xff0c;函数作为一种封装代码块&#xff0c;以提高代码复用性和可维护性的存在。 记住一点&#xff0c;先定义&#xff0c;再使用 定义 shell 函数的创建方式 function 函数名 空格{ xxxx return 返回码&#x…...

【雕爷学编程】MicroPython动手做(33)——物联网之天气预报3

天气&#xff08;自然现象&#xff09; 是指某一个地区距离地表较近的大气层在短时间内的具体状态。而天气现象则是指发生在大气中的各种自然现象&#xff0c;即某瞬时内大气中各种气象要素&#xff08;如气温、气压、湿度、风、云、雾、雨、闪、雪、霜、雷、雹、霾等&#xff…...

Screens 4 for mac VNC客户端 强大的远程控制工具

Screens 4 for Mac 是一款功能强大的 VNC 客户端软件&#xff0c;为 Mac 用户提供了便捷的远程访问和控制解决方案。无论您是需要远程管理服务器、办公电脑&#xff0c;还是需要远程协助他人解决问题&#xff0c;Screens 4 都是您的理想选择。 Screens 4 for Mac具备简洁直观的…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...