【Gan教程 】 什么是变分自动编码器VAE?

名词解释:Variational Autoencoder(VAE)

一、说明

         为什么深度学习研究人员和概率机器学习人员在讨论变分自动编码器时会感到困惑?什么是变分自动编码器?为什么围绕这个术语存在不合理的混淆?本文从两个角度理解变分自动编码器(VAE):深度学习和图形模型。

        在概念和语言上存在差距。神经网络和概率模型的科学没有共享语言。我的目标是弥合这一想法差距,允许这些领域之间进行更多的协作和讨论,并提供一致的实现(Github链接)。如果这里的许多单词对您来说是新的,请跳转到词汇表。

        变分自动编码器很酷。它们使我们能够设计复杂的数据生成模型,并将它们拟合到大型数据集中。他们可以生成虚构名人面孔的图像和高分辨率数字艺术品。

应用于人脸的变分自动编码器。
由变分自动编码器生成的虚构名人面孔 

        这些模型还在图像生成和强化学习中产生最先进的机器学习结果。变分自动编码器(VAEs)由Kingma等人和Rezende等人于2013年定义。

        我们如何创建一种讨论变分自动编码器的语言?让我们首先使用神经网络来考虑它们,然后在概率模型中使用变分推理。

二、神经网络视角

        在神经网络语言中,变分自动编码器由编码器、解码器和损失函数组成。

编码器将数据压缩到潜在空间 (Z) 中。解码器在给定隐藏表示的情况下重建数据。

        编码器是一个神经网络。它的输入是一个数据点 x,其输出 是隐藏的表示形式z,并且具有权重和偏差θ. 具体来说,让我们说x是一张 28 x 28 像素的手写照片 数。编码器对以下数据进行“编码”:784784-维度成一个 潜在(隐藏)表示空间z,远小于784784尺寸。这通常被称为“瓶颈”,因为编码器 必须学会将数据有效地压缩到这个低维中 空间。让我们表示编码器q_{\theta}(x|z).我们注意到, 低维空间是随机的:编码器将参数输出到q_{\theta}(x|z) ,这是一个高斯概率密度。我们可以样品 从此分布中获取表示的噪声值 z.

        解码器是另一个神经网络。它的输入是表示 z它 将参数输出到数据的概率分布中,并且具有 权重和偏差 φ.解码器表示为q_{ \varphi }(x|z) . 以手写数字为例运行,假设照片是黑色的,并且 白色,表示每个像素为00或11.概率分布 然后可以使用伯努利分布表示单个像素。这 解码器获取数字的潜在表示作为输入 z和输出784784伯努利参数,每个参数对应一个784-784图像中的像素。 解码器“解码”实值数字 z到784784实际价值 之间的数字00和11.原件信息784-784-维向量无法完美传输,因为解码器只能访问信息的摘要(以小于784x784-维度向量 z).丢失了多少信息?我们测量 这使用重建对数似然log( p_\phi (x|z)).的 单位是 NAT。这个指标告诉我们解码器学会了多大的效率 重建输入图像 x鉴于其潜在的代表性 z.

        变分自编码器的损失函数是带有正则化器的负对数似然。由于不存在所有数据点共享的全局表示,因此我们可以将损失函数分解为仅依赖于单个数据点的项li; 总体损失函数是:\sum ^N_{i=1}l_i,其中,l_i对应的是x_i对应的损失函数。

        第一项是重建损失,或预期的负对数似然 的我-th数据点。期望是针对 编码器在表示上的分布。该术语鼓励 解码器来学习重建数据。如果解码器的输出没有 很好地重建数据,从统计学上讲,我们说解码器参数化了 对真实值没有太多概率质量的似然分布 数据。例如,如果我们的目标是对黑白图像和我们的模型进行建模 在实际存在黑点的地方存在高概率 白点,这将产生最糟糕的重建。穷 重建将产生很大的损失函数成本。

        第二个术语是我们加入的正则表达式(我们将看到它是如何派生的 后来)。这是编码器之间的Kullback-Leibler背离度 分配q_{\theta } (z|x)pz).这种背离措施 使用时丢失的信息量(以 NAT 为单位)q代表p.这是衡量qp接近程度的一种标准.

        在变分自编码器中,p被指定为均值为零且方差为 1 的标准正态分布,或p(z)=Normal(0,1).如果编码器输出表示z与标准正态分布的 z 不同的,它将在损失中受到惩罚。这个正则项术语的意思是“保持表示每个数字的 z 足够多样化’。如果我们不包含正则化器,编码器可以学会作弊并为每个数据点提供欧几里德空间不同区域中的表示。

        这很糟糕,因为然后两个相同数字的图像(例如由不同的人写的 2, 一个 2_{alice}​和2_{blob}​) 最终可能会得到非常不同的表示形式:z_{alice}​,z_{blob}​.我们想要的表示空间 z为了有意义,所以我们惩罚这种行为。这具有使相似数字的表示保持紧密对齐的效果(例如,使数字二的表示z_{alice}​,z_{blob}​,z_{ali}z​保持足够近)。

        如果编码器输出表示z 与标准正态分布的 z 不同,它将在损失中受到惩罚。

        我们使用梯度下降训练变分自动编码器,以优化编码器和解码器参数的损耗 θ和 φ.对于具有步长的随机梯度下降 ρ,编码器参数使用\theta \leftarrow \theta - \frac{\partial \theta }{\partial l}l​解码器也以类似方式更新。

2.1 概率模型透视

        现在让我们从概率模型的角度考虑变分自动编码器。请暂时忘记你所知道的关于深度学习和神经网络的一切。将以下概念与神经网络分开思考将澄清事情。最后,我们将带回神经网络。

        在概率模型框架中,变分自动编码器包含数据的特定概率模型 x和潜在变量 z.我们可以将模型的联合概率写为 p(x,z)=px∣ z)pz).生成过程可以编写如下。

        对于每个数据点i:

  • 绘制潜在变量 z_i \sim p(z)
  • 绘制数据点 x_i\sim p(x\mid z)

        我们可以将其表示为图形模型:

        模型在变分自动编码器中的图形模型表示。潜在变量 Z 是标准正态,数据来自 P(X|Z)。X 的阴影节点表示观测数据。对于手写数字的黑白图像,此数据可能性是伯努利分布的。

        这是我们从概率模型角度讨论变分自动编码器时考虑的中心对象。潜在变量是从先验中提取的pz).数据x有可能pxz)以潜在变量为条件z.该模型定义了数据和潜在变量的联合概率分布:

p(x,z).我们可以将其分解为可能性和先验:p(x,z)=px∣ z)pz).对于黑白数字,可能性是伯努利分布。

        现在我们可以考虑这个模型中的推理了。目标是推断给定观测数据的潜在变量的良好值,或计算后验值pzx).贝叶斯 说:

      

        检查分母px).这被称为证据,我们可以通过边缘化潜在变量来计算它:px)=∫px∣ z)pzdz.不幸的是,这个积分需要指数时间来计算,因为它需要在潜在变量的所有配置上进行评估。因此,我们需要近似这种后验分布。

        变分推理近似于具有一系列分布的后验q_\lambda(z|x).变分参数λ索引分布族。例如,如果q是高斯的,它将是每个数据点的潜在变量的均值和方差

        我们怎么知道我们的变分后验有多好q (z|x)近似于真实后验p (z|x) ?我们可以使用Kullback-Leibler散度,它衡量使用时丢失的信息q近似值p(以纳特为单位):

        我们的目标是找到变分参数 λ这最大限度地减少了这种分歧。因此,最佳近似后验是:

        为什么这无法直接计算?讨厌的证据 px)出现在背离中。如上所述,这是棘手的。我们还需要一个易于处理的变分推理的成分。请考虑以下函数:

        请注意,我们可以将其与 Kullback-Leibler 散度相结合,并将证据重写为

        根据詹森不等式,Kullback-Leibler背离总是大于或等于零。这意味着最小化Kullback-Leibler背离等效于最大化ELBO。缩写被揭示出来:证据下部允许我们进行近似的后验推理。我们不必计算和最小化近似和精确后验之间的Kullback-Leibler分歧。相反,我们可以最大化等效的 ELBO(但计算上易于处理)。

        在变分自编码器模型中,只有局部潜在变量(没有数据点共享其潜在变量 z与另一个数据点的潜在变量)。因此,我们可以将 ELBO 分解为一个总和,其中每个项都依赖于单个数据点。这允许我们对参数使用随机梯度下降 λ(重要提示:变分参数在数据点之间共享 - 更多内容请点击此处)。变分自动编码器中单个数据点的 ELBO 为:

        要看到这等效于我们之前对 ELBO 的定义,请将对数关节扩展到先验项和似然项,并对数使用乘积规则。

        让我们与神经网络语言建立联系。最后一步是参数化近似后部 qθ​(z∣x,λ)使用将作为输入数据的推理网络(或编码器) x和输出参数 λ.我们对可能性进行参数化 pxz)使用生成网络(或解码器),该网络采用潜在变量并将参数输出到数据分布 pφ​(xz).推理和生成网络具有参数 θ和 φ分别。参数通常是神经网络的权重和偏差。我们使用随机梯度下降来优化这些以最大化ELBO(没有全局潜在变量,因此小批量我们的数据是犹太洁食的)。我们可以编写 ELBO 并将推理和生成网络参数包含为:

        这个证据下限是我们从神经网络角度讨论的变分自动编码器的损失函数的负数;

ELBO_i(\theta ,\phi )=-l_i(\theta ,\phi ). .然而,我们从关于概率模型和近似后验推理的原则推理中得出了它。我们仍然可以将Kullback-Leibler散度项解释为正则表达式,将预期可能性项解释为重建“损失”。但概率模型方法清楚地说明了这些术语存在的原因:最小化近似后验之间的Kullback-Leibler分歧 qλ​(zx)和模型后部 pzx).

        模型参数呢?我们掩盖了这一点,但这是重要的一点。术语“变分推理”通常是指相对于变分参数最大化ELBO。 λ.我们还可以根据模型参数最大化 ELBO φ(例如,生成神经网络参数化可能性的权重和偏差)。这种技术称为变分EM(期望最大化),因为我们最大化了数据相对于模型参数的预期对数似然。

        就是这样!我们遵循了变分推理的配方。我们已经定义了:

  • 概率模型 p潜在变量和数据
  • 变分族 q让潜在变量近似于我们的后验变量

        然后我们用变分推理算法来学习变分参数(梯度上升在ELBO上学习 λ).我们使用变分EM作为模型参数(ELBO上的梯度上升来学习 φ).

2.2 实验

        现在,我们已准备好查看模型中的示例。我们有两种选择来衡量进展:从先前或之后抽样。为了让我们更好地了解如何解释学习到的潜在空间,我们可以可视化潜在变量的后验分布。 qλ​(zx)看来。

        在计算上,这意味着输入图像 x通过推理网络得到正态分布的参数,然后取潜变量的样本 z.我们可以在训练期间绘制此图,以查看推理网络如何学习更好地近似后验分布,并将不同类别数字的潜在变量放置在潜在空间的不同部分。请注意,在训练开始时,潜在变量的分布接近先前的分布(一个圆形斑点00).

        在训练期间可视化学到的近似后验。随着训练的进行,数字类在二维潜在空间中变得分化。

        我们还可以可视化先前的预测分布。我们将潜在变量的值固定为在−3−3和33.然后我们可以从生成网络参数化的可能性中抽取样本。这些“幻觉”图像向我们展示了模型与潜在空间的每个部分相关联的内容。

        通过查看可能性样本来可视化先前的预测分布。X 轴和 Y 轴表示 -3 到 3 之间的等间距潜在变量值(二维)。

三、变分学视角

3.1 词汇表

我们需要以清晰简洁的方式决定用于讨论变分自动编码器的语言。以下是我发现令人困惑的术语表:

  • 变分自动编码器(VAE):在神经网络语言中,VAE由编码器、解码器和损失函数组成。在概率模型术语中,变分自动编码器是指潜在高斯模型中的近似推理,其中近似后验和模型似然由神经网络(推理和生成网络)参数化。
  • 损失函数:在神经网络语言中,我们想到损失函数。训练意味着最小化这些损失函数。但在变分推理中,我们最大化 ELBO(这不是损失函数)。这会导致尴尬,例如在神经网络框架中调用优化器仅支持最小化。optimizer.minimize(-elbo)
  • 编码器:在神经网络世界中,编码器是输出表示的神经网络 z数据数量 x.在概率模型术语中,推理网络参数化潜在变量的近似后验 z.推理网络将参数输出到分布 Qzx).
  • 解码器:在深度学习中,解码器是学习重建数据的神经网络 x给定一个表示 z.就概率模型而言,数据的可能性 x给定潜在变量 z生成网络进行参数化。生成网络将参数输出到似然分布 pxz).
  • 局部潜在变量:这些是 z_i​对于每个数据点 x_i​.没有全局潜在变量。因为只有局部潜在变量,所以我们可以很容易地将ELBO分解为项  L _i​仅依赖于单个数据点 xi​.这可以实现随机梯度下降。
  • 推理:在神经网络中,推理通常意味着在给定新的、从未见过的数据点的情况下预测潜在表示。在概率模型中,推理是指在给定观测数据的情况下推断潜在变量的值。         

3.2 均值场与摊销推理

        这个问题对我来说非常令人困惑,我可以看到对于来自深度学习背景的人来说可能会更加困惑。在深度学习中,我们想到输入和输出、编码器和解码器以及损失函数。这可能会导致在学习概率建模时模糊、不精确的概念。

        让我们讨论均值场推理与摊销推理有何不同。这是我们在进行近似推理以估计潜在变量的后验分布时面临的选择。我们可能有各种限制:我们是否有很多数据?我们有大型计算机或 GPU 吗?我们是否有局部的、每个数据点的潜在变量,还是在所有数据点之间共享的全局潜在变量?

        均值场变分推理是指对变分分布的选择,该变分分布在 N数据点,没有共享参数:

         这意味着每个数据点都有空闲参数λi​ ​(例如\lambda _i =(\mu_i,\sigma _i)对于高斯潜在变量)。我们如何为一个新的、看不见的数据点进行“学习”?我们需要最大化每个新数据点的 ELBO,相对于其平均场参数λi​​.

        摊销推理是指跨数据点“摊销”推理成本。一种方法是共享(摊销)变分参数 λ跨数据点。例如,在变分自动编码器中,参数 θ的推理网络。这些全局参数在所有数据点之间共享。如果我们看到一个新的数据点并想看看它的近似后验是 q(z_i) 看起来,我们可以再次运行变分推理(最大化 ELBO 直到收敛),或者相信共享参数“足够好”。与平均场相比,这可能是一个优势。

        哪一个更灵活?平均场推理严格来说更具表现力,因为它没有共享参数。每个数据的参数λi​可以确保我们的近似后验最忠实于数据。另一种思考方式是,我们通过跨数据点绑定参数来限制变分族的容量或表示能力(例如,使用跨数据共享权重和偏差的神经网络)。

四、示例 PyTorch/TensorFlow 实现

        以下是用于生成本文中数字的实现:Github链接

4.1 脚注:重新参数化技巧

        实现变分自编码器的最后一件事是如何取随机变量参数的导数。如果我们被给予 z从分布中提取的 qθ​(zx),我们想要取函数的导数 z关于 θ,我们如何做到这一点?这 z样本是固定的,但直观地它的导数应该是非零的。

        对于某些分布,可以以巧妙的方式重新参数化样本,以使随机性与参数无关。我们希望样本确定地依赖于分布的参数。例如,在具有平均值的正态分布变量中 μ和标准设计 σ,我们可以像这样从中采样:

        这里 \varepsilon \in Normal(0,1) .从∼ 表示从分布到等号的抽签,= 是关键的一步。我们已经定义了一个确定性地依赖于参数的函数。因此,我们可以取函数的导数,包括 z, fz)关于其分布参数 μ和 σ.

        重新参数化技巧允许我们将正态分布随机变量 Z 的随机性推入 EPSILON,该 EPSILON 是从标准法线采样的。菱形表示确定性依赖关系,圆圈表示随机变量。

        在变分自编码器中,均值和方差由带有参数的推理网络输出 θ我们优化。重新参数化技巧允许我们反向传播(使用链式规则取导数)关于 θ通过目标(ELBO),它是潜在变量样本的函数 z.

4.2 进一步阅读和改进

  • 如果我们小心的话,伯努利可能性对于MNIST数据集来说是一个不正确的选择。手写数字“接近”二进制值,但实际上是连续的。本文修复了连续伯努利分布的问题。

五、参考资料 

  •         许多想法和数字来自Shakir Mohamed关于重新参数化技巧和自动编码器的优秀博客文章。 Durk Kingma创造了重新参数化技巧的伟大视觉效果。变分推理的重要参考是本教程和 David Blei 的课程笔记。Dustin Tran 有一篇关于变分自动编码器的有用博客文章。由变分自动编码器生成的标题分子样本来自本文。
  •         感谢Rajesh Ranganath,Andriy Mnih,Ben Poole,Jon Berliner,Cassandra Xia和Ryan Sepassi在本文中的讨论和许多概念。感谢Batuhan Koyuncu重新生成GIF!
  •         关于Hacker News和Reddit的讨论。在David Duvenaud的课程大纲“可微推理和生成模型”中出现。

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

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

相关文章

高等数学啃书汇总重难点(七)微分方程

同济高数上册的最后一章,总的来说,这篇章内容依旧是偏记忆为主,说难不难说简单不简单: 简单的是题型比较死,基本上就是记公式,不会出现不定积分一般花样繁多的情况;然而也就是背公式并不是想的…

基于Java的在线教育网站管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

python输出与数据类型

目标 1、使用print输出内容 2、熟悉字符串类型 3、熟悉数字类型 4、熟悉数字与字符串操作 输出 print可控制输出内容也可配合、-、*、/进行运算,和整数型配合可进行运算和字符型配合有不同效果,如为拼接,*为多次输出注:整数型如&…

flutter开发实战-hero实现图片预览功能extend_image

flutter开发实战-hero实现图片预览功能extend_image 在开发中,经常遇到需要图片预览,当feed中点击一个图片,开启预览,多个图片可以左右切换swiper,双击图片及手势进行缩放功能。 这个主要实现使用extend_image插件。在…

【软件测试】自动化测试selenium

目录 一、什么是自动化测试 二、Selenium介绍 1、Selenium是什么 2、Selenium的原理 三、了解Selenium的常用API 1、webDriver API 1.1、元素定位 1.1.1、CSS选择器 1.1.2、Xpath元素定位 1.1.3、面试题 1.2、操作测试对象 1.3、添加等待 1.4、打印信息 1.5、浏…

kvm webvirtcloud 如何添加直通物理机的 USB 启动U盘

第一步:查看USB设备ID 在物理机上输入 lsusb 命令 rootubuntu:/media/usb1# lsusb Bus 002 Device 002: ID 0781:5581 SanDisk Corp. Ultra Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 004: ID 0424:2514 Microchip Technolo…

UE4/5 批量进行贴图Texture压缩、修改饱和度

该插件下载地址: 🍞正在为您运送作品详情https://mbd.pub/o/bread/ZZWYmpxw 适用于 UE4 4.25/4.26/4.27 UE5 以上版本 在Edit - Plugins中分别开启 插件 Python Editor Script Plugin 插件 Editor Scripting Utilites 如果会python代码,…

分享从零开始学习网络设备配置--任务4.2 使用IPv6静态及默认路由实现网络连通

任务描述 某公司利用IPv6技术搭建网络,公司3个部门所有PC机连接在同一交换机上,PC1代表行政部划分到VLAN10中,PC2代表财务部划分到VLAN20中,PC3代表销售部划分到VLAN30中,R1代表公司出口路由器,R2模拟Inter…

统计学习方法 支持向量机(下)

文章目录 统计学习方法 支持向量机(下)非线性支持向量机与和核函数核技巧正定核常用核函数非线性 SVM 序列最小最优化算法两个变量二次规划的求解方法变量的选择方法SMO 算法 统计学习方法 支持向量机(下) 学习李航的《统计学习方…

操作系统:计算机系统概述

一战成硕 1.1 手工操作阶段1.2 批处理阶段1.3 分时操作系统1.4 实时操作系统1.5 中断和异常的概念1.6 系统调用 1.1 手工操作阶段 1.2 批处理阶段 单道批处理系统 自动性 顺序性 单道性多道批处理系统 多道 宏观上并行 微观上串行 优点:资源利用率高,多…

Postman —— 配置环境变量

PostMan是一套比较方便的接口测试工具,但我们在使用过程中,可能会出现创建了API请求,但API的URL会随着服务器IP地址的变化而改变。 这样的情况下,如果每一个API都重新修改URL的话那将是非常的麻烦,所以PostMan中也提供…

hive窗口函数记录

记录工作中和学习中的窗口函数,方便以后使用,本记持续更新和完善,版本:231019 文章目录 1.什么是窗口函数2.窗口函数的表达式3.窗口函数的类型1) 排名函数2) 聚合函数3) 跨行取值函数 4.[frame…

如何实现前端实时通信(WebSocket、Socket.io等)?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

回归预测 | MATLAB实现IWOA-LSTM改进鲸鱼算法算法优化长短期记忆神经网络的数据回归预测(多指标,多图)

回归预测 | MATLAB实现IWOA-LSTM改进鲸鱼算法算法优化长短期记忆神经网络的数据回归预测(多指标,多图) 目录 回归预测 | MATLAB实现IWOA-LSTM改进鲸鱼算法算法优化长短期记忆神经网络的数据回归预测(多指标,多图&#…

【图解数据结构】手把手教你如何实现顺序表(超详细)

🌈个人主页:聆风吟 🔥系列专栏:数据结构、算法模板、汇编语言 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 一. ⛳️线性表1.1 🔔线性表的定义1.2 🔔线性表的存储结构 二. ⛳️…

Premiere Pro(Pr)2023软件下载及安装教程

目录 一.简介 二.安装步骤 软件:Pr版本:2023语言:简体中文大小:8.30G安装环境:Win11/Win10(1809版本以上)硬件要求:CPU2.6GHz 内存8G(或更高,不支持7代以下CPU&#xf…

【微服务保护】初识 Sentinel —— 探索微服务雪崩问题的解决方案,Sentinel 的安装部署以及将 Sentinel 集成到微服务项目

文章目录 前言一、雪崩问题及其解决方案1.1 什么是雪崩问题1.2 雪崩问题的原因1.3 解决雪崩问题的方法1.4 总结 二、初识 Sentinel 框架2.1 什么是 Sentinel2.2 Sentinel 和 Hystrix 的对比 三、Sentinel 的安装部署四、集成 Sentinel 到微服务 前言 微服务架构在现代软件开发…

如何利用数字化转型升级,重塑企业核心竞争力?

工程机械行业是一个周期性明显的行业,企业经营受到宏观经济与国家基础设施建设的影响较大,例如企业经济上行时,加大投资扩大生产规模,以满足市场需求的增长,当经济下行时,企业可能面临减产和裁员等问题&…

Ubuntu 安装 npm 和 node

前言 最近学习VUE,在ubuntu 2204 上配置开发环境,涉及到npm node nodejs vue-Cli脚手架等内容,做以记录。 一、node nodejs npm nvm 区别 ? node 是框架,类似python的解释器。nodejs 是编程语言,是js语言的…

手机游戏定制研发手机软件开发

手机游戏定制研发是一个多阶段的过程,它使开发者能够根据客户的需求和创意,构建独特的游戏体验。这个领域是一个蓬勃发展的市场,因为手机游戏在全球范围内都备受欢迎。在本文中,我们将深入探讨手机游戏定制研发的主要步骤以及关键…