深度学习(生成式模型)——DDIM:Denoising Diffusion Implicit Models

本文主要是介绍深度学习(生成式模型)——DDIM:Denoising Diffusion Implicit Models,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 为什么DDPM的反向过程与前向过程步数绑定
  • DDIM如何减少DDPM反向过程步数
  • DDIM的优化目标
  • DDIM的训练与测试

前言

上一篇博文介绍了DDIM的前身DDPM。DDPM的反向过程与前向过程步数一一对应,例如前向过程有1000步,那么反向过程也需要有1000步,这导致DDPM生成图像的效率非常缓慢。本文介绍的DDIM将降低反向过程的推断步数,从而提高生成图像的效率。

值得一提的是,DDIM的反向过程仍然是马尔可夫链,但论文里有讨论非马尔可夫链的生成模型。本博文只总结DDIM如何提高DDPM的生成图像效率。

为什么DDPM的反向过程与前向过程步数绑定

DDPM反向过程的推导公式为

q ( x ^ t − 1 ∣ x ^ t ) = q ( x ^ t − 1 ∣ x ^ t , x ^ 0 ) = q ( x ^ t − 1 , x ^ t , x ^ 0 ) q ( x ^ t , x ^ 0 ) = q ( x ^ t ∣ x ^ t − 1 , x ^ 0 ) q ( x ^ t − 1 , x ^ 0 ) q ( x ^ t ∣ x ^ 0 ) q ( x ^ 0 ) = q ( x ^ t ∣ x ^ t − 1 , x ^ 0 ) q ( x ^ t − 1 ∣ x ^ 0 ) q ( x ^ 0 ) q ( x ^ t ∣ x ^ 0 ) q ( x ^ 0 ) = q ( x ^ t ∣ x ^ t − 1 , x ^ 0 ) q ( x ^ t − 1 ∣ x ^ 0 ) q ( x ^ t ∣ x ^ 0 ) = q ( x ^ t ∣ x ^ t − 1 ) q ( x ^ t − 1 ∣ x ^ 0 ) q ( x ^ t ∣ x ^ 0 ) \begin{aligned} q(\hat x_{t-1}|\hat x_{t})&=q(\hat x_{t-1}|\hat x_{t},\hat x_0)\\ &=\frac{q(\hat x_{t-1},\hat x_t,\hat x_0)}{q(\hat x_t,\hat x_0)}\\ &=\frac{q(\hat x_{t}|\hat x_{t-1},\hat x_0)q(\hat x_{t-1},\hat x_0)}{q(\hat x_t|\hat x_0)q(\hat x_0)}\\ &=\frac{q(\hat x_{t}|\hat x_{t-1},\hat x_0)q(\hat x_{t-1}|\hat x_0)q(\hat x_0)}{q(\hat x_t|\hat x_0)q(\hat x_0)}\\ &=\frac{q(\hat x_{t}|\hat x_{t-1},\hat x_0)q(\hat x_{t-1}|\hat x_0)}{q(\hat x_t|\hat x_0)}\\ &=\frac{ q(\hat x_{t}|\hat x_{t-1})q(\hat x_{t-1}|\hat x_0)}{q(\hat x_t|\hat x_0)} \end{aligned} q(x^t1x^t)=q(x^t1x^t,x^0)=q(x^t,x^0)q(x^t1,x^t,x^0)=q(x^tx^0)q(x^0)q(x^tx^t1,x^0)q(x^t1,x^0)=q(x^tx^0)q(x^0)q(x^tx^t1,x^0)q(x^t1x^0)q(x^0)=q(x^tx^0)q(x^tx^t1,x^0)q(x^t1x^0)=q(x^tx^0)q(x^tx^t1)q(x^t1x^0)

值得一提的是,反向过程的马尔可夫状态 x ^ t \hat x_t x^t x ^ t − 1 \hat x_{t-1} x^t1不一定要与前向过程一致,如下图所示,反向过程的状态 x ^ T \hat x_T x^T x ^ T − 1 \hat x_{T-1} x^T1对应前向过程的 x T x_T xT x T − 2 x_{T-2} xT2
在这里插入图片描述
从上述公式构成来看,反向过程的概率图形式与 q ( x ^ t ∣ x ^ t − 1 ) q(\hat x_t|\hat x_{t-1}) q(x^tx^t1)有关。而在DDPM中, q ( x ^ t ∣ x ^ t − 1 ) q(\hat x_t|\hat x_{t-1}) q(x^tx^t1)与前向过程 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xtxt1)一致,这就导致DDPM的概率图为
在这里插入图片描述

因此利用DDPM推导的 q ( x ^ t − 1 ∣ x ^ t ) q(\hat x_{t-1}|\hat x_{t}) q(x^t1x^t)进行反向过程时,状态转移步数必须与前向过程一致。

DDIM如何减少DDPM反向过程步数

在上一节中,我们说明了反向过程的马尔可夫状态与前向过程不需要一致,这表明 q ( x ^ t − 1 ∣ x ^ t ) q(\hat x_{t-1}|\hat x_{t}) q(x^t1x^t)的概率密度函数有多种。找到合适的概率密度函数,我们即可减少反向过程的迭代步数,同时保持生成图像的质量,这便是DDIM的出发点。以下的推导中,我们将用 x t 、 x t − 1 x_t、x_{t-1} xtxt1来表示反向过程的马尔可夫状态。

本章节的所有符号定义与深度学习(生成式模型)——DDPM:denoising diffusion probabilistic models一致

为了书写方便,除非特殊提及,在以下的所有推导中,所有的 x x x ϵ \epsilon ϵ符号都表示随机变量,而不是一个样本。

在DDPM的前向过程里有
x t − 1 = α ˉ t x 0 + 1 − α ˉ t ϵ t − 1 (2.0) \begin{aligned} x_{t-1}&=\sqrt{\bar \alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon_{t-1}\tag{2.0} \end{aligned} xt1=αˉt x0+1αˉt ϵt1(2.0)
已知两个均值为0的高斯分布相加具备以下性质

N ( 0 , δ 1 2 ) + N ( 0 , δ 2 2 ) = N ( 0 , δ 1 2 + δ 2 2 ) \mathcal N(0,\delta_1^2)+\mathcal N(0,\delta_2^2)=\mathcal N(0,\delta_1^2+\delta_2^2) N(0,δ12)+N(0,δ22)=N(0,δ12+δ22)

依据重参数化技巧,已知
1 − α ˉ t − δ t 2 ϵ t ∼ N ( 0 , 1 − α ˉ t − δ t 2 ) δ t ϵ ∼ N ( 0 , δ t 2 ) 1 − α ˉ ϵ t − 1 ∼ N ( 0 , 1 − α ˉ t − 1 ) \begin{aligned} \sqrt{1-\bar\alpha_{t}-\delta_t^2}\epsilon_{t}&\sim \mathcal N(0,1-\bar\alpha_{t}-\delta_t^2)\\ \delta_t\epsilon&\sim \mathcal N(0,\delta_t^2)\\ \sqrt{1-\bar\alpha}\epsilon_{t-1}&\sim \mathcal N(0,1-\bar \alpha_{t-1}) \end{aligned} 1αˉtδt2 ϵtδtϵ1αˉ ϵt1N(0,1αˉtδt2)N(0,δt2)N(0,1αˉt1)
则有
x t − 1 = α ˉ t − 1 x 0 + 1 − α ˉ t ϵ t − 1 = α ˉ t − 1 x 0 + 1 − α ˉ t − δ t 2 ϵ t + δ t ϵ = α ˉ t − 1 x 0 + 1 − α ˉ t − δ t 2 x t − α ˉ t x 0 1 − α ˉ t + δ t ϵ (2.1) \begin{aligned} x_{t-1}&=\sqrt{\bar \alpha_{t-1}}x_0+\sqrt{1-\bar\alpha_t}\epsilon_{t-1}\\ &=\sqrt{\bar \alpha_{t-1}}x_0+\sqrt{1-\bar\alpha_{t}-\delta_t^2}\epsilon_{t}+\delta_t\epsilon\\ &=\sqrt{\bar \alpha_{t-1}}x_0+\sqrt{1-\bar\alpha_{t}-\delta_t^2}\frac{x_t-\sqrt{\bar \alpha_t}x_0}{\sqrt{1-\bar\alpha_t}}+\delta_t\epsilon \end{aligned}\tag{2.1} xt1=αˉt1 x0+1αˉt ϵt1=αˉt1 x0+1αˉtδt2 ϵt+δtϵ=αˉt1 x0+1αˉtδt2 1αˉt xtαˉt x0+δtϵ(2.1)

依据重参数化公式,式2.1可表征为
q ( x t − 1 ∣ x t ) = q ( x t − 1 ∣ x t , x 0 ) = N ( x t − 1 ; α ˉ t − 1 x 0 + 1 − α ˉ t − δ t 2 x t − α ˉ t x 0 1 − α ˉ t , δ t 2 I ) (2.2) \begin{aligned} q(x_{t-1}|x_{t})&=q(x_{t-1}|x_t,x_0)\\ &=\mathcal N(x_{t-1};\sqrt{\bar \alpha_{t-1}}x_0+\sqrt{1-\bar\alpha_{t}-\delta_t^2}\frac{x_t-\sqrt{\bar \alpha_t}x_0}{\sqrt{1-\bar\alpha_t}},\delta_t^2\mathcal I)\tag{2.2} \end{aligned} q(xt1xt)=q(xt1xt,x0)=N(xt1;αˉt1 x0+1αˉtδt2 1αˉt xtαˉt x0,δt2I)(2.2)
注意式2.2的推导过程绕过了贝叶斯公式,而且没有指定反向过程的状态转移图,因此式2.1是一个反向过程的概率密度函数族,不同的 δ t \delta_t δt表示不同的概率密度函数,对应反向过程不同的马尔可夫状态转移链。

结合式2.0,式2.2可进一步变化为
q ( x t − 1 ∣ x t ) = q ( x t − 1 ∣ x t , x 0 ) = N ( x t − 1 ; α ˉ t − 1 x t − 1 − α ˉ t ϵ t α ˉ t + 1 − α ˉ t − δ t 2 ϵ t , δ t 2 I ) (2.3) \begin{aligned} q(x_{t-1}|x_t)&=q(x_{t-1}|x_t,x_0)\\ &=N(x_{t-1};\sqrt{\bar \alpha_{t-1}}\frac{x_t-\sqrt{1-\bar \alpha_t}\epsilon_t}{\sqrt{\bar\alpha_t}}+\sqrt{1-\bar\alpha_{t}-\delta_t^2}\epsilon_t,\delta_t^2\mathcal I)\tag{2.3} \end{aligned} q(xt1xt)=q(xt1xt,x0)=N(xt1;αˉt1 αˉt xt1αˉt ϵt+1αˉtδt2 ϵt,δt2I)(2.3)

DDIM的优化目标

由于DDIM与DDPM一样,前向过程与反向过程均为马尔科夫链,因此优化目标也一致。从上一篇博客,我们可知DDPM的优化目标为
L = ∑ t = 2 T D K L ( q ( x t − 1 ∣ x t , x 0 ) ∣ ∣ p θ ( x t − 1 ∣ x t ) ) = ∑ t = 2 T ( 1 2 ( n + 1 δ t 2 ∣ ∣ μ t − μ θ ∣ ∣ 2 − n + l o g 1 ) = ∑ t = 2 T ( 1 2 δ t 2 ∣ ∣ μ t − μ θ ∣ ∣ 2 ) \begin{aligned} L&=\sum_{t=2}^TD_{KL}(q(x_{t-1}|x_t,x_0)||p_\theta(x_{t-1}|x_t))\\ &=\sum_{t=2}^T(\frac{1}{2}(n+\frac{1}{\delta_t^2}||\mu_t-\mu_\theta||^2-n+log1)\\ &=\sum_{t=2}^T(\frac{1}{2\delta_t^2}||\mu_t-\mu_\theta||^2)\\ \end{aligned} L=t=2TDKL(q(xt1xt,x0)∣∣pθ(xt1xt))=t=2T(21(n+δt21∣∣μtμθ2n+log1)=t=2T(2δt21∣∣μtμθ2)

设网络预测的噪声为 ϵ θ ( x t ) \epsilon_\theta(x_t) ϵθ(xt),则DDIM的优化目标为:
L = ∑ t = 2 T ( 1 2 δ t 2 ∣ ∣ μ t − μ θ ∣ ∣ 2 ) = ∑ t = 2 T ( 1 2 δ 2 ∣ ∣ α ˉ t − 1 x 0 + 1 − α ˉ t − δ t 2 ϵ t − ( α ˉ t − 1 x 0 + 1 − α ˉ t − δ t 2 ϵ θ ( x t ) ) ∣ ∣ 2 ) = ∑ t = 2 T ( 1 − α ˉ t − δ t 2 2 δ t 2 ∣ ∣ ϵ t − ϵ θ ( x t ) ∣ ∣ 2 ) \begin{aligned} L&=\sum_{t=2}^T(\frac{1}{2\delta_t^2}||\mu_t-\mu_\theta||^2)\\ &=\sum_{t=2}^T(\frac{1}{2\delta^2}||\sqrt{\bar \alpha_{t-1}}x_0+\sqrt{1-\bar\alpha_{t}-\delta_t^2}\epsilon_t-(\sqrt{\bar \alpha_{t-1}}x_0+\sqrt{1-\bar\alpha_{t}-\delta_t^2}\epsilon_\theta(x_t))||^2)\\ &=\sum_{t=2}^T(\frac{1-\bar\alpha_t-\delta_t^2}{2\delta_t^2}||\epsilon_t-\epsilon_{\theta}(x_t)||^2) \end{aligned} L=t=2T(2δt21∣∣μtμθ2)=t=2T(2δ21∣∣αˉt1 x0+1αˉtδt2 ϵt(αˉt1 x0+1αˉtδt2 ϵθ(xt))2)=t=2T(2δt21αˉtδt2∣∣ϵtϵθ(xt)2)

结合上式以及坐标下降法,可得DDIM最终优化目标 L L L
L = ∣ ∣ ϵ t − ϵ θ ( α ˉ t x 0 + 1 − α ˉ t ϵ t ) ∣ ∣ 2 L=||\epsilon_t-\epsilon_\theta(\sqrt{\bar \alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon_t)||^2 L=∣∣ϵtϵθ(αˉt x0+1αˉt ϵt)2

与DDPM一致

DDIM的训练与测试

DDIM的训练过程与DDPM一致,反向过程的采样公式变为
x t − 1 = α ˉ t − 1 x t − 1 − α ˉ t ϵ θ ( x t ) α ˉ t + 1 − α ˉ t − δ t 2 ϵ θ ( x t ) + δ t ϵ (4.0) x_{t-1}=\sqrt{\bar \alpha_{t-1}}\frac{x_t-\sqrt{1-\bar \alpha_t}\epsilon_\theta(x_t)}{\sqrt{\bar\alpha_t}}+\sqrt{1-\bar\alpha_{t}-\delta_t^2}\epsilon_\theta(x_t)+\delta_t\epsilon\tag{4.0} xt1=αˉt1 αˉt xt1αˉt ϵθ(xt)+1αˉtδt2 ϵθ(xt)+δtϵ(4.0)

其中 ϵ \epsilon ϵ从标准正态分布中采样得到, δ t \delta_t δt为超参数,其取值为

δ t = η ( 1 − α ˉ t − 1 ) / ( 1 − α ˉ t ) 1 − α ˉ t / α ˉ t − 1 \delta_t=\eta\sqrt{(1-\bar\alpha_{t-1})/(1-\bar\alpha_{t})}\sqrt{1-\bar\alpha_t/\bar\alpha_{t-1}} δt=η(1αˉt1)/(1αˉt) 1αˉt/αˉt1

特别的,当 η = 1 \eta=1 η=1时,DDIM的反向过程与DDPM一致。当 η = 0 \eta=0 η=0时,式4.0的 ϵ \epsilon ϵ将被去掉,从而不具备随机性。即反向过程步数固定情况下,从一个噪声生成的图片将是确定,DDIM一般将 η \eta η取值设为0。

具体的实验结果可见下图:
在这里插入图片描述

这篇关于深度学习(生成式模型)——DDIM:Denoising Diffusion Implicit Models的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

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

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