Denoising Diffusion Probabilistic Models 全过程概述 + 论文总结

news2024/12/25 12:39:09

标题:Denoising(🌟去噪)Diffusion Probabilistic Models(扩散概率模型)

论文(NeurIPS会议 CCF A 类):Denoising Diffusion Probabilistic Models

源码:hojonathanho/diffusion: Denoising Diffusion Probabilistic Models (github.com)

推荐课程:大白话AI | 图像生成模型DDPM | 扩散模型 | 生成模型 | 概率扩散去噪生成模型_哔哩哔哩_bilibili

论文铺垫:

1、高斯正态分布函数(正态分布)

如下图所示,为正态分布的概率密度曲线,俗称 "钟形曲线" : 

其中, f(x) 为概率密度(无实际含义),x 为随机变量。e 和 π 为常量(就是那两个值)。μ 为随机变量的平均值,名为期望,是钟形曲线的 "对称轴"。σ 为为随机变量的标准差,名为方差。μ 和 σ 决定了钟形曲线的位置和形状,因此只需要确定μ 和 σ 就可以确定正态分布函数的概率密度函数。所以,正态分布函数也常表示为 N(\mu, \sigma^2) ,N表示 Normal(正态)。概率密度曲线和x轴之间合围的面积区域表示随机变量区间内发生的概率

2. 高斯噪声

期望 μ 为0,方差 σ 为1的正态分布,为标准正态分布 N(0,1) 。从一个标准正态分布中 "随机抽取" 样本,生成一组符合该分布的随机变量值,这样一组变量就叫做 "标准正态分布随机变量" ,在用于制造向数据中添加的噪声时,也叫做 "高斯噪声"。这样一组随机变量值,即是 "高斯噪声值"。

3. 扩散现象和扩散模型 

当一滴墨水滴入水中时,随着时间的推移,由于分子之间的碰撞和热运动,墨水分子开始向周围扩散。

扩散模型受到这种现象的启发,通过逐步向图片中添加高斯噪声来模拟这种现象(最终图像会变成一张符合N(0,1) 的纯噪声),并通过逆向过程逐步从噪声中生成图像(通过模型学习去噪过程)。

这样做的好处在于,一个训练好的完备的模型可以通过逆向过程从任意的符合 N(0,1) 的纯噪声中生成图像,使得生成样本具有较高的质量和多样性。

4. 扩散模型的前向过程(加噪过程)

那么,扩散模型 的具体加噪过程,应该怎么实现呢?

首先,为加噪图片创造出一张等大小的高斯噪声图片。

通过以下公式实现高斯噪声图片与输入图像的混合:

其中,x 为输入图像,ϵ 为等大小的高斯噪声图片 ,β 为产生 x 和 ϵ 系数的参数值(β 仅仅只是一个参数值,用于调和高斯噪声和输入图像的混合比例)。

如上图所示,加噪的过程是一个连续的,具有稳定时间步数的过程,且每一步加噪结果仅依赖于上一步的样本,这便是一个马尔可夫链。(  简述马尔可夫链【通俗易懂】)

以上图为例,可以得到一个🌟新的公式,如下所示:

其中,加噪所使用的噪声 \epsilon _t 是基于标准正态分布 \epsilon_t\sim N(0,1) 随机采样得来的。\beta_t \in (1,0) 并且随着步数逐渐增大,因为扩散速度是越来越快的。

5. 高斯函数叠加 和 重参数化技巧(扩散模型的前向过程的继续推导)

在得出上述公式之后,我们仅需要知道高斯函数叠加公式( \epsilon _t 符合标准高斯分布 \epsilon_t\sim N(0,1) ),就能知道最终加噪结果。

简单来讲,🌟给定两个高斯分布 X\sim N(\mu_{1} , \sigma_{1} ^{2}) 和 Y\sim N(\mu_{2} , \sigma_{2} ^{2}) 进行叠加,则它们叠加后的分布 aX+bY 满足:


那么继续 扩散模型的前向过程 的推导,首先,为了方便计算,令 β =1 - α :

代入 X_{t-1} : 

已知 \epsilon_t\sim N(0,1) ,根据高斯函数叠加公式:

🌟重参数化,得

(没错,这便是重参数化,在数学中仅仅只是一个将高斯函数简式表示重整为等式的方法。但是在梯度传播过程中,由于 \epsilon _t 是随机采样得来的,那么与之对应的加噪样本 X_{t} 也是随机生成的,这样的样本在 前向过程 的每个阶段都存在,导致梯度无法传播。通过重参数化,随机采样的噪声 \epsilon _t 被压缩到只有一个 \epsilon ,这样一个随机噪声生成之后不会再变,与之对应的加噪样本也不会再变,对梯度传播不会产生影响 

重复上述过程可得: 

其中a_t a_{t-1} a_{t-2}...a1很长,为了方便表达,用 \bar{\alpha }_t 代替:

最后,我们得到了最终加噪结果。

不难看出,最终加噪结果 xt 是由 x0 直接得出而来的(重参数化)。这是"迫于"随机采样导致梯度无法传播而做的选择。(也不好说,这种做法,说不定效果更优呢)。

 6. 贝叶斯公式和反向过程

贝叶斯公式,如下: 

其中,A、B 表示随机事件A和随机事件B。P(A) 和 P(B) 表示事件A和事件B发生的概率。P(B|A) 表示A事件发生的情况下B事件发生的概率。P(A|B) 表示B事件发生的情况下A事件发生的概率。贝叶斯公式强调 “已知结果找原因”。P(A) 是先验概率,P(A|B) 是后验概率。

(🌟同样,贝叶斯是可以求取后验概率分布,因为某一类的概率和某一类的概率分布只是定义上不同,本质上都是概率对不同事件的划分)


反向过程推导 

🌟由于在前向过程中从前一时刻向后一时刻加入的是根据正态分布随机采样的噪声,所以从 X_t 到 X_{t-1}也应该是一个随机过程,我们无法简单地预测 X_t 到 X_{t-1}的样本和具体的噪声值,但是我们可以通过贝叶斯公式大致地推测出给定 X_t 条件下 X_{t-1} 噪声的概率分布。(注意,这里已知的X_t 条件,是指最终加噪结果X_t 的噪声的概率分布 \epsilon \sim N(0,1 - \bar{\alpha} ) )

由贝叶斯公式得:

表示为由x0原图 “得到” 作为条件,得:

其中,P(x_{t-1}| x_t,x_0) 表示在给定Xt的情况下得到X_{t-1}的概率(反向过程中),P(x_t| x_{t-1},x_0) 表示在给定X_{t-1}的情况下得到Xt的概率(正向过程中),P(x_t|x_0) 从X0原图得到Xt的概率,P(x_{t-1}| x_0) 从X0原图得到X_{t-1}的概率。(这里概率都指的得到对应概率分布的概率)。

由正向过程给出的推断式可得,P(x_t| x_{t-1},x_0)P(x_t|x_0)P(x_{t-1}| x_0) 对应正态分布表达式分别如下所示:

代入 高斯正态分布函数 可得:

代回贝叶斯公式,得

这样,我们就可以推测出给定 X_t 条件下 X_{t-1} 噪声的概率分布。其中 X_t 是正向过程中最终得加噪结果,\bar{\alpha } 和 \beta 是无实际含义的参数,\epsilon 是从一个标准正态分布中 "随机抽取" 的噪声样本。🌟而 \epsilon 是图像去噪的关键,只有找到与正向过程一致或接近的随机采样噪声值(噪声的概率分布已推测出)才能顺利还原图像,🌟 \epsilon 由神经网络模型进行学习输出(只学习这个值)。

不断重复上述过程,最终得到原输入 X0 。如下图所示(该图只是一个大概过程,并不符合事实):

在推测出每个阶段的噪声的概率分布后,神经网络模型不断地学习优化 \epsilon 。 

一、摘要

研究动机:本文提出使用扩散概率模型得到高质量图像的合成结果,这是一类受非平衡热力学考虑启发的潜在变量模型。

主要工作:本文的最佳结果是通过在 加权变分界 上进行训练获得的,该变分界是根据 扩散概率模型 和与Langevin动力学匹配的 去噪分数 之间的新联系设计的,并且本文的模型自然地允许 渐进有损解压缩方案 ,可以解释为自回归解码的推广。(目标函数:变分推断,KL散度 + 模型:扩散概率模型和去噪分数 + 采样方式:渐进式编码和渐进式解码

实验结果:在CIFAR10数据集上,本文方法获得了9.46的Inception分数和3.17的最新FID分数。在256x256 LSUN上,本文方法获得了类似ProgressiveGAN的样品质量。

二、引言

相关工作概述( 生成对抗网络(gan)、自回归模型、流和变分自编码器(VAEs) ) —> 扩散概率模型概述( “扩散模型”是一个参数化的马尔可夫链,使用变分推理进行训练 + 正向过程概述 + 反向过程概述 )—> 模型效果概述+ 扩散模型某些参数化设计 +采样方式概述

三、主要方法

扩散模型是形式为 p_\theta (x_0):= \int p_\theta (x_{0:T}) dx_{1:T} 的隐变量模型,其中x1,…,xT是与数据x0 ~ q(x0)相同维数的潜变量。

反向过程定义(逆扩散过程)联合分布 p_\theta (x_{0:T}) 被称为反向过程,它被定义为一个马尔可夫链,其中学习高斯转移从 p(x_T) = N(x_T;0, I) 开始:

p_\theta 表示噪声的概率分布。这里左半部分 p_\theta (x_{0:T}) 是 的简化,是 x0,…,xT 的联合密度函数,表示给定xT ,…, x1条件下x0 噪声的概率分布(这是一个逆向推断的过程,推理到x0时,xT ,…, x1的噪声的概率分布已全部给定)。右半部分 p_\theta (x_{t-1}|x_t):= N(x_{t-1};\mu _\theta (x_t, t),\Sigma _\theta(x_T,T)) 表示给定 X_t 条件下 X_{t-1} 噪声的概率分布

前向过程定义(扩散过程):扩散模型与其他类型的隐变量模型的区别在于,近似后验 q(x_{1:T}|x_0) ,称为前向过程或扩散过程,固定在一个马尔可夫链中,逐渐向数据中添加高斯噪声根据方差 β1, . . ., βT:

 β 表示原图与噪声的混合比例(详情看论文铺垫部分)。

优化函数:在训练过程中使用负对数似然的变分界限进行优化:

 对𝑝𝜃(𝑥0) 的最大似然估计进行优化。

任意时刻的 xt 可以由 x0 和 β 表示:正向过程的一个显著特性是,它允许在任意时间步长 t 上以闭合形式对 xt 进行采样:使用符号 \alpha _t:= 1-\beta_t 和 \bar{\alpha }_t:=\sum^t _{s=1} \alpha _s ,有

 对应论文铺垫前向过程中最后一部分。由重参数化实现。

四、实验

实验细节:为所有实验设置T = 1000,以便采样期间所需的神经网络评估数量与之前的工作相匹配。将正向过程方差设置为常数,从\beta_1 = 10^{-4}到 \beta_T = 10^{-4} 线性增加。在实验中 L_T = D_{KL}(q(x_T|x_0) || N(0, I)) \approx 10^5  。为了表示反向过程,使用类似于未掩码的PixelCNN+的U-Net骨干,并始终进行group normalization。参数是跨时间共享的,使用Transformer正弦位置嵌入对网络进行指定。在16 × 16特征图分辨率上使用自注意力。

4.1 图片生成质量

在 CIFAR10 数据集上, 在训练集上,无条件模型 FID 分数达到 3.17;在测试集上 FID 分数为5.24,图片质量超过其他模型。

4.2 损失函数比较

简化损失函数的影响,结果如下表:

五、结论

1. 主要工作:本文发现了扩散模型和变分推断之间的联系,用于训练马尔可夫链、去噪分数匹配、自回归模型和渐进损耗压缩。

2. 实验效果:在 CIFAR10 数据集上, 在训练集上,无条件模型 FID 分数达到 3.17。在测试集上 FID 分数为5.24,图片质量超过其他模型。

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

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

相关文章

大数据智慧消防解决方案(24页PPT)

方案介绍: 大数据智慧消防解决方案是提升消防安全管理水平、保障人民群众生命财产安全的重要手段。通过集成物联网、云计算、大数据、人工智能等先进技术,构建集监测、预警、指挥、救援于一体的智慧消防系统,将为消防安全事业注入新的活力。…

ubuntu20.04安装cmake3.22.1

背景 由于第一套上位机windows clion22 嵌入式ubuntu20.04的开发环境中,ubuntu20.04上安装的是cmake3.22.1, 为了保持一致,需要指定安装的cmake版本。 下载指定版本的cmake 进入cmake官网的download页面,https://cmake.org/download/&…

加拿大媒体广告投放:媒体宣发主流媒体《金融邮报》《埃德蒙顿日报》

介绍《埃德蒙顿日报》与《埃德蒙顿太阳报》 在加拿大阿尔伯塔省首府埃德蒙顿,有两份主流新闻类报纸。其中,《埃德蒙顿日报》是加拿大主要英文报纸之一,也被称为爱蒙顿新闻报。而另一份报纸则是《埃德蒙顿太阳报》,是加拿大阿尔伯…

【Qt】深入探索Qt窗口与对话框:从创建到管理:QDockWidget(浮动窗口)、QDialog(对话框)

文章目录 前言:1. 浮动窗口2. 对话框介绍2.1. 示例:主窗口中,通过点击按钮,弹出一个新的对话框。2.2. 创建自定义对话框2.2.1. 纯代码的方式2.2.2. 图形化界面的方式 3. 模态对话框 和 非模态对话框4. Qt 内置对话框4.1. 消息对话…

【vue-cli搭建vue项目的过程2.x】

vue-cli搭建vue项目 vue-cli搭建vue项目安装node安装vue-cli脚手架并创建项目安装 Ant Design Vue或element-ui(笔者使用Ant-design-vue组件,并全局引入)开发安装三方库包1、Package.json文件---引入如下package.json文件执行npm i或npm install命令即可下载如下依赖…

Dou音滑块日志分析

记得加入我们的学习群:961566389 点击链接加入群聊:[https://h5.qun.qq.com/s/62P0xwrCNO](https://h5.qun.qq.com/s/62P0xwrCNO) 1.插桩-打印日志 获取背景和滑块的图片的接口一看没啥参数需要逆向的 验证的接口body参数需要进行逆向,直接…

Qt 界面上控件自适应窗体大小 - 随窗体缩放

Qt 界面上控件自适应窗体大小 - 随窗体缩放 引言一、在Qt Designer上设置二、参数详解三、参考链接 引言 添加布局,设置控件的minimumSize、maximumSize和sizePolicy可以使其跟随窗体进行自适应缩放 - 如上图所示。 一、在Qt Designer上设置 在代码中设置效果一致…

Slash后台管理系统代码阅读笔记 如何实现环形统计图表卡片?

目前&#xff0c;工作台界面的上半部分已经基本梳理完毕了。 接下来&#xff0c;我们看看这个环形图卡片是怎么实现的&#xff1f; 具体代码如下&#xff1a; {/*图表卡片*/} <Row gutter{[16, 16]} className"mt-4" justify"center">{/*环形图表…

Android BACK键和HOME键应用差异详解

文章目录 1、应用层分析1.1 BACK键功能实现 1.2 HOME键功能实现 1.3 BACK键与HOME键的区别 2、系统层分析2.1 BACK键的处理2.2 HOME键的处理2.3 代码分析BACK键HOME键BACK键的系统代码分析HOME键的系统代码分析BACK键HOME键 3、优缺点分析3.1 BACK键3.2 HOME键 4、项目中的使用…

ISCC2024个人挑战赛WP-迷失之门

&#xff08;非官方解&#xff0c;以下内容均互联网收集的信息和个人思路&#xff0c;仅供学习参考&#xff09; 迷失之门 方法一&#xff1a; IDA看一下 check函数逻辑 进入到check2函数 R键将ascii码转字符&#xff0c;写出逆向脚本 #include <stdio.h> #include &l…

【CCIE | 网络模拟器】部署 EVE-NG

目录 1. 环境准备2. 下载 EVE-NG 镜像3. 安装 EVE-NG 虚拟机3.1 创建 eve-ng 虚拟机3.2 选择存储3.3 定义虚拟机计算资源&#xff08;1&#xff09;开启CPU虚拟化功能&#xff08;2&#xff09;精简置备磁盘 3.4 检查虚拟机设置 4. 安装系统4.1 选择系统语言4.2 选择系统键盘类…

dubbo复习:(9)配置中心的大坑,并不能像spring cloud那样直接从配置中心读取自定义的配置

配置中心只是为 Dubbo 配置提供管理使用的&#xff08;比如配置服务超时时间等)。不要尝试通过Value类似的方式从dubbo 配置中心(比如nacos、zookeeper、Apollo)来获取数据 https://github.com/apache/dubbo/issues/11200可以在application.yml中主要写注册中心的配置&#xf…

OpenStack平台Glance管理

1. 规划节点 使用OpenStack平台节点规划。 IP主机名节点192.168.100.10controller控制节点192.168.100.20compute计算节点 2. 基础准备 使用实战案例-部署的OpenStack平台。 IP 主机名 节点 192.168.100.10 controller 控制节点 192.168.100.20 copute 计算节点 02 案例分…

卡特兰数-

是组合数学中一种常出现于各种计数问题中的数列。 一、简单介绍 卡特兰数是一个数列&#xff0c;其前几项为&#xff08;从第零项开始&#xff09; : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 47763…

2024/5/26周报

文章目录 摘要Abstract文献阅读题目创新点方法网络架构LSTM 实验过程Data acquisitionData preprocessingAlgorithm parameter settingsModels evaluation 实验结果 深度学习ARIMA一、ARIMA模型的基本思想二、ARIMA模型的数学表达式三、差分过程 总结 摘要 本周阅读了一篇基于…

多线程(C++11)

多线程&#xff08;C&#xff09; 文章目录 多线程&#xff08;C&#xff09;前言一、std::thread类1.线程的创建1.1构造函数1.2代码演示 2.公共成员函数2.1 get_id()2.2 join()2.3 detach()2.4 joinable()2.5 operator 3.静态函数4.类的成员函数作为子线程的任务函数 二、call…

牛客网刷题 | BC98 线段图案

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 KiKi学习了循环&am…

网络应用层之(1)DHCPv6协议

网络应用层之(1)DHCPv6协议 Author: Once Day Date: 2024年5月26日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客-C…

20240526怎样将windows的屏幕复制到第二屏

百度&#xff1a;WIN10 第二显示器 COPY https://zhidao.baidu.com/question/761454546683111004.html 20240526怎样将windows的屏幕复制到第二屏  我来答 分享 举报 2个回答#热议# 海关有哪些禁运商品&#xff1f;查到后怎么办&#xff1f; 华硕服务 2022-07-05 百度认证:…

【找出第 K 大的异或坐标值】python

4层循环暴力超时 class Solution:def kthLargestValue(self, matrix: List[List[int]], k: int) -> int:nums[]for a in range(len(matrix)):for b in range(len(matrix[0])):num0for i in range(a1):for j in range(b1):num^matrix[i][j]nums.append(num)nums.sort()retu…