当前位置: 首页 > news >正文

Diffusion 公式推导 2

Diffusion 公式推导 中对 DDPM 进行了推导,本文接着对 DDIM 进行推导。

目录

  • 六. 模型改进

六. 模型改进

从扩散模型的推理过程不难看出,DDPM 有一个致命缺点 —— 推理速度过慢,因为逆扩散是从 x T x_{T} xT x 0 x_{0} x0 的完整过程,无法跳过中间的迭代过程。为了加快推理过程,DDIM (Denoising Diffusion Implicit Models) 对 DDPM 进行了改进,采用的是一个非马尔科夫过程,使得生成过程可以在更少的时间步内完成。

从原理角度来看 1,DDIM 假设 q ( x t − 1 ∣ x 0 , x t ) q (x_{t-1} \mid x_0, x_t) q(xt1x0,xt) 是一个高斯分布,对其进行待定系数:
q ( x t − 1 ∣ x 0 , x t ) ∼ N ( k x 0 + m x t , σ 2 ) (21) q (x_{t-1} \mid x_0, x_t) \sim \mathcal{N}\left(kx_0+mx_t, \sigma^2\right) \tag{21} q(xt1x0,xt)N(kx0+mxt,σ2)(21)

因此有:
x t − 1 = k x 0 + m x t + σ ϵ 其中  ϵ ∼ N ( 0 , I ) (22) x_{t-1} = kx_0+mx_t + \sigma \epsilon \quad \text{ 其中 } \epsilon \sim \mathcal{N}(0, \bold I) \tag{22} xt1=kx0+mxt+σϵ 其中 ϵN(0,I)(22)

将(7)式代入,得到:
x t − 1 = k x 0 + m x t + σ ϵ = k x 0 + m ( α ‾ t x 0 + 1 − α ‾ t ϵ ‾ 0 ) + σ ϵ = ( k + m α ‾ t ) x 0 + m 1 − α ‾ t ϵ ‾ 0 + σ ϵ = ( k + m α ‾ t ) x 0 + ϵ ′ (23) \begin{aligned} x_{t-1} & = kx_0+mx_t + \sigma \epsilon\\ & = kx_0+m(\sqrt{\overline{\alpha}_t} x_{0} + \sqrt{1-\overline{\alpha}_t} \overline \epsilon_{0}) + \sigma \epsilon\\ & = (k+m\sqrt{\overline{\alpha}_t})x_0 + m\sqrt{1-\overline{\alpha}_t} \overline \epsilon_{0} + \sigma \epsilon\\ & = (k+m\sqrt{\overline{\alpha}_t})x_0 + \epsilon' \end{aligned} \tag{23} xt1=kx0+mxt+σϵ=kx0+m(αt x0+1αt ϵ0)+σϵ=(k+mαt )x0+m1αt ϵ0+σϵ=(k+mαt )x0+ϵ(23)

其中, m 1 − α ‾ t ϵ ‾ 0 + σ ϵ m\sqrt{1-\overline{\alpha}_t} \overline \epsilon_{0} + \sigma \epsilon m1αt ϵ0+σϵ 可以合并成 ϵ ′ \epsilon' ϵ 是因为高斯分布的可加性,因此有 ϵ ′ ∼ N ( 0 , m 2 ( 1 − α ‾ t ) + σ 2 ) \epsilon' \sim \mathcal{N}(0, m^2(1-\overline{\alpha}_t) + \sigma^2) ϵN(0,m2(1αt)+σ2)

将(7)式变换成 x t − 1 x_{t-1} xt1 的形式,然后和(23)式联立:

x t − 1 = α ‾ t − 1 x 0 + 1 − α ‾ t − 1 ϵ ‾ 0 x t − 1 = ( k + m α ‾ t ) x 0 + ϵ ′ \begin{aligned} x_{t-1} &= \sqrt{\overline{\alpha}_{t-1}} x_{0} + \sqrt{1-\overline{\alpha}_{t-1}} \overline \epsilon_{0}\\ x_{t-1} &= (k+m\sqrt{\overline{\alpha}_t})x_0 + \epsilon' \end{aligned} xt1xt1=αt1 x0+1αt1 ϵ0=(k+mαt )x0+ϵ

对应项系数相等得到:
α ‾ t − 1 = k + m α ‾ t 1 − α ‾ t − 1 = m 2 ( 1 − α ‾ t ) + σ 2 (24) \begin{aligned} \sqrt{\overline{\alpha}_{t-1}} &= k+m\sqrt{\overline{\alpha}_t}\\ 1-\overline{\alpha}_{t-1} &= m^2(1-\overline{\alpha}_t) + \sigma^2 \end{aligned} \tag{24} αt1 1αt1=k+mαt =m2(1αt)+σ2(24)

因此有:
m = 1 − α ‾ t − 1 − σ 2 1 − α ‾ t k = α ‾ t − 1 − 1 − α ‾ t − 1 − σ 2 1 − α ‾ t α ‾ t (25) \begin{aligned} m &= \sqrt{\frac{1-\overline{\alpha}_{t-1} - \sigma^2}{1-\overline{\alpha}_t}}\\ k &= \sqrt{\overline{\alpha}_{t-1}} - \sqrt{\frac{1-\overline{\alpha}_{t-1} - \sigma^2}{1-\overline{\alpha}_t}} \sqrt{\overline{\alpha}_t}\\ \end{aligned} \tag{25} mk=1αt1αt1σ2 =αt1 1αt1αt1σ2 αt (25)

和 DDPM 逆扩散过程一样,代入(7)式将 x 0 x_0 x0 替换成 x t x_t xt 表示,再将(25)式代入(22)式,得到:
x t − 1 = k x 0 + m x t + σ ϵ = ( α ‾ t − 1 − 1 − α ‾ t − 1 − σ 2 1 − α ‾ t α ‾ t ) ( x t − 1 − α ‾ t ϵ ‾ 0 α ‾ t ) + 1 − α ‾ t − 1 − σ 2 1 − α ‾ t x t + σ ϵ = α ‾ t − 1 α ‾ t x t + ( 1 − α ‾ t − 1 − σ 2 − α ‾ t − 1 ( 1 − α ‾ t ) α ‾ t ) ϵ ‾ 0 + σ ϵ = 1 α t x t + ( 1 − α ‾ t − 1 − σ 2 − 1 − α ‾ t α t ) ϵ ‾ 0 + σ ϵ (26) \begin{aligned} x_{t-1} &= kx_0+mx_t + \sigma \epsilon\\ &= (\sqrt{\overline{\alpha}_{t-1}} - \sqrt{\frac{1-\overline{\alpha}_{t-1} - \sigma^2}{1-\overline{\alpha}_t}} \sqrt{\overline{\alpha}_t})(\frac{x_t - \sqrt{1-\overline{\alpha}_t} \overline \epsilon_{0}}{\sqrt{\overline{\alpha}_t}}) + \sqrt{\frac{1-\overline{\alpha}_{t-1} - \sigma^2}{1-\overline{\alpha}_t}}x_t + \sigma \epsilon\\ &= \sqrt{\frac{\overline{\alpha}_{t-1}}{\overline{\alpha}_t}}x_t + (\sqrt{1-\overline{\alpha}_{t-1} - \sigma^2}-\sqrt{\frac{\overline{\alpha}_{t-1}(1-\overline{\alpha}_t)}{\overline{\alpha}_t}}) \overline \epsilon_{0} + \sigma \epsilon\\ &= \frac{1}{\sqrt{\alpha_t}}x_t + \left(\sqrt{1-\overline{\alpha}_{t-1} - \sigma^2}-\sqrt{\frac{1-\overline{\alpha}_t}{\alpha_t}}\right) \overline \epsilon_{0} + \sigma \epsilon\\ \end{aligned} \tag{26} xt1=kx0+mxt+σϵ=(αt1 1αt1αt1σ2 αt )(αt xt1αt ϵ0)+1αt1αt1σ2 xt+σϵ=αtαt1 xt+(1αt1σ2 αtαt1(1αt) )ϵ0+σϵ=αt 1xt+(1αt1σ2 αt1αt )ϵ0+σϵ(26)

ϵ ‾ 0 \overline \epsilon_{0} ϵ0 通过 U-Net 进行预测,其他都是已知参数。网上的教程都是推导到(26)式处就说不是马尔科夫假设,所以不需要严格遵守 x t → x t − 1 x_{t} \rightarrow x_{t-1} xtxt1 2 3。也有从相隔多个迭代步数采样向前推的,参见 一个视频看懂DDIM凭什么加速采样|扩散模型相关。

\  


\  

总之,DDIM 推理时可以隔多步进行采样,通过一个确定性映射直接将噪声转换为数据,避免了 DDPM 中的随机性,在减少生成时间步的同时,保持生成图像的高质量。推理过程中的确定性映射表示如下:
x τ i − 1 = α ˉ τ i − 1 ( x τ i − 1 − α ˉ τ i ϵ θ ( x τ i , τ i ) α ˉ τ i ) + 1 − α ˉ τ i − 1 − σ τ i 2 ϵ θ ( x τ i , τ i ) \mathbf{x}_{\tau_{i-1}} = \sqrt{\bar{\alpha}_{\tau_{i-1}}} \left( \frac{\mathbf{x}_{\tau_i} - \sqrt{1 - \bar{\alpha}_{\tau_i}} \epsilon_\theta(\mathbf{x}_{\tau_i}, \tau_i)}{\sqrt{\bar{\alpha}_{\tau_i}}} \right) + \sqrt{1 - \bar{\alpha}_{\tau_{i-1}} - \sigma_{\tau_i}^2} \epsilon_\theta(\mathbf{x}_{\tau_i}, \tau_i) xτi1=αˉτi1 (αˉτi xτi1αˉτi ϵθ(xτi,τi))+1αˉτi1στi2 ϵθ(xτi,τi)

其中 τ = { τ 1 , τ 2 , . . . , τ N } \tau = \{ \tau_1, \tau_2, ..., \tau_N \} τ={τ1,τ2,...,τN} 是时间步长序列。通过这个机制,DDIM 可以在生成过程中跳过多个步骤。

https://zhuanlan.zhihu.com/p/675510886


  1. 一文带你看懂DDPM和DDIM(含原理简易推导,pytorch代码) ↩︎

  2. DDPM与DDIM简洁版总结 ↩︎

  3. DDPM和DDIM公式推导。(精简版) ↩︎

相关文章:

Diffusion 公式推导 2

Diffusion 公式推导 中对 DDPM 进行了推导,本文接着对 DDIM 进行推导。 目录 六. 模型改进 六. 模型改进 从扩散模型的推理过程不难看出,DDPM 有一个致命缺点 —— 推理速度过慢,因为逆扩散是从 x T x_{T} xT​ 到 x 0 x_{0} x0​ 的完整过…...

layui-表单(输入框)

1.基本使用方法 先写一个表单元素块 form 加上layui-form 里面写行区块结构,如下: 2.输入框样式选项 input框 placeholder默认文本 autocomplete自动填充 lay-verify required必填 3.下拉菜单样式选项 默认选择第一项 select框 disable禁…...

中职网络安全B模块渗透测试server2380

使用nmap扫描添加参数-sV Flag:2.4.38 添加参数-A不然扫不全 (这两题可以直接加-sV -A) Flag: 4.3.11-Ubuntu 根据nmap扫描发现系统为ubuntu系统,ubuntu操作系统在某些版本中默认包含一个名为"ubuntu"的用户帐户。这是为了方…...

微信小程序毕业设计-教育培训系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…...

【面试题】正向代理和反向代理的区别?

正向代理(Forward Proxy)和反向代理(Reverse Proxy)是两种常见的代理服务器类型,它们在网络通信中扮演着不同的角色,具有不同的功能和应用场景。 一、正向代理 1. 定义与位置 正向代理是位于客户端和目标…...

Python面试宝典第8题:二叉树遍历

题目 给定一棵二叉树的根节点 root ,返回它节点值的前序遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3] 示例 2: 输入:root [] 输出:[] 示例 3: 输入:root […...

FastReport 指定sql 和修改 数据库连接地址的 工具类 :FastReportHelper

FastReport 指定sql 和修改 数据库连接地址的 工具类 :FastReportHelper 介绍核心代码:完整代码: 介绍 在FastReport中,经常会遇到需要给 sql 加条件的情况,或者给数据库地址做更换。 (废话不多说&#x…...

C++11中重要的新特性 Part one

序言 C11 是 C 编程语言的一个重要版本,于 2011 年由国际标准化组织 (ISO) 和国际电工委员会 (IEC) 旗下的 C 标准委员会 (ISO/IEC JTC1/SC22/WG21) 正式公布,并于同年 9 月出版。其正式名称为 ISO/IEC 14882:2011 - Information technology – Programm…...

VB 关键字

VB 关键字 Visual Basic(VB)是一种由微软开发的高级编程语言,广泛用于开发Windows桌面应用程序。在VB编程中,关键字是语言预定义的单词,具有特定的含义和用途。这些关键字不能被用作变量名或函数名,因为它们已经被编程语言赋予了特定的功能。 本文将详细介绍VB中的关键…...

Linux——多线程(四)

前言 这是之前基于阻塞队列的生产消费模型中Enqueue的代码 void Enqueue(const T &in) // 生产者用的接口{pthread_mutex_lock(&_mutex);while(IsFull())//判断队列是否已经满了{pthread_cond_wait(&_product_cond, &_mutex); //满的时候就在此情况下等待// 1.…...

InetAddress.getLocalHost().getHostAddress()阻塞导致整个微服务崩溃

InetAddress.getLocalHost().getHostAddress()阻塞导致整个微服务崩溃 import java.net.InetAddress;public class GetHostIp {public static void main(String[] args) {try {long start System.currentTimeMillis();String ipAddress InetAddress.getLocalHost().getHostA…...

在 Qt6 中,QList 和 QVector 统一 成qlist了吗?

是的,在 Qt6 中,QList 和 QVector 已经被统一了。具体来说,QList 现在基本上就是 QVector 的一个别名。这一改变意味着 QList 和 QVector 具有相同的性能和行为特性。 在 Qt5 中,QList 有自己的内部实现,对小型对象&a…...

第三期书生大模型实战营 第1关 Linux 基础知识

第三期书生大模型实战营 第1关 Linux 基础知识 第三期书生大模型实战营 第1关 Linux 基础知识InternStudio开发机创建SSH密钥配置通过本地客户端连接远程服务器通过本地VSCode连接远程服务器运行一个Python程序总结 第三期书生大模型实战营 第1关 Linux 基础知识 Hello大家好&a…...

架构设计(1)分布式架构

分布式架构 分布式架构是一种将系统中的不同组件分布在多台计算机或节点上,通过网络进行通信和协作,以实现系统功能的架构设计。分布式架构通常用于构建大型、复杂的软件系统,具有高可伸缩性、高可用性和高性能等优点。下面是关于分布式架构…...

机器学习笔记:初始化0的问题

1 前言 假设我们有这样的两个模型: 第一个是逻辑回归 第二个是神经网络 他们的损失函数都是交叉熵 sigmoid函数的导数: 他们能不能用0初始化呢? 2 逻辑回归 2.1 求偏导 2.1.1 结论 2.1.2 L对a的偏导 2.1.3 对w1,w2求偏导 w2同…...

JavaWeb—js(3)

Bom dom: document object model(文档对象模型), 是处理html、xml的标准编写接口。 节点和元素 整个页面也就是整个文档我们称之为文档节点; 文档节点使用document来表示; 页面中的所有标签我们称之为元素,使用element来表示; 如此处的文本、属性、注释等&…...

PLSQL Day4

--使用显式游标更新行,对所有salesman增加500奖金: declare cursor s_cursor is select * from emp where job SALESMAN for update; begin for e_s in s_cursor loop update emp set comm nvl(comm,0)500 where current of s_cur…...

git合并报错:git -c core.quotepath=false -c log.showSignature=false merge r

这个错误通常发生在 Git 尝试合并两个没有共同祖先的历史时,比如在合并不同的分支或仓库时,可以尝试以下几种方法: 允许不相关历史的合并: git merge release-3.6 --allow-unrelated-histories这个选项告诉 Git 允许合并两个没有共同历史的分…...

云原生存储:使用MinIO与Spring整合

在现代云原生应用开发中,高效、可靠的存储解决方案是至关重要的。MinIO是一个高性能、分布式的对象存储系统,它与Amazon S3兼容,非常适合在Kubernetes等云原生环境中使用。本文将详细介绍如何在Spring Boot应用中整合MinIO,并提供…...

等保测评新趋势:应对数字化转型中的安全挑战

随着信息技术的飞速发展,数字化转型已成为企业提升竞争力、优化运营效率的重要手段。然而,这一转型过程中,企业也面临着前所未有的安全挑战。等保测评(信息安全等级保护测评)作为保障信息系统安全的重要手段&#xff0…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...