扩散模型系列0 DDPM:Denoising Diffusion Probabilistic Models

前言:

从7月12号开始 学习了一些扩散模型的论文,越看越上瘾,对未知的渴求激励着我不断地读论文整理、学习、分析、理解

以前发的博客仅仅是对论文的翻译,现在觉得仅仅翻译是不够的,读了一篇论文以后,要形成自己的知识框架,形成自己的理解!以下的是我看的几篇很有意义的文章 也给大家推荐一下,也想和大家分享一下自己学习的一些收获和感受,还有推荐一下在b站看到的不错的讲解up主,一起共勉

bilibili发现了 优秀的讲解up deep_thoughts VictorYuki  通过他们的讲解学到了很多思考问题的角度 ,经过deep_thoughts的推荐还下载了一本书 PRML模式识别与机器学习,以后要多多累计数学和机器学习知识

今日感悟反思:

学习之前有一个问题想问大家,我们如何去理解复杂的事物?深度理解是怎样达成的?

我们为什么有时候读论文是都不懂的,看到复杂的公式会懵掉?

这不得不提认知负荷理论——认知负荷是指用户在界面上理解、思考、回忆、计算信息时所需的脑力消耗。它反映了大脑在处理信息时的负担程度。核心观点:认知负荷理论认为,当工作记忆的负荷最小并最有利于促进工作记忆向长时记忆转化时,学习最为高效

简单来说,理解是以记忆为基础的,然后顺着脉理和条理进行深入分析

理解=记忆+意义       

我们之所以要进入事物之中、事物之间进行分析,是为了得到某个东西——即意义,拿读论文举例,我们最终要得到的是作者写这篇文章的究竟是解决了什么困难挑战,是怎样实现的,有什么创新?这些就是比记忆多出来意义部分,搞懂了意义,我们才能说理解了一篇文章

为什么有时候就是读不懂  然后懵掉呢?

面对一个复杂的对象我们之所以无法达成理解是因为我们脑子不够用——也就是无法应对那些复杂的加工——工作记忆不足造成的理解困难,当我们要理解一个事物的时候, 所有的相关要素都需要被我们带进工作记忆进行加工,但是工作记忆是有限的,当元素过多,或者元素之间的联系较为复杂的时候 会超出我们记忆容量的限制,我们就会懵掉

大脑之所以能够理解复杂的事物,是因为我们有长时记忆,

无法理解复杂事物是因为我们缺乏丰富的结构 清晰的长时记忆,来引导我们理解复杂的信息

正因如此,我们更要多读论文积累经验,多多反思总结 

提高理解能力的方法:

1 组块化  模块化地处理大量的琐碎信息

2刻意练习的目标是将与完成任务相关的心里表征保存在长时记忆

困惑来源——元素交互性

优化认知负荷的策略

1去除冗余  外部认知负荷(去除材料中多余的元素交互性 来达到减少认知负荷的目的)

2 分割复杂  内部认知负荷(任务拆分,先学元素交互性 较弱的任务再学元素交互性强的)

3交替实例     

具体讲解可以看我超级喜欢的up主  汤质看本质的视频   这是一场哲学的领悟与反思   

我这辈子见过最好的学习方法 | CLT认知负荷理论 | 汤质看本质_哔哩哔哩_bilibili


 回归正题,今天第一篇 先介绍一下扩散模型的基础论文

熟悉概念

要理解  这个复杂的  数学公式的论文  很困难  所以在开始理解论文之前我们先熟悉一下一些概念

1扩散模型:一种生成模型,通过模拟数据分布的“扩散”和“去噪”过程,实现对复杂数据分布的建模和采样

2高斯分布(或正态分布):种描述数据分布的概率分布,其形状是一个对称的钟形曲线,表示数据点围绕着一个中心值(即均值)分布在某个范围内的概率

3高斯分布的概率密度函数(Probability Density Function, PDF)

4高斯噪声:从正态分布中采样得到的随机变量

5马尔可夫链:是概率论和数理统计中具有马尔可夫性质(Markov property)且存在于离散的指数集(index set)和状态空间(state space)内的随机过程(stochastic process)是一种基于概率的数学模型,用于描述一系列状态之间的转移规律

6马尔可夫性质:马尔可夫链的核心特性是马尔可夫性,即系统的下一个状态仅依赖于当前状态,而与过去的状态无关。这种性质也被称为“无后效性”或“无记忆性”。

7高斯分布的KL散度公式  对于两个单一变量的高斯分布p和q,它们的KL散度为

 

8参数重整化技巧:

9扩散过程:给定初始数据分布𝑥0∼𝑞(𝑥),不断地向分布中添加高斯噪声,加完噪声之后的数据分布——标准差是以固定值𝛽𝑡而确定的,均值是以固定值𝛽𝑡和当前t时刻的数据𝑥𝑡决定的。这一过程是一个马尔科夫链过程。随着t的不断增大,最终数据分布𝑥𝑇变成了一个各项独立的高斯分布。

Xt-1-Xt     

10 逆扩散过程:是从高斯噪声中恢复原始数据,我们可以假设它也是一个高斯分布,但是无法逐步地去拟合分布,所以需要构建一个参数分布去做估计。逆扩散过程仍然是一个马尔科夫链过程。

11 似然函数:似然函数(Likelihood Function)是用来描述给定一组观测数据(通常是随机变量的实现)时,某个参数值或参数集合的可能性大小的函数。它并不是数据本身的分布,而是参数在给定数据下的条件分布。

12 目标数据分布的似然函数:当我们谈论“目标数据分布的似然函数”时,实际上是在说,对于某个特定的数据分布(比如正态分布、泊松分布等),我们如何根据观测到的数据来评估该分布参数(如均值、方差等)的似然性。L(θX)=P(Xθ)

注意这里虽然形式上看似条件概率,但在似然函数的上下文中,我们通常将θ视为固定的(尽管未知),而X是已知的观测数据。因此,似然函数描述的是在不同参数值下,观测到当前数据的概率。

13最大似然估计 找到使得似然函数最大化的参数值,这个过程称为最大似然估计(Maximum Likelihood Estimation, MLE)。最大似然估计的目标就是找到最“可能”产生观测数据的参数值。

14 扩散模型中的评分分数:描述了数据分布的对数概率密度的梯度。具体来说,分数可以定义为数据分布对数概率密度函数关于数据本身的偏导数

分数函数提供了从噪声中逐步生成目标数据分布样本的指导方向。通过沿着分数函数指示的方向进行迭代更新,可以从一个随机噪声向量逐渐生成符合目标数据分布的样本

15 Langevin动力学 基于分数的生成模型中,Langevin动力学是一种常用的采样技术。它通过迭代地更新样本点,使其沿着评分函数的梯度方向移动,并加入一定的随机噪声来探索数据分布。这种方法能够有效地从复杂的数据分布中生成高质量的样本。

L朗之万动力学采样

16生成模型的目标:核心目标是学习数据的生成分布,从而能够生成新的、与真实数据类似的样本。这意味着生成模型需要捕捉数据集的内在规律和特性,以便能够生成具有相似特征但又不完全相同的新数据。使用已知数据集,学到一个模型可以用来从 pdata(x)中生成新的样本

 文章算法实现

 怎么理解 这个算法实现呢?训练和采样两个步骤是怎么进行的

表格左侧理解

先从数据分布q(x0)中采样得到图片x0(这个x0 就是我们要加噪的图像)

从均匀分布{1....T}中采样出t (这个t 也就是我们的输入图像x0要加噪到多少步)

从正态分布中采样一个噪声

进行梯度下降算法也就是训练model  模型的输入时xt和t 输出时预测的噪声,讲预测的噪声和上一步采样得到的噪声做L2 损失 用梯度下降法优化更新model 的权重,这里就是xt ,后面有推导 (如何从x0通过加噪得到xt),也就是说我们训练模型的目的时使之可以预测其生成xt 时所加的噪声

表格右侧理解:

从正态分布的中采样一个XT

从T  T-1 ........1   开始循环、

当t >1 的时候从正态分布中采样一个z 当t=1 的时候z=0(最后一步不加方差扰动)

执行操作 

逐步预测上一步xt-1,这个公式也是推导出来的,这里的噪声是通过用训练过程中训练好的模型用于生成噪声(即预测模型所加的噪声)


文章的理解

提出目的:通过扩散模型生成高质量的图像

模型优势:受非平衡热力学启发,是一种隐变量模型,根据扩散概率模型和朗之万动力学分数匹配之间新奇的联系,训练一个加权的变分下界,采用渐进式的损失减少方案可以认为是自回归编码的一种泛化形式

扩散模型是一个参数化的马尔科夫链 通过变分推理进行训练,在有限时间后产生与数据分布相匹配的样本。

1.训练过程,在扩散阶段  逐步向样本中添加噪声,得到噪声图,直到变成高斯噪声图片,在这个过程训练unet 网络 学习加噪过程(每一个xt 输入到神经网络 预测之前加的 噪声   把这个噪声去掉)

2 重建过程 在推理阶段,是一个逐步去噪的过程,从高斯分布中采样噪声图xT,利用前向过程 训练好的网络 预测每一步加的噪声,再执行逐步去噪。得到采样生成图片

优势:与gan  相比  比较稳定 损失函数简易 可观测 

具体的训练过程 随机在0-T中采样batch 利用推导公式  得到xt 噪声图,把噪声图输入进unet  得到预测噪声,把预测噪声和加的噪声做损失函数梯度下降

重建过程:xt àxt-1

文章公式

逆扩散过程:可以用联合分布表示pθ(x0:T ) ,被定义为一个马尔可夫链

从 p(xT ) = N (xT ; 0, I) 开始的学习高斯转移

扩散过程: 被固定为一个根据方差逐步向原始数据中添加噪声的马尔科夫链(不含参)

每次加噪的过程可以看作是高斯分布,这主要是基于高斯噪声的普遍性和模拟能力

通过优化负对数似然的变分下界执行训练

前向过程的一个显着特性是它允许在任意时间步长 t 以封闭形式对 xt 进行采样

训练目标的似然函数   以及负对数似然的上界

方程 (5) 使用 KL 散度直接将 pθ(xt−1|xt) 与前向过程后验进行比较,当以 x0 为条件时,前向过程后验是易于处理的:

为了指导我们的选择,我们在扩散模型和去噪分数匹配之间建立了一个新的显式连接, 从而为扩散模型提供了一个简化的加权变分边界目标

前向过程方差 βt固定为常数

我们将 Σθ(xt, t) = σ2 t I 设置为未经训练的时间相关常数σ2 t = βt

μθ 最直接的参数化是一个预测 ̃ μt(前向过程后验均值)的模型。然而,我们可以扩展方程。 (8) 进一步重新参数化方程。

由于 xt 可用作模型的输入,因此我们可以选择参数化

其中 θ 是一个函数逼近器,旨在根据 xt 进行预测, 采样

 

完整的采样过程(算法 2)类似于朗之万动力学,其中 θ 作为数据密度的学习梯度。此外,通过参数化(11),方程: (10) 简化为:

这类似于在由 t 索引的多个噪声尺度上的去噪分数匹配[55]Yang Song and Stefano Ermon. Generative modeling by estimating gradients of the data distribution如方程。 (12)

我们发现对变分界限的以下变体进行训练有利于样本质量(并且更易于实现):

代码实现:比较玩具的代码

GitHub - abarankab/DDPM: PyTorch DDPM implementation

实用代码

GitHub - zoubohao/DenoisingDiffusionProbabilityModel-ddpm-: This may be the simplest implement of DDPM. You can directly run Main.py to train the UNet on CIFAR-10 dataset and see the amazing process of denoising.

GitHub - Janspiry/Image-Super-Resolution-via-Iterative-Refinement: Unofficial implementation of Image Super-Resolution via Iterative Refinement by Pytorch

 视频速览  [论文速览]Denoising Diffusion Probabilistic Models / DDPM[2006.11239]_哔哩哔哩_bilibili

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

深度理解  

扩散模型 Diffusion Model 1-1 概述_哔哩哔哩_bilibili

54、Probabilistic Diffusion Model概率扩散模型理论与完整PyTorch代码详细解读_哔哩哔哩_bilibili

学习资料

AI_-/Diffusion_Models/【deep_thoughts】54_Probabilistic_Diffusion_Model概率扩散模型理论与完整PyTorch代码详细解读.ipynb at main · duhanyue349/AI_- · GitHub

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

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

相关文章

智慧出行新纪元:Vatee万腾平台引领未来交通蓝图

在科技日新月异的今天,智慧出行已成为连接城市脉动、重塑生活方式的关键词。Vatee万腾平台,作为智慧交通领域的佼佼者,正以前瞻性的视角和创新的技术,为我们描绘出一幅未来交通的宏伟蓝图,让每一次出行都成为一次前所未…

扩散模型系列ControlNet: Adding Conditional Control to Text-to-Image Diffusion Models

向文本到图像扩散模型添加条件控制 摘要解读: 我对摘要英文的理解: 我们提出了一个神经网络架构ControlNet,可以向大规模的预训练好的文本到图像的扩散模型中添加空间条件控制。ControlNet锁住了准备生产的大规模扩散模型,并且重…

TCP为什么需要四次挥手?

tcp为什么需要四次挥手? 答案有两个: 1.将发送fin包的权限交给被动断开发的应用层去处理,也就是让程序员处理 2.接第一个答案,应用层有了发送fin的权限,可以在发送fin前继续向对端发送消息 为了搞清楚这个问题&…

生鲜云订单零售系统小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,商品分类管理,商品信息管理,订单评价管理,订单管理,系统管理 微信端账号功能包括:系统首页,商品信息&#x…

力扣高频SQL 50题(基础版)第二十三题

文章目录 力扣高频SQL 50题(基础版)第二十三题596.超过5名学生的课题目说明实现过程准备数据实现方式结果截图 力扣高频SQL 50题(基础版)第二十三题 596.超过5名学生的课 题目说明 表: Courses -------------------- | Colum…

家具缓冲器:提升家居体验的得力助手

在家具和工业设备的设计与制造中,钢珠滑轨缓冲器的安装与否一直是一个备受争议的话题。钢珠滑轨缓冲器作为一种能够减少冲击和噪音的装置,其存在具的价值,但也并非在所有情况下是必需的。首先,从功能和使用体验的角度来看&#xf…

算力共享:如何理解、标识与调控多层次算力资源的异构性和复杂性,实现智能算力网生态诸要素有效互操作?

目录 鹏程云主机和NPU计算服务器关系 NPU计算服务器 两者关系 结论 两种不同类型的处理器或计算单元 FPGA MLU NS3(Network Simulator version 3) 一、基本属性 二、主要功能与特点 三、应用与前景 对象存储和HDD存储 一、定义与特点 二、应用场景 三、总结 对…

html+css+js前端作业和平精英6个页面页面带js

htmlcssjs前端作业和平精英6个页面页面带js 下载地址 https://download.csdn.net/download/qq_42431718/89595600 目录1 目录2 项目视频 htmlcssjs前端作业和平精英6个页面带js 页面1 页面2 页面3 页面4 页面5 页面6

3.2.微调

微调 ​ 对于一些样本数量有限的数据集,如果使用较大的模型,可能很快过拟合,较小的模型可能效果不好。这个问题的一个解决方案是收集更多数据,但其实在很多情况下这是很难做到的。 ​ 另一种方法就是迁移学习(transfer learning…

Go语言编程 学习笔记整理 第2章 顺序编程 前半部分

前言:《Go语言编程》编著 许式伟 吕桂华 等 1.1 变量 var v1 int var v2 string var v3 [10]int // 数组 var v4 []int // 数组切片 var v5 struct { f int } var v6 *int // 指针 var v7 map[string]int // map,key为string类型,value为in…

【QT】qt 文件操作

qt 文件 qt 文件1. Qt 文件概述2. 输入输出设备类3. 文件读写类4. 文件和目录信息类 qt 文件 1. Qt 文件概述 文件操作是应用程序必不可少的部分。Qt 作为⼀个通用开发库,提供了跨平台的文件操作能力。 Qt 提供了很多关于文件的类,通过这些类能够对文件…

微服务--配置管理

现在依然还有几个问题需要解决: 网关路由在配置文件中写死了,如果变更必须重启微服务 某些业务配置在配置文件中写死了,每次修改都要重启服务 每个微服务都有很多重复的配置,维护成本高 这些问题都可以通过统一的配置管理器服…

DP的优化途径---单调队列

1.前缀和单调队列&#xff1a;https://www.acwing.com/problem/content/137/ 我们先预处理下前缀和&#xff0c;以下标为i的点为有边界&#xff1a; 也就是求()的min&#xff0c;考虑到j的范围是定值&#xff0c;用单调队列维护即可。 AC代码&#xff1a; #include<bits/…

OpenGL3.3_C++_Windows(32)

demo SSAO SSAO 环境光照(Ambient Lighting)&#xff1a;光的散射&#xff0c;我们通过一个固定的常量作为环境光的模拟&#xff0c;但是这种固定的环境光并不能很好模拟散射&#xff0c;因为环境光不是一成不变的&#xff0c;环境光遮蔽&#xff1a;让&#xff08;褶皱、孔洞…

更新至2023年上市公司ESG数据合集(十份数据:华证年度、华证季度、商道融绿、wind、秩鼎、润灵环球、盟浪、富时罗素、上市银行华证ESG)

更新至2023年上市公司ESG数据合集&#xff08;十份数据&#xff1a;华证年度、华证季度、商道融绿、wind、秩鼎、润灵环球、盟浪、富时罗素、上市银行华证ESG&#xff09; 数据名称&#xff1a; 一、2018-2023年上市公司富时罗素ESG评分数据 二、2018-2023年上市公司Wind ES…

深度学习实战笔记3循环神经网络实现

我们要训练一个基于循环神经网络的字符级语言模型&#xff0c;根据用户提供的文本的前缀生成后续文本。 import math import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2l batch_size, num_steps 32, 35 train_iter, voc…

C#插件 调用存储过程(输出参数类型)

存储过程 CREATE PROCEDURE [dbo].[GetSum]num1 INT,num2 INT,result INT OUTPUT AS BEGINselect result num1 num2 END C#代码 using Kingdee.BOS; using Kingdee.BOS.App.Data; using Kingdee.BOS.Core.Bill.PlugIn; using Kingdee.BOS.Util; using System; using System.…

MySQL死锁问题案例

MySQL死锁问题 问题描述&#xff1a;在一张流水生成的记录表中&#xff0c;当没有当前条件的数据时候&#xff0c;并发情况下会导致有线程因为死锁问题生成流水号失败。 场景 有一张生成流水的表&#xff1a; 场景复现&#xff1a; 简单来说&#xff0c;在根据流水类型、年、月…

Python如何快速定位最慢的代码?优雅了~

编写Python代码时&#xff0c;我们常常会遇到性能瓶颈&#xff0c;这不仅影响程序的执行效率&#xff0c;还可能导致用户体验下降。那么&#xff0c;如何快速定位代码中最慢的部分&#xff0c;成为每个开发者必须掌握的技能。 如何快速定位 Python 代码中的性能瓶颈&#xff1…

Url图标实现

Url图标实现 效果如下&#xff1a; 1.引入样式 <link rel"icon" href"favicon.ico"> favicon.ico和对应的html一般需要在同一个目录下&#xff08;同级别&#xff09;。 2.title是用来设置在url页签中显示的名称。 可能存在的问题&#xff1a; …