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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux下activemq的安装与安装成功确认

一、下载 apache-activemq-5.14.0-bin.tar.gz 二、安装 将压缩包拷入linux内&#xff0c;进行解压tar -zxvf apache-activemq-5.14.0-bin.tar.gz&#xff0c;与redis、nginx不同的是&#xff0c;active解压不需要安装就可以直接启动&#xff01; 启动命令&#xff1a;./bin…

PMP考试解析

PMP考试解析 考试动机 1、裁员太猛了&#xff0c;多一条生存技能 2、学习管理技能往管理方向靠 3、转行&#xff0c; 考试路径 1、报班费&#xff1a; 考PMP必须报班&#xff0c;不然没有考试资格&#xff08;无语的规定&#xff09; &#xff08;类似于考驾照&#xff0c;…

PhotoZoom 2024中文版全新版本震撼来袭!PhotoZoom 8怎么使用

PhotoZoom 2023&#xff08;PhotoZoom 8&#xff09;全新版本震撼来袭。 一款划时代的、技术上产生革命性影响的数码图片放大工具。 我们获取图片的方法&#xff0c;一般是从度娘图片和各个图库里找素材。但一般网上搜索到的很多图片像素都非常小&#xff0c;普通方法放大就像打…

DeDeCMS v5.7 SP2 正式版 前台任意用户密码修改(漏洞复现)

1.环境搭建 PHP 5.6 DeDeCMSV5.7SP2 正式版 安装phpstudy&#xff0c;https://www.xp.cn/小皮面板 先启动Apache2.4.39和MySQL5.7.26 如果他会让你下载&#xff0c;点击是就好&#xff01; 让后点击网站—>点击创建网站 域名自己创建&#xff0c;自己取 其他的不变 点击…

详解Spring对Mybatis等持久化框架的整合

&#x1f609;&#x1f609; 学习交流群&#xff1a; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 &#x1f96d;&#x1f96d;3&#xff1a;QQ群&#xff1a;583783…

RPG项目01_脚本代码

基于“RPG项目01_场景及人物动画管理器”&#xff0c;我们创建一个XML文档 在资源文件夹下创建一个文件夹&#xff0c; 命名为Xml 将Xnl文档拖拽至文件夹中&#xff0c; 再在文件夹的Manager下新建脚本LoadManager 写代码&#xff1a; using System.Collections; using System…

【目标检测实验系列】YOLOv5创新点改进实验:通过转置卷积,动态学习参数,减少上采用过程特征丢失,提高模型对目标的检测精度!(超详细改进代码流程)

1. 文章主要内容 本篇博客主要涉及两个主体内容。第一个&#xff1a;简单介绍转置卷积的原理。第二个&#xff1a;基于YOLOv5 6.x版本&#xff0c;将Neck部分的upSample改为nn.ConvTranspose2d转置卷积&#xff08;通读本篇博客需要10分钟左右的时间&#xff09;。 小提…

QNX常用调试方法

QNX常用调试方法 1. top 查询系统状态最常用的工具是top&#xff0c;它可以显示系统资源的使用情况。我们最关心的通常是系统可用内存和CPU使用率。如果CPU使用率过高可能是因为某些应用存在bug&#xff0c;重点关注下面显示的占用CPU资源最多的几个线程。如果可用内存太少&am…

史上最全低代码平台盘点!三分钟盘点2023年顶尖二十个低代码平台!

史上最全低代码平台盘点&#xff01;三分钟盘点2023年顶尖二十个低代码平台&#xff01; 什么是低代码平台&#xff1f;2023年顶尖二十大低代码平台&#xff0c;哪个值得一试&#xff1f;低代码平台应该如何选择&#xff1f;本篇&#xff0c;我们将为大家盘点顶尖的十大低代码平…

React使报错不再白屏

如果代码中出现问题导致报错&#xff0c;通常会使页面报错&#xff0c;导致白屏 function Head() {// 此时模拟报错导致的白屏return <div>Head --- {content}</div> } export default () > {return (<><div>下面是标题</div><Head />…

Wpf 使用 Prism 实战开发Day07

待办事项页面设计 效果图: 一.布局设计 页面主要分上下布局&#xff0c;分2行进行设计&#xff0c;使用 Grid.RowDefinitions 将页面分上下2行 例如&#xff1a; <Grid.RowDefinitions><RowDefinition Height"auto"/><RowDefinition/> </Gri…

Stable Diffusion 系列教程 - 1 基础准备(针对新手)

使用SD有两种方式&#xff1a; 本地&#xff1a; 显卡要求&#xff1a;硬件环境推荐NVIDIA的具有8G显存的独立显卡&#xff0c;这个显存勉勉强强能摸到门槛。再往下的4G可能面临各种炸显存、炼丹失败、无法生成图片等各种问题。对于8G显存&#xff0c;1.0模型就不行&#xff0…

3.4_1 java自制小工具 - pdf批量转图片

相关链接 目录参考文章&#xff1a;pdf转图片(apache pdfbox)参考文章&#xff1a;GUI界面-awt参考文章&#xff1a;jar包转exe(exe4j)参考文章&#xff1a;IDEA导入GIT项目参考文章&#xff1a;IDEA中使用Gitee管理代码gitee项目链接&#xff1a;pdf_2_image网盘地址&#xf…

flutter开发实战-轮播Swiper更改Custom_layout样式中Widget层级

flutter开发实战-轮播Swiper更改Custom_layout样式中Widget层级 在之前的开发过程中&#xff0c;需要实现卡片轮播效果&#xff0c;但是卡片轮播需要中间大、两边小一些的效果&#xff0c;这里就使用到了Swiper。具体效果如视频所示 添加链接描述 这里需要的效果是中间大、两边…

仅仅通过提示词,GPT-4可以被引导成为多个领域的特定专家

The Power of Prompting&#xff1a;提示的力量&#xff0c;仅通过提示&#xff0c;GPT-4可以被引导成为多个领域的特定专家。微软研究院发布了一项研究&#xff0c;展示了在仅使用提策略的情况下让GPT 4在医学基准测试中表现得像一个专家。研究显示&#xff0c;GPT-4在相同的基…

依据小兔鲜项目,总结Javascript数组常用方法

find 在向购物车添加某种规格的商品时&#xff0c;查找购物车列表中是否已经存在该规格的商品 find()方法传入一个回调函数&#xff0c;代表对数组每一项item的校验要求 返回数组中第一个符合条件的元素的值&#xff0c;如果没有则返回undefined const item cartList.value…

【LeetCode热题100】【双指针】盛最多水的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾斜容器。 示例…

Java架构师技术为业务赋能

目录 1 概论2 天猫的难言之隐3 如何拆解技术难点-三段论4 天猫线的破局之道-双引擎回归测试框架5 架构师的心理游戏-解决问题从转换思维开始6 技术助力业务的两个方向7 阿里新零售部门如何培养技术团队的业务知识8 如何围绕业务特点制定技术发展路线-阿里系和抖音案例9 阿里系业…

Ubuntu20.04安装ROS2

官方参考文章 Ubuntu (Debian) — ROS 2 Documentation: Foxy documentation curl密钥问题 sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg curl: (7) Failed to connect to raw.githubus…

pytorch 模型量化quantization

pytorch 模型量化quantization 1.workflow1.1 PTQ1.2 QAT 2. demo2.1 构建resnet101_quantization模型2.2 PTQ2.3 QAT 参考文献 pytorch框架提供了三种量化方法&#xff0c;包括&#xff1a; Dynamic QuantizationPost-Training Static Quantization&#xff08;PTQ&#xff0…