生成式AI扩散模型-Diffusion Model【李宏毅2023】概念讲解、原理剖析笔记

本文主要是介绍生成式AI扩散模型-Diffusion Model【李宏毅2023】概念讲解、原理剖析笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、Diffusion的基本概念和运作方法

1.Diffusion Model是如何运作的?

2.Denoise模块内部正在做的事情

如何训练Noise predictor?

1)Forward Process (Diffusion Process)

2)noise predictor

3.Text-to-Image

4.两个Algorithm

二、Diffusion Framework

1.Framework

①Text Encoder:将文字输入encoder为向量

FID:Frechet Inception Distance ↓

CLIP:Contrastive Language-Image Pre-Training

②Generation Model:输入一个噪声,得到图片的压缩版本

③Decoder:压缩的版本还原为原来的图片

Small pic

Auto-Encoder

2. Stable Diffusion

3.DALL-E series

4.Imagen (Google)

三、Diffusion Model数学原理剖析(1)

 Algorithm1 Training

Algorithm2 Sampling

四、Diffusion Model数学原理剖析(2)

1.影像生成模型本质上的共同目标

2.Maximum Likelihood Estimation


视频链接:【生成式AI】Diffusion Model 概念讲解 (2/2)_哔哩哔哩_bilibili

原视频:【生成式AI】Diffusion Model 原理剖析 (1/4) (optional) (youtube.com)

课件链接:ML 2023 Spring (ntu.edu.tw)

一、Diffusion的基本概念和运作方法

1.Diffusion Model是如何运作的?

Denoise Model 是同一个Model,但是由于每次输入的噪声严重程度不同,因此除了输入图片外,还引入一个数字,用来表示当前输入图片噪声的严重程度,比如 ”1“ 代表Denoise步骤快结束了

2.Denoise模块内部正在做的事情

为什么不直接生成一个带噪音的猫?因为 noise predictor 的输出分布是简单的,而直接生成各种图片的分布是复杂的,所以 noise predictor 更容易训练,也就是说生成一张图片的噪音相对来说更容易

如何训练Noise predictor?

我们需要一个ground truth 来生成noise:

1)Forward Process (Diffusion Process)

通过一步步的加噪声,得到最终的噪音图,而每一步的step x 就代表在训练过程的第二个输入,每一步得到的加了噪音的图,就是训练过程的第一个输入(相当于反向过来看)

2)noise predictor

根据输入的step x和输入的噪音图,得到该张图片的噪声预测,减掉噪声得到最终results

3.Text-to-Image

文字输入作为noise predictor的额外的输入,描述当前图片

4.两个Algorithm

 


二、Diffusion Framework

1.Framework

:三个Model分开训练,然后再组合起来,且市面上大多数diffusion都是采用的这三个Model

①Text Encoder:将文字输入encoder为向量

图(a)表示测试不同Encoder对于实验结果的影响,FID越小越好,CLIP Score越大越好,即越往右下角越好,随着T5的size逐渐增大,实验结果越来越好

图(b)表示测试不同Diffusion Model对于实验结果的影响,可以看到增大Diffusion Model对于实验结果的帮助是有限的

FID和CLIP为衡量模型生成图片质量的指标,上述结论得出Encoder的重要性

FID:Frechet Inception Distance ↓

FID 是生成图像和真实图像在特征空间中的分布距离,FID 假设生成图像和真实图像在特征空间的分布都是高斯分布,然后计算这两个高斯分布的距离

首先有一个预训练好的CNN Model 影像分类模型,然后把所有图片(无论是真实还是生成数据)全部丢到CNN Model里面,然后得到真实影像和生成影像产生的representation,两组representation越接近就说明生成的数据越接近真实数据,反之亦然。

那么如何计算距离呢?: 直接计算Gaussians之间的idstance

CLIP:Contrastive Language-Image Pre-Training

可以用来测试输入的图片和文字的对应关系是否紧密

如果text 和 image 是成对的,那么他们encoder出来的向量 要越近越好;否则就要越远越好

②Generation Model:输入一个噪声,得到图片的压缩版本

Noise要加在中间产物或者latent representation上,而不是直接加在图片上

训练Decoder的时候不需要 图片和文字对应的训练数据,而训练Difussion Model的时候是需要的

③Decoder:压缩的版本还原为原来的图片

Small pic
  • Decoder的输入是小图,输出是原始图片
  • 所以我们可以对原始图片进行下采样,变成小图,然后小图和原始图片组成成对的数据集去训练Decoder即可。
  • Imagen采用的Decoder就是小图还原为大图,做一个downsampling

Auto-Encoder

Diffusion和DALL采用的Decoder是Latent Representation,之前在讲Diffussion Model的时候,nosie是加到图片上面的,而现在我们的Framework里面扩散模型产生的是中间产物,他可能不是图片了,所以我们在diffusion process这一部分,把nosie加到中间产物(eg.latent representation)上面.

  • 如果中间产物不是小图,而是Latent Reoresentation,那就要训练一个Auto-encoder
  • 这个Auto-encoder要做的事情,就是将图片输入到encoder中,得到图片的潜在表示,然后将潜在表示输入到Decoder中,得到图片,让得到的图片与输入的图片越相近越好。
  • 训练完,把这个Auto-encoder 中的Decoder拿出来用就好了

也可以通过downsampling进行小图+latent representation的训练

2. Stable Diffusion

3.DALL-E series

4.Imagen (Google)


三、Diffusion Model数学原理剖析(1)

 Algorithm1 Training

如果T越大  则α_T 就越小,对应着原始图片占的比例越小,噪声占的比例越大

想象中,nosie 是一点一点加进去的
然后denoise 的时候也是一点一点去掉的
但是实际上,noise是一次直接加进去,denoise也是一次出去

Algorithm2 Sampling

一开始先sample 一个全都是noise的图片

步骤2 那里就是在跑 resverse process 

本来以为得到了去除noise的结果就是最终结果,但实际操作过程中还要再加一张noise?


四、Diffusion Model数学原理剖析(2)

1.影像生成模型本质上的共同目标

加上文字的Condition并没有造成太大的差别,对算法影响不会太多

2.Maximum Likelihood Estimation

这篇关于生成式AI扩散模型-Diffusion Model【李宏毅2023】概念讲解、原理剖析笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1116160

相关文章

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

Nacos注册中心和配置中心的底层原理全面解读

《Nacos注册中心和配置中心的底层原理全面解读》:本文主要介绍Nacos注册中心和配置中心的底层原理的全面解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录临时实例和永久实例为什么 Nacos 要将服务实例分为临时实例和永久实例?1.x 版本和2.x版本的区别

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

MySQL 事务的概念及ACID属性和使用详解

《MySQL事务的概念及ACID属性和使用详解》MySQL通过多线程实现存储工作,因此在并发访问场景中,事务确保了数据操作的一致性和可靠性,下面通过本文给大家介绍MySQL事务的概念及ACID属性和... 目录一、什么是事务二、事务的属性及使用2.1 事务的 ACID 属性2.2 为什么存在事务2.3 事务

javascript fetch 用法讲解

《javascriptfetch用法讲解》fetch是一个现代化的JavaScriptAPI,用于发送网络请求并获取资源,它是浏览器提供的全局方法,可以替代传统的XMLHttpRequest,这篇... 目录1. 基本语法1.1 语法1.2 示例:简单 GET 请求2. Response 对象3. 配置请求

Java Stream.reduce()方法操作实际案例讲解

《JavaStream.reduce()方法操作实际案例讲解》reduce是JavaStreamAPI中的一个核心操作,用于将流中的元素组合起来产生单个结果,:本文主要介绍JavaStream.... 目录一、reduce的基本概念1. 什么是reduce操作2. reduce方法的三种形式二、reduce