一文详解扩散模型

文章目录

    • 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.mzph.cn/web/30374.shtml

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

相关文章

2024年通信安全员ABC证证考试题库及通信安全员ABC证试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2024年通信安全员ABC证证考试题库及通信安全员ABC证试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人员上岗证考试大…

项目3:从0开始的RPC框架(扩展版)-3

七. 负载均衡 1. 需求分析 目前我们的RPC框架仅允许消费者读取第一个服务提供者的服务节点,但在实际应用中,同一个服务会有多个服务提供者上传节点信息。如果消费者只读取第一个,势必会增大单个节点的压力,并且也浪费了其它节点…

Jenkins+K8s实现持续集成(一)

镜像仓库的搭建 docker run -d \--restartalways \--name registry \-p 5000:5000 \-v /root/devops/registry/data:/var/lib/registry \registry安装完之后,执行下面命令可以看到镜像仓库已经安装成功 docker ps 然后在浏览器上输入下面地址进行访问 http://ip:…

车牌号识别(低级版)

import cv2 from matplotlib import pyplot as plt import os import numpy as np from paddleocr import PaddleOCR, draw_ocr from PIL import Image, ImageDraw, ImageFont# 利用paddelOCR进行文字扫描,并输出结果 def text_scan(img_path):ocr PaddleOCR(use_a…

HTML(11)——CSS三大特性

CSS拥有三大特性&#xff0c;分别是&#xff1a;继承性&#xff0c;层叠性&#xff0c;优先级 继承性 说明&#xff1a;子级标签默认继承父级标签的文字控制属性。 如果子级自己有样式&#xff0c;则父级的属性不生效 例如&#xff1a; <style> body{ font-size:30px;…

ADS1220芯片写寄存器失败

1&#xff09;场景&#xff1a;最近调试ADS1220 的芯片&#xff0c;需要读取不同通道的AD值&#xff0c;修改寄存器0的值时一直失败 但是在单片机启动时&#xff0c;写寄存器0时&#xff0c;值能正确写入&#xff0c;并正确读出&#xff0c;之后写完读取出的都是FF或其他异常值…

CobaltStrike后渗透进阶篇

0x01 网络钓鱼攻击 钓鱼攻击简介 钓鱼攻击主要通过生成的木马诱使受害者运行后上线&#xff0c;其中木马一般都伪装成正常的程序。与此同时配合钓鱼网站可帮助攻击者模拟真实网站诱骗受害者访问&#xff0c;达到获取账号密码、上线木马等目的。接下来主要介绍后门程序的生成及…

利用Python爬取天气数据并实现数据可视化,一个完整的Python项目案例讲解

要使用Python爬取天气数据并进行制图分析分几个步骤进行&#xff1a; 选择数据源&#xff1a;首先&#xff0c;你需要找到一个提供天气数据的API或网站。一些常见的选择包括&#xff1a;OpenWeatherMap、Weatherbit、Weather Underground等。 安装必要的库&#xff1a;你需要安…

mamba模型原理解读

本文主要讲解我对于2023年提出的mamba模型的理解和解读&#xff0c;mamba模型的提出为transformer模型存在的计算效率低下&#xff0c;需要大量时间运行程序提出了解决方案。提高了模型的运行效率和计算效率。我主要是根据下面这篇文章入手&#xff1a; 1.mamba模型是通过堆叠多…

SpringBoot调用WebService的实践

作者所在公司的系统间的信息交互是通过webservice完成。如&#xff1a;MES与SAP的交互&#xff0c;MES与WMS的交换&#xff0c;MES与SRM的交互&#xff0c;MES与IOT的交互等。 MES是用.NET VS2008 C#写的&#xff0c;调用webservice很简单&#xff0c;这里不再赘述。如有想了解…

kotlin数组

1、kotlin中的数组与java数组比较&#xff1a; 2、创建 fun main() {// 值创建val a intArrayOf(1,2,3)// 表达式创建val b IntArray(3){println("it: ${it}")it1}println("a数组&#xff1a;${a.contentToString()}, 长度&#xff1a;${a.size}")prin…

重生之 SpringBoot3 入门保姆级学习(22、场景整合 Swagger 接口文档)

重生之 SpringBoot3 入门保姆级学习&#xff08;22、场景整合 Swagger 接口文档&#xff09; 6.2 Swagger 接口文档 6.2 Swagger 接口文档 1、将 starter 导入 Maven 官网 https://springdoc.org/<dependency><groupId>org.springdoc</groupId><artifact…

电路分析期末总结笔记下

对称三相电路的线电流和相电流&#xff0c;线电压和相电压关系 相电压与线电压的关系 线电压定义&#xff1a;任意两相之间的电压称为线电压&#xff0c;常用符号V_L表示。 相电压定义&#xff1a;一相绕组两端的电压称为相电压&#xff0c;常用符号V_P表示。 关系&#xff1…

2024年6月22日(星期六)骑行谷仓坝

2024年6月22日 (星期六) 骑行谷仓坝&#xff0c;早8:00到8:30&#xff0c; 龙泉小学门口(北京路尽头&#xff0c;高架桥下&#xff09;&#xff0c;9:00准时出发 【因迟到者&#xff0c;骑行速度快者&#xff0c;可自行追赶偶遇。】 偶遇地点:集合 &#xff0c;家住东&#xf…

ESP8266+STM32+阿里云保姆级教程(AT指令+MQTT)

前言&#xff1a;在开发过程中&#xff0c;几乎踩便了所有大坑小坑总结出的文章&#xff0c;我是把坑踩满了&#xff0c;帮助更过小白快速上手&#xff0c;如有错误之处&#xff0c;还麻烦各位大佬帮忙指正、 目录 一、ESP-01s介绍 1、ESP-01s管脚功能&#xff1a; 模组启动模…

无监督医学图像翻译与对抗扩散模型| 文献速递-深度学习结合医疗影像疾病诊断与病灶分割

Title 题目 Unsupervised Medical Image Translation With Adversarial Diffusion Models 无监督医学图像翻译与对抗扩散模型 01 文献速递介绍 多模态成像对于全面评估人体解剖结构和功能至关重要[1]。通过各自模态捕获的互补组织信息&#xff0c;有助于提高诊断准确性并改…

换位置(C++)

问题描述 体育课上&#xff0c;有一个班级的同学站成了一队&#xff0c;体育老师请最高的和最矮的两位同学调换一下位置&#xff0c;其余的同学不要动&#xff0c;请编程实现&#xff01;&#xff08;假设所有人的高矮都是不一样的&#xff09; 输入 第一行有一个整数 &…

NSSCTF-Web题目10

目录 [强网杯 2019]随便注 1、题目 2、知识点 3、思路 [GXYCTF 2019]BabyUpload 1、题目 2、知识点 3、思路 [强网杯 2019]随便注 1、题目 2、知识点 数据库注入&#xff0c;堆叠注入&#xff0c;更改表名 3、思路 正常提交查询&#xff0c;看看数据回显 加入单引号…

api-ms-win-crt-runtime-l1-1-0.dll文件丢失的情况要怎么处理?比较靠谱的多种修复方法分享

遇到api-ms-win-crt-runtime-l1-1-0.dll文件丢失的情况实际上是一个常见问题&#xff0c;解决此类问题存在多种方法。首先我们先来了解一下api-ms-win-crt-runtime-l1-1-0.dll文件吧&#xff0c;只有了解了我们才知道怎么去解决这个api-ms-win-crt-runtime-l1-1-0.dll文件丢失的…

flutter 打包 exe

采用官方的MSIX打包 原文链接 https://blog.csdn.net/weixin_44786530/article/details/135308360 第一步&#xff1a;安装依赖 在项目根目录&#xff0c;执行命令&#xff1a; flutter pub add --dev msix 等待安装完成&#xff0c;就好了 第二步&#xff1a;打包编译 当m…