【论文阅读】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) 

您只需要了解以下摘要:

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

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

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

相关文章

先电2.4的openstack搭建

先电2.4版本的openstack,前期虚拟机部署参考上一篇2.2版本,基本步骤是一样的,准备两个镜像文件CentOS-7.5-x86_64-DVD-1804.iso,XianDian-IaaS-V2.4.iso [rootcontroller ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777…

华为OD机试 - 小扇和小船的数字游戏 - 二进制(Java 2024 C卷 200分)

华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷C卷)》。 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试…

论文笔记(四十五)Attention Is All You Need

Attention Is All You Need 文章概括摘要1. 介绍2. 背景3. 模型架构3.1 编码器和解码器堆栈3.2 Attention3.2.1 按比例点积Attention3.2.2 Multi-Head Attention3.2.3 注意力在模型中的应用 3.3 定位前馈网络3.4 嵌入与 Softmax3.5 位置编码 4 为什么 Self-Attention5. Trainin…

ssm104园区停车管理系统+jsp

园区停车管理系统的设计与实现 摘 要 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管…

P9422 [蓝桥杯 2023 国 B] 合并数列

P9422 [蓝桥杯 2023 国 B] 合并数列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 用队列即可 当两个队列队首&#xff1a;a b &#xff0c;弹出 当a < b&#xff0c;把a加给其后一个元素&#xff0c;弹出a 当b < a&#xff0c;把b加给其后一个元素&#xff0c;弹出…

[初阶数据结构】时间复杂度与空间复杂度

前言 &#x1f4da;作者简介&#xff1a;爱编程的小马&#xff0c;正在学习C/C&#xff0c;Linux及MySQL。 &#x1f4da;本文收录于初阶数据结构系列&#xff0c;本专栏主要是针对时间、空间复杂度&#xff0c;顺序表和链表、栈和队列、二叉树以及各类排序算法&#xff0c;持续…

无人机+无人车:自组网协同技术及应用前景详解

无人车&#xff0c;也被称为自动驾驶汽车、电脑驾驶汽车或轮式移动机器人&#xff0c;是一种通过电脑系统实现无人驾驶的智能汽车。这种汽车依靠人工智能、视觉计算、雷达、监控装置和全球定位系统协同合作&#xff0c;使得电脑可以在没有任何人类主动操作的情况下&#xff0c;…

C++基础——输入输出(文件)

一、标准输入输出流 C 的输入输出是程序与用户或外部设备&#xff08;如文件、网络等&#xff09;之间交换信息的过程。 C 提供了丰富的标准库来支持这种交互&#xff0c;主要通过流的概念来实现。 流&#xff1a;抽象概念&#xff0c;表示一连串的数据&#xff08;字节或字…

typescript:vscode的settings配置文件配置ts语法提示

typescript&#xff1a;vscode的settings配置文件配置ts语法提示 1 找到vscode左下角的齿轮按钮 2 点击Settings&#xff08;或者快捷键ctrl,&#xff09;&#xff1a; 点击右上角的Open Settings(JSON)按钮打开配置文件&#xff1a; 或者ctrlshiftp&#xff0c;搜索settings&…

展开说说:Android实现多线程几种方式

1、线程是什么 关于线程&#xff0c;Android开发经常遇到的一个和线程相关的异常报错&#xff1a;NetworkOnMainThreadException&#xff0c;因为网络请求不可以运行在主线程&#xff08;又称UI线程&#xff09;。和网络请求一样的还有I/O操作、数据库操作等耗时任务一样都只能…

奈氏准则和香农定理

一、奈奎斯特和香农 哈里奈奎斯特&#xff08;Harry Nyquist&#xff09;(左) 克劳德艾尔伍德香农&#xff08;Claude Elwood Shannon&#xff09;(右) 我们应该在心里记住他们&#xff0c;记住所有为人类伟大事业做出贡献的人&#xff0c;因为他们我们的生活变得越来越精彩&…

使用xshell工具连接ubuntu的root账户被拒绝的解决方法

问题描述&#xff1a; 我在使用xshell工具远程连接Ubuntu虚拟机的过程中&#xff0c;如果连接的是的普通用户则xshell工具可以正常连接&#xff0c;但是当我向连接ubuntu系统的root用户&#xff0c;即便是密码输入正确但还是不能连接成功。不能连接成功的截图如下&#xff1a; …

从零开始学AI绘画,万字Stable Diffusion终极教程(二)

【第2期】关键词 欢迎来到SD的终极教程&#xff0c;这是我们的第二节课 这套课程分为六节课&#xff0c;会系统性的介绍sd的全部功能&#xff0c;让你打下坚实牢靠的基础 1.SD入门 2.关键词 3.Lora模型 4.图生图 5.controlnet 6.知识补充 在第一节课里面&#xff0c;我们…

PS 2018

软件安装 文件太大&#xff0c;分批上传了&#xff0c;后续下载下来文件目录是这样的&#xff0c; 三个文件夹.7z 分批上传&#xff0c;exe也压缩分批上传&#xff0c; 其中products文件夹太大&#xff0c;里面子目录继续压缩分批上传 都下好了&#xff0c;就exe执行安装就行…

如何使用提示测试为LLMs构建单元测试?

原文地址&#xff1a;how-to-build-unit-tests-for-llms-using-prompt-testing 确保您的人工智能交付&#xff1a;快速测试完美生成应用程序的基本指南 2024 年 4 月 26 日 如果你曾经编写过软件&#xff0c;你就会知道测试是开发过程中必不可少的一部分。特别是单元测试&#…

Git推送本地项目到gitee远程仓库

Git 是一个功能强大的分布式版本控制系统&#xff0c;它允许多人协作开发项目&#xff0c;同时有效管理代码的历史版本。开发者可以克隆一个公共仓库到本地&#xff0c;进行更改后将更新推送回服务器&#xff0c;或从服务器拉取他人更改&#xff0c;实现代码的同步和版本控制。…

BUUCTF:Web 解析(一)

前言 Buuctf Web 是一个在线安全挑战平台&#xff0c;旨在提高参与者对网络安全的理解和实践能力。本文将详细介绍 Buuctf Web 的特点、挑战和机遇&#xff0c;帮助读者更好地了解这一领域。 一、Buuctf Web 的特点 多样化的挑战场景&#xff1a;Buuctf Web 提供了多种挑战场…

金属表面粗糙度对信号的影响

在进行PCB的传输线设计时&#xff0c;如果希望仿真结果更加贴合于实际的效果&#xff0c;就需要考虑很多的附加因素&#xff0c;比如&#xff0c;真实的叠构参数、介电常数、损耗角正切值、蚀刻因子、金属表面粗糙度、玻纤效应等&#xff0c;在常规的信号仿真中&#xff0c;前三…

springboot整合mybatis配置多数据源(mysql/oracle)

目录 前言导入依赖坐标创建mysql/oracle数据源配置类MySQLDataSourceConfigOracleDataSourceConfig application.yml配置文件配置mysql/oracle数据源编写Mapper接口编写Book实体类编写测试类 前言 springboot整合mybatis配置多数据源&#xff0c;可以都是mysql数据源&#xff…