GNN Algorithms(8): DDPM

news2024/11/26 14:57:31

扩散模型 diffusion model:正向扩散过程 Forward Diffusion Process、反向生成过程 Reverse Generation Process.

本质:DDPM, Denoising Diffusion Probabilistic Model

  • T steps 加噪:没有参数q(x_t|x_{t-1}) ->随机取一个每一步都要加的随机高斯噪声\epsilon value,T步后生成一个符合正态分布的纯噪声图像x_T,这其实也是个噪声noise。
  • T steps 去噪:有参数p_{\theta}(x_t|x_{t-1}) ->模型生成一个每一步需要剔除的模拟高斯噪声\epsilon_{\theta},从噪声图像noise中恢复出一个新的清晰、有意义的图像。
  • 关键:构造一个优质的去噪模型去估计反向过程中的随机噪声\epsilon_{\theta},U-Net or ResNet。

目录

1. Background

1.1 VAE

1.2 GAN

1.3 DDPM

2. Diffusion Model Pipeline 流程

2.1 前向扩散过程

2.2 反向生成过程

2.3 Diffusion model优缺点

3. DDPM Formulation Derivation

3.1 前向过程

3.2 反向过程

4. DDPM implementation on MNIST

参考


1. Background

一般来说,图像生成模型根据随机数生成图像,被用于解决训练数据不足的问题,但生成任务缺乏有效的指导 label,那如何让神经网络生成的图像向[标准答案] or [理想答案]靠拢?

为了解决这一问题,人们设计了专门用于生成图像的NN model:VAE, GAN, DDPM。

1.1 VAE

VAE,Variational Auto-Encoder,变分自编码器,在2013年提出于paper Auto-Encoding Variational Bayes,通过学习数据的概率分布来生成新样本。因为直接学习向量生成的图像很困难,也没有label指导所以VAE先把图像变成向量,再用该向量生成图像

VAE模型 architecture:编码器、概率潜在空间、解码器。在training stage,encoder预测每个图像的均值和方差,然后从高斯分布中对这些值进行采样,并将其传递到decoder中,其中输入图像预计与输出图像相似。这个过程包括KL Divergence计算loss。

VAE 优点:能够生成各种各样的图像

缺点:可能就是准确度差点意思

reference:https://adaning.github.io/posts/9047.html 

1.2 GAN

GAN, Generative Adversarial Networks,生成式对抗网络,提出于 NeurlPS 2014 paper: Generative Adversarial Nets。通过训练两个神经网络(生成器和判别器)互相对抗来学习数据分布。

- generator,生成器接受一个随机噪声noise作为输入,输出一个图片向量。

- discriminator,接受一个真实图像作为输入,生成真实图像向量。

- 对抗损失loss,Jensen-Shannon散度,Wasserstein距离,最小二乘损失,铰链损失Hinge Loss。

GAN优点:GANs擅长生成与训练集图像非常相似的图像

缺点:GANs生成图像的目标追求与training图像高度一致,缺乏多样性

reference:简单使用PyTorch搭建GAN模型 | 机器之心

1.3 DDPM

DDPM = VAE + GAN,生成高精度且多样性强的伪图像

DDPM,在2020年提出于paper:Denoising Diffusion Probabilistic Models。

2. Diffusion Model Pipeline 流程

Diffusion model是一类生成模型,包括:前向扩散过程反向生成过程。在正向过程中,原始真实图像输入x0会不断混入高斯噪声\epsilon,经过T次加噪后,图像x_T会变成一幅符合标准正态分布的纯噪声图像,即纯纯的noise;在反向生成过程中,我们希望训练出一个去噪神经网络\theta该网络能够预估反向过程中每一步需要剔除的模拟高斯噪声\epsilon_{\theta},T步去噪后把噪声图像noise x_T还原回x0。

2.1 前向扩散过程

  • 在这个过程中,diffusion model通过逐步向图像数据添加高斯噪声,使其变得越来越模糊,最终使noise数据分布接近标准正态分布。
  • 具体来说,给定一个初始数据点x0,前向扩散过程产生一个序列x1, x2,..., xT,其中每个xt都是通过在x_{t-1}上添加高斯噪声得到的。

2.2 反向生成过程

  • 在这个阶段,diffusion model通过反向去噪过程,从噪声图像noise中逐步生成新的样本,这个过程是前向过程的逆过程,model学会每一步都剔除一些模拟高斯噪声,让图像变得更清晰。
  • 给定一个最中的噪声图像数据noise xT,反向过程生成一个序列x_{T-1}, x_{T-2},..., x_0,最终得到一个新的数据样本。
  • Diffusion model training的目的是学习一个精准的去噪网络,可在每一步准确地预估需要剔除的模拟高斯噪声\epsilon_{\theta},使纯噪声图像noise能够在反向过程中生成高质量的新样本。

2.3 Diffusion model优缺点

  • 优点是扩散模型能生成样本质量高且多样性强的新图像。
  • 缺点是计算代价较高,因为生成过程需要执行多次去噪操作。

3. DDPM Formulation Derivation

3.1 前向过程

在前向过程中,从训练集真实图像中随机采样一张图像x_0会被添加T次噪声,使最终噪声图像x_T符合标准正态分布。那么前向过程q(x_t|x_{t-1})指的是在前向的每一步通过向图像x_{t-1}中添加高斯噪声\epsilon得到x_tx_t是从一个均值与x_{t-1}相关的正态分布里采样出来的,不是无脑地直接相加,这是一个马尔可夫过程x_t状态只与上一个状态x_{t-1}相关,过程表示为:

x_t \sim \mathcal{N} (\mu_t(x_{t-1}), \sigma^2_tI) 

这个正态分布还可以写成公式(1-1)变体形式:

x_t \sim \mathcal{N}(\sqrt{1-\beta_t}x_{t-1}, \beta_tI) 

这个公式看起来很奇怪,主要是\sqrt{1-\beta_t}这个系数是从哪冒出来的?

证明:归纳法--假定这个公式是正确的,从结论出发倒推,证明假设或公式正确。假如给定x_0,也就是从训练数据集里采样出一幅图片,那么该怎么计算任意时刻t的图像x_t呢?

我们根据上式从x_t开始倒推,x_t是一个接近服从正态分布的样本,假设正向过程加入的高斯噪声为\epsilon_t,很明显\epsilon_t也服从正态分布,\epsilon_t \sim \mathcal{N}(0,I)。那么对应加入上一时刻图像x_{t-1}的高斯噪声为\epsilon_{t-1},可以推出加噪公式(1):

x_t = \sqrt{1-\beta_t}x_{t-1} + \sqrt{\beta_t} \epsilon_{t-1}                (1)

再往前推几步:

x_t = \sqrt{1-\beta_t}x_{t-1} + \sqrt{\beta_t} \epsilon_{t-1} \\ = \sqrt{1-\beta_t}(\sqrt{1-\beta_{t-1}}x_{t-2} + \sqrt{\beta_{t-1}}\epsilon_{t-2}) + \sqrt{\beta_t} \epsilon_{t-1} \\ = \sqrt{(1-\beta_t)(1-\beta_{t-1})} x_{t-2} + \sqrt{(1-\beta_t)\beta_{t-1}}\epsilon_{t-2}+ \sqrt{\beta_t} \epsilon_{t-1}

从正态分布性质可知: 均值相同的正态分布加在一起后,方差也会加到一起,也就是\mathcal{N}(0, \sigma_1^2 I)\mathcal{N}(0, \sigma_2^2 I)合起来会得到\mathcal{N}(0, (\sigma_1^2 + \sigma_1^2) I)。根据这一性质,\sqrt{(1-\beta_t)\beta_{t-1}}\epsilon_{t-2}+ \sqrt{\beta_t} \epsilon_{t-1}这一项乘开、相加、化简为,可得:

\sqrt{(1-\beta_t)(1-\beta_{t-1})} x_{t-2} + \sqrt{(1-\beta_t)\beta_{t-1}}\epsilon_{t-2}+ \sqrt{\beta_t} \epsilon_{t-1} \\ = \sqrt{(1-\beta_t)(1-\beta_{t-1})} x_{t-2} + \sqrt{1-(1-\beta_t)(1-\beta_{t-1})} \epsilon

在往前推一步到t-2时刻,结果是:

\sqrt{(1-\beta_t)(1-\beta_{t-1})(1-\beta_{t-2})} x_{t-3} + \sqrt{1-(1-\beta_t)(1-\beta_{t-1})(1-\beta_{t-2})} \epsilon

这时我们令\alpha_t=1-\beta_t\bar{\alpha_t} = \prod^{t}_{i=1}\alpha_i可以很容易的总结出加噪公式(2)

x_t = \sqrt{\bar{\alpha_t}}x_0 + \sqrt{1-\bar{\alpha_t}} \epsilon                (2)

这里,\beta_t是一个小于1的常数,并且从几乎为0开始逐渐增大,这时\alpha_t逐渐变小,\bar{\alpha_t}趋近于0的速度也越来越快。最后\bar{\alpha_T}几乎为0,带入公式(2):x_T = \sqrt{\bar{\alpha_T}}x_0 + \sqrt{1 - \bar{\alpha_T}}\epsilon就满足标准正态分布里,符合我们对扩散模型的需求,自然证明x_t \sim \mathcal{N}(\sqrt{1-\beta_t}x_{t-1}, \beta_tI)满足正态分布。

上述推断可以简单描述为:加噪公式能够从慢到快地改变原始图像x_0,让图像x_t最终均值为0,方差为I

3.2 反向过程

4. DDPM implementation on MNIST

my Github: Diffusion_Models_Learning/DDPM_model_2 at master · yuyongsheng1990/Diffusion_Models_Learning · GitHub 

参考

挺好:扩散模型(Diffusion Model)详解:直观理解、数学原理、PyTorch 实现 | 周弈帆的博客

DDPM模型——pytorch实现_条件ddpm模型序训练python代码实例-CSDN博客

扩散模型的原理及实现(Pytorch)-CSDN博客

京东团队的DDPM讲解也很好:https://www.cnblogs.com/jingdongkeji/p/17267671.html 

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

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

相关文章

基于SSM+Jsp的体育竞赛成绩管理系统

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包…

Emacs之保存时删除行尾空格(一百四十二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

【机器学习】机器学习赋能交通出行:智能化实践与创新应用探索

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀目录 📒1. 引言📙2. 交通流量预测与优化🌞数据准备🌙模型训练与预测⭐评估模型与优化 &#x…

Linux操作系统篇:多线程

一. Linux中线程是怎么理解的 1.1 线程概念 在Linux中,线程是在进程“内部”执行的,线程是处于进程的进程地址空间中运行,线程用到的资源都是进程的资源,线程是执行进程的一部分代码,线程是最小的执行流&am…

C++代码编写风格:Header-Only与声明实现分离的选择

C代码编写风格:Header-Only与声明实现分离的选择 最近看到一些小伙伴问到了几个比较有趣的问题,这里总结一下,这些都是实际面试中出现过的问题,看看你知道多少,考察一下底子。 面试问题1:你通常编写代码的风…

eNSP学习——配置基于全局地址池的DHCP

目录 主要命令 原理概述 实验目的 实验场景 实验拓扑 实验编址 实验步骤 1、基本配置 2、配置基于全局地址池的 DHCP Server 3、配置DHCP Client 主要命令 [R1]dhcp enable //开启 DHCP功能//创建一个全局地址池,地址池名称为huawei1 [R1]ip pool h…

RIP路由协议汇总、版本兼容、定时器、协议优先级配置(华为)

#交换设备 RIP路由协议汇总 一、原理概述 当网络中路由器的路由条目非常多时,可以通过路由汇总(又称路由汇聚或路由聚合)来减少路由条目数,加快路由收敛时间和增强网络稳定性。路由汇总的原理是,同一个自然网段内的…

linux挂载硬盘(解决linux不显示硬盘问题)

目录 1.查看系统有几块硬盘2.查看挂载情况3.格式化硬盘4.创建挂载目录用于挂载硬盘5.将硬盘挂载到指定的挂载目录6.随系统自启动挂载查看配置文件,看是否已经把这条命令加入配置 帮同门解决挂载失败问题记录 参考视频:只要6步!Linux系统下挂载…

内容安全复习 10 - 异常检测

文章目录 概述什么是异常检测异常检测应用与二分类分类器的辨析广义分布外检测(OOD) 异常检测分类Deep Learning for Feature Extraction(用于特征提取的深度学习)Learning Feature Representations of Normality(学习…

人工智能在影像组学与放射组学中的最新进展|顶刊速递·24-06-22

小罗碎碎念 本期文献速递的主题——人工智能在影像组学中的最新进展。 小罗一直以来的观点,是把大问题分模块拆解——既然我们想做多模态,那么就先了解单模态的研究套路,再去研究不同模态提取的特征如何融合,搞科研的过程也是管理…

R语言数据分析案例32-针对芬兰污染指数的分析与考察

一、 研究背景及意义 近年来,随着我国科技和经济高速发展,人们生活质量也随之显著提高。但是, 环境污染问题也日趋严重,给人们的生活质量和社会生产的各个方面都造成了许多不 利的影响。空气污染作为环境污染主要方面&#xff0c…

汽车销售系统

摘 要 在现代社会,电脑是企业运作和管理必不可少的工具。我们过去用手记下卖出的商品的年代已一去不复返了。在我国,汽车销售行业的竞争日趋激烈的情况下,如何提高企业的管理水平,提高企业的工作效率,提高企业的服务质…

【性能优化】表分区实践最佳案例

背景 随着数字化建设的持续深入,企业的业务规模迎来了高速发展,其数据规模也呈现爆炸式增长,如果继续使用传统解决方案,将所有数据存储在一个表中,对数据的查询和维护效率将是一个巨大的挑战,在这个背景下…

深入解析MVC架构(Model-View-Controller Architecture)

目录 前言1. MVC架构概述1.1 模型(Model)1.1.1 数据管理1.1.2 业务逻辑 1.2 视图(View)1.2.1 数据展示1.2.2 用户界面设计 1.3 控制器(Controller)1.3.1 用户输入处理1.3.2 更新模型和视图 2. MVC架构的优缺…

区块链技术:金融市场监管的新篇章

一、引言 随着金融科技的迅猛发展,区块链技术作为其中的佼佼者,正逐渐改变着金融市场的格局。在金融市场监管领域,区块链技术以其独特的优势,为监管机构提供了新的监管思路和手段。本文将深入探讨区块链技术在金融市场监管中的作用…

了解Spring的BeanPostProcessor

了解Spring的BeanPostProcessor Spring框架提供了一种机制,允许在Spring容器实例化Bean之前和之后进行自定义的修改。这个机制就是BeanPostProcessor接口。BeanPostProcessor是Spring的核心接口之一,用于在Spring容器创建和初始化Bean的过程中进行干预和…

深度揭秘:深度学习框架下的神经网络架构进化

深度学习框架下的神经网络架构经历了从基础到复杂的显著进化,这一进程不仅推动了人工智能领域的突破性进展,还极大地影响了诸多行业应用。本文旨在深入浅出地揭示这一进化历程,探讨关键架构的创新点及其对现实世界的影响。 引言:…

在 KubeSphere 上快速安装和使用 KDP 云原生数据平台

作者简介:金津,智领云高级研发经理,华中科技大学计算机系硕士。加入智领云 8 余年,长期从事云原生、容器化编排领域研发工作,主导了智领云自研的 BDOS 应用云平台、云原生大数据平台 KDP 等产品的开发,并在…

SUSE linux 15的网络管理

1 手工配置网络 wicked提供了一种新的网络配置框架。自SUSE 12起,SUSE使用了新的网络管理工具wicked,这个是区别与其他常见发行版的。常见的发行版目前大多使用的是NetworkManager服务进行网络管理。 1.1 wicked网络配置 传统网络接口管理面临的挑战之…

C语言学习记录20240622

这次需要用 C 语言库 Allegro 写爆破彗星游戏。项目有一些描述如需要绘制飞船、彗星、子弹,需要响应按键实现飞船加速、减速、转向、开火,需要绘制弹道,需要实现彗星旋转、缩放,需要碰撞检测,需要显示计分。 这些用 w…