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

news2025/1/12 6:15:34

名词解释: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.coloradmin.cn/o/1127998.html

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

相关文章

docker搭建waline评论系统

我这里是给博客网站嵌入评论系统的 1.登录LeanCloud 国际版,没有账号可以注册个 链接:点击跳转 2.新建应用,选择开发版(免费),商用版每个月最低消费5美刀。 3.在设置-应用凭证里面将AppID、AppKey、Maste…

基于springboot+vue校园短期闲置资源置换平台051

大家好✌!我是CZ淡陌。一名专注以理论为基础实战为主的技术博主,将再这里为大家分享优质的实战项目,本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路…

YoloV8改进策略:独家原创,LSKA(大可分离核注意力)改进YoloV8,比Transformer更有效,包括论文翻译和实验结果

文章目录 摘要论文:《LSKA(大可分离核注意力):重新思考CNN大核注意力设计》1、简介2、相关工作3、方法4、实验5、消融研究6、与最先进方法的比较7、ViTs和CNNs的鲁棒性评估基准比较8、结论YoloV8官方结果改进一:测试结果摘要 本文给大家带来一种超大核注意力机制的改进方…

FFmpeg编译安装(windows环境)以及在vs2022中调用

文章目录 下载源码环境准备下载msys换源下载依赖源码位置 开始编译编译x264编译ffmpeg 在VS2022写cpp调用ffmpeg 下载源码 直接在官网下载压缩包 这个应该是目前(2023/10/24)最新的一个版本。下载之后是这个样子: 我打算添加外部依赖x264&a…

应用系统集成-概述

应用系统集成-概述 随着网络技术的发展和日益增长的软件复杂度,几乎已经不存在一个完全孤立的应用系统了,万物互联在应用层面就是系统互联,应用系统集成成为软件系统架构是需要考虑的核心问题之一。 基本介绍 应用系统集成面临的挑战 所有的…

【网络编程】一文带你搞懂HTTPS协议

文章目录 一、什么是HTTPS协议二、关于加密三、数据摘要 | 数据指纹 | 数字签名四、HTTPS的工作过程探究方案1:只使用对称加密方案2:只使用非对称加密方案3:双方都使用非对称加密方案4:非对称加密 对称加密中间人攻击 五、引入证…

重要功能更新:妙手正式接入SHEIN供货模式(OBM)店铺,赋能卖家把握出海新机遇!

继接入SHEIN平台模式店铺之后,妙手ERP积极响应卖家需求,正式接入SHEIN供货模式(OBM)店铺,并支持产品采集、批量刊登、产品管理等功能,帮助跨境卖家快速上品、高效运营,把握出海新机遇。 SHEIN供…

天软特色因子看板(2023.10 第11期)

该因子看板跟踪天软特色因子A05005(近一日单笔流通金额占比(%),该因子为近一个日单笔流通金额占比因子,用以刻/画股票在收盘时,力资金在总交易金额中所占的比重。 今日为该因子跟踪第11期,跟踪其在SW801130 (申万纺织服装) 中的表…

TwinCAT3 从入门到放弃系列第一篇

TwinCAT3介绍 TwinCAT3是倍福公司基于PC平台和Window操作系统的控制软件。TwinCAT全称是The Windows Control and Automation Technology,基于window的自动化控制技术。 TwinCAT是1995年首次推出市场,现存有TwinCAT2和TwinCAT3两种版本,TC2是…

软件兼容性测试的测试内容有哪些?

软件兼容性测试是软件开发过程中至关重要的一项测试环节。它是指验证软件在不同平台、操作系统、硬件设备或网络环境下的运行情况,以确保软件在各种环境下都能正常工作并与其他软件或系统相互配合。兼容性测试能够帮助开发者发现和修复可能存在的兼容性问题&#xf…

PMP备考|通关宝典

1建立知识全景图 PMBOK 知识框架:五大过程组、十大知识领域、49个过程、132个工具和技术(PMBOK6 P686)。 2项目 项目具有独特性、临时性、渐进明细的特点 组织类型: ▶ 职能型组织:项目联络员,PM职权小…

SSL证书品牌参差不齐?品牌太多不知道怎么选择?

很多采购人认为SSL证书品牌太多,差异很大,安全性能以保证? 错错误,大错特错,其实整个互联网SSL证书绕来绕去就三家!而且是无法替代的! 举列:360搜索表面上起来用的是沃通证书&…

深入理解Java IO流:概念、类型、缓冲与性能

文章目录 什么是I/O流?I/O流的类型字节流(Byte Streams)字符流(Character Streams) 节点流与处理流节点流(Node Streams)处理流(Processing Streams) 带缓冲的I/O流I/O性…

CSS笔记-狂神

1、什么是CSS 如何学习 CSS是什么CSS怎么用(快速入门)CSS选择器(重点难点)美化网页(文字,阴影,超链接,列表,渐变…)盒子模型浮动定位网页动画(特…

PAM从入门到精通(二十二)

接前一篇文章:PAM从入门到精通(二十一) 本文参考: 《The Linux-PAM Application Developers Guide》 先再来重温一下PAM系统架构: 更加形象的形式: 七、PAM-API各函数源码详解 前边的文章讲解了各PAM-API…

如何复制禁止复制的内容

今天找到一段代码,但是复制时页面提示“这个是VIP会员才有的权限”。我该怎么复制呢。 现在的平台大都是用钱说话,以便响应知识付费的主张。对错我就不说了,我认为既然我有权利看到代码,当然也有权把他复制下来。这并不涉及侵权。…

DNS、ICMP和NAT

DNS、ICMP和NAT 文章目录 DNS、ICMP和NATDNS是什么域名系统的名字空间域名空间的层次结构域名的分配和管理顶级类别域名 DNS域名解析过程递归查询迭代查询 高速缓存 ICMPICMP的定位ICMP协议的功能 ICMP的报文格式ping命令traceroute命令 NATNAT技术背景NAT IP转换过程NAPTNAT的…

autohotkey v1

autohotkey v1 文档 https://www.autohotkey.com/docs/v1/ 编辑器 https://www.autohotkey.com/scite4ahk/ https://www.autohotkey.com/

基于Python实现手写文字识别

基于Python实现手写文字识别,对学生日常作业及考试试卷中的手写内容进行自动识别,实现学生作业、考卷的线上批阅及教学数据的自动分析,提升教职人员工作效率,促进教学管理的数字化和智能化。 目录 引言背景介绍目标和意义 手写文字…

解决chrome浏览器netWork响应数据中文乱码的问题

项目中遇到返回值出现如下图所示情况: 开发起来很麻烦,可以通过添加Source code扩展程序解决。 具体操作: 1、下载 地址: https://github.com/jinliming2/Chrome-Charset/releases 或者:https://download.csdn.net/do…