生成式 AI - Diffusion 模型的数学原理(3)

来自 论文《 Denoising Diffusion Probabilistic Model》(DDPM)
论文链接: https://arxiv.org/abs/2006.11239
Hung-yi Lee 课件整理

文章目录

        • 一、图像生成模型本质上的共同目标
        • 二、最大似然估计
        • 三、和VAE的关联
        • 四、概率计算

一、图像生成模型本质上的共同目标

图像生成模型共同的特征是,在输入端有一个简单的分布,从里面sample出一个向量出来,然后把这个向量输入到神经网络里面,这个神经网络我们用G来表示,它的输入是x,输出是z,这个x就是一张图片,我们每次从这个简单的分布里面sample一个向量出来,通过神经网络把它变成一张图片,图中标记了四个图片。这些图片会组成一个十分复杂的分布,右边绿色的形状表示。而我们期待的是找到一个神经网络,使得形成的分布和真实图片形成的分布(蓝色形状表示)越接近越好。

通常我们的任务还需要一段输入的文字描述,我们称之为Condition,生成的图片是根据condition产生的图片,但是它仍然是一个分布,目标一样是让产生的分布和真实的分布越接近越好,所以有没有这个Condition,原理上没有本质的差别,下面的讲解暂时不考虑Condition,这样表达式更简洁,便于理解。

二、最大似然估计
我们期望绿色的分布和蓝色的分布越接近越好,但是怎么衡量呢,多数的深度学习模型都采用最大似然估计。

假设神经网络的参数用 θ \theta θ表示,通过这个神经网络产生的分布我们用 P θ P_{\theta } Pθ 来表示,真正的分布我们用 P d a t a P_{data } Pdata 来表示。
首先我们从 P θ P_{\theta } Pθ 里面sample出 x 1 x_{1} x1 x m x_{m} xm

我们通过输入 x i x^{i} xi来计算 P θ ( x i ) P_{\theta }(x^{i}) Pθxi是十分复杂的,复杂的难以想象。但是没有关系,我们先假设可以做到,可以算出产生这张图片的概率。
我们需要找一个 θ \theta θ使得 P θ ( x i ) P_{\theta }(x^{i}) Pθxi最大,那么目标函数如右边公式所示。
我们需要学习到的使得 P θ ( x i ) P_{\theta }(x^{i}) Pθxi最大的 θ \theta θ就是 θ ∗ \theta^* θ

接着前面的讲解,
第二行,我们对 P θ ( x i ) P_{\theta }(x^{i}) Pθxi做取对数操作,对结果没有影响,为了方便计算。
第三行,对数计算,把求积转换为求和,这个式子近似于 从 P d a t a P_{data } Pdata中取出 x x x, 然后计算 P θ ( x ) P_{\theta }(x) Pθx取对数,在计算 x x x P d a t a P_{data } Pdata中取出的期望。
第四行,这个式子等同于对 x x x做积分,这里没有好解释的,右边减去的部分有点令人匪夷所思,这一项不会影响我们的结果,对 θ \theta θ不产生影响,只和data本身有关,但是加入这一项有一个好处,可以进行后续的合并。
第五行,合并后得到这一步,这一项正好是 P θ P_{\theta } Pθ P d a t a P_{data} Pdata的KL Divergence。

KL Divergence越大表示这两个分布的差异越大。这样我们可以看到最大似然估计和最小化KL Divergence是等价的。

三、和VAE的关联

这里之所以讲VAE是为了说明其实它和Diffusion model非常相似,之前也提到过,很多在VAE里面推导过的东西在Diffusion model里面是不需要再推导的。

按理说我们要定义 P θ ( x ) P_{\theta }(x) Pθx应该写成右边第一个式子,
P ( z ) P(z) Pz是从原始分布计算出来的,很容易得到,但是后面的部分怎么办,如果我们按照第二行的式子进行处理的话这样算出来的概率几乎都是0了。

实际上在VAE里面是这样假设的,假设输入一个z输出是G(z),G(z)实际上是高斯分布的均值,这样我们就可以用右边的式子近似代替。

通常我们需要最小化的是 P ( x ) P(x) Px的下界。
第一行,这里的 q ( z ∣ x ) q(z\mid x ) qzx是什么并不重要;
第二行,分解展开 P ( x ) P(x) Px;然后在分子分母同时乘以 q ( z ∣ x ) q(z\mid x ) qzx
第三行,log相乘拆成相加,第二项是 q ( z ∣ x ) q(z\mid x ) qzx P ( z ∣ x ) P(z\mid x ) Pzx的KL divergence,而且这一项一定是正数;
第四行,这个积分形式可以写成期望的形式,这就是这个概率的下界,即下限。我们要最大化的就是这个下限。
在VAE里面 q ( z ∣ x ) q(z\mid x ) qzx实际上就是Encode。

四、概率计算

现在来看看 P θ ( x ) P_{\theta }(x) Pθx是怎么计算的。
生成图片的过程如图所示,可以把Denoise的过程想成是产生一个高斯分布的均值,如果 x t − 1 x_{t-1} xt1和产生的分布很接近,那么这个概率就很大,反之很小。
x 0 x_{0} x0被产生的概率就可以用下面这个很长的式子表示,从 x 1 x_{1} x1 x T x_{T} xT对所有的可能做积分。

DDMP和VAE的下限其实是一样的,推导的过程也是一模一样。
唯一的不同就是把一些符号换了一下,
x x x换成了 x 0 x_{0} x0
q ( z ∣ x ) q(z\mid x) qzx换成了 q ( x 1 : x T ∣ x 0 ) q(x_{1} :x_{T} \mid x_{0} ) qx1xTx0
P ( x ∣ z ) P(x\mid z) Pxz换成了 P ( x 0 : x T ) P(x_{0} :x_{T} ) Px0xT
VAE里面的Encoder和DDPM里面的forward process也是对应的。

最下面给出了 q ( x 1 : x T ∣ x 0 ) q(x_{1} :x_{T} \mid x_{0} ) qx1xTx0的计算公式。
下一篇博客会进一步解释这个公式具体的计算方法。

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

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

相关文章

三维模型优化与可视化开发者服务

一站式服务开发者 1、极速流畅的浏览体验 无需安装插件,实现模型多端展示 最大支持100G模型,杜绝花、卡、闪 2、丰富易用的开发工具 无需掌握图形技术,实现模型轻量化和3D交互展示 提供丰富的SDK和API,简洁易用 老子云API 提供…

Java+SpringBoot:高校竞赛管理新篇章

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

添加环境变量

目录 一、前言二、目的三、添加环境变量的步骤四、检查环境变量是否配置成功 一、前言 在很多地方在下载完软件后都需要添加环境变量方可使用。这里以要在终端使用MySQL为例来说一下,在安装好MySQL8.0版本的前提下,如何添加环境变量。 二、目的 添加环…

力扣OJ题——旋转数组

题目:189.旋转数组 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数 思路一: 1.每次挪动旋转1位(用tmp将最后一位存起来,其余所有数据向后移,然后将tmp放在第一个位…

单源最短路径(Dijkstra)

前言 dijkstra:对于无负边的情况下可以达到O(nlogn)且很难被卡 最短路 - OI Wiki (oi-wiki.org) P3371 【模板】单源最短路径(弱化版) P3371 【模板】单源最短路径(弱化版) - 洛谷 | 计算机科学教育新生态 (luogu.com…

2.18学习总结

链式前向星的处理和建立 tarjan对割点和缩点的使用 拓扑排序 链式前向星: 预处理: struct edge{int from;int to;int next; }e[N]; int n,m,head[N],dfn[N],low[N],tot,color[N],num[N],out[N],s,instack[N],id; 处理: void add(int …

svg之全局组件,配合雪碧图解决vue2的svg优化问题

这里是vue2中的svg的完整解决方案的另一篇。 <template><svg :class"svgClass"><use :xlink:href"#${name}"></use></svg> </template><script>export default {name: icon,props: {name: {type: String,requi…

lv15 input子系统框架、外设驱动开发 5

一、input子系统基本框架 在我们日常的Linux系统中&#xff0c;存在大量的输入设备&#xff0c;例如按键、鼠标、键盘、触摸屏、摇杆等&#xff0c;他们本身就是字符设备&#xff0c;linux内核将这些字符设备的共同性抽象出来&#xff0c;简化驱动开发建立了一个input子系统。 …

关于Spring Boot应用系统避免因为日切(日期切换)导致请求结果变更的一种解决方案

一、前言 在系统开发过程中&#xff0c;有些业务功能面临日切&#xff08;日期切换&#xff09;问题&#xff0c;比如结息跑批问题&#xff0c;在当前工作日临近24点的时候触发结息&#xff0c;实际交易时间我们预期的是当前时间&#xff0c;但是由于业务执行耗时&#xff0c;…

【EI会议征稿通知】第五届城市工程与管理科学国际会议(ICUEMS 2024)

【Scopus稳定检索】第五届城市工程与管理科学国际会议&#xff08;ICUEMS 2024&#xff09; 2024 5th International Conference on Urban Engineering and Management Science 第五届城市工程与管理科学国际会议&#xff08;ICUEMS 2024&#xff09;将于2024年5月31日-6月2日…

告警能力中台设计与实践(三)——告警通知

一、告警消息与告警通知 1、告警消息 正如笔者在最开始所写的那样&#xff0c;第三方服务通过调用能力中台的OpenAPI实现告警发起&#xff0c;并且每一次的告警请求都会创建、归档为一条告警消息&#xff08;AlarmMsg&#xff09;。 这样的消息是无状态的&#xff0c;并且对…

Python:变量与数据类型

目录 一、变量 1.1 强数据类型与弱数据类型 1.2 全局函数 1.3 变量的命名规范 二、数据类型 2.1 基本数据类型 2.2 复合数据类型&#xff08;引用数据类型&#xff09; 三、数据类型转换 一、变量 变量&#xff1a;顾名思义&#xff0c;变化的量。在python中代指运行时…

【Java面试】MongoDB

目录 1、mongodb是什么&#xff1f;2、mongodb特点什么是NoSQL数据库&#xff1f;NoSQL和RDBMS有什么区别&#xff1f;在哪些情况下使用和不使用NoSQL数据库&#xff1f;NoSQL数据库有哪些类型?启用备份故障恢复需要多久什么是master或primary什么是secondary或slave系列文章版…

【Redis篇】详解布隆过滤器(原理 | 操作 | 代码)

文章目录 &#x1f354;简述布隆过滤器&#x1f33a;原理&#x1f6f8;存入过程&#x1f6f8;查询过程 &#x1f3f3;️‍&#x1f308;优缺点⭐优点⭐缺点 &#x1f339;代码实现&#xff08;本地&#xff09;&#x1f339;代码实现&#xff08;分布式&#xff09; &#x1f3…

Redis 集群(Cluster)

集群概念 Redis 的哨兵模式&#xff0c;提高了系统的可用性&#xff0c;但是正在用来存储数据的还是 master 和 slave 节点&#xff0c;所有的数据都需要存储在单个 master 和 salve 节点中。 如果数据量很大&#xff0c;接近超出了 master / slave 所在机器的物理内存&#…

HTTP请求报文与响应报文格式

HTTP请求报文与响应报文格式 HTTP请求报文与响应报文格式 请求报文包含四部分&#xff1a; a、请求行&#xff1a;包含请求方法、URI、HTTP版本信息b、请求首部字段c、请求内容实体d、空行 响应报文包含四部分&#xff1a; a、状态行&#xff1a;包含HTTP版本、状态码、状态码…

【从Python基础到深度学习】7. 使用scp命令实现主机间通讯

一、生成 SSH 密钥对 ssh-keygen 是一个用于生成 SSH 密钥对的命令行工具&#xff0c;用于身份验证和加密通信 ssh-keygen 二、将本地主机上的 SSH 公钥添加到远程主机 ssh-copy-id 命令用于将本地主机上的 SSH 公钥添加到远程主机上的 authorized_keys 文件中&#xff0c;…

《苍穹外卖》知识梳理P9-定时任务、来单提醒与用户催单

一.定时任务 实现定时任务可以使用spring家族中的sprinig-task&#xff1b; 1.1 spring-task spring-task是Spring框架的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑&#xff1b; 应用场景 信用卡每月归还贷款提醒&#xff0c;定时任务检查&#xff…

Jetpack Compose 第 2 课:布局

点击查看&#xff1a;Jetpack Compose 教程 点击查看&#xff1a;Composetutorial 代码 简介 Jetpack Compose 是用于构建原生 Android 界面的新工具包。它使用更少的代码、强大的工具和直观的 Kotlin API&#xff0c;可以帮助您简化并加快 Android 界面开发。 在本教程中&a…

【springboot+vue项目(十四)】基于Oauth2的SSO单点登录(一)整体流程介绍

场景&#xff1a;现在有一个前后端分离的系统&#xff0c;前端框架使用vue-element-template&#xff0c;后端框架使用springbootspringSecurityJWTRedis&#xff08;登录部分&#xff09;现在需要接入到已经存在的第三方基于oauth2.0的非标准接口统一认证系统。 温馨提示&…