扩散模型公式推导

这篇文章将尝试推导扩散模型 DDPM 中涉及公式,主要参考两个 B 站视频:

  1. 大白话AI
  2. 狗中赤兔

本文所用 PPT 元素均来自 UP 主,狗中赤兔和大白兔AI,特此感谢。
在证明开始,我们需要先对扩散模型有一个整体的认知。扩散模型通常由①前向的加噪过程②逆向的去噪过程构成。如下图所示:
在这里插入图片描述
从左到右是 加噪过程,从右到左是 去噪过程。
我们在上一篇文章中,已经像大家介绍了扩散模型的基本原理(这篇)

我们通过简单的表征模块搭建简单的去噪模型,在 MNIST 手写体数据集上搭建了多步去噪模型。相信上述 demo 可以帮助大家理解扩散模型主要工作流程。这篇文章,我们将尝试证明其背后的数学原理。

文章目录

    • 加噪过程
      • 证明什么?
      • 证明过程
    • 去噪过程
      • 证明什么?
      • 证明过程
    • 训练过程

加噪过程

证明什么?

扩散模型加噪过程就是从原始图片开始,逐步向其中添加噪声,直至图片完全模糊。我们首先使用数学公式表述这一过程。
在这里插入图片描述
汇总一下已知的条件:

  • 扩散过程符合马尔科夫随机过程,每一步均仅和上一步有关
    q ( x t ∣ x t − 1 ) = N ( 1 − β t x t − 1 , β t I ) q(x_t|x_{t-1})=\mathcal{N}(\sqrt{1-\beta_t}x_{t-1},\beta_t I) q(xtxt1)=N(1βt xt1,βtI)
  • 每一步中添加的噪声均是从高斯分布中抽取的随机数,即
    x t = 1 − β t x t − 1 + β t ⋅ ϵ x_t=\sqrt{1-\beta_t}x_{t-1}+\sqrt{\beta_t}\cdot\epsilon xt=1βt xt1+βt ϵ

注意,噪声和源图片是掺杂的状态,掺杂比例平方和是 1,大家可以到 这个网站 感受一下。

我们已经知道了前向过程是一个马尔科夫链,并知道了每一步添加的噪声服从高斯分布。那么,是否有可能从最开始原始状态直接加噪到特定时间步所处状态呢?即,证明, q ( x t ∣ x 0 ) = N ( C t 2 x 0 , C t 1 I ) q(x_t|x_{0})=\mathcal{N}(C_{t2}x_{0},C_{t1} I) q(xtx0)=N(Ct2x0,Ct1I)
x t = C t 2 x 0 + C t 1 ⋅ ϵ x_t=C_{t2}x_{0}+C_{t1}\cdot\epsilon xt=Ct2x0+Ct1ϵ

证明过程

首先,我们定义两个马尔科夫链,然后将式2带入式1,并进行化简。注意到,两个随机噪声可以进行合并,这里运用了高斯分布两个特殊性质:

  1. 一个随机数是从标准高斯分布中采样得到的,对这个随机数乘以一个不为零的常数,相乘结果依然是高斯分布
    在这里插入图片描述
  2. 两个随机数分别从两个独立高斯分布中抽取得到,两数相加所得结果依然服从高斯分布
    在这里插入图片描述
    详细证明过程如下:
    请添加图片描述
    上述证明结果表示,任一时间步的加噪状态可以由初始照片通过一步加噪得到。注意到,加噪过程是不涉及神经网络的,不需要进行网络训练。此外,我们的 α ‾ t \overline{\alpha}_{t} αt 是由 α 1 α 2 … α t \alpha_{1}\alpha_{2}\dots\alpha_{t} α1α2αt 连乘得到的。这些数均是小于 1 的正数,所以当扩散步数足够多时, x t x_t xt 将被噪声淹没,变成一张完全遵从高斯分布的噪声。

去噪过程

证明什么?

在上一篇文章中,我们实现了多步迭代去噪模型。该模型可看作扩散模型的原型,简单直接的展示了扩散模型的主要工作原理。但是在真实的扩散模型设计中,逆向去噪会更加复杂一些。如下图所示:
在这里插入图片描述
我们希望以加噪图片为输入,让模型预测所加噪声或者去噪后的图像,用数学表达式表示则为:
p θ ( x t − 1 ∣ x t ) p_{\theta}(x_{t-1}|x_{t}) pθ(xt1xt)
既然要训练神经网络拟合这一分布,那么,一个很自然的问题是,这一分布的表达式是什么?
为了回答这一问题,我们首先汇总一下已知条件:

  • 去噪过程遵循马尔科夫过程,每一步去噪只与当前状态有关
  • 由上一小节可得,每一步加噪状态均可由原始图像通过一步加噪得到

下面,我们将尝试回答神经网络需要拟合的表达式是什么?

证明过程

在开始之前,我们先来复习下贝叶斯定理
在这里插入图片描述
贝叶斯定理的好处是,可以将复杂概率问题拆分成已知的简单概率问题的组合。
上述将要求解的 p ( x t − 1 ∣ x t ) p(x_{t-1}|x_{t}) p(xt1xt)可以使用贝叶斯定理进行化简:
在这里插入图片描述
进一步的,我们可以给式中各项添加 x 0 x_0 x0
在这里插入图片描述
此处左式和右式左上方中的 x 0 x_0 x0 可以近似忽略,现在我们将注意力放在等式右边的三个表达式上。
在上一节中,我们证明了,①任意时间步的带噪图像均可由原始图像一步加噪得到,这一噪声符合高斯分布;②任意时间步的带噪图像可由前一步图像加噪得到,这一噪声也符合高斯分布。这两点用公式表示如下:
在这里插入图片描述
等式右边的三个表达式可通过上述两个公式(及其一个拓展)得到,因为理论上,上两式是对一个来自高斯分布的随机数进行线性变换,所以变换结果也应遵从高斯分布:
在这里插入图片描述
下面就是将右式中的三个表达式代入高斯分布下的表达,并进行合并化简。
化简过程十分复杂,我们只需要知道能化简,而且化简结果也是一个高斯分布:
在这里插入图片描述
再回头看:
在这里插入图片描述
我们的逆向过程是希望在已知 x T x_T xT(which is a 高斯噪声)的情况下,通过去噪神经网络一步步倒推回去,得到 x 0 x_0 x0
我们经过复杂推导,得到了神经网络的表达式
在这里插入图片描述
但该表达式中,含有我们想要求解的 x 0 x_0 x0,所以我们需要进一步将 x 0 x_0 x0 替换掉
我们对上一节证明的, x 0 x_0 x0 x T x_T xT 之间的关系式进行变形,代入主表达式:
在这里插入图片描述
化简得到最终结果:
在这里插入图片描述
此时,我们终于有了一个 “知道 x t x_t xt 值即可求得 x t − 1 x_{t-1} xt1 值的关系式” 了。这个关系式就是我们所谓的去噪网络

但是,注意到,该关系式并不是一个确定的概率分布,其中还有一个随机数 ϵ \epsilon ϵ 。当这个随机数确定的时候,我们才能真正敲定该概率分布。
众所周知,神经网络是黑箱拟合一切难题的法宝,所以我们将预测随机数的任务就交给神经网络。

公式推导到这里,所谓去噪网络的功能发生了一点点变化。一开始,我们的想法是,输入带噪图像,输出干净图片:
在这里插入图片描述
现在变成了,输入带噪图像,预测噪声 ϵ \epsilon ϵ ,将该噪声代入表达式:
在这里插入图片描述
得到基于带噪图片向前推理的概率分布,最后,我们再从该分布中抽取一张图片。逻辑链如下所示:
在这里插入图片描述
最后遗留的小问题:去噪过程最开始,如何拿到 x T x_T xT 呢?在上一小节末尾,我们提到,当一个照片加噪次数足够多时,带噪图片将变成一张高斯噪声。因此,我们将随机高斯噪声作为 x T x_T xT 即可。

训练过程

写到这里,相信大多数读者都和我一样感到疲惫,但事实上,扩散模型最难的理论部分才刚刚开始。这一部分在下面两个视频中有讲解:

  1. 狗中赤兔
  2. 梗直哥

此处仅放出训练神经网络的误差函数:
在这里插入图片描述

其中 ϵ θ \epsilon_{\theta} ϵθ 是神经网络预测的噪声, ϵ \epsilon ϵ 是服从高斯分布的随机噪声(真实噪声),t 是时间步
将上述几个变量代入误差函数即可得到神经网络真正的优化目标。

希望读到这里的读者能锲而不舍,继续推导相关公式,俺退了,祝好!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/343781.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络实验一:网线制作

目录 实验一:网线制作 1.1 实验目的 1.2 实验步骤 1.3 实验总结 实验一:网线制作 1.1 实验目的 (1)熟悉5类双绞线的标准; (2)练习压线钳、测线仪等工具的使用; (3…

让计算机能够认识 函数 的数学表达式

【mathematical-expression】让计算机认识 数学函数 在计算机中,我们如果想要让数学中的函数,能够像编程中的函数一样发挥作用,这是比较麻烦的一种操作,例如 1 f(20) 3 这个数学表达式中,针对函数的提取与解析等需求…

html火焰文字特效

下面是代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>HTML5火焰文字特效DEMO演示</title><link rel"stylesheet" href"css/style.css" media"screen" type&quo…

有效的括号[简单]

>优质博文&#xff1a;IT-BLOG-CN 一、题目 给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串s&#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 【1】左括号必须用相同类型的右括号…

Deployment介绍

1、Deployment介绍 Deployment一般用于部署公司的无状态服务。 格式&#xff1a; apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metada…

【Redis】网络模型

前言 Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的高性能键值对存储系统&#xff0c;广泛用于各种网络应用中作为数据库、缓存和消息代理。Redis的网络模型是其高性能的关键因素之一&#xff0c;它涉及到多个方面&#xff0c;包括内存管理、事件处理、…

开始学习Vue2(脚手架,组件化开发)

一、单页面应用程序 单页面应用程序&#xff08;英文名&#xff1a;Single Page Application&#xff09;简 称 SPA&#xff0c;顾名思义&#xff0c;指的是一个 Web 网站中只有唯一的 一个 HTML 页面&#xff0c;所有的功能与交互都在这唯一的一个页面内完成。 二、vue-cli …

omron adept控制器维修SmartController EX

欧姆龙机器人adept运动控制器维修SmartController EX 19300-000 维修范围&#xff1a;姆龙机器人&#xff1b;码垛机器人&#xff1b;搬运机器人&#xff1b;焊机机器人&#xff1b;变位机等。 Adept Viper s650/s850用于装配、物料搬运、包装和机械装卸&#xff0c;循环周期短…

大模型+自动驾驶

论文&#xff1a;https://arxiv.org/pdf/2401.08045.pdf 大型基础模型的兴起&#xff0c;它们基于广泛的数据集进行训练&#xff0c;正在彻底改变人工智能领域的面貌。例如SAM、DALL-E2和GPT-4这样的模型通过提取复杂的模式&#xff0c;并在不同任务中有效地执行&#xff0c;从…

《汇编语言》- 读书笔记 - 第8章 - 数据处理的两个基本问题(阶段总结)

《汇编语言》- 读书笔记 - 第8章 - 数据处理的两个基本问题&#xff08;阶段总结&#xff09; 8.1 bx、si、di 和 bp (可用于内存寻址)8.2 机器指令处理的数据在什么地方8.3 汇编语言中数据位置的表达1. 立即数(idata)2. 寄存器3. 段地址(SA)和偏移地址(EA) 8.4 寻址方式8.5 指…

HPA自动扩缩容

HPA是什么&#xff1f;&#xff1f;&#xff1f; Horizontal Pod Autoscaling: k8s自带的模块&#xff0c;pod的水平自动伸缩&#xff0c;对象是pod。 pod占用cpu比率达到一定的阈值&#xff0c;将会触发伸缩机制。 replication controller 副本控制器 deployment controll…

【ZYNQ入门】第九篇、双帧缓存的原理

目录 第一部分、基础知识 1、HDMI视频撕裂的原理 2、双帧缓存的原理 第二部分、代码设计原理 1、AXI_HP_WR模块 2、AXI_HP_RD模块 3、Block design设计 第三部分、总结 1、写在最后 2、更多文章 第一部分、基础知识 1、HDMI视频撕裂的原理 在调试摄像头的时候&#xf…

CMS如何调优

业务JVM频繁Full GC如何排查 原则是先止损&#xff0c;再排查。 FGC的原因是对象晋升失败或者并发模式失败&#xff0c;原因都是老年代放不下晋升的对象了。 1.可能是大对象导致的内存泄漏。快速排查方法&#xff1a;观察数据库网络IO是否和FGC时间点吻合&#xff0c;找到对应…

Servlet生命周期

第一阶段&#xff1a; init&#xff08;&#xff09;初始化阶段 当客户端想Servlet容器&#xff08;例如Tomcat&#xff09;发出HTTP请求要求访问Servlet时&#xff0c;Servlet容器首先会解析请求&#xff0c;检查内存中是否已经有了该Servlet对象&#xff0c;如果有&#xff…

机器人制作开源方案 | 全自动导航分拣机器人

作者&#xff1a;孙国峰 董阳 张鑫源 单位&#xff1a;山东科技大学 机械电子工程学院 指导老师&#xff1a;张永超 贝广霞 1. 研究意义 1.1 研究背景 在工业生产中&#xff0c;机器人在解决企业的劳动力不足&#xff0c;提高企业劳动生产率&#xff0c;提高产品质量和降低…

【c++学习】数据结构中的链表

c链表 数据结构中的链表代码 数据结构中的链表 链表与线性表相对&#xff0c;链表数据在内存中的存储空间是不连续的&#xff0c;链表每个节点包含数据域和指针域。 代码 下述代码实现了链表及其接口 包括增、删、查、改以及其他一些简单的功能 #include <iostream>u…

FRRouting学习(一) 配置日志文件

以配置isis event事件日志为例 1、在配置之前&#xff0c;/var/log/frr路径下是没有文件的&#xff1a; 2、在vtysh config之下输入&#xff1a;log file /var/log/frr/isisd.log debugging 后面的debugging表示日志级别&#xff0c;可以根据自己修改 3、配置好了之后&#xf…

java——数据类型与变量

目录 &#x1f469;&#x1f3fb;‍&#x1f4bb;字面常量 &#x1f469;&#x1f3fb;‍&#x1f4bb;数据类型 &#x1f469;&#x1f3fb;‍&#x1f4bb;变量 ❗整型变量 &#x1f449;int(整型)默认值 &#x1f449;long(长整型) &#x1f449;short(短整型) &…

webpack如何把dist.js中某个模块js打包成一个全局变量,使得在html引入dist.js后可以直接访问

webpack可以通过使用expose-loader来将模块中的一个js文件暴露为全局可以访问的变量。下面是一个示例代码&#xff1a; 1、安装expose-loader npm install expose-loader --save-dev 2、webpack.config.js配置文件 值得注意的是&#xff1a;我在本地使用16.14.2版本的node打包…

Springboot+vue的医院后台管理系统(有报告),Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的医院后台管理系统&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的医院后台管理系统&#xff0c;采用M&#xff08…