扩散模型公式推导

news2024/11/17 12:25:02

这篇文章将尝试推导扩散模型 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.coloradmin.cn/o/1407624.html

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

相关文章

第二证券:大金融板块逆势护盘 北向资金尾盘加速净流入

周一,A股商场低开低走,沪指收盘失守2800点。截至收盘,上证综指跌2.68%,报2756.34点;深证成指跌3.5%,报8479.55点;创业板指跌2.83%,报1666.88点。沪深两市合计成交额7941亿元&#xf…

学习笔记-李沐动手学深度学习(二)(08-09、线性回归、优化算法、Softmax回归、损失函数、图片分类)

总结 以_结尾的方法,好像是原位替换(即 原地修改,就地修改变量)如 fill_() 感恩的心:(沐神的直播环境) 08-线性回归基础优化算法 引言(如何在美国买房) 根据现在行…

Java毕业设计-基于jsp+servlet的学生推荐平台管理系统-第81期

获取源码资料,请移步从戎源码网:从戎源码网_专业的计算机毕业设计网站 项目介绍 基于jspservlet的学生推荐平台管理系统:前端 jsp、jquery,后端 servlet、jdbc,集成用户端和管理后台,用户端浏览书籍课程&…

CSS高级技巧导读

1,精灵图 1.1 为什么需要精灵图? 目的:为了有效地减少服务器接收和发送请求的次数,提高页面的加载速度 核心原理:将网页中的一些小背景图像整合到一张大图中,这样服务器只需要一次请求就可以了 1.2 精灵…

解锁无限可能,Roxlabs代理引领未来网络新体验

文章目录 前言网络隐匿利器:IP代理什么是Roxlabs?世界百花争艳,我独爱一枝什么是住宅IP?如何选择代理类型 利用IP代理进行国外数据采集实战教学附赠一个利用代理IP实现赚钱的方法总结 前言 在数字时代的今天,我们对于…

【Linux】—— 信号的基本介绍(一)

目录 (一)生活角度的信号 (二)查看信号列表 (三)技术应用角度的信号 (四)信号的概念 (五)小结 (一)生活角度的信号 我们要学习有关…

Java 数据结构集合

文章目录 Java 数据结构1. 基本数据结构1.1 数组 (Array)1.2 链表 (Linked List)1.3 栈 (Stack)1.4 队列 (Queue)双向队列优先级队列 2. 树形数据结构2.1 二叉树 (Binary Tree)2.2 堆 (Heap) 3. 散列数据结构3.1 哈希表 (Hash Map)3.2 LinkedHashMap3.3 TreeMapConcurrentHashM…

pytorch(二)梯度下降算法

文章目录 优化问题梯度下降随机梯度下降 在线性模型训练的时候,一开始并不知道w的最优值是什么,可以使用一个随机值来作为w的初始值,使用一定的算法来对w进行更新 优化问题 寻找使得目标函数最优的权重组合的问题就是优化问题 梯度下降 通…

Nginx问题分析

问题再现 分析问题: 就是通过http://182.44.16.68:8077/web-ui/static/js/chunk-libs.82635094.js 地址访问,找不到对应的js文件 首先确认文件在服务器的位置 发现这个目录下确实有这个js文件,那问题就在于http://182.44.16.68:8077/web-ui…

225.用队列实现栈(附带源码)

目录 一、思路 二、源码 一、思路 所以,创建两个队列 入栈,那个不空入那个 出栈,移动不空的队列的前n-1个到空队列,出队列第n个 很简单 总的来说,就是 下面直接手撕代码: 二、源码 typedef int QDa…

Unity_使用Image和脚本生成虚线段

生成如图样式的虚线段 原理:使用Image做一条线段,这个方法的原理就是给固定的片元长度,对Image进行分割,把片元添加到一个列表中,然后循环对列表中的偶数位进行隐藏,也可以调整线段的宽度 缺陷&#xff1…

Pandas.Series.idxmin() 最小值索引 详解 含代码 含测试数据集 随Pandas版本持续更新

关于Pandas版本: 本文基于 pandas2.2.0 编写。 关于本文内容更新: 随着pandas的stable版本更迭,本文持续更新,不断完善补充。 传送门: Pandas API参考目录 传送门: Pandas 版本更新及新特性 传送门&…

Java Web(二)--HTML

基本介绍 官网文档地址: HTML 教程 HTML(HyperText Mark-up Language)即超文本标签语言;HTML 文本是由 HTML 标签组成的文本,可以包括文字、图形、动画、声音、表格、链接等;HTML 的结构包括头部(Head&…

如何通过内网穿透+代理共享网络

去年写了一篇博客:如何通过代理共享网络,在这篇文章探索了怎么在同一个局域网内共享代理服务。不过,它的实用性也比较缺乏,要求必须处于同一个局域网之下,大多数时候,我们可能很难有这样的环境。所以&#…

【GitHub项目推荐--12 年历史的 PDF 工具开源了】【转载】

最近在整理 PDF 的时候,有一些需求普通的 PDF 编辑器没办法满足,比如 PDF 批量合并、编辑等。 于是,我就去 GitHub 上看一看有没有现成的轮子,发现了这个 PDF 神器「PDF 补丁丁」,让人惊讶的是这个 PDF 神器有 12 年的…

基于SpringBoot Vue美食网站系统

大家好✌!我是Dwzun。很高兴你能来阅读我,我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结,还为大家分享优质的实战项目,本人在Java项目开发领域有多年的经验,陆续会更新更多优质的Java实战项目&#x…

mysql生成最近24小时整点/最近30天/最近12个月时间临时表

文章目录 生成最近24小时整点生成最近30天生成最近12个月 生成最近24小时整点 SELECT-- 每向下推1行, i比上次减去1b.*, i.*,DATE_FORMAT( DATE_SUB( NOW(), INTERVAL ( -( i : i - 1 ) ) HOUR ), %Y-%m-%d %H:00 ) AS time FROM-- 目的是生成12行数据( SELECTa FROM( SELECT…

可直接将视频转文字的工具,速到快到离谱!

如何将视频转换成文字,推荐大家使用视频提取文案小助手,三秒一键搞定,真的快到离谱​! 不少草根博主在做短视频的时候,就有很多人给大家支招让大家先模仿后超越的模式,激起一众爱好短视频的草根博主成为短…

Scrapy爬虫在新闻数据提取中的应用

Scrapy是一个强大的爬虫框架,广泛用于从网站上提取结构化数据。下面这段代码是Scrapy爬虫的一个例子,用于从新闻网站上提取和分组新闻数据。 使用场景 在新闻分析和内容聚合的场景中,收集和组织新闻数据是常见需求。例如,如果我…

【小黑嵌入式系统第十六课】PSoC 5LP第三个实验——μC/OS-III 综合实验

上一课: 【小黑嵌入式系统第十五课】μC/OS-III程序设计基础(四)——消息队列(工作方式&数据通信&生产者消费者模型)、动态内存管理、定时器管理 前些天发现了一个巨牛的人工智能学习网站,通俗易懂…