扩散模型系列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

  • 14
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值