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

相关文章

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin

java内存泄漏排查过程及解决

《java内存泄漏排查过程及解决》公司某服务内存持续增长,疑似内存泄漏,未触发OOM,排查方法包括检查JVM配置、分析GC执行状态、导出堆内存快照并用IDEAProfiler工具定位大对象及代码... 目录内存泄漏内存问题排查1.查看JVM内存配置2.分析gc是否正常执行3.导出 dump 各种工具分析4.

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于