详解 Diffusion (扩散) 模型

alt

扩散模型是跨不同深度学习领域使用的生成模型。目前,它们主要用于图像和音频生成。最值得注意的是,这些模型是令人印象深刻的图像生成模型(例如 Dalle2 和稳定扩散)背后的驱动力。我相信您已经看过这些模型生成的闪烁图像。令人惊叹的结果证明了深度学习的进步是多么令人兴奋。

什么是Diffusion?

在物理学中,扩散只是任何事物的整体运动。 (原子,能量)从较高浓度的区域到较低浓度的区域。现在想象一下,将一小滴油漆滴入一杯水中,油漆的密度将集中在一个位置,但随着时间的推移,该滴将扩散到水中直至达到平衡。如果我们能逆转这个过程不是很好吗?不幸的是,这是不可能的。但扩散模型试图拟合一个模型,其最终目标是逆转这一过程。

其基本思想是通过迭代前向扩散过程系统地、缓慢地破坏数据分布中的结构。然后,我们学习反向扩散过程,恢复数据结构,产生高度灵活且易于处理的数据生成模型。

扩散模型尝试通过向原始图像迭代添加噪声来重现扩散过程。我们不断添加噪声,直到图像变成纯噪声。噪声由马尔可夫事件链定义。马尔可夫链是一种事件模型,其中每个时间步仅取决于前一个时间步。马尔可夫性质定义如下:

P(Xₙ = iₙ | Xₙ₋₁)

因此,任意满足上述条件的随机变量序列X₀,X₁,X2,…,Xₙ都可以被视为马尔可夫链。这种马尔可夫假设使得学习添加的噪声变得容易处理。在训练模型来预测每个时间步的噪声后,该模型将能够从高斯噪声输入生成高分辨率图像。总结一下:我们不断向图像添加噪声,直到只剩下纯粹的噪声。然后我们训练一个神经网络来消除噪音。因此扩散模型由两个阶段组成:

  1. 前向扩散过程
  2. 逆扩散过程

前向扩散过程

前向扩散过程是数据结构被破坏的阶段。这是通过应用从正态分布采样的噪声来完成的 - 最终图像随后将收敛到纯噪声 z ~ N(0, 1)。每个时间戳应用的噪声量不是恒定的。使用时间表来缩放平均值和方差。 OpenAI 的原始 DDPM 论文应用了线性调度。但 OpenAI 的研究人员再次发现,这会导致许多冗余的扩散步骤。因此,在他们的《改进的去噪扩散概率模型》论文中,他们实现了自己的余弦计划。

alt

前向过程定义为 q(xₜ|xₜ₋₁)。该函数只是在每个时间步 t 添加噪声。前向过程的数学定义如下:q(xₜ|xₜ₋₁) = N(xₜ; sqrt{1-βₜ}xₜ, βₜI)。您可能还记得在统计课上,正态分布是由均值和方差参数化的。 sqrt{1-βₜ}xₜ 是平均值。 βₜI 是方差。您在此等式中看到的 beta 只是范围在 0–1 之间的值 0<β₁<β2<…<β_T<1;贝塔值并不是恒定的,并且受“方差表”的调节。通常,您希望对每个时间步 t 重复此过程。只需一步即可完成这一过程将为我们节省大量计算量。让我们看看它是如何完成的。首先,我们定义 αₜ = 1-βₜ。然后我们可以定义所有 alpha 的累积乘积 α⁻ₜ = ∏aₛ 现在,使用重新参数化技巧,我们可以将上述公式重写如下:

alt

使用 alpha,我们可以将其重写为:

alt

正如您所猜测的,我们现在可以将其扩展到之前的时间步骤:

alt

使用所有 alpha 的乘积,最终方程将采用以下形式:

alt

逆扩散过程

如果通过计算 q(xₜ₋₁|xₜ) 来反转上述过程,那就太好了。不幸的是,这个计算需要每个时间步长。因此,我们恢复到学习近似这些条件概率的神经模型。在相反的过程中,神经网络将预测给定图像的平均值。神经网络将查看图像并尝试确定前向过程中该图像来自的图像分布。

alt

我们的扩散模型损失函数就是 -log(pθ(x₀))。问题在于扩散模型是潜变量模型,其形式如下:

alt

正如你所想象的,这种形式没有封闭的解决方案。解决这个问题的方法是计算变分下界。请注意,了解 VAE 的推导可以帮助您理解以下公式。整个逆过程定义为:

alt

由于这是联合分布,我们必须将每个逆过程相乘。请记住,pθ(xₜ₋₁|xₜ) 将您从“噪声较大”的图像变为“噪声较小”的图像。我提到了变分下界,但它是什么?在较高的层面上,假设我们有一个难以处理的函数 f(x)。如果我们能证明我们有一个小于 f(x) 的函数 g(x)。然后通过最大化 g(x),我们可以确定 f(x) 也会增加。让我们通过将 KL 散度添加到原始函数 f(x) = -log(pθ(x₀)) 来比较 -log(pθ(x₀))。

alt

通过贝叶斯定理重写KL散度,我们得到:

alt

所以我们的变分下界变成:

alt

我们现在的目标是将右侧转换为可分析计算的。让我们首先将日志重写为产品:

alt

使用对数乘积法则,我们可以重写右侧:

alt

取出求和的第一项,得到以下结果:

alt

使用贝叶斯定理重写 q(xₜ|xₜ₋₁) 并在 t = 0 时对输入图像进行调节:

alt

替代

alt

使用乘积法则:

alt

第二个求和可以进一步简化。取 T 等于任何数字,您会发现大部分项都被抵消了,您将得到以下结果:

alt

替换

alt

使用商规则,我们可以重写最后两项:

alt

您可以看到第一项和最后一项相互抵消。使用商规则的另一种用法来整理我们的公式:

alt

我们现在可以写出 KL 散度的对数项:

alt

DDPM 论文的作者忽略了第一项。如上所述,项 pθ(xₜ₋₁|xₜ) 可以重写为预测均值的神经网络:

alt

q(xₜ₋₁|xₜ, x₀) 具有如前所述的闭式解。我们可以将其写为:

alt

作者在实际 μ 和预测 μ 之间采用了简单的均方误差。他们使用超出本博客文章范围的定义来证明,得出以下结论:

alt

使用上面的定义,我们可以将均方误差简化为:

alt

这就是我们采取梯度下降步骤的术语!所有这些简化,我们得出以下结论:预测噪声。最终的目标函数采用以下形式:

alt

什么是 Stable Diffusion?

稳定扩散是 OpenAI Dalle.2 的开源替代品。由于稳定扩散是一种潜在扩散模型,因此我将尝试对 LDM 进行高级解释。还记得反向扩散过程如何使用神经网络逐渐降低噪声吗?稳定扩散使用 U-Net,这是一种基于卷积的神经网络,可将图像下采样到较低的维度,并在上采样期间重建它。在下采样层和上采样层之间添加跳跃连接以获得更好的梯度流。通过将从语言模型生成的文本嵌入连接到图像表示,将提示注入到模型中。 U-Net 中的注意力层允许模型通过交叉注意力来关注文本标记。

alt

顾名思义,LDM 不适用于原始像素。相反,图像通过编码器被编码到更小的空间中。然后通过解码器将图像解码回其原始空间。这允许扩散过程在小/潜在空间上工作并完成该空间中的去噪。您可以将其视为包含扩散过程的自动编码器。这就是为什么它被称为潜在扩散;我们不是在像素中而是在潜在空间中实现扩散过程。下图应该足以概括 LDM:

alt

总结

  1. 扩散模型的工作原理是迭代地向图像添加噪声,然后训练神经网络来学习噪声并恢复图像。
  2. U-Net 是逆向过程中使用最广泛的神经网络。
  3. U-Net 中添加了跳过连接和注意力层以获得更好的性能。
  4. LDM 的工作原理是将图像编码到较小的潜在空间并在该空间中实现扩散过程,然后通过解码器恢复图像。

本文由 mdnice 多平台发布

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

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

相关文章

线性表操作的实现--单链表(链式存储结构)

本文参考朱战力老师的数据结构与算法--使用C语言一书 目录 文章目录 前言 一、链表是什么&#xff1f; 二、具体实现 1.单链表的定义 2.初始化ListInitiate&#xff08;SLNode **head&#xff09; 3.求当前元素的个数ListLength&#xff08;SLNode *head&#xff09; 4.插入Lis…

8.2 矢量图层点要素单一符号使用一

文章目录 前言单一符号&#xff08;Single symbol&#xff09;渲染简单标记(Simple Marker)QGis代码实现 SVG标记&#xff08;SVG marker&#xff09;QGis代码实现 总结 前言 上一篇教程对矢量图层符号化做了一个整体介绍&#xff0c;并以点图层为例介绍了可以使用的渲染器&am…

c语言进制的转换16进制转换2进制

c语言进制的转换16进制转换2进制 c语言的进制的转换 c语言进制的转换16进制转换2进制一、16进制的介绍二、八四二一法则三、16进制转换2进制 一、16进制的介绍 十六进制&#xff1a; 十六进制逢十六进一&#xff0c;所有的数组是0到9和A到F组成&#xff0c;其中A代表10&#x…

【网络原理】| 应用层协议与传输层协议 (UDP)

&#x1f397;️ 主页&#xff1a;小夜时雨 &#x1f397;️ 专栏&#xff1a;javaEE初阶 &#x1f397;️ 乾坤未定&#xff0c;你我皆黑马 目录 一、应用层协议二、传输层协议&#xff08;UDP协议&#xff09; 一、应用层协议 应用层是和代码直接相关的一层&#xff0c;决定…

电能计量与远程抄表的应用

摘要&#xff1a;结合当前电力企业实际的发展概况&#xff0c;可知电力活动开展中对于性能可靠的电能计量及远程抄表依赖程度高&#xff0c;需要注重它们实际应用范围的扩大&#xff0c;满足电力企业长期稳定发展的实际需求。基于此&#xff0c;本文将对电能计量与远程抄表应用…

【前端】Webpack5中Html和CSS的压缩打包

1.Webpack5简介 1.1.Webpack简介 &#xff08;1&#xff09;webpack的发展历程 2012.3—webpack&#xff08;问世&#xff09; 2014.2—webpack1 2016.12—webpack2 2017.6—webpack3 2018.2—webpack4 2020.10—webpack5&#xff08;要求node版本10.13&#xff09; &a…

Visual Studio Professional 2019 软件安装教程(附安装包下载)

Microsoft Visual Studio 是一个非常强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;适用于 Windows 上的 .NET 和 C 开发人员。它提供了一系列丰富的工具和功能&#xff0c;可以提升和增强软件开发的每个阶段。 Visual Studio IDE 是一个创意启动板&#xff0c;可…

uniapp中 background-image 设置背景图片不展示问题

有问题 <view class"file-picker__box jsz" tap"jszxszUpload(jsz)"></view>.jsz {background-image: url(../../static/example_drive.png); }解决1 <view class"file-picker__box jsz" :style"{ background-image: url(…

JS小数运算精度丢失的问题

工作中会不会经常会碰到一些数据指标的计算&#xff0c;比如百分比转化&#xff0c;保留几位小数等&#xff0c;就会出现计算不准确&#xff0c;数据精度丢失的情况。通过这篇分享借助第三方库能够轻松解决数据精度丢失的问题。 一、场景复现 JS数字精度丢失的一些常见问题 /…

SpringBoot+SpringMVC+MybatisPlus

文章目录 SpringBootSpringMVCMybatisPlus怎样在SpringBoot中引入SpringMVC?首先看下引入的依赖创建数据库表创建DO类创建MyBatisPlus动态代理接口创建controller控制器接收http请求创建SpringBoot配置文件application.yml最后创建启动类 SpringBootSpringMVCMybatisPlus 怎样…

cuda卸载

去查看你的电脑显卡对应的cuda版本&#xff0c;不然还是一整个用不到gpu的情况嘿嘿. 啊啊啊啊打开控制面板看一下&#xff0c;驱动不要乱卸载&#xff1a; 这些东西不能全部卸载了哦&#xff0c;只能卸载含有“CUDA”的那几个&#xff08;其实其他的可能也没有用 但是不懂的哇 …

关于路由转发

路由表的作用 路由表的作用&#xff1a;目标网络匹配路由表&#xff0c;从相应网络转发&#xff1b;不匹配路由表&#xff0c;丢弃或转发至默认路由器。 路由转发的原理 根据IP地址找到目标网络&#xff0c;由应路由器解封装查看目标网络是否可达&#xff0c;重新封装进行转…

Axure 9 使用 font awesome 字体发布原型

我使用的版本为Font awesome 6.1.1&#xff0c;安装后在axure中新增3个字体 如果直接发布&#xff0c;在没有安装Font awesome的电脑上无法正常显示字体图标&#xff0c;需要在发布前进行设置。 设置方法&#xff1a; 点击共享 点开设置 在字体设置页&#xff0c;填入图中所示…

FreeRTOS 消息队列 详解

目录 什么是队列&#xff1f; 消息队列特点 1. 数据入队出队方式 2. 数据传递方式 3. 多任务访问 4. 出队、入队阻塞 消息队列相关 API 函数 1. 创建队列 2. 写队列 3. 读队列 消息队列实操 什么是队列&#xff1f; 队列又称消息队列&#xff0c;是一种常用于任务间…

创建 Edge 浏览器扩展教程(下)

创建 Edge 浏览器扩展教程&#xff08;下&#xff09; 创建扩展教程&#xff0c;第 2 部分1&#xff1a;更新弹出窗口.html以包含按钮2&#xff1a;更新弹出窗口.html在浏览器选项卡顶部显示图像3&#xff1a;创建弹出式 JavaScript 以发送消息4&#xff1a;从任何浏览器选项卡…

全国三维数字化创新设计大赛湖北赛区省赛成功举办

须弥芥子&#xff0c;数字如海。10月14日—15日&#xff0c;2023 年数字科技文化节——第16届全国三维数字化创新设计大赛湖北赛区省赛暨产教联合体大会在武汉软件工程职业学院成功举行。 &#xff08;大赛全体专家领导合影&#xff09; 全国三维数字化创新设计大赛组委会副秘…

Windows 安装 jmeter

注&#xff1a;在安装Jmeter之前&#xff0c;请先检查下电脑有没有装JDK&#xff1a;开始->运行->然后输入cmd->进入命令行界面&#xff0c;输入java -version &#xff0c; 出现以下信息就是此电脑已安装了JDK&#xff1a; 下载地址 http://jmeter.apache.org/downlo…

C/C++程序设计和预处理

个人主页&#xff1a;仍有未知等待探索_C语言疑难,数据结构,小项目-CSDN博客 专题分栏&#xff1a;C语言疑难_仍有未知等待探索的博客-CSDN博客 目录 一、引言 二、程序的翻译环境和执行环境 1、什么是程序 2、程序的翻译环境 3、程序的执行环境 三、预处理 1、预定义符…

python爬虫分析基于python图书馆书目推荐数据分析与可视化

收藏关注不迷路 文章目录 前言一、项目介绍二、开发环境三、功能介绍四、核心代码五、效果图六、文章目录 前言 随着电子技术的普及和快速发展&#xff0c;线上管理系统被广泛的使用&#xff0c;有很多商业机构都在实现电子信息化管理&#xff0c;图书推荐也不例外&#xff0c…

windows协议详解之-RPC/SMB/LDAP/LSA/SAM域控协议关系

如果你在windows域控环境中&#xff0c;例如企业的网络中开启wireshark抓包&#xff0c;你一定会遇到一大堆各种各样的协议。不同于互联网服务&#xff08;大多基于HTTP&#xff09;&#xff0c;为了实现域控中各种各样的服务&#xff0c;windows的域控环境中采用了非常多的协议…