2.扩散模型的正向过程

2024-05-10 00:20
文章标签 模型 过程 正向 扩散

本文主要是介绍2.扩散模型的正向过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

很早之前就新建了一个专栏从0开始弃坑扩散模型,但发了一篇文章就没有继续这一系列,在这个AIGC的时代,于是我准备重启这个专栏。
整个专栏的学习顺序可以见这篇汇总文章
很多时候我们看到一篇文章很长,难免会心生胆怯,所以我将这些知识进行分解到每一篇中。

这是本专栏的第2章

在正向过程,输入数据通过逐步添加高斯噪声被破坏,经过T次加噪操作后会变成一个符合标准正态分布的纯噪声图像。这是一个马尔可夫过程,当前时刻的状态只由上一时刻状态决定,公式如下所示:
x t ∼ N ( 1 − β t x t − 1 , β t I ) \mathbf{x}_t \sim \mathcal{N}(\sqrt{1 - \beta_t}\mathbf{x}_{t - 1},\beta_t\mathbf{I}) xtN(1βt xt1,βtI)
这个公式意思是现在的 x t x_t xt服从一个数学期望(均值, μ t ( x t − 1 ) {\mu}_t(x_{t-1}) μt(xt1))为 1 − β t x t − 1 \sqrt{1 - \beta_t}\mathbf{x}_{t - 1} 1βt xt1,方差( σ t 2 I \sigma_t^2I σt2I)为 β t I \beta_t\mathbf{I} βtI的标准正态分布(高斯分布),也就是说 x t x_t xt是从和 x t − 1 x_{t-1} xt1有关的标准正态分布里面采样出来。至于为什么值是这样,可以看后面的解释。
这个实际上还可以变成一个等式: x t ∼ N ( 1 − β t x t − 1 , β t I ) ⇒ x t = 1 − β t x t − 1 + β t ϵ t − 1 ; ϵ t − 1 ∼ N ( 0 , I ) \begin{aligned} \mathbf{x}_t &\sim \mathcal{N}(\sqrt{1 - \beta_t}\mathbf{x}_{t - 1},\beta_t\mathbf{I}) \\ \Rightarrow \mathbf{x}_t =& \sqrt{1 - \beta_t}\mathbf{x}_{t - 1} + \sqrt{\beta_t}\epsilon_{t-1}; \epsilon_{t-1} \sim \mathcal{N}(0, \mathbf{I}) \end{aligned} xtxt=N(1βt xt1,βtI)1βt xt1+βt ϵt1;ϵt1N(0,I)
其中 N ( 0 , I ) \mathcal{N}(0, \mathbf{I}) N(0,I)就是标准正态分布。I就是数字1。注意,这两个公式均值前后一致,但等式的加号后面就变成标准差了。
这个等式还可以进一步迭代,直接求出 x t x_{t} xt x 0 x_{0} x0的关系,这里还要懂得一个定理: N ( 0 , σ 1 2 I ) + N ( 0 , σ 2 2 I ) = N ( 0 , ( σ 1 2 + σ 2 2 ) I ) \mathcal{N}(0, \sigma_1^2 I)+\mathcal{N}(0, \sigma_2^2 I)=\mathcal{N}(0, (\sigma_1^2+\sigma_2^2) I) N(0,σ12I)+N(0,σ22I)=N(0,(σ12+σ22)I)
我们现在在等式的基础上再推 x t − 2 x_{t-2} xt2:
x t = 1 − β t x t − 1 + β t ϵ t − 1 ; ϵ t − 1 ∼ N ( 0 , I ) = 1 − β t ( 1 − β t − 1 x t − 2 + β t − 1 ϵ t − 2 ) + β t ϵ t − 1 ; ϵ t − 2 ∼ N ( 0 , I ) = ( 1 − β t ) ( 1 − β t − 1 ) x t − 2 + ( 1 − β t ) β t − 1 ϵ t − 2 + β t ϵ t − 1 \begin{aligned}\mathbf{x}_t =& \sqrt{1 - \beta_t}\mathbf{x}_{t - 1} + \sqrt{\beta_t}\epsilon_{t-1}; \epsilon_{t-1} \sim \mathcal{N}(0, \mathbf{I}) \\ =& \sqrt{1 - \beta_t}(\sqrt{1 - \beta_{t-1}}\mathbf{x}_{t - 2} + \sqrt{\beta_{t-1}}\epsilon_{t-2}) + \sqrt{\beta_t}\epsilon_{t-1}; \epsilon_{t-2} \sim \mathcal{N}(0, \mathbf{I})\\ =& \sqrt{(1 - \beta_t)(1 - \beta_{t-1})}\mathbf{x}_{t - 2} + \sqrt{(1 - \beta_t)\beta_{t-1}}\epsilon_{t-2} + \sqrt{\beta_t}\epsilon_{t-1} \end{aligned} xt===1βt xt1+βt ϵt1;ϵt1N(0,I)1βt (1βt1 xt2+βt1 ϵt2)+βt ϵt1;ϵt2N(0,I)(1βt)(1βt1) xt2+(1βt)βt1 ϵt2+βt ϵt1
根据上面正态分布的定理,我们发现
x t = ( 1 − β t ) ( 1 − β t − 1 ) x t − 2 + ( 1 − β t ) β t − 1 ϵ t − 2 + β t ϵ t − 1 = ( 1 − β t ) ( 1 − β t − 1 ) x t − 2 + ( 1 − β t ) β t − 1 + β t ϵ = ( 1 − β t ) ( 1 − β t − 1 ) x t − 2 + 1 − ( 1 − β t ) ( 1 − β t − 1 ) ϵ = ( 1 − β t ) ( 1 − β t − 1 ) ( 1 − β t − 2 ) x t − 3 + 1 − ( 1 − β t ) ( 1 − β t − 1 ) ( 1 − β t − 2 ) ϵ = ( 1 − β t ) ( 1 − β t − 1 ) ( 1 − β t − 2 ) ( 1 − β t − 3 ) x t − 4 + 1 − ( 1 − β t ) ( 1 − β t − 1 ) ( 1 − β t − 2 ) ( 1 − β t − 3 ) ϵ \begin{aligned}\mathbf{x}_t =\sqrt{(1 - \beta_t)(1 - \beta_{t-1})}\mathbf{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})}\mathbf{x}_{t - 2} + \sqrt{(1 - \beta_t)\beta_{t-1} + \beta_t}\epsilon \\=\sqrt{(1 - \beta_t)(1 - \beta_{t-1})}\mathbf{x}_{t - 2} + \sqrt{1-(1-\beta_t)(1-\beta_{t-1})}\epsilon \\=\sqrt{(1 - \beta_t)(1 - \beta_{t-1})(1 - \beta_{t-2})}\mathbf{x}_{t - 3} + \sqrt{1-(1-\beta_t)(1-\beta_{t-1})(1 - \beta_{t-2})}\epsilon \\=\sqrt{(1 - \beta_t)(1 - \beta_{t-1})(1 - \beta_{t-2})(1 - \beta_{t-3})}\mathbf{x}_{t - 4} + \sqrt{1-(1-\beta_t)(1-\beta_{t-1})(1 - \beta_{t-2})(1 - \beta_{t-3})}\epsilon \end{aligned} xt=(1βt)(1βt1) xt2+(1βt)βt1 ϵt2+βt ϵt1=(1βt)(1βt1) xt2+(1βt)βt1+βt ϵ=(1βt)(1βt1) xt2+1(1βt)(1βt1) ϵ=(1βt)(1βt1)(1βt2) xt3+1(1βt)(1βt1)(1βt2) ϵ=(1βt)(1βt1)(1βt2)(1βt3) xt4+1(1βt)(1βt1)(1βt2)(1βt3) ϵ
从上面可以到,我们可以一步一步到 x 0 x_0 x0,后面都是可以合并的,化简一下上面的公式,就可以得到:
x t = α ˉ t x 0 + 1 − α ˉ t ϵ \mathbf{x}_t = \sqrt{\bar{\alpha}_t}\mathbf{x}_{0} + \sqrt{1-\bar{\alpha}_t}\epsilon xt=αˉt x0+1αˉt ϵ,其中令 α t = 1 − β t , α ˉ t = ∏ i = 1 t α i \alpha_t=1-\beta_t, \bar{\alpha}_t=\prod_{i=1}^t\alpha_i αt=1βt,αˉt=i=1tαi,这里呼应前面提到的第一个疑惑,这个公式的值的形式是化简而来的。
通过这个公式,我们就可以知道加噪过程是什么了, α ˉ t \bar{\alpha}_t αˉt不断变小,直到0,那么最后的 x t x_t xt就是一个单纯的标准正态分布了。在DDPM论文中, β t \beta_t βt 1 0 − 4 10^{-4} 104到0.02线性增长, a t a_t at线性变小,但是注意了 α ˉ t \bar{\alpha}_t αˉt是乘法计算,那么它的趋势是越来越快,所以你要注意的是,加噪过程是由慢变快的,而不是匀速。

这篇关于2.扩散模型的正向过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

SpringCloud之LoadBalancer负载均衡服务调用过程

《SpringCloud之LoadBalancer负载均衡服务调用过程》:本文主要介绍SpringCloud之LoadBalancer负载均衡服务调用过程,具有很好的参考价值,希望对大家有所帮助,... 目录前言一、LoadBalancer是什么?二、使用步骤1、启动consul2、客户端加入依赖3、以服务

Oracle存储过程里操作BLOB的字节数据的办法

《Oracle存储过程里操作BLOB的字节数据的办法》该篇文章介绍了如何在Oracle存储过程中操作BLOB的字节数据,作者研究了如何获取BLOB的字节长度、如何使用DBMS_LOB包进行BLOB操作... 目录一、缘由二、办法2.1 基本操作2.2 DBMS_LOB包2.3 字节级操作与RAW数据类型2.

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

Spring Security注解方式权限控制过程

《SpringSecurity注解方式权限控制过程》:本文主要介绍SpringSecurity注解方式权限控制过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、摘要二、实现步骤2.1 在配置类中添加权限注解的支持2.2 创建Controller类2.3 Us

Spring AI集成DeepSeek三步搞定Java智能应用的详细过程

《SpringAI集成DeepSeek三步搞定Java智能应用的详细过程》本文介绍了如何使用SpringAI集成DeepSeek,一个国内顶尖的多模态大模型,SpringAI提供了一套统一的接口,简... 目录DeepSeek 介绍Spring AI 是什么?Spring AI 的主要功能包括1、环境准备2

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo