一文详解扩散模型

文章目录

    • 1、常见的生成模型
    • 2、变分推断简介
    • 3、文生图的评价指标
    • 4、Diffusion Models
    • 5、其他
    • 技术交流群
    • 精选

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学。

针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。

合集:

《大模型面试宝典》(2024版) 正式发布!
《AIGC 面试宝典》已圈粉无数!


1、常见的生成模型

如图1所示,常见的生成模型有四种:GAN(Generative Adversarial Network)、VAE(Variational Autoencoder)、Flow-Based Models、Diffusion Models。
今天我们讲一讲扩散模型(DM,Diffusion Models)的原理。

DM和VAE一样,都是属于变分推断(VI,Variational Inference)的理论框架。
在这里插入图片描述

2、变分推断简介

2.1、统计学简介

在统计学中,一切都是分布(Distribution),到处都是分布。

统计学的根本目的就是获得数据分布。 只要得到了数据的分布,那一切问题都迎刃而解。

但现实数据的分布往往是不可得的,是极其复杂的,所以统计学在应用中到处充满假设:假设样本服从独立同分布原理;假设噪声服从高斯分布;假设特征之间相互独立等。翻开机器学习或者数理统计的书籍,到处充满着假设。没办法,现实问题太复杂!

如何获得复杂的未知分布呢? 最常用的方法就贝叶斯推断。

2.2、贝叶斯推断

贝叶斯推断的目的就是:找出复杂的未知分布。

贝叶斯推断有两类方法:一是MCMC采样;二是变分推断(VI,Variational Inference)。如图2所示。

MCMC属于采样的方法,成本高。变分推断属于数学优化的方法,成本相对较对低。
在这里插入图片描述

3、文生图的评价指标

文生图领域有两个评价指标:FID和CLIP。

3.1、FID

FID:Frechet Inception Distance。 用一个训练过的CNN网络提取图片的隐层特征,分别得到两个隐层特征的集合。一个是真实图片的隐层特征集合,一个是生成图片的隐层特征集合。再把这两个集合看作分布,计算两个分布的距离。

FID值越小越好。 如图3所示。

在这里插入图片描述

3.2、CLIP

CLIP:Contrastive Language-Image Pretraining。

一个预训练的图文对模型。基于4亿个图文对进行了对比学习。

CLIP得分越大越好。

3.3、优缺点

FID的评价很准确,但需要大量的数据,才能进行评估。

CLIP可以对单张图片进行评价,但只适用于图文对的场景。

4、Diffusion Models

4.1、Diffusion-生成过程

Diffusion生成目标对象的过程,称为生成过程、去噪过程、后向过程等。Diffusion的生成过程从噪声开始。本文都以图片生成为例。

首先, 从标准高斯分布中采样得到一张全是噪声的图片XT。

然后, 从XT 中去掉一点噪声,得到一张噪声更少的图片XT-1。**如此重复T步,**最后直到X1就是一张生成的图片。

意大利著名的雕塑家米开朗基罗说过:“塑像本来就在石头里,我只是把不需要的部分去掉。” Diffusion的生成过程与此类似,图片本来就在噪声里,Diffusion模型只是把不需要的噪声去掉,让图片显露出来!

如图5所示:

在这里插入图片描述

图5 Diffusion 去噪过程

4.2、Diffusion-扩散过程

Diffusion的扩散过程,也称为前向过程、加噪过程。 如图6所示。

扩散过程为模型的训练提供了有标注的样本。前面说过,生成过程是从噪声中逐步去噪声,最后生成图片。那模型怎么知道该去什么样的噪声,去多少噪声呢?这就是扩散过程的作用。扩散过程往已知的图片中逐步加入噪声,直到图片完全变成标准高斯噪声。这个加噪声的过程是人为控制的,所加的噪声也是知道的,所以反过来就用这个噪声作为标准,指导模型去噪,这相当于是一个有监督的学习过程。

总之,扩散过程是一个事先预定义的确定过程,用来给生成过程提供有监督的样本。

在这里插入图片描述

图6 Diffusion Model 加噪过程

4.3、Diffusion-模型训练

模型训练如图7所示。训练的神经网络是一个噪声预测器(Noise Predicter)。

Noise Predicter输入有两个:一是带噪声的图片;二是当前的步数。在Conditional的场景下,还会输入生成条件。

Noise Predicter的输出为:当前图片中所包含的噪声大小。

训练的优化目标为:预测出来的噪声与扩散过程中所加入的真实噪声之间的均方误差MSE(Mean-Square Error)。

4.4、Diffusion-模型推理

模型推理,就是生成数据的过程。确切的生成算法如图8所示。

Algorithm2来源于论文DDPM-《Denoising Diffusion Probabilistic Models》。

DDPM的主要问题是效率低下,因为必须要经过T步,才能生成最终图片。

从图中可以看出,Noise Predicter预测出图片的噪声后,用Xt减去噪声,就得到了去噪后的图片。

但去噪声后,又给图片加上了一点高斯噪声。这是为什么呢?通常认为这是算法落地中的一个Trick。在机器学习中,这种Trick很常见,如dropout。这样通常能增加模型的泛化性。另一种解释是,Diffusion整体上是一个自回归Autoregressive过程,与GPT类似。在AR模型中,每一步都喜欢加一点随机性,如GPT中常用的BeamSearch。

4.5、三种解释

Diffusion Models是一个马尔可夫层次化变分自编码器(Markovian Hierarchical Variational Autoencoder)。

在这里插入图片描述

优化EBLO等价于优化以下任意一种目标函数:

1. 优化对原始数据x0的预测结果;—在Discrete Diffusion Models会用到;

2 优化对原始噪声的预测结果;—连续Diffusion Models中最常用;

3. 优化对分数函数的预测结果;—基于热力学能量函数的推导时用到。

4.7、Diffusion-Conditional

前面讨论的是论文DDPM中原生的Diffusion Models。但实践使用时,我们是要根据条件来生成目标数据。如文生图,需要根据给定的文本来生成目标图片。

从原理上来看,根据给定的条件生成数据,和原生的DDPM是完全一样的。只是拟合目标由后验概率分布转化为条件后验概率分布。这两者的理论推导是完全相同的。

在实现上,Noise Predicter的输入中增加了一个条件项,如输入的文本。当然这个条件项往往是其它模态的,需要进行Embedding才能输入到Noise Predicter的神经网络里面。

5、其他

5.1

DDPM的改进

DDPM最大的问题就是它的生成过程速度慢,效率低。需要一步一步地进行Denoising。为此,论文DDIM(Denosing Diffusion Implicit Models)对它进行了改进。

DDPM通常需要1000步来生成一张图片,但DDIM通过只需要5-20步即可。当然DDIM的图片质量略差于DDPM。

5.2

离散场景

图片是一种典型的连续场景,因为每个像素的取值在给定的范围(如0-1)之间可以随便选取。但还有很多离散的场景,如Text、Graph等。在离散场景中如何使用Diffusion Models呢?这还是一个新兴的研究方向,常用的做法是改变噪声的形式。

在这里插入图片描述

图12 Diffusion + Text

5.3

Stable Diffusion

Stable Diffusion是对原生Diffusion的一种改动。Stable Diffusion原来叫 Latent Diffusion Models。它与Diffusion的最大区别是噪声加在隐状态空间。

Diffusion的噪声与图片是相同尺寸的,它的加噪声和去噪声直接发生在原始数据上。Stable Diffusion会使用一个编码器,先把图片映射到一个低维的隐状态空间中,再在这个隐空间中对图片的Embedding进行加噪声和去噪声。因为隐状态空间的维度低,所以Stable Diffusion的速度比原生的Diffusion更快。但二者的理论基础是相同的!

技术交流群

前沿技术资讯、算法交流、求职内推、算法竞赛、面试交流(校招、社招、实习)等、与 10000+来自港科大、北大、清华、中科院、CMU、腾讯、百度等名校名企开发者互动交流~

我们建了算法岗技术与面试交流群, 想要大模型技术交流、了解最新面试动态的、需要源码&资料、提升技术的同学,可以直接加微信号:mlc2040。加的时候备注一下:研究方向 +学校/公司+CSDN,即可。然后就可以拉你进群了。

想加入星球也可以如下方式:

方式①、微信搜索公众号:机器学习社区,后台回复:交流
方式②、添加微信号:mlc2040,备注:交流

精选

  • 轻松构建聊天机器人,大模型 RAG 有了更强大的AI检索器
  • 一文搞懂大模型训练加速框架 DeepSpeed 的使用方法!
  • 保姆级学习指南:《Pytorch 实战宝典》来了
  • MoE 大模型的前世今生
  • 从零解读 SAM(Segment Anything Model)
  • AI 绘画爆火背后:扩散模型原理及实现
  • 从零开始构建和训练生成对抗网络(GAN)模型
  • CLIP/LLaVA/LLaVA1.5/VILA 模型全面梳理!
  • 从零开始创建一个小规模的稳定扩散模型!
  • Stable Diffusion 模型:LDM、SD 1.0, 1.5, 2.0、SDXL、SDXL-Turbo 等
  • 文生图模型:AE、VAE、VQ-VAE、VQ-GAN、DALL-E 等 8 模型
  • 一文搞懂 BERT(基于Transformer的双向编码器)
  • 一文搞懂 GPT(Generative Pre-trained Transformer)
  • 一文搞懂 ViT(Vision Transformer)
  • 一文搞懂 Transformer
  • 一文搞懂 Attention(注意力)机制
  • 一文搞懂 Self-Attention 和 Multi-Head Attention
  • 一文搞懂 Embedding(嵌入)
  • 一文搞懂 Encoder-Decoder(编码器-解码器)

Reference

1. What are Diffusion Models:https://lilianweng.github.io/posts/2021-07-11-diffusion-models/

2. DDPM:Denoising Diffusion Probabilistic Models:https://arxiv.org/abs/2006.11239

3. Understanding Diffusion Models – A Unified Perspective:https://arxiv.org/pdf/2208.11970.pdf

4. Hungyi Lee 《Diffusion Models》

5. 一文读懂DDIM凭什么可以加速DDPM的采样效率:https://zhuanlan.zhihu.com/p/627616358

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

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

相关文章

网络校时服务器:铁路对时有妙招

在信息高速发展的今天,铁路作为国家的经济大动脉,与广大市民生活息息相关,担负着运送大流量乘客、保证交通畅通的重任,为了保证列车的正点运行和乘客的行程,对时间精准度的要求是非常严格的。随着我国铁路的发展速度和…

[AIGC] python遍历以及字符串的切片

以下是一篇关于Python遍历方法和字符串切片的文章,以及一个在LeetCode中的问题进行解释。文章最后会给出解题思路和代码实现。 Python遍历方法与字符串切片入门教程 在Python语言中,我们包含了许多内置的函数和方法令其适合于各种数据处理任务。在这个…

初始化三板斧 - centos7

1、关闭防火墙、关闭SELinux ① 立即关闭防火墙 systemctl stop firewalld ② 设置开机关闭防火墙 systemctl disable firewalld ③ 立即关闭SELinxu setenforce 0 ④ 设置开机关闭SELinux 将SELINUXenforcing 修改替换为 SELINUXdisabled vim /etc/selinux/config se…

java程序监控linux服务器硬件,cpu、mem、disk等

实现 使用Oshi和Hutool工具包1、pom依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.github.oshi</groupId>&l…

【Oracle篇】rman时间点异机恢复:从RAC环境到单机测试环境的转移(第六篇,总共八篇)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌️…

龙芯LS2K0300久久派上手体验

介绍 芯片 龙芯2K0300芯片是一款基于LA264处理器核的多功能SoC芯片&#xff0c;可广泛适用于工业控制、通信设备、信息家电和物联网等领域&#xff1b;该芯片采用高集成度设计&#xff0c;可提供丰富的功能接口&#xff0c;满足多场景应用需求&#xff0c;同时支持低功耗技术…

AMBA-CHI协议详解(四)

《AMBA 5 CHI Architecture Specification》 AMBA-CHI协议详解&#xff08;一&#xff09; AMBA-CHI协议详解&#xff08;二&#xff09; AMBA-CHI协议详解&#xff08;三&#xff09; AMBA-CHI协议详解&#xff08;四&#xff09; 文章目录 2.3.3 Atomic transactions2.3.4 S…

【IPython的使用技巧】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

Java 读取Excel导入数据库,形成树状结构

最近开发过程中遇到一个Excel的导入的功能&#xff0c;因为导入的数据结构具有层次结构&#xff0c;经过一番研究&#xff0c;最终得以实现&#xff0c;所有写下该文章&#xff0c;记录过程&#xff0c;供以后参考。 下图是导入Excel的数据结构&#xff1a; 使用POI解析Excel&…

被拷打已老实!面试官问我 #{} 和 ${} 的区别是什么?

引言&#xff1a;在使用 MyBatis 进行数据库操作时&#xff0c;#{} 和 ${} 的区别是面试中常见的问题&#xff0c;对理解如何在 MyBatis 中安全有效地处理 SQL 语句至关重要。正确使用这两种占位符不仅影响应用的安全性&#xff0c;还涉及到性能优化。 题目 被拷打已老实&…

浅谈RC4

一、什么叫RC4&#xff1f;优点和缺点 RC4是对称密码&#xff08;加密解密使用同一个密钥&#xff09;算法中的流密码&#xff08;一个字节一个字节的进行加密&#xff09;加密算法。 优点&#xff1a;简单、灵活、作用范围广&#xff0c;速度快 缺点&#xff1a;安全性能较差&…

操作系统真象还原:输入输出系统

第10章-输入输出系统 这是一个网站有所有小节的代码实现&#xff0c;同时也包含了Bochs等文件 10.1 同步机制–锁 10.1.1 排查GP异常&#xff0c;理解原子操作 线程调度工作的核心内容就是线程的上下文保护&#xff0b;上下文恢复 。 根本原因是访问公共资源需要多个操作&…

超级数据查看器 教程pdf 1-31集 百度网盘

百度网盘链接 提取码1234https://pan.baidu.com/s/1s_2lbwZ2_Su83vDElv76ag?pwd1234 通过百度网盘分享的文件&#xff1a;超级数据查看器 … 链接:https://pan.baidu.com/s/1s_2lbwZ2_Su83vDElv76ag?pwd1234 提取码:1234 复制这段内容打开「百度网盘APP 即可获取」

Python接口测试实战之搭建自动化测试框架

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一.数据分离:从Excel中读取数据 之前的用例中&#xff0c;数据直接写在代码文件里&#xff0c;不…

Day28:回溯法 491.递增子序列 46.全排列 47.全排列 II 332.重新安排行程 51. N皇后 37. 解数独 蓝桥杯 与或异或

491. 非递减子序列 给你一个整数数组 nums &#xff0c;找出并返回所有该数组中不同的递增子序列&#xff0c;递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素&#xff0c;如出现两个整数相等&#xff0c;也可以视作递增序列的一种特殊情…

13.1.资源清单的管理工具-helm

目录 一、helm的介绍 1.helm的价值概述 2.helm的关键名词 二、安装部署helm 1.解压安装包并设置全局命令 2.添加命令补全 三、使用helm部署服务管理 1.使用helm创建chart 1.1创建工作目录 1.2.helm创建chart 2.响应式创建名称空间 3.安装chart到名称空间 4.使用hel…

PHP转Go系列 | 字符串的使用姿势

大家好&#xff0c;我是码农先森。 输出 在 PHP 语言中的输出比较简单&#xff0c;直接使用 echo 就可以。此外&#xff0c;在 PHP 中还有一个格式化输出函数 sprintf 可以用占位符替换字符串。 <?phpecho 码农先森; echo sprintf(码农:%s, 先森);在 Go 语言中调用它的输…

科研——BIBM论文修改和提交

文章目录 引言投递流程Latex翻译流程latex模板使用bib文件正文修改 反馈时间线等待审稿结果 引言 第一轮投递快结束了&#xff0c;这里得加快进度&#xff0c;二十号截至&#xff0c;这里得在截至之前投一下&#xff0c;这里翻译整理一下投递的流程 投递流程 投递链接论文是…

js文件导出功能

效果图&#xff1a; 代码示例&#xff1a; <!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8"><title>html 表格导出道</title><script src"js/jquery-3.6.3.js"></script><st…

LoRA用于高效微调的基本原理

Using LoRA for efficient fine-tuning: Fundamental principles — ROCm Blogs (amd.com) 大型语言模型的低秩适配&#xff08;LoRA&#xff09;用于解决微调大型语言模型&#xff08;LLMs&#xff09;的挑战。GPT和Llama等拥有数十亿参数的模型&#xff0c;特定任务或领域的微…