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

news2025/1/13 7:36:08

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.coloradmin.cn/o/1641481.html

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

相关文章

【Redis面试题】Redis常见的一些高频面试题

分享几个Redis入门级常见面试过程中遇到的题目! 你项目中哪里使用到了redis?可以讲一讲嘛 这个题目无论是大公司还是小公司都经常考,建议大家根据自己的项目做总结 redis的几种基础数据结构 redis为什么那么快? 1.基于内存实现:我们都知道内存读写是…

50个前端实战项目之04:隐藏的搜索小组件

大家好,我是宝哥。 今天讲50个前端实战项目之04:隐藏的搜索小组件。 源码下载地址 https://github.com/bradtraversy/50projects50days/tree/master/hidden-search 前端实战项目系列正在更新:04/50 01:可展开卡片02:进…

Springboot+Vue项目-基于Java+MySQL的图书商城管理系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

中国各省地图(高清晰一亿像素)

hello,我是小索奇 不知道大家有没有使用地图的习惯,反正小索奇去一个地方,就会使用地图,也会经常看世界地图,因为地理学得不好,有时候也记不住部分省份在哪里。所以会经常使用到地图 但去百度搜索里面寻找…

windows驱动开发-PNP管理器

PNP技术是由Microsoft提出的,英文Plug and play的缩写,中译即插即用,意思是系统自动侦测周边设备和板卡并自动安装设备驱动程序,做到插上就能用,无须人工干预,是Windows自带的一项技术。所谓即插即用是指将…

阿里云API网关 产品的使用笔记

阿里云的产品虽多,还是一如既往的一用一个看不懂,该模块的文档依旧保持“稳定”发挥,磕了半天才全部跑通。 用阿里云API网关的原因是,在Agent中写插件调用API的时候,需要使用Https协议,又嫌搞备案、证书等事…

关于YOLO8学习(三)训练自定义的数据集

前文 关于YOLO8学习(一)环境搭建,官方检测模型部署到手机 关于YOLO8学习(二)数据集收集,处理 简介 本文将会讲解: (1)如何通过PyCharm,进行训练数据,实现人脸检测 开发环境 win10、python 3.11、cmake、pytorch2.0.1+cu117、pycharm、ultralytics==8.0.134 要特…

解决layui的bug 在layui tree 组件中 禁用选中父节点后自动选中子节点功能

最近做权限管理后台,用了layui tree 组件,发现选中了父节点后,自动选中了子节点。不满足现实业务需求。所以微调了下源代码。 在用树形组件中,在用文档中 tree.setChecked(demoId, [2, 3]); //批量勾选 id 为 2、3 的节点 用这句…

Python 贪吃蛇

文章目录 效果图:项目目录结构main.pygame/apple.pygame/base.pygame/snake.pyconstant.py 效果图: 项目目录结构 main.py from snake.game.apple import Apple # 导入苹果类 from snake.game.base import * # 导入游戏基类 from snake.game.snake im…

基于SpringBoot的饭店外卖平台的设计与实现

项目描述 这是一款基于SpringBoot的饭店外卖平台的系统 模块描述 用户端 登录 首页 商家信息 点餐 菜品列表 下单 订单列表 账号下单列表 个人中心 个人资料 修改信息 评论管理 评论菜品 查看评论 打赏骑手 打赏骑手 管理员 登录 菜品管理 修改 下架 订单列表 下单记录 菜品管理…

Json数据概念及C# 环境下的序列化、反序列化操作

什么是Json? JSON的全称是JavaScript Object Notation,是一种轻量级的数据交换格式,主要用于数据的序列化和交互。常用于Web中,其他领域也经常出现JSON的身影。 与xml相比,更快,更小,更容易解析…

银河麒麟桌面版开机后网络无法自动链接 麒麟系统开机没有连接ens33

1.每次虚拟机开机启动麒麟操作系统,都要输入账号,密码。 进入点击这个ens33 内网才连接 2. 如何开机就脸上呢? 2.1. 进入 cd /etc/sysconfig/network-scripts 2.2 修改参数 onbootyes 改为yes 2.3 重启即可 a. 直接重启机器查看是否正常&…

搜好货API接口:快速获取商品列表的利器

搜好货商品列表API接口允许开发者根据关键字搜索并获取相关的商品列表数据。接口支持多种参数配置,可以根据需求灵活调整搜索条件和结果返回格式。 点击获取key和secret API接口请求说明 请求地址:https://api.souhaohuo.com/goods/search请求方法&…

第四篇:记忆的迷宫:探索计算机存储结构的奥秘与创新

记忆的迷宫:探索计算机存储结构的奥秘与创新 1 引言 1.1 计算机存储系统的发展与重要性 在现代计算技术中,存储系统承担着非常关键的角色,它不仅负责信息的持久保存,同时确保高效的数据访问速度,影响着整体系统性能的…

C++奇迹之旅:C++初阶模版

文章目录 📝泛型编程🌠 函数模板🌉函数模板概念🌉函数模板格式🌉函数模板的原理 🌠函数模板的实例化🌉模板参数的匹配原则 🌠类模板🌉 类模板的定义格式🌉类模…

用vim或gvim编辑程序

vim其实不难使用&#xff0c;学习一下就好了。简单功能很快学会。它有三种模式&#xff1a;命令模式&#xff0c;编辑模式&#xff0c;视模式。打开时在命令模式。在命令模式下按 i 进入编辑模式&#xff0c;在编辑模式下按<Esc>键退出编辑模式。在命令模式按 :wq 保存文…

STM32入门学习之DMA

1.直接存储访问DMA(Direct Memory Access)&#xff1a;DMA传输不需要CPU的参与&#xff0c;直接在内存和I/O设备间开辟了一条新的数据传输通道&#xff0c;不仅提高数据传输的速率&#xff0c;还因为不需要CPU的干预&#xff0c;从而提高了CPU的利用率。(注&#xff1a;文中的资…

从永远到永远-和弦-挂留和弦

挂留和弦 1.概念2.指型1.Xsus2和弦2.Xsus4和弦 3.应用 1.概念 该篇说下和弦中的“渣男”、“绿茶”&#xff0c;挂留和弦。 挂留&#xff08;suspended&#xff09;和弦是将三和弦的三音替换成大二度或纯四度音形成的&#xff0c;包括挂留二和弦、挂留四和弦两种。 三音是一个…

【Android学习】简易计算器的实现

1.项目基础目录 新增dimens.xml 用于控制全部按钮的尺寸。图片资源放在drawable中。 另外 themes.xml中原来的 <style name"Theme.Learn" parent"Theme.MaterialComponents.DayNight.DarkActionBar">变为了&#xff0c;加上后可针对button中增加图片…

【nature review】用于非易失性射频开关技术的新兴存储电子器件

这篇文章是一篇关于非挥发性射频&#xff08;RF&#xff09;开关技术的综述文章&#xff0c;发表在《Nature Reviews Electrical Engineering》2024年1月的期刊上。文章详细介绍了新兴的基于记忆电子技术的RF开关技术&#xff0c;特别是在二维&#xff08;2D&#xff09;材料方…