当前位置: 首页 > news >正文

一文详解扩散模型

文章目录

    • 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

相关文章:

  • 王思聪隐形女儿曝光
  • Centos离线安装Python3
  • 人工智能—美国加利福尼亚州房价预测实战
  • Ribbon与Nginx的区别
  • 华为IPD体系中三大流程之IPD流程的六个阶段和七个评审点介绍
  • object类教程
  • 图像的高频和低频细节
  • [C#]winform使用onnxruntime部署LYT-Net轻量级低光图像增强算法
  • 宏任务与微任务
  • 对于补码的个人理解
  • Python考前综合练习-第六章[python123题库]
  • 人工智能和机器学习的应用日益广泛,在医疗健康领域的具体应用是什么?
  • 机器学习_SVM支持向量机
  • 【Android面试八股文】你能说一说线程池管理线程的原理吗?
  • 【因果推断python】44_评估因果模型2
  • hexo+github搭建个人博客
  • JavaScript 如何正确处理 Unicode 编码问题!
  • [译] React v16.8: 含有Hooks的版本
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • Android组件 - 收藏集 - 掘金
  • Django 博客开发教程 8 - 博客文章详情页
  • django开发-定时任务的使用
  • docker-consul
  • Git学习与使用心得(1)—— 初始化
  • gops —— Go 程序诊断分析工具
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • JDK 6和JDK 7中的substring()方法
  • js写一个简单的选项卡
  • Logstash 参考指南(目录)
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Python实现BT种子转化为磁力链接【实战】
  • React 快速上手 - 07 前端路由 react-router
  • Webpack 4 学习01(基础配置)
  • 搞机器学习要哪些技能
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 聚类分析——Kmeans
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 如何编写一个可升级的智能合约
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • # 职场生活之道:善于团结
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (差分)胡桃爱原石
  • (第一天)包装对象、作用域、创建对象
  • (二)斐波那契Fabonacci函数
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (七)glDrawArry绘制
  • (一)面试需要掌握的技巧
  • (已解决)vscode如何选择python解释器
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)母版页和相对路径
  • .cfg\.dat\.mak(持续补充)
  • .net core 外观者设计模式 实现,多种支付选择