【前沿技术】扩散模型是什么

news2025/3/11 2:49:43

0. 前言

        扩散模型的灵感来自非平衡热力学。他们定义了一个马尔可夫扩散步骤链,以缓慢地将随机噪声添加到数据中然后学习逆转扩散过程以从噪声中构建所需的数据样本。与VAE或流动模型不同,扩散模型是通过固定程序学习的,并且潜在变量具有高维数(与原始数据相同)。

图一. 不同类型的生成模型概述

1. 前向扩散过程

给定一个从真实数据分布\mathbf{x}_{0}\sim q\mathbf{(x)}中采样的点,让我们定义一个前向扩散过程,在这个过程中,我们分\mathbf{T}步向样本中添加少量的高斯噪声,产生一系列噪声样本\mathbf{x_{1},...,\mathbf{x_{T}}}。步长由方差表\{\beta_{t}\in (0,1)\}_{t=1}^T表示。

 

 随着步长t变大,数据样本\mathbf{x_{0}}会逐渐失去其可区分的特征。最终,当\mathbf{T}\rightarrow \propto\mathbf{x_{T}}等价于各向同性高斯分布。

 图 2.通过缓慢添加(去除)噪声来生成样本的正向(反向)扩散过程的马尔可夫链。(图片来源:Ho et al. 2020)

上述过程的一个很好的特性是,我们可以使用重新参数化技巧以封闭形式在任何任意时间步t长进行采样 \mathbf{x_{t}}。让\alpha_{t}=1-\beta_{t}\bar{\alpha_{t}}=\prod^{t}_{i=1}\alpha_{i}:

\begin{aligned} \mathbf{x}_t &= \sqrt{\alpha_t}\mathbf{x}_{t-1} + \sqrt{1 - \alpha_t}\boldsymbol{\epsilon}_{t-1} & \text{ ;where } \boldsymbol{\epsilon}_{t-1}, \boldsymbol{\epsilon}_{t-2}, \dots \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) \\ &= \sqrt{\alpha_t \alpha_{t-1}} \mathbf{x}_{t-2} + \sqrt{1 - \alpha_t \alpha_{t-1}} \bar{\boldsymbol{\epsilon}}_{t-2} & \text{ ;where } \bar{\boldsymbol{\epsilon}}_{t-2} \text{ merges two Gaussians (*).} \\ &= \dots \\ &= \sqrt{\bar{\alpha}_t}\mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_t}\boldsymbol{\epsilon} \\ q(\mathbf{x}_t \vert \mathbf{x}_0) &= \mathcal{N}(\mathbf{x}_t; \sqrt{\bar{\alpha}_t} \mathbf{x}_0, (1 - \bar{\alpha}_t)\mathbf{I}) \end{aligned}

 (*)回想一下,当我们合并两个具有不同方差的高斯分布时,\mathbf{N(0,\sigma^2_{1}I)}\mathbf{N(0,\sigma^2_{2}I)},新分布是

\mathbf{N(0,(\sigma^2_{1}+\sigma^2_{2})I)}。这里合并的标准差是\sqrt{(1-\alpha_{t})+\alpha_{t}(1-\alpha_{t-1})}=\sqrt{1-\alpha_{t}\alpha_{t-1}}

通常,当样本变得更嘈杂时,我们可以承受更大的更新步骤,因此 \beta_{1}<\beta_{2}<\cdots <\beta_{T},\bar{\alpha_{1}}>\cdots>\bar{\alpha_{T}}

2. 逆向扩散过程

如果我们能反转上述过程并从中q(\mathbf{x_{t-1}\vert\mathbf{x_{t}}})采样,我们能够从高斯噪声输入中重建真实样本。\mathbf{x_{T}\sim N(0,I)}请注意,如果\beta_{t}足够小,q(\mathbf{x_{t-1}\vert\mathbf{x_t}})也将是高斯的。不幸的是,我们不能轻易估计q(\mathbf{x_{t-1}\vert\mathbf{x_t}}),因为它需要使用整个数据集,因此我们需要学习一个模型p_{\theta}来近似这些条件概率,以便运行反向扩散过程。

p_\theta(\mathbf{x}_{0:T}) = p(\mathbf{x}_T) \prod^T_{t=1} p_\theta(\mathbf{x}_{t-1} \vert \mathbf{x}_t)\\ \quad p_\theta(\mathbf{x}_{t-1} \vert \mathbf{x}_t) = \mathcal{N}(\mathbf{x}_{t-1}; \boldsymbol{\mu}_\theta(\mathbf{x}_t, t), \boldsymbol{\Sigma}_\theta(\mathbf{x}_t, t))

在数学中,闭式表达式是使用有限数量的标准运算的数学表达式。这可能包括常量、变量、某些众所周知的运算(例如 + − × ÷)和函数(例如 n 次方根、指数、对数、三角函数、反双曲函数),但通常不包括极限或积分。

3. 扩散模型的训练

  • 正向扩散→在图像中添加噪声。
  • 反向扩散过程→去除图像中的噪声。

前向扩散过程逐步将高斯噪声添加到输入图像中。尽管如此,使用以下封闭式公式可以更快地完成,以直接获取特定时间步长 t 的噪声图像: 

x_{t}=\sqrt{\bar{\alpha_{t}}}x_{0}+\sqrt{1-\bar{\alpha_{t}}}\varepsilon

反向扩散过程不可直接计算,我们训练神经网络\varepsilon_{\theta}来逼近它。

训练目标损失函数如下:

x_{t}=\sqrt{\bar{\alpha_{t}}}x_{0}+\sqrt{1-\bar{\alpha_{t}}}\varepsilon 

 L_{simple}=E_{t,x_{0},\varepsilon}[||\mathbf{\varepsilon-\varepsilon_{\theta}(x_{t,t})}||^{2}]

 Training 训练

在每一轮训练中

1.将为每个训练样本(图像)选择一个随机的时间步长t。

2.将高斯噪声(对应于t)应用于每个图像。

3.将时间步长转换为嵌入(向量)。

每一个训练步骤: 

Sampling(采样)

采样是指从高斯噪声中绘制图像。下图显示了如何使用经过训练的 U-Net 来生成图像:

Diffusion Speed Problem (扩散速度问题)

如您所见,扩散(采样)过程迭代地将全尺寸图像馈送到 U-Net 以获得最终结果。这使得纯扩散模型在总扩散步数 T 和图像尺寸较大时非常慢。

因此,Stable Diffusion 旨在解决这个问题。

Stable Diffusion(稳定扩散)

稳定扩散的原名是“潜在扩散模型”(LDM)。顾名思义,扩散过程发生在潜在空间中。这就是它比纯扩散模型更快的原因。

Departure to Latent Space

 我们将首先训练一个自动编码器来学习将图像数据压缩为低维表示。

  •  通过使用经过训练的编码器 E,我们可以将全尺寸图像编码为低维潜在数据(压缩数据)。
  • 通过使用经过训练的解码器 D,我们可以将潜在数据解码回图像。

Latent Diffusion (潜伏扩散)

将图像编码为潜在数据后,将在潜在空间中完成前向和反向扩散过程。

 前向扩散过程→向添加噪声。

 反向扩散过程→去除中的噪声。

Conditioning(条件嵌入)

Stable Diffusion 模型的真正强大之处在于它可以从文本提示生成图像。这是通过修改内部扩散模型以接受条件输入来完成的。

 通过交叉注意力机制增强其去噪U-Net,将内扩散模型转变为条件图像生成器。

上图中的开关用于控制不同类型的调节输入:

对于文本输入,首先使用语言模型τθ(例如BERT,CLIP)将它们转换为嵌入(向量),然后通过(多头)注意力(Q,K,V)层将它们映射到U-Net中。

对于其他空间对齐的输入(例如语义图、图像、修复),可以使用串联来完成调节。

Training(训练)

训练目标(损失函数)与纯扩散模型中的目标非常相似。唯一的变化是:

  •  输入潜在数据z_{t}而不是图像 x_{t}
  • 向 U-Net 添加了调节输入 \tau_{\theta}(y)

Sampling(采样)

 由于潜在数据的大小比原始图像小得多,因此去噪过程会快得多。

 Architecture Comparison(架构比较)

Pure Diffusion Model(纯扩散模型)

Stable Diffusion (Latent Diffusion Model)
稳定扩散(潜伏扩散模型)

总结:

  • 扩散模型分为正向扩散和反向扩散两部分。
  • 正扩散可以用封闭形式的公式计算。
  • 反向扩散可以用训练好的神经网络来完成。
  • 为了近似所需的去噪步骤q,我们只需要使用神经网络εθ近似噪声εₜ。
  • 在简化损失函数上进行训练可以获得更好的样本质量。
  • 稳定扩散(潜扩散模型)是在潜空间中进行扩散过程,因此比纯扩散模型快得多。

参考链接:

Diffusion 和Stable Diffusion的数学和工作原理详细解释 - 知乎

https://medium.com/@steinsfu/stable-diffusion-clearly-explained-ed008044e07e

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

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

相关文章

【学术精选】地球系统科学顶级国际会议 IGARSS 2024

顶级会议推荐 英文名称&#xff1a;International Symposium of Geoscience and RemoteSensing, IGARSS 2024 英文简称&#xff1a;IGARSS 2024 中文名称&#xff1a;国际地球科学与遥感研讨会 ​会议信息 重要日期&#xff1a; Community Contributed Session Proposal Dea…

基于ZLMediaKit的webrtc实时视频传输demo搭建

环境 ubuntu 20.04 ​ gcc version 9.4.0 ​ cmake version 3.16.3 部署ZLMediaKit流媒体服务器 安装openssl 首先可以检查一下自己的openssl的版本如果是1.1.1以上就可以忽略这一步 wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz tar -xvzf openssl-1.1.1k…

基于springboot 学生学情预警系统-计算机毕设 附源码57567

springboot 学生学情预警系统 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运…

Python如何使用pip安装模块和包与绘图时如何显示中文

Python如何使用pip安装模块和包 使用pip安装python模块和包 方式一&#xff1a;1.进入命令行2.敲入pip命令&#xff1a;pip install 包名 。由于python官网下载速度太慢&#xff0c;可以通过添加参数从清华镜像下载包&#xff08;-i https://pypi.tuna.tsinghua.edu.cn/simpl…

Web漏洞分析-SQL注入XXE注入(上)

随着互联网的不断普及和Web应用的广泛应用&#xff0c;网络安全问题愈发引起广泛关注。在网络安全领域中&#xff0c;SQL注入和XXE注入是两个备受关注的话题&#xff0c;也是导致许多安全漏洞的主要原因之一。本博客将深入研究这两种常见的Web漏洞&#xff0c;带您探寻背后的原…

curl --compressed报错,此版本不支持此命令

出现这个问题是因为微软windows自带的curl不支持这个选项,验证如下 执行where curl 时,可以看到输出为 C:\Windows\System32\curl.ee 解决方法是使用其它curl,下载地址如下 curl for Windows https://curl.se/windows/ 然后把安装目录的bin目录放到path环境变量里最开始, 让…

十大经典系统架构设计面试题

十大经典系统架构设计面试题_架构_程序员石磊_InfoQ写作社区翻译自&#xff1a;https://medium.com/geekculture/top-10-system-design-interview-questions-10f7b5ea123d在我作为微软和Facebhttps://xie.infoq.cn/article/4c0c9328a725a76922f6547ad 任何 SDI 问题的提示 通过…

能源企业管理ERP系统都有哪些?可以帮助企业解决哪些难点

能源企业在不同的发展阶段面对的经营压力以及遇到的管理问题各异&#xff0c;随着部分产品结构的复杂化&#xff0c;日常经营管理工作也愈加繁琐。 有些能源企业内部存在信息传递不畅、经营数据统计不及时、部门协作效率低、多仓库和多平台数据不统一等情况&#xff0c;而这些…

web:very_easy_sql(sql、ssrf、gopher协议sql注入)

题目 页面显示如下 显示不是内部用户&#xff0c;无法识别信息 查看源码&#xff0c;找到一个use.php 访问之后显示如下 随便输入了一个&#xff0c;发现url有参数显示 试一下靶机的网址&#xff0c;返回nonono 联系之前原始页面写的“不是内网用户&#xff0c;无法别识身份”…

简单句子成分、阅读技巧

四、段落的主旨题&#xff1a;问这一段讲了什么&#xff08;一般都在段落的第一句话或最后一句话&#xff09; 词汇题的答案一般都在生词的上一句或者下一句 做题步骤&#xff1a; 1、先标段落 2、看题&#xff0c;划出关键词 3、去原文定位&#xff0c;标注中文意思 4、第一遍…

半导体工艺发展概述

集成电路发展到今天&#xff0c;经历从1940年的PN结发现&#xff0c;到1950年BJT三极管发明&#xff0c;再到1963年CMOS电路发明。从单纯基于Si的半导体电路&#xff0c;再到GaAs, GaN&#xff0c;SiGe, InP等化合物半导体集成电路。不断的通过化学材料配比&#xff0c;基本单元…

vs 安装 qt qt扩展

1 安装qt 社区版 免费 Download Qt OSS: Get Qt Online Installer 2 vs安装 qt vs tools 3 vs添加 qt添加 bin/cmake.exe 路径 3.1 扩展 -> qt versions 3.2

使用外部编辑器编辑执行MAXScript代码的方法

如何使用外部编辑器编辑执行MAXScript代码&#xff1f;这里我们要借助一个3dMax插件程序MXSCOM&#xff0c;MXSCOM允许从外部代码编辑器编辑和执行3ds Max MaxScript和Python文件。 2005年&#xff0c;Simon Feltman发布了第一个MXSCOM&#xff0c;这是一个小型的Visual Basic …

DAPP【】nodejs安装与npm路径更换

正确路径可以解决的问题&#xff1a; 1.无法将XXX项识别为 cmdlet、函数、脚本文件或可运行程序的名称 官网下载nodejs 下载完成后 我们要先配置npm的全局模块的存放路径以及cache的路径&#xff0c;例如我希望将以上两个文件夹放在nodejs的主目录下&#xff0c;便在nodejs下…

多线程(初阶七:阻塞队列和生产者消费者模型)

一、阻塞队列的简单介绍 二、生产者消费者模型 三、模拟实现阻塞队列 一、阻塞队列的简单介绍 首先&#xff0c;我们都知道&#xff0c;队列是先进先出的一种数据结构&#xff0c;而阻塞队列&#xff0c;是基于队列&#xff0c;做了一些扩展&#xff0c;在多线程有就非常有意…

VMware下载安装教程

目录 一.下载二.安装 一.下载 官网地址&#xff1a;官网 下载的时候选择Workstation Player&#xff0c;这个是免费的&#xff0c;当然你也可以选择下载Workstation Pro。 二.安装 下载完成之后点击安装包按照需要安装即可。 安装之后启动&#xff0c;可以看到这个能够免费使…

微信小红书图片工具

因为平时喜欢发一些小红书和微信公众号的文章&#xff0c;但配图不是很方便。 当然了&#xff0c;有photoshop之类的重量级图片工具&#xff0c;但他们一般提供的选项很多&#xff0c;故而操作也比较复杂。 平时发文并不需要复杂的配图&#xff0c;质量要求也没有那么高&…

Task中Wait()和Result造成死锁

在使用Task的时候&#xff0c;一不留神就会造成死锁&#xff0c;而且难以发现&#xff0c;尤其是业务繁多的情况下&#xff0c;一个Task嵌套另一个Task的时候&#xff0c;下面就演示一下&#xff0c;在什么情况下&#xff0c;会产生Wait()和Result的死锁&#xff0c;因此&#…

代码随想录算法训练营 ---第五十二天

第一题&#xff1a; 简介&#xff1a; 动态规划五部曲&#xff1a; 1.确定 dp数组下标的定义 dp[i] 到达 i 时 最长递增子序列的长度 2.确定递推公式 我们确定当前的最大长度需要遍历前面所有的最大长度&#xff0c;然后如果序列最后一个值小于nums[i]那就dp[j] 1&#xf…

Kubernetes1.27容器化部署Prometheus

Kubernetes1.27容器化部署Prometheus GitHub链接根据自己的k8s版本选择对应的版本修改镜像地址部署命令对Etcd集群进行监控&#xff08;云原生监控&#xff09;创建Etcd Service创建Etcd证书的Secret创建Etcd ServiceMonitorgrafana导入模板成功截图 对MySQL进行监控&#xff0…