当前位置: 首页 > 网络应用技术

[13]变压器自我编码器(VAE)的原理是通过Pytorch实现实现的

时间:2023-03-08 00:17:13 网络应用技术

  作为生成模型,VAE的基本思想易于理解:通过编码网络将一堆真实样本转换为理想的数据分布,然后将此数据分配传输到解码器网络以获取一堆样本。接近真实样本,训练了一个自我编码器模型。然后VAE(可变划分自我编码器)是进一步更改自编码器模型的划分,以便编码器的输出结果可以与均值和均值相对应目标分布的差异。如下图所示,特定的方法和思想是对Wenhui的后期引入:

  Vae想要解决的问题是什么?当然,如何构造编码器和解码器,以便可以将图片编码成一种易于表示的形式,并且此形式可以将其解码为真实的图像尽可能。

  这似乎听起来与PCA相似(主要组件分析),并且PCA本身用于执行矩阵尺寸:

  如图所示,x本身是一个矩阵。它通过变换W变成了低维矩阵C。由于此过程是线性的,因此可以通过转换来恢复。现在,我们必须找到一个转换w。制造矩阵X与尽可能多的一致,这就是PCA的作用。在PCA中更改W的方法是SVD(奇怪的值分解)算法。这是一种纯粹的数学方法,不会详细描述,因为VAE中不再需要SVD,并且神经网络直接被神经网络替换。

  回顾上面的简介,我们会发现我们要构建的PCA和自编码器的相似性是,如果矩阵X被视为输入图像,则W是编码器,则低维矩阵C为被视为图像编码,低维矩阵C被视为图像编码。然后使用解码器并生成图像,PCA成为自我编码器网络模型的原型。

  现在我们需要改进该原型。首先,最明显的地方是使用神经网络替代W转换和转换,并获得了以下深层自动编码模型:

  该替代品的明显好处是,神经网络的强大拟合能力的引入使编码(代码)的维度低于原始图像的尺寸(x)。在手写数字图像的生成模型中自动编码器可以将784维矢量(28*28图像)压缩为仅30个维度,并且解码后图像具有清晰的识别(如下所示)。

  在这一点上,我们已经构建了一个具有清晰重建图像的自我编码模型,但这不符合我们真正想要构建的生成模型的标准,因为对于生成模型,应该单独提取解码器部分可以是单独提取。对于任何在任何维度上的采样的编码,它应该能够通过解码器生成清晰的真实图片。

  让我们首先分析现有模型无法符合此标准的原因。

  如上图所示,假设有两张训练图片,一个是一个完整的地图,另一个是半月表。在训练了我们的自编辑代码模型之后,可以在没有损坏的情况下恢复这两张图片。次要,我们在代码空间中两个图片的编码点中有所了解,然后将此观点赋予解码器。我们希望新一代图片是清晰的图片(类似于3/4的整个月。解码过程使用深神经网络,这是一个非线性转换过程,因此在代码空间的点和点之间的点和点之间的点之间的迁移非常规。

  如何解决这个问题?我们可以引入噪声以扩展图片的编码区域,从而覆盖真正的空白编码点。

  如上图所示,在编码这两个图片时添加一点噪音,以便每张图片的编码点出现在绿色箭头的范围内,因此,当训练训练模型时,绿色箭头范围中有一些点可能会采样,以便解码器将在训练期间尽可能多地恢复绿色范围的点。然后我们可以注意以前的扭曲点。现在,它处于整个月的交界处,半月地图编码,因此解码器希望它应该与整个月表尽可能相似,并且应该与半个月的图表相似。这是两张图片(3/4全月地图)的妥协。

  从中我们发现,在编码器中添加一些噪音可以有效覆盖扭曲的区域。为了解决这个问题,我们可以尝试无限地拉伸噪声,因此对于每个样本,其编码将涵盖整个编码空间,但是我们必须保证,在原始编码附近编码的概率是最高的。降低概率。在这种情况下,图像的编码已从原始离散编码点变为连续编码的分布曲线,如下图所示。

  然后,上述方法将编码从离散到连续编码的图像的方法是成为自我编码的核心思想。以下将介绍VAE的模型架构,并解释VAE如何实现上述想法。

  上图是VAE的模型架构。让我们粗略地理解该模型的设计思想。

  在自动输入中,编码器直接生成一个编码,但是在VAE中,为了在编码中添加适当的噪声,编码器将输出两个代码,一个是原始编码(M1,M2,M3),另外一个为控制噪声干扰程度的代码(σ1,σ2,σ3)。第二个编码实际上是充分理解的,也就是说,为随机噪声代码(E1,E2,E3)分配权重,然后添加EXP(σi)ISIN顺序的目的,以确保此分布的权重为正值,使用噪声编码添加原始编码,并且获得代码层(C1,C2,C3)上VAE的输出结果。其他网络体系结构与Deep Auto-Entode没有什么不同。

  就损失函数而言,除了必要的重组损失外,VAE还添加了损失函数(请参阅上面的最小化内容),这也是必要的部分,因为如果不添加,整个模型将存在问题:为了确保发电:确保生成生成:确保生成生成:确保生成生成:确保生成生成:确保生成生成:确保生成生成:图片的质量越高,编码器必须越少希望图片干扰的噪声生成图片,因此分配给噪声的重量越小。此外,第二个损失函数具有限制编码器采取如此极端路径的作用,也可以从直观的观点,即在σi= 0处获得EXP(σi) - (1+σi)的最小值到负无穷大。

  我们只是在上面大致了解VAE的构建机制,但是有一些更深层次的原则需要挖掘。例如,为什么第二个损失函数使用此表达式以及VAE是否能真正实现我们的期望,也就是说:“图片图的图片可以编码为指数形式的形式,而这种形式可以将其解码为真实的图像尽可能没有损害,是否存在相应的理论基础。

  在理论上,我们将在理论上分析VAE的结构和原理。

  我们知道,对于生成模型,主流理论模型可以分为隐藏的Marcov模型HMM,简单的贝叶斯模型NB和Gaussian Hybrid Model GMM,而VAE的理论基础是高斯混合模型。

  什么是高斯混合模型?也就是说,任何数据的分布都可以视为几个高斯分布的叠加。

  如图所示,如果p(x)代表分布,则有一种拆分方法,可以将其表示为对应于图中几个浅蓝色曲线的高斯分布的叠加。当分裂数量达到512时,与原始分布相比,其叠加分布非常小,非常小。

  因此,我们可以使用这个理论模型来考虑如何编码数据。最直接的想法是将每个高斯分布的参数用作编码值。

  如上图所示,M表示编码维度上的数字。例如,实现了512维编码的编码,M的值范围为1,2,3 ... 512.M将遵守概率分布P(M)(多项式分布)。现在编码是每个M的样本,它对应于一个小的高斯分布n(μm,∑m),p(x)可以等于所有这些高斯分布的叠加,也就是说:: 他们之中

  上面提到的编码方法非常简单且粗鲁,这与我们前面提到的编码方法相对应,并具有许多扭曲的区域。因此,我们需要改进当前的编码方法,使其成为连续有效的编码。

  现在我们的编码被连续变量Z替换。我们规定Z遵守正态分布n(0,1)(实际上,不必选择n(0,1),而另一个连续分布是可行的)对于每个样品z,将有两个函数μ和σ,它们确定与相应高斯分布相对应的高斯分布的平均值和平方x),即原始分布p(x),即原始分布,即原始分布p(x),即,

  在

  1)参考代码模型py

  火车

  2)培训结果显示

  Epoch1生成的图像

  Epoch10产生的图像

  Epoch30生成的图像

  一开始,VAE的效果比AE差,但是训练后的效果会更好。

  3)生成结果显示test.py

  根据先前训练的VAE网络,我们从样本中随机从0-1分布到解码器的一些噪声。结果,我们可以看到它可以通过随机生成图像随机生成。

  但是,就结果而言,生成的图像比以前产生的图像模糊。

  在本实验中,根据网络产生的0-1高斯分布样本和n(μ,σ)的噪声,损耗函数的问题。使用纸张给出的公式。

  计算结果:

  代码表示:

  此问题的原因是使用了正常化的操作数据集。

  对于这种情况,VAE的结构不是正确的结构。以下是原始结构。

  对于此结构,可以正常训练结果,如下图所示。

  但是,当使用此训练有素的网络将对0-1分布噪声的某些顺服随机输出到解码器时,结果为0。

  个人猜测是,代码的维度还不够,不足以保留太多信息。然后参见上面提到的参考代码模型。改进后,您可以正常生成图像。

  参考材料:本文的理论部分摘录到:http://www.gwylab.com/note-dae.html非常详细。

  原始:https://juejin.cn/post/70977855888354383902