扩散模型公式推导

这篇文章将尝试推导扩散模型 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 是时间步
将上述几个变量代入误差函数即可得到神经网络真正的优化目标。

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【心得】java从CC1链入门CC链个人笔记

来劲了,感觉离真正的CTF又近了一步。 本文仅从一个萌新的角度去谈,如有纰漏,纯属蒟蒻。 目录 CC链概念 CC链学习前置知识 CC1链 Version1 Version2 Version3 CC链概念 CC链 Commons Collections apache组织发布的开源库 里面主要对…

matlab appdesigner系列-常用19-超链接

超链接,可以执行的有2个,外部网页链接 和 外部matlab文件(.m文件) 示例:准备两个外部链接、文件 网页链接: https://www.mathworks.com/products/matlab.html matlab文件,Hyperlink.m msgb…

git bash右键菜单失效解决方法

git bash右键菜单失效解决方法 这几天重新更新了git,直接安装新版本后,右键菜单失效找不到了。找了好几个博客,发现都不全面,最后总结一下解决方法: (1)按winr,输入regedit打开注册…

安卓自动缩放布局

AutoScalingLayout 适用于 Android 的自动缩放布局。 替换布局: 我们只需要替换根布局所需的自动缩放,子布局也将实现自动缩放。 原始布局AutoScalingLayout相对布局ASRelativeLayout线性布局ASLinearLayoutFrameLayout(框架布局&#xff…

沃尔沃机器人的电动汽车部署战略

原创 | 文 BFT机器人 前言: 随着环保意识的提高和科技的进步,电动汽车在全球范围内正逐渐成为交通出行的主要方式。而在这个转变过程中,制造自动化的技术发展起到了关键的作用。目前,全球各大汽车制造商都在积极投入电动汽车的研…

操作系统-虚拟机(传统计算机 虚拟机 两类VMM对比 指令等级 特权与敏感)

文章目录 传统计算机虚拟机VMM的对比支持虚拟化的CPU通常分更多指令等级(特权 敏感) 传统计算机 传统物理机只有一个操作系统 两个进程在一个操作系统上运行会存在一些隐患(相互影响 争夺资源等) 解决方法:如果各个进…

[Linux]HTTP状态响应码列举

1xx:信息响应类,表示接收到请求并且继续处理 2xx:处理成功响应类,表示动作被成功接收、理解和接受 3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理 4xx:客户端错误&#x…

Elasticsearch:使用 Gemini、Langchain 和 Elasticsearch 进行问答

本教程演示如何使用 Gemini API创建 embeddings 并将其存储在 Elasticsearch 中。 我们将学习如何将 Gemini 连接到 Elasticsearch 中存储的私有数据,并使用 Langchian 构建问答功能。 准备 Elasticsearch 及 Kibana 如果你还没有安装好自己的 Elasticsearch 及 Ki…

HIVE中关联键类型不同导致数据重复,以及数据倾斜

比如左表关联键是string类型,右表关联键是bigint类型,关联后会出现多条的情况 解决方案: 关联键先统一转成string类型再进行关联 原因: 根据HIVE版本不同,数据位数上限不同, 低版本的超过16位会出现这种…

微信小程序底部按钮适配iPhoneX以上,显示遮挡问题

只需要在给底部按钮加个样式 /* 底部导航栏容器 */ .button-box {/* 使用 safe-area-inset-bottom 属性适配 iPhone X 及以上型号设备 */padding-bottom: constant(safe-area-inset-bottom);padding-bottom: env(safe-area-inset-bottom);/* 其他样式属性 */ }iPhone6/7/8效果 …

vue全局公共样式

vue公共样式代码存放在/src/styles文件夹里 index里引入其他组件公共样式,index.scss文件内容如下: import ./sidebar.scss; import ./searchForm.scss;body {height: 100%;-moz-osx-font-smoothing: grayscale;-webkit-font-smoothing: antialiased;t…

hcip高级网络知识

一:计算机间信息传递原理 抽象语言----编码 编码---二进制 二进制---转换为电流(数字信号) 处理和传递数字信号 二:OSI--七层参考模型 ISO--1979 规定计算机系统互联的组织: OSI/RM ---- 开放式系统互联参考模型 --- 1…

【模拟】力扣38(Java)

题目 class Solution {public String countAndSay(int n) {String ret "1";for(int i1;i<n;i)//解释n-1次ret{StringBuffer tmp new StringBuffer();int len ret.length();for(int left 0,right 0;right<len;){//双指针while(right < len &&…

力扣精选算法100道——x的平方根(二分查找专题)

x的平方根 首先看到这个题目的时候&#xff0c;我们需要对上一个二分查找专题的题目进行深度理解&#xff0c;然后了解模板&#xff0c;这题是完全利用的上一题的模板知识进行&#xff0c;如果直接看这个题目可能是有点懵的&#xff0c;因为我这里直接利用模板进行解题。力扣…

了解HTTP/1.1、HTTP/1.0 和 HTTP/2.0

HTTP/1.1、HTTP/1.0 和 HTTP/2.0 是超文本传输协议&#xff08;HTTP&#xff09;的三个主要版本 先解释一下什么是超文本协议 超文本传输协议&#xff08;HyperText Transfer Protocol&#xff0c;简称 HTTP&#xff09;是互联网上应用最广泛的一种网络协议。设计 HTTP 的初衷是…

在Ubuntu上安装pycuda记录

1. 安装CUDA Toolkit 11.8 从MZ小师妹的摸索过程来看&#xff0c;其他版本的会有bug&#xff0c;12.0的版本太高&#xff0c;11.5的太低&#xff08;感谢小师妹让我少走弯路&#xff09; 参考网址&#xff1a;CUDA Toolkit 11.8 Downloads | NVIDIA Developer 在命令行输入命…

尝试为ssrf漏洞编写黑名单与白名单

以pikachu靶场ssrf&#xff08;curl&#xff09;为例&#xff1a; 你会发现什么也没防御项访问基本的文件内容&#xff0c;端口开放都是可以看到的&#xff0c;没有任何防御措施。 我们去查看一下他的源码有没有过滤什么 没有任何过滤&#xff0c;咱么尝试进行过滤一下&#xf…

2024美赛数学建模思路 - 案例:粒子群算法

文章目录 1 什么是粒子群算法&#xff1f;2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法&#xff1f; 粒子群算法&#xff08;Pa…

peer eslint-plugin-vue@“^7.0.0“ from @vue/eslint-config-standard@6.1.0

问题&#xff1a; 用vue/cli脚手架安装项目时&#xff0c;选择ESlint&#xff0c;再安装依赖包的时候&#xff0c;会报以下错误&#xff0c; 原因&#xff1a; npmV7 之前的版本遇到依赖冲突时&#xff0c;会忽视冲突&#xff0c;继续安装&#xff1b; npmV7版本开始不再自动忽…

java web servlet 学习系统进度管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web学习系统进度管理系统是一套完善的java web信息管理系统 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环 境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为…