扩散模型之DDPM

news2025/2/24 1:27:54

扩散模型之DDPM

  • 文章前置
  • 生成模型
    • 总结
  • Design of DDPM
    • 正向加噪过程
    • 反向去噪过程

文章前置

最原文链接(英文):What are Diffusion Models?
原文链接:Diffusion扩散模型大白话讲解,看完还不懂?不可能
原文链接:DDPM解读(一)| 数学基础,扩散与逆扩散过程和训练推理方法
hugging face diffusers(扩散模型包):huggingface diffusers code
本文并非全部是个人理解,是觉得其他作者的博客和文章通过不同的角度将DDPM讲的更加通俗易懂,希望自己能通过写一些东西加深理解,并且能够将其他人的优质内容进行分享。

生成模型

生成模型的主流网络结构应该可以分成三类,GAN、VAE 和基于流的模型。他们在生成高质量样本方面取得了巨大成功,但每个都有自己的局限性。

  1. GAN:由生成器和判别器构成。先训练判别器,使其能够区分图片的真伪(二分类),再继续训练生成器生成图像,在通过判别器判别图像的真伪,使生成图像的分布逐渐逼近于真实分布。由于 GAN 模型具有对抗性训练的性质,因此以潜在的不稳定训练和较少的生成多样性而闻名。
  2. VAE:与GAN通过判别器判断生成图像的真假不同,VAE直接通过分布的变换来生成图像。将真实样本通过编码器网络变换成一个理想的数据分布,然后这个数据分布再传递给一个解码器网络,得到一堆生成样本,生成样本与真实样本足够接近的话,就训练出了一个自编码器模型。但VAE的方法输出模糊,常会失真。
  3. 基于流模型的方法,是建立训练数据和生成数据之间的概率关系,然后用可逆的神经网络来训练,这种关系是一一对应的。代价就是模型设计比较麻烦,因为要保证可逆而且逆函数可以算,还要有足够的灵活度。流模型必须使用专门的体系结构来构建可逆变换。
  4. 扩散模型的灵感来自非平衡热力学。他们定义了一个扩散步骤的马尔可夫链,以缓慢地将随机噪声添加到数据中,然后学习反转扩散过程以从噪声中构建所需的数据样本。与 VAE 或流模型不同,扩散模型是通过固定过程学习的,并且潜在变量具有高维性(与原始数据相同)。
    在这里插入图片描述

总结

从图中我们可以看到,GAN、VAE和基于流的模型的共同点在于期望“一步跨十个台阶”,直接实现图像的生成,而扩散模型期望“一步跨一个台阶”,这可能是扩散模型生成的图像质量比较高的原因。

Design of DDPM

如下图所示。DDPM模型主要分为两个过程:forward加噪过程(从右往左)和reverse去噪过程(从左往右)。加噪过程意思是指向数据集的真实图片中逐步加入高斯噪声,而去噪过程是指对加了噪声的图片逐步去噪,从而还原出真实图片。加噪过程满足一定的数学规律,而去噪过程则采用神经网络来学习。这么一来,神经网络就可以从一堆杂乱无章的噪声图片中生成真实图片了。
在这里插入图片描述

正向加噪过程

给定一个从真实数据分布中采样的数据点 x 0 ∼ q ( x ) \rm{x_0} \sim q(\rm{x}) x0q(x),定义一个 T T T step 的正向的加噪过程,逐步向样本中添加少量高斯噪声,以产生一连串的噪声样本 x 1 , . . . , x T \rm{x_1},...,\rm{x_T} x1,...,xT。步长的大小是由 β t \beta_t βt控制 β t ∈ ( 0 , 1 ) t = 1 T {\beta_t \in(0,1)}^T_{t=1} βt(0,1)t=1T
在这里插入图片描述
这种公式看起来比较难理解比较抽象,其实就是
x t = 1 − β t x t − 1 + β t ϵ t − 1 \rm{x_t}=\sqrt{1-\beta_t}\rm{x}_{t-1}+\sqrt{\beta_t}\epsilon_{t-1} xt=1βt xt1+βt ϵt1
其中 ϵ t ∼ N ( 0 , I ) \epsilon_t \sim N(0,I) ϵtN(0,I),这样就非常容易理解了,正向的加噪过程是通过公式推导的,不涉及网络参数的学习。随着 t t t不断增大,采样数据 x 0 \rm{x_0} x0逐渐失去可辨别的特征,当 T T T比较大时, x T \rm{x_T} xT就等同于一个高斯分布了。我们可以看到, x T \rm{x_T} xT只由 β T \beta_T βT x T − 1 \rm{x_{T-1}} xT1来确定,是一个不通过学习就可以直接得到的过程。因此,只要我们有了 x 0 \rm{x_0} x0,并且提前确定每一步的固定值 β 1 \beta_1 β1,…, β T \beta_T βT,我们就可以推出任意一步的加噪数据 x 1 \rm{x_1} x1,…, x T \rm{x_T} xT。这里的前向加噪过程被称为是一个马尔科夫链过程。

反向去噪过程

反向的过程是复杂的,需要逐步反向计算,即计算 q ( x t − 1 ∣ x t , x 0 ) q(\rm{x_{t-1}}|\rm{x_t},\rm{x_0}) q(xt1xt,x0)。这里为什么不是直接计算 q ( x t − 1 ∣ x t ) q(\rm{x_{t-1}}|\rm{x_t}) q(xt1xt),这是因为在正向加噪的过程中,我们已知的只有各种条件概率 q ( x t ∣ x t − 1 ) q(\rm{x_{t}}|\rm{x_{t-1}}) q(xtxt1),而像 q ( x t ) q(\rm{x_t}) q(xt)这样的先验概率不能得到,所以需要计算 q ( x t − 1 ∣ x t , x 0 ) q(\rm{x_{t-1}}|\rm{x_t},\rm{x_0}) q(xt1xt,x0)。这里我们可以由贝叶斯公式得出(公式真的不想手打了,直接复制粘贴):
在这里插入图片描述
根据正向的加噪过程,我们很容易计算贝叶斯公式中的各个成分
在这里插入图片描述
在这里 α t = 1 − β t \alpha_t = 1-\beta_t αt=1βt α t ‾ = α t α t − 1 . . . α 1 \overline{\alpha_t} = \alpha_t \alpha_{t-1}...\alpha_1 αt=αtαt1...α1。标准正态分布可以表示为:
在这里插入图片描述
所以贝叶斯公式的表示可以转化为:
在这里插入图片描述
将平方展开并合并同类项我们可以得到:
在这里插入图片描述
因为KaTeX parse error: Undefined control sequence: \x at position 1: \̲x̲_t x 0 x_0 x0都是已知的,所以最后一项可以作为一个常数项。对比标准的正态分布展开项为:
在这里插入图片描述
对比两个指数形式的分布,我们就可以分别计算 σ \sigma σ μ \mu μ,而且可以发现这里的 σ \sigma σ是一个固定值,而 μ \mu μ可以得到:
在这里插入图片描述
通过正向加噪的过程可以有 x t x_t xt计算 x 0 x_0 x0,所以可以得到:
在这里插入图片描述
而在反向去噪的过程中, ϵ t \epsilon_t ϵt并不知道是什么样的,所以就可以通过神经网络来拟合了,并且可以通过与正向加噪的过程中使用的噪声计算mse损失来训练这个网络。这就是一个标准的扩散模型DDPM的过程。

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

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

相关文章

第10章 对象和类

第10章 对象和类 10.1 过程性编程和面相对象编程10.2 抽象和类10.2.1 类型是什么10.2.2 C中的类10.2.3 实现类成员函数10.2.4 使用类 10.1 过程性编程和面相对象编程 采用OOP方法时,首先从用户的角度考虑对象——描述对象所需的数据以及描述用户与数据交互所需的操…

【蓝桥刷题】备战国赛——异或三角

蓝桥杯2021国赛真题——异或三角 🚀 每日一题,冲刺国赛 🚀 题目导航: 异或三角 🎇思路:数位 d p dp dp d f s dfs dfs 思维 🔱思路分析: ✅数理基础: 按位异或&am…

(2017,AdaIN)用自适应实例归一化进行实时的任意风格迁移

Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization 公众号:EDPJ 目录 ​​​​​​​0. 摘要 1. 简介 2. 相关工作 3. 背景 3.1 批量归一化(Batch Normalization,BN) 3.2 实例归一化&#xff…

入驻京东直播间、成功借壳上市,交个朋友和时间“交朋友”

交个朋友一直走在“交朋友”的路上。 5月31日晚,交个朋友正式入驻京东直播间,首播销售额超1.5亿元,直播热度榜达人榜第一名,累计访问人次超1700万。据了解,京东618期间,除了日常直播外,交个朋友…

java并发编程:可见性、原子性、有序性三大特性详解

文章目录 可见性导致可见性的原因线程交叉执行重排序结合线程交叉执行共享变量更新后没有及时更新 如何解决可见性问题 原子性出现原子性问题的原因如何解决原子性问题 有序性导致有序性的原因如何解决有序性问题 总结 可见性 内存可见性,指的是线程之间的可见性&am…

IPv6NAT-PT实验:IPv4和IPv6地址转换的配置和验证

IPv6NAT-PT实验:IPv4和IPv6地址转换的配置和验证 【实验目的】 熟悉IPv6NAT-PT的概念。 掌握静态IPv6NAT-PT的配置 掌握动态IPv6NAT-PT的配置。 验证配置。 【实验拓扑】 设备参数如下表所示。 设备 接口 IP地址 子网掩码 默认网关 R1 S0/0 192.168.12…

2023HW护网红队必备工具总结

一、信息收集 1、AppInfoScanner 一款适用于以HVV行动/红队/渗透测试团队为场景的移动端(Android、iOS、WEB、H5、静态网站)信息收集扫描工具,可以帮助渗透测试工程师、红队成员快速收集到移动端或者静态WEB站点中关键的资产信息并提供基本的信息输出,如&#xff…

Java设计模式—模板方法模式

前言:模板方法模式是模板模式的一个具体实现,它定义了一个抽象类,其中包含一个模板方法和若干个基本方法。其中模板方法定义了算法骨架,而基本方法则由子类来实现。因此,模板方法在定义算法的结构方面提供了支持&#…

springMvc 解决 multipart/form-data 方式提交请求 不能获取非文件类型参数的问题和指定springmvc获取静态资源路径

问题: RequestMapping(value "/test",method RequestMethod.POST)ResponseBodypublic String test(String name,String id,MultipartFile file){System.out.println(name);System.out.println(id);System.out.println(file.getOriginalFilename());ret…

onnx模型的修改与调试demo

主要参考: 模型部署入门教程(五):ONNX 模型的修改与调试 第五章:ONNX 模型的修改与调试 使用netron 可视化模型 读写onnx 构造onnx 创建一个描述线性函数 output axb 的onnx模型。 需要两个节点,第一个…

造轮子--自己封装一个 start

背景 都说不要造轮子,但是青柠认为,有的时候,造个轮子,更有助于清楚详细的业务逻辑,所以咱也自己写一个轮子,搞个系统开发。大体思路就是先搭建基础框架,然后细写业务逻辑,会涵盖主…

图解HTTP书籍学习2

确保Web安全的HTTPS HTTP的缺点 ●通信使用明文(不加密),内容可能会被窃听 ●不验证通信方的身份,因此有可能遭遇伪装 ●无法证明报文的完整性,所以有可能已遭篡改 加密处理防止被窃听 通信的加密 一种方式就是…

【React】类组件,JSX语法,JSX原理,传递参数,条件渲染,列表渲染

❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录 React使用组件(类组件)JSX语法书写规范JSX插入的内容JSX属性绑定JSX类绑…

前端基础(CSS)——css介绍 常用样式 案例—进化到Bootstrap——进化到Element-UI(未完待续)

目录 引出CSS相关1.css写在哪里?2.css的选择器【重要】(1)标签选择器---div{}(2)id选择器----#div01{}(3)类选择器---class"div01",.dav01{}(4)后代…

saas产品私有化(一) 缓存中间件适配

一.背景 名词解释:私有化一般指的是在对客交付过程中,客户由于自身数据敏感,成本控制等原因要求交付乙方将售卖的服务利用现有甲方的硬件设备或者云服务进行服务的部署. 面向场景:一般特制的是saas化的云服务软件提供商的对特殊客群的场景.其中saas行业中比较起步和规模比较大的…

流氓软件篡改微软EDGE浏览器主页面的那些伎俩

微软的EDGE浏览器很好用,但也很容易被绑架,在网上下载各类免费软件,只要你安装完,十有八九就给你把主页改成某某导航了。尽管打开EDGE直接进入360、毒霸、好123等链接对上网影响也不大,打开这些导航页面后,…

IMX6ULL裸机篇之I2C实验主控代码说明二

一. I2C实验 I2C实验内容: 学习如何使用 I.MX6U 的 I2C 接口来驱动 AP3216C,读取 AP3216C 的传感器数据。 I2C读写数据时序图: I2C写数据时序图如下: I2C读数据时序图如下: 二. I2C主控读写时序 1. 读数据与写数…

MMDetection学习记录(二)之配置文件

文件结构 config文件 在 config_base_ 文件夹下有 4 个基本组件类型,分别是:数据集(dataset),模型(model),训练策略(schedule)和运行时的默认设置(default runtime)。 命名风格 {model}_[model setting]_{backbone}_{neck}_[no…

微信小程序项目实例——密码管理器

今日推荐💁‍♂️ 自疫情后武林广场的音乐喷泉再次开启⛲⛲⛲ 坐在最佳视角下观赏了一场久违的表演🎆🎆🎆 🔮🔮🔮🔮🔮往期优质项目实例🔮🔮&…

在三台Linux虚拟机上完成构建集群的前置准备

前言 从现在开始进入到实操阶段,将要在VMware软件中创建多台Linux虚拟机,并进行系统设置。 需要同学们拥有前置知识: VMware的使用经验,知道什么是虚拟机并在VMware中创建过Linux虚拟机(CentOS系统) 熟…