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

news2025/1/6 19:09:12

前言:

从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.coloradmin.cn/o/1960269.html

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

相关文章

shardingsphere的学习(二):sharingjdbc操作读写分离

简介 mysql配置读写分离以及使用shardingjdbc配置操作读写分离 读写分离 主数据库负责增删改操作(写),从数据库负责查询操作(读),主数据库和从数据库之间会数据同步(主从复制)。 …

中电金信:云原生时代IT基础设施管理利器——基础设施即代码(IaC)

在数字化转型、零售业务快速发展、信创建设驱动下,应用架构、技术架构、基础架构都已向云原生快速演进,银行业IT基础设施管理产生了非常大的变化,当前银行业,正在开展新一轮的核心应用系统重构、基础平台统一建设等重点任务&#…

Move生态:从Aptos和Sui到Starcoin的崛起

区块链技术自诞生以来,已经经历了多个发展阶段和技术迭代。近年来,随着智能合约平台的不断演进,以Move语言为核心的生态系统逐渐崭露头角。Move语言以其安全性、灵活性和高效性吸引了大量开发者和项目方的关注。在Move生态中,Apto…

⌈ 传知代码 ⌋ 利用scrapy框架练习爬虫

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

56_Redis简单命令

一、引言 1.1 数据库压力过大 由于用户量增大,请求数量也随之增大,数据压力过大 一个请求的url 背后可能有有4-5个 sql的操作 每秒钟 qps(并发数) 1000 背后的sql操作 4000-5000mysql 单机并发量读写 8000-10000 &#x…

素数提升运算时间得算法

我们在计算素数的一种简便算法&#xff0c;用到另一个库math.h之后给大家详细的解释原理 #include<stdio.h> #include<math.h> int main() {int i 0;for (i 101; i < 200; i 2){int flag 1;int j 0;for (j 2; j < sqrt(i); j){if (i % j 0){flag 0;b…

ITSS四级认证费用是多少?

信息技术服务标准&#xff08;ITSS&#xff09;认证是评估一个企业在信息技术服务领域能力的标准之一&#xff0c;它涵盖了从基础标准、支撑标准到基于业务的需求侧和供给侧标准的全面内容。 具体条件 独立法人地位&#xff1a;申请单位需要具备独立法人地位&#xff0c;这是四…

如何使用rdma-core来实现RDMA操作

rdma-core 是一个开源项目&#xff0c;为远程直接内存访问&#xff08;RDMA&#xff09;提供用户空间的支持。它包括 RDMA 设备的驱动程序、库和工具&#xff0c;旨在简化 RDMA 应用的开发和部署。 基础知识参考博文&#xff1a; 一文带你了解什么是RDMA RDMA 高性能架构基本…

day07 项目启动以及git

spring框架 spring 负责整合各种框架&#xff0c;把new对象的部分交给spring去做&#xff0c;对象new不出来&#xff0c;项目就启动不起来&#xff0c;这样可以有效保证所需要的对象都在容器中存在&#xff0c;后续的部分都可以顺利执行控制反转&#xff1a;业务对象创建依赖资…

零基础入门转录组数据分析——机器学习算法之lasso

零基础入门转录组数据分析——机器学习算法之lasso 目录 零基础入门转录组数据分析——机器学习算法之lasso1. Lasso基础知识2. Lasso&#xff08;Rstudio&#xff09;——代码实操2. 1 数据处理2. 2 构建Lasso模型2. 3 提取Lasso关键基因2. 4 Lasso结果简单可视化 1. Lasso基础…

高度偏斜特征处理:log(x)、sqrt(x)、box-cox、Yeo-Johnson

一、概念 高度偏斜的特征 &#xff1a; 数据分布不均匀、不对称的特征 处理之后&#xff1a;使其分布更接近正态分布或至少减少偏斜程度 二、处理方法 1、对数变换&#xff1a;log(x) 适用于右偏数据压缩大值&#xff0c;拉伸小值 2、平方根变换&#xff1a;sqrt(x) 对右…

臂式血压计电子方案ocba设计与开发

臂式血压计是运用电子技术与血压间接测量原理进行血压测量的医疗设备。臂式血压计有臂式、腕式、手表式之分&#xff1b;其电子技术已经历了最原始的第一代&#xff08;机械式定速排气阀&#xff09;、第二代&#xff08;电子伺服阀&#xff09;、第三代&#xff08;加压同步测…

学习测试12-车(略)

系统讲解&#xff0c;可以在懂车帝网站去了解汽车结构

商用密码测评之对HTTPS(TLS)协议中各个参数解释

1、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 是一个广泛使用的TLS&#xff08;传输层安全协议&#xff09;加密套件&#xff0c;它结合了多种技术和算法来确保网络通信的安全。下面是对该加密套件中各个参数的详细解释&#xff1a; 1. TLS 定义&#xff1a;TLS&#xff08;传…

【文件解析漏洞】实战详解!

漏洞描述&#xff1a; 文件解析漏洞是由于中间件错误的将任意格式的文件解析成网页可执行文件&#xff0c;配合文件上传漏洞进行GetShell的漏洞! IIS解析漏洞&#xff1a; IIS6.X&#xff1a; 方式一:目录解析 在网站下建立文件夹的名字为.asp/.asa 的文件夹&#xff0c;其目…

【前端 · 面试 】JavaScript 之你不一定会的基础题(一)

最近我在做前端面试题总结系列&#xff0c;感兴趣的朋友可以添加关注&#xff0c;欢迎指正、交流。 争取每个知识点能够多总结一些&#xff0c;至少要做到在面试时&#xff0c;针对每个知识点都可以侃起来&#xff0c;不至于哑火。 JavaScript 之你不一定会的基础题 前言 面试往…

python中list的深拷贝和浅拷贝

其实这还是涉及到python中的可变对象和不可变对象的概念。 https://www.cnblogs.com/poloyy/p/15073168.html # -*- coding: utf-8 -*-person [name, [savings, 100.00]] hubby person[:] # slice copy wifey list(person) # fac func copy a [id(x) for x in person] b …

【Vue3】watch 监视多种类型数据

【Vue3】watch 监视多种类型数据 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗…

新闻稿的写作格式,干货分享

随着互联网的发展&#xff0c;新闻稿在互联网上的地位非常高&#xff0c;新闻稿对比一般软文来说内容质量偏高而且还具备&#xff1a;严谨、时效、可观的特点。 撰写新闻稿主要就是突出最新鲜、最重要的事实&#xff0c;同时&#xff0c;新闻稿也是文字简洁&#xff0c;并且时效…

【nginx、apache】网站只有首页可以正常打开,其他页面都实现404

【nginx、apache】网站只有首页可以正常打开&#xff0c;其他页面都实现404 1、检查伪静态规则&#xff08;中枪&#xff09;