生成式 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.mzph.cn/news/688016.shtml

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

相关文章

GC9008 12V 全桥驱动芯片,可替代TMI8118,应用于摄像机、消费类产品上

GC9008 是一款 12V 全桥驱动芯片,为提供高性价比的方案。它能提供 0.1A 的持续输出电流。可以工作在 4.5~15V 的电源电压上。 具有 PWM(IN1/IN2)输入接口,与行业标准器件兼容.是 SOP8封装,GC9008D是DIP封装 芯片特点 ● H 桥电机…

计算机服务器中了_locked勒索病毒怎么办?Encrypted勒索病毒解密数据恢复

随着网络技术的不断发展,数字化办公已经成为企业生产运营的根本,对于企业来说,数据至关重要,但网络威胁无处不在,近期,云天数据恢复中心接到很多企业的求助,企业的计算机服务器遭到了_locked勒索…

Python 基于 AI 动物识别技术的研究与实现,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

迁移SVN和GIT的云端数据

在新服务器搭建GIT仓库 教程很多,大致的流程是: 1. 新建linux用户密码专用于git操作 2. 新建git库的存放文件夹并在此初始化git 3. 配置git库所在目录权限 *只需要有一个库和有一个用户,与在windows上建库是一样的。不需要搭建类似gitla…

stable diffusion webui学习总结(2):技巧汇总

一、脸部修复:解决在低分辨率下,脸部生成异常的问题 勾选ADetailer,会在生成图片后,用更高的分辨率,对于脸部重新生成一遍 二、高清放大:低分辨率照片提升到高分辨率,并丰富内容细节 1、先通过…

人力资源智能化管理项目(day10:首页开发以及上线部署)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/humanResourceIntelligentManagementProject 首页-基本结构和数字滚动 安装插件 npm i vue-count-to <template><div class"dashboard"><div class"container"><!-- 左侧内…

MyBatis--08--分页插件PageHelper

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.分页插件PageHelper1.1 mysql中 limit 关键字含义1.2 PageHelper 官网https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md](ht…

中国社科院与英国斯特灵大学创新与领导力博士—应该怎样选专业

现如今其实有很多人感觉只是平台成就自己&#xff0c;离开平台自己并无一技之长或过人之处。但是又不想如此安稳过日&#xff0c;一直终老。所以现在大多数人都会去想在职读个博士。 基本上都是在职博士专业为那些希望边工作边获得博士学位的在在职人员开设的&#xff0c;那么&…

uni-app使用uView打开弹出层后输入框聚焦时placeholder错位问题

这里就不放效果了&#xff0c;大概意思就是在使用uView的popus时&#xff0c;在底部弹出后&#xff0c;如果弹窗中的输入框会造成一瞬间的placeholder文字错位&#xff0c;这个问题的主要是因为uView安全区适配导致 uView相关文档 https://www.uviewui.com/components/safeAr…

Vue3

目录 一、 Vue3简介 1. 性能的提升 2. 源码的升级 3. 拥抱TypeScript 4. 新的特性 二、 创建Vue3工程 1. 基于 vue-cli 创建 2. 基于 vite 创建(推荐) 3. 一个简单的效果 三、Vue3核心语法 1. OptionsAPI 与 CompositionAPI &#xff08;1&#xff09;Options API …

UE蓝图 Set节点和源码

文章目录 Set节点说明相关源码 Set节点说明 UE蓝图中的Set节点是用于对变量进行赋值操作的重要组件。它具有多种功能和作用&#xff0c;具体如下&#xff1a; 变量赋值&#xff1a;Set节点可以用于设置不同类型的变量值&#xff0c;包括整数、浮点数、布尔值、字符串等。在游戏…

OpenAI超级视频模型Sora技术报告解读,虚拟世界涌现了

昨天白天&#xff0c;「现实不存在了」开始全网刷屏。 「我们这么快就步入下一个时代了&#xff1f;Sora简直太炸裂了」。 「这就是电影制作的未来」&#xff01; 谷歌的Gemini Pro 1.5还没出几个小时的风头&#xff0c;天一亮&#xff0c;全世界的聚光灯就集中在了OpenAI的So…

node命令yarn --version指向了java

问题描述 本地安装了java、hadoop和nodejs&#xff0c;并配置了环境变量&#xff0c;但是hadoop的bin目录下存在yarn命令&#xff0c;所以使用nodejs的yarn命令启动项目会出现找不到类&#xff0c;此时键入yarn -version也会显示java的版本。 原因分析 由于配置了hadoop环境…

使用Docker Compose搭建Redis哨兵架构

搭建Redis哨兵(sentinel) 之前我们通过深入理解REDIS哨兵原理了解了Redis哨兵(sentinel)的原理&#xff0c;今天我们手动部署一个哨兵架构。要在Docker中搭建Redis哨兵(sentinel)架构&#xff0c;需要Redis的主从实例以及哨兵实例。之前我们已经使用Docker Compose搭建Redis主…

如何一键抠图换背景?分享两个好用的抠图方法

在数字化时代&#xff0c;图片编辑已成为日常生活和工作中不可或缺的一部分。而智能抠图软件&#xff0c;作为近年来兴起的图片处理技术&#xff0c;正引领着图片编辑的新篇章。它利用先进的机器学习和图像识别技术&#xff0c;能够自动识别和分离图片中的主体&#xff0c;实现…

UnityShader——06UnityShader介绍

UnityShader介绍 UnityShader的基础ShaderLab UnityShader属性块介绍 Properties {//和public变量一样会显示在Unity的inspector面板上//_MainTex为变量名&#xff0c;在属性里的变量一般会加下划线&#xff0c;来区分参数变量和临时变量//Texture为变量命名//2D为类型&…

SpringBoot整合GateWay(详细配置)

前言 在Spring Boot中整合Spring Cloud Gateway是一个常见的需求&#xff0c;尤其是当需要构建一个微服务架构的应用程序时。Spring Cloud Gateway是Spring Cloud生态系统中的一个项目&#xff0c;它提供了一个API网关&#xff0c;用于处理服务之间的请求路由、安全、监控和限流…

【测试运维】性能测试经验文档总结第3篇:VuGen详解(已分享,附代码)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论性能测试相关知识。入门阶段&#xff1a;认识性能测试分类-(负载测试、压力测试、并发测试、稳定性测试)&#xff0c;常用性能测试指标-(吞吐量、并发数、响应时间、点击数...)&#xff0c;性能测试工具选择。性能脚本&…

列表推导式与生成表达式的区别

列表推导式与生成式表达式的区别&#xff1a; 列表推导式 res[i for i in range(6)] print(res) 结果&#xff1a; [0, 1, 2, 3, 4, 5] 生成表达式&#xff1a; res(i for i in range(6)) print(res) 结果&#xff1a; <generator object <genexpr> at 0x0000013EAD0…

linux系统---防火墙

目录 一、防火墙的认识 1.防火墙定义 2.防火墙分类 二、Linux系统防火墙 1.Netfilter 2.防火墙工具介绍 2.1iptables 2.2firewalld 2.3nftables 2.4netfilter的五个勾子函数和报文流向 2.4.1五个勾子 2.4.2三种报文流向 3.iptables 3.1iptables概述 3.2iptables…