【论文阅读】Tutorial on Diffusion Models for Imaging and Vision

1.The Basics: Variational Auto-Encoder

1.1 VAE Setting

自动编码器有一个输入变量x和一个潜在变量z

Example. 获得图像的潜在表现并不是一件陌生的事情。回到jpeg压缩,使用离散余弦变换(dct)基φn对图像的底层图像/块进行编码。如果你给我们一个imagex,我们会给你一个系数向量z。从z我们可以做逆变换来恢复(即解码)图像。因此,系数向量z是潜在码。编码器是dct变换,解码器是逆dct变换

变分 variational 这个名字来源于我们用概率分布来描述x和z的因子。我们更感兴趣的不是求助于将x转换为z的确定性过程,而是确保分布p(x)可以映射到所需的分布p(z),并向后返回到p(x)

  • p(x):x的分布。如果我们知道的话,我们早就成为亿万富翁了。整个星系的扩散模型都是为了找到从p(x)中提取样本的方法
  • p(z):潜在变量的分布。因为我们都很懒惰,所以让我们把它设为零均值单位方差高斯p(z)=n(0,i)
  • p(z|x):与编码器相关的条件分布,它告诉我们给定x时z的可能性,我们无法访问它。P (z|x)本身不是编码器,但编码器必须做一些事情,以便它与P (z|x)保持一致
  • p(x|z):与解码器相关的条件分布,它告诉我们在给定z的情况下得到x的后验概率,同样,我们无法访问它。

Example. 

考虑根据高斯混合模型分布的随机变量x,其中潜变量z∈{1,…,k}表示簇恒等式,使得p_Z(k)=\mathbb{P}[Z=k]=\pi_k for k=1...k.我们假设\sum_{k=1}^{K}\pi_{k}=1。那么,如果我们被告知只需要看第k个簇,给定z的x的条件分布是p_{\mathbf{X}|Z}(\mathbf{x}|k)=\mathcal{N}(\mathbf{x}|\mu_{k},\sigma_{k}^{2}\mathbf{I}).

x的边际分布可以用总概率定律找到p_{\mathbf{X}}(\mathbf{x})=\sum_{k=1}^Kp_{\mathbf{X}|Z}(\mathbf{x}|k)p_Z(k)=\sum_{k=1}^K\pi_k\mathcal{N}(\mathbf{x}|\boldsymbol{\mu}_k,\sigma_k^2\mathbf{I}).

因此,如果我们从px(x)开始,编码器的设计问题是构建一个神奇的编码器,使得对于每个样本x~px(x,潜在编码将是z∈{1,…,k},分布为z~pz(k)。为了说明编码器和解码器是如何工作的,让我们假设均值和方差是已知的并且是固定的。否则,我们将需要通过em算法来估计均值和方差。这是可行的,但繁琐的方程会破坏本说明的目的

Encoder:我们如何从x中获得z?这很容易,因为在编码器处,我们知道px(x)和z(k)。假设你只有两个类z∈{1,2}。实际上,你只是在做一个二进制决定,决定样本x应该属于哪里。有很多方法可以做二进制决定。最大后验maximum-a-posteriori:

Decoder:在解码器方面,如果我们得到一个潜在代码z∈{1,…,k},神奇的解码器只需要返回一个样本x,它是从p_{\mathbf{X}|Z}(\mathbf{x}|k)=\mathcal{N}(\mathbf{x}|\mu_{k},\sigma_{k}^{2}\mathbf{I})中提取的。不同的z将给出k个混合物组分中的一个。如果我们有足够的样本,总体分布将遵循高斯混合。

如果我们想找到神奇的编码器和解码器,我们必须有办法找到这两个条件分布

在vae的文献中,人们提出了一个考虑以下两种代替分布 proxy distributions 的想法:

  • q_{\boldsymbol{\phi}}(\mathbf{z}|\mathbf{x}):p(z|x)的代理。我们将使它成为高斯。为什么是高斯的?没有特别好的理由。
  • p_{\boldsymbol{\theta}}(\mathbf{x}|\mathbf{z}):p(x|z)的代理。信不信由你,我们也会把它变成高斯的。但这个高斯的作用与高斯q_{\boldsymbol{\phi}}(\mathbf{z}|\mathbf{x})略有不同。虽然我们需要估计高斯q_{\boldsymbol{\phi}}(\mathbf{z}|\mathbf{x})的均值和方差,但我们不需要估计高斯p_{\boldsymbol{\theta}}(\mathbf{x}|\mathbf{z})的任何值。相反,我们将需要一个解码器神经网络来将z转换为x。高斯p_{\boldsymbol{\theta}}(\mathbf{x}|\mathbf{z})将用于通知我们生成的图像x有多好。

“正向 forward ”关系由p(z|x)指定(并由qφ(z|x)近似),而“反向”关系由p(x|z)指定(且由pθ(x|z)近似)。

Example. 

假设我们有一个随机变量x和一个潜变量z:\begin{aligned}&\mathbf{x}\sim\mathcal{N}(\mathbf{x}\mid\mu,\sigma^{2}),\\&\mathbf{z}\sim\mathcal{N}(\mathbf{z}\mid0,1).\end{aligned}

我们的目标是建造一个VAE。(什么?!这个问题有一个平凡的解,其中z=(x−μ)/σ,x=μ+σz。你是绝对正确的。但请遵循我们的推导,看看VAE框架是否合理。)

我们的意思是要构造两个映射“encode”和“decode”。为了简单起见,我们假设这两个映射都是仿射变换 affine transformations:

我们懒得找出联合分布p(x,z),也懒得找出条件分布p(x|z)和p(z|x)。但我们可以构造代理分布qφ(z|x)和pθ(x|z)。既然我们可以自由选择qφ和pθ应该是什么样子,那么我们考虑下面两个高斯如何

对于qφ(z|x):如果给定x,我们当然希望编码器根据我们选择的结构对分布进行编码。由于编码器结构是ax+b,所以qφ(z|x)的自然选择是具有平均值ax+b。方差被选择为1,因为我们知道编码样本z应该是单位方差。

类似地,对于pθ(x|z):如果我们给定z,解码器必须采用cz+d的形式,因为这就是我们设置解码器的方式。方差是c,这是我们需要计算的一个参数。

1.2 Evidence Lower Bound

我们如何使用这两个代理分布来实现确定编码器和解码器的目标?如果我们将φ和θ作为优化变量,那么我们需要一个目标函数(或损失函数),以便我们可以通过训练样本来优化φ和θ。为此,我们需要建立一个关于φ和θ的损失函数。我们在这里使用的损失函数被称为证据下界 Evidence Lower BOund(ELBO)

让我们看看elbo是什么意思以及它是如何派生的

简而言之,elbo是先前分布log p(x)的下界,因为我们可以证明

其中不等式源自kl散度总是非负的事实。因此,elbo是logp(x)的有效下界。由于我们从来没有访问过logp(x),如果我们以某种方式访问过elbo,并且elbo是一个很好的下界,那么我们可以有效地最大化elbo,以实现最大化logp(x)的目标,这是黄金标准。

正如你从方程和图2中看到的,当我们的代理qφ(z|x)可以精确地匹配真实分布p(z|x)时,不等式将变成等式。因此,游戏的一部分是确保qφ(z|x)接近p(z|x)。

Proof of Eqn (3).

这里的全部技巧是使用我们的神奇代理qφ(z|x)来绕过p(x)并导出边界。

最后一个等式:\int a\times p_Z(z)dz=\mathbb{E}[a]对于任意随机变量Z和标量a,有\mathbb{E}[a]=a

我们已经得到了方程\mathbb{E}_{q_{\phi}(\mathbf{z}|\mathbf{x})}[\cdot]。只需多走几步。让我们使用bayes定理,该定理指出p(\mathbf{x},\mathbf{z})=p(\mathbf{z}|\mathbf{x})p(\mathbf{x})

 我们现在有elbo。但是这个elbo仍然不太有用,因为它涉及p(x,z),这是我们无法访问的

让我们仔细看看elbo:

其中我们不可访问的p(x|z)替换为其代理p_{\boldsymbol{\theta}}(\mathbf{x}|\mathbf{z})

在方程(6)中存在两个项:

  • Reconstruction  重建:关于解码器,如果我们将潜在的z馈送到解码器中,我们希望解码器产生好的图像x。因此,我们希望最大化log pθ(x|z)。它类似于最大似然,其中我们想要找到模型参数以最大化观察图像的似然。这里的期望是关于样本z(以x为条件)而取的。这并不奇怪,因为样本z用于评估解码器的质量。它不能是任意的噪声矢量,而是有意义的潜在矢量。因此,z需要从q_{\boldsymbol{\phi}}(\mathbf{z}|\mathbf{x})中采样
  • Prior Matching 先验匹配:第二项是编码器的kl散度。我们希望编码器将x转换为潜在向量z,这样潜在向量将遵循我们选择的分布\mathcal{N}(0,\mathbf{I})。为了更一般,我们将p(z)写为目标分布。因为kl是一个距离(当两个分布变得更不相似时它会增加),我们需要在前面加一个负号,这样当两个分布变得更相似时它就会增加

Example. 

我们从之前的推导中知道

为了确定θ和φ,我们需要最小化先验匹配误差并最大化重建项。对于先前的匹配,我们知道

使KL散度最小,因此,

对于reconstruction项,我们知道

由于e[z] = 0, var[z] = 1,因此当c = σ, d = μ时,项最大(负的项分数最小)。综上所述,编码器和解码器参数为

重构项和先验匹配项如图3所示。在这两种情况下,在训练过程中,我们假设我们可以访问z和x,其中z需要从qφ(z|x)中采样。然后,对于重建,我们估计θ以最大化pθ (x|z)。对于先验匹配,我们找到φ以最小化kl散度。优化可能具有挑战性,因为如果更新φ,分布qφ(z|x)将发生变化

1.3 Training VAE

既然我们理解了elbo的含义,我们就可以讨论如何训练vae了。为了训练vae,我们需要地面真值对(x,z)。我们知道如何得到x;它只是来自数据集的图像。但相应地,z应该是什么?

让我们来谈谈编码器。我们知道z是由分布qφ(z|x)生成的。我们还知道qφ(z|x)是高斯的。假设这个高斯有一个均值μ和一个协方差矩阵\sigma^{2}\mathrm{I}(哈!又是我们的懒惰!我们不使用一般的协方差矩阵,而是假设方差相等)。

棘手的部分是如何从输入图像x中确定μ和\sigma^{2}\mathrm{I}。我们构建了一个深度神经网络,这样

因此,样本z(ℓ)(ℓ 表示训练集中的第ℓ个训练样本)可以从高斯分布中采样

这个想法总结在图4中,我们使用神经网络来估计高斯参数并从高斯中提取样本。注意\mu_{\phi}(\mathbf{x}^{(\ell)})\sigma_{\phi}^{2}(\mathbf{x}^{(\ell)})是x的函数(ℓ). 因此,对于不同的\mathrm{x}^{(\ell)}我们将有一个不同的高斯

Remark.

对于任何高维高斯分布\mathrm{x}\sim\mathcal{N}(\mathrm{x}|\mu,\Sigma),采样过程都可以通过白噪声的变换来完成

半矩阵 half matrix \Sigma^{\frac12}可以通过特征分解或cholesky分解得到。对于对角矩阵\Sigma=\sigma^{2}\mathbf{I},以上简化为

 我们来谈谈解码器。该解码器通过神经网络实现。为简便起见,我们将其定义为decode_{\theta},其中θ表示网络参数。解码器网络的工作是取一个潜在变量z并生成一个图像\widehat{\mathrm{x}}:

现在让我们再做一个(疯狂的)假设:解码图像\widehat{\mathrm{x}}和真实图像x之间的误差是高斯分布的。(等等,又是高斯分布?!)我们假设:

那么,可以得出分布pθ (x|z)为

D是x的维数

这个方程表明,elbo中似然项的最大值实际上就是解码图像和真实图像之间的l2损失。其思想如图5所示。

1.4 Loss Function

一旦你理解了编码器和解码器的结构,损失函数就很容易理解了。我们通过蒙特卡罗模拟近似期望:

其中\mathbf{x}^{(\ell)}是训练集中的第L个样本,\mathbf{z}^{(\ell)}是从\mathbf{z}^{(\ell)}\sim q_{\phi}(\mathbf{z}|\mathbf{x}^{(\ell)})采样的,分布qθ是

Training loss of VAE:

其中\{\mathbf{x}^{(\ell)}\}_{\ell=1}^{L}为训练数据集中的地面真值图像,\mathbf{z}^{(\ell)}从式(7)中采样。

 kl散度项中的z不取决于ℓ 因为我们正在测量两个分布之间的kl散度。这里的变量z是一个伪变量。

我们需要澄清的最后一点是kl散度。由于,我们本质上得到两个高斯分布;如果你去维基百科,你可以看到两个d维高斯分布的kl散度是

通过考虑我们可以证明kl散度有一个解析表达式

其中d是向量z的维数。因此,总损失函数eqn(12)是可微的。因此,我们可以通过反向传播梯度来端到端地训练编码器和解码器

1.5 Inference with VAE

为了进行推理,我们可以简单地将潜在向量z(从p(\mathbf{z})=\mathcal{N}(0,\mathbf{I}))采样)放入解码器decode_{\theta}中,得到图像x;见图6。

2 Denoising Diffusion Probabilistic Model (DDPM) 

您只需要了解以下摘要:

扩散模型是增量更新,其中整体的组装为我们提供了编码器-解码器结构。从一种状态到另一种状态的转换是通过去噪器实现的。

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

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

相关文章

4 Spring AOP

目录 AOP 简介 传统开发模式 先来看一个需求 解决方案 AOP 图示 Spring 启用 AspectJ 基于 xml 配置 创建 pom.xml 创建 UserService 借口和 UserServiceImpl实现类 创建 LogAdvice 日志通知 创建 log4j.properties 重点:创建 spring-context-xml.xml 配…

【深度学习】第二门课 改善深层神经网络 Week 2 3 优化算法、超参数调试和BN及其框架

🚀Write In Front🚀 📝个人主页:令夏二十三 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:深度学习 💬总结:希望你看完之后,能对…

Go语言基础语法(一):变量的声明与赋值

四种声明 变量声明 Go语言是静态类型语言,因此变量(variable)是有明确类型的,编译器也会检查变量类型的正确性。在数学概念中,变量表示没有固定值且可改变的数。但从计算机系统实现角度来看,变量是一段或…

Simulink|【免费】虚拟同步发电机(VSG)惯量阻尼自适应控制仿真模型

主要内容 该模型为simulink仿真模型,主要实现的内容如下: 随着风力发电、光伏发电等新能源发电渗透率增加,电力系统的等效惯量和等效阻尼逐渐减小,其稳定性问题变得越来越严峻。虚拟同步发电机(VSG)技…

win10部署本地大模型langchain+ollama

一、环境 windows10、Python 3.9.18、langchain0.1.9 二、ollama下载 Download Ollama on Windows 0.1.33版本链接https://objects.githubusercontent.com/github-production-release-asset-2e65be/658928958/35e38c8d-b7f6-48ed-8a9c-f053d04b01a9?X-Amz-AlgorithmAWS4-H…

ubuntu搭建node私库Verdaccio

ubuntu搭建node私库Verdaccio Verdaccio 是一个轻量级的私有 npm 代理注册服务器,它是开源的,可以帮助你设置和维护企业内部的 npm 包的存储库。使用 Verdaccio 可以让你完全控制包的发布流程、依赖关系以及访问策略。这篇文章将指导你如何在 Ubuntu 系…

SQL注入漏洞扫描---sqlmap

what SQLMap是一款先进的自动执行SQL注入的审计工具。当给定一个URL时,SQLMap会执行以下操作: 判断可注入的参数。判断可以用哪种SQL注入技术来注入。识别出目标使用哪种数据库。根据用户的选择,读取哪些数据库中的数据。 更详细语法请参考…

领域驱动设计(DDD)笔记(三)后端工程架构

文章链接 领域驱动设计(DDD)笔记(一)基本概念-CSDN博客领域驱动设计(DDD)笔记(二)代码组织原则-CSDN博客领域驱动设计(DDD)笔记(三)后端工程架构-CSDN博客前导 领域驱动设计(Domain Driven Design,简称DDD)是业内主导的业务工程理论。它在各中权威人士被广泛讨论…

leetcode_43.字符串相乘

43. 字符串相乘 题目描述:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 示例 1: 输入: num1 &q…

好用的AI工具推荐与案例分析

你用过最好用的AI工具有哪些? 简介:探讨人们在使用AI工具时,最喜欢的和认为最好用的工具是哪些,展示AI技术的实际应用和影响。 方向一:常用AI工具 在选择常用AI工具时,可以根据不同的应用场景和需求来挑选…

【1小时掌握速通深度学习面试3】RNN循环神经网络

目录 12.描述循环神经网络的结构及参数更新方式,如何使用神经网络对序列数据建模? 13.循环神经网络为什么容易出现长期依赖问题? 14.LSTM 是如何实现长短期记忆功能的? 15.在循环神经网络中如何使用 Dropout ? 16.如何用循环神经网络实现 Seg2Seq 映射? …

手撕vector的模拟实现

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…

Vitis HLS 学习笔记--HLS眼中的完美循环嵌套

目录 1. 简介 2. 示例 2.1 不完美循环 2.2 完美循环 2.3 HLS 眼中的循环 3. 总结 1. 简介 在处理嵌套循环时(HDL或HLS工具中),优化循环结构对于实现最佳性能至关重要。嵌套循环的性能优化直接影响着计算的时延和资源利用率。创建完美嵌…

光头强:IBM收购HashCorp (Terraform)有多大意义?

StrongBear公司在光头强强总以及合伙人熊大熊二的艰苦努力下,最近公司进了一次扩容。甚至将原来一些甲方的研发人员也拉入旗下,其中就包括与熊二共事多年的小玲子以及小强同学。 光头强也注意到最近在IT软件领域,频频发生一些并购事件。比如…

SAP_SD模块-销售批次策略应用记录

一、销售批次查找策略的重要性 批次查找策略允许企业在销售过程中根据预定义的规则自动选择最适合的产品批次。这种策略的实施,对企业尤其是那些涉及到严格产品质量与安全标准的行业(如食品、药品及化工产品)具有以下几方面的重要意义&#x…

不尝试一下?计算机领域两大赛事来了!!

前言 最近,熊二新来的同事小强比较关注国内的一些赛事信息。这不,近期有两大赛事。这两大赛事,主要还是面向高校学生的。一个是搞网络安全方向的: 第二届京麒CTF挑战赛,另一个是搞数据库方向的: 2024年全国大学生计算机系统能力大…

【大数据】学习笔记

文章目录 [toc]NAT配置IP配置SecureCRT配置PropertiesTerminal Java安装环境变量配置 Hadoop安装修改配置文件hadoop-env.shyarn-env.shslavescore-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xml 环境变量配置 IP与主机名映射关系配置hostname配置映射关系配置 关闭防火墙…

基于Springboot的校运会管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的校运会管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&a…

第2章 WebServer进阶

2.1 使用多线程处理多用户请求 2.1.1 多线程Socket通信 在上一章的案例中,服务端显然只能处理一次浏览器请求,请求一次浏览器端就结束程序。如何解决这个问题呢?可以采用多线程Socket通信技术,解决多用户并发请求。 在多线程Sock…

十四、网络编程

目录 一、二、网络通讯要素三、IP和端口号四、网络协议1、网络通信协议2、TCP/IP协议簇1)TCP协议2)UDP 3、Socket 五、TCP网络编程1、基于Socket的TCP编程1)客户端创建socket对象2) 服务器端建立 ServerSocket对象 2、UDP网络通信…