首页 > 编程知识 正文

编码器安装方式,变分自编码器

时间:2023-05-04 13:18:25 阅读:30800 作者:3283

在过去的几年中,由于一些惊人的进步,基于深度学习的生成模型受到了关注。 依靠海量数据、精心设计的网络结构和训练技术,深度生成模型已经展现出难以置信的能力,可以生成各种非常真实的内容,包括图像、文本、语音等。 在这些深度生成模型中,两个类别是区分开来的,特别值得注意的是对抗网络(GAN )和变分自编码器(VAE )的生成。 当然,这两种网络不仅可以用于生成任务,还可以用于约束隐藏的空间变量等。

我个人觉得自分裂编码器的思想比GAN更深刻(当然,GAN也是特别好的网络)。 本文将重点介绍Variational Autoencoder,并与我的学习成果分享一些个人观点。

VAE是自编码器,在训练中编码分布被标准化,确保在隐藏空间中的特性良好,能够生成新的数据。 术语“变分”来源于统计中的正则化和变分推理方法。 在学习VAE之前,需要深入理解自编码器(AE )和为什么AE不能用于生成任务。

1 .自编码器本部分讨论自编码器的相关知识。 就我个人而言,我觉得学习AE的核心就是了解它的编码所产生的隐藏空间。

1.1自编码器的网络结构和损耗函数比较简单,下图为AE的网络结构示意图。

AE网络主要分为两个部分。

编码部分:将输入通过隐藏层的全连通层运算实现低维特征表示,即图中的低维定义嵌入。 ecoder部分:将encoder生成的低维特征表示重构为与input相同维的数据(output )。 ecoder的网络结构实际上与encoder完全对称。 损失函数:

AE的目的是重建输入数据。 也就是说,输出尽可能与输入相同。 也就是说,如下。

LSS=xinptxoutut2=Xin ptd (e (xinput ) )

∣ ∣ 2 loss = ||x _{input}- x_{output}||^2 = ||x _{input}- D(E(x _{input}))||^2 loss=∣∣xinput​−xoutput​∣∣2=∣∣xinput​−D(E(xinput​))∣∣2
其中 D ( x ) D(x) D(x)代表decoder, E ( x ) E(x) E(x)代表encoder。这个loss又叫重构误差。

有了网络结构和对应的损失函数,就能通过梯度下降训练模型了,这里就不过多介绍。下面才是AE值得思考的地方。

1.2 自编码器的隐空间

自编码器当中的encoder的工作无非就是将input通过一定的运算(或叫投影)降维成维度更低的lower dimensional embedding。假设encoder网络结构都只有一层且没有非线性(即线性自编码器,做线性运算),那AE的工作不就等同于主成分分析(PCA)吗?

两者都在寻找最佳的线性子空间来投影数据,并且使信息损失尽可能少。用PCA(基向量正交)获得的编码和解码矩阵自然地也是梯度下降所能得到的一种解决方案,但是应该指出,这不是唯一的解决方案。实际上,可以选择几组不同的基向量来描述相同的最佳子空间,因此,几个不同的编码器/解码器对都可以提供最小的重构误差。此外,与PCA不同,对于线性自编码器,我们最终获得的新特征不必是独立的(网络结构以及损失函数中都没有加入正交性约束)。

现在,让我们进一步假设编码器和解码器都是深度非线性网络的。在这种情况下,网络结构越复杂,自编码器就可以进行更多的降维,同时保持较低的重构损失。直观地讲,如果我们的编码器和解码器具有足够的自由度,则可以将任何初始维度减小为1。实际上,具有“无限大能力”的编码器理论上可以将我们的N个初始数据编码为1、2、3,…,最多N个(或更一般地说,为实轴上的N个整数),相关的解码器再进行逆变换,在这种过程中不会造成任何损失。

但是我们应该牢记两点。首先,在没有重建损失的情况下进行重要的降维通常会带来一个代价:隐空间中缺乏可解释和可利用的结构(缺乏规则性,lack of regularity)。其次,大多数时候,降维的最终目的不仅是减少数据的维数,而是要在减少维数的同时将数据主要的结构信息保留在简化的表示中。出于这两个原因,必须根据降维的最终目的来仔细控制和调整隐空间的大小和自编码器的“深度”(深度定义压缩的程度和质量)。
如上图所示,降维时我们希望保留主要信息。图中对中间的原始9维数据进行了两种降维,左边为降到了隐空间为1维(该维度表示生物性),这样丢失了很多信息;右边降到了隐空间为2维(分别表示生物性和飞行能力),丢失的信息大大减少。

1.3 自编码器用于内容生成的局限性

OK,讲到这里,似乎AE也能用于生成任务,根本不需要什么VAE呀。我在AE隐空间当中随机选取一个点,放入训练好的decoder不就能生成出对应的output了么?例如上文图中的例子,我在二维隐空间的第四象限当中随机选取一个点,放入decoder当中,模型不就能给我生成一个跟飞机类似的东西,可能是气球,火箭,宇宙飞船。但,别忘了上文加粗的那几个字当中的:AE隐空间缺乏规则性

为了说明这一点,我们重用上文提及到的一种强大的编码器和解码器,可以将任何N个初始训练数据放到实轴上(每个数据点都被编码为实值)并可以没有任何损失地解码。在这种情况下,自编码器的高自由度使得可以在没有信息损失的情况下进行编码和解码(尽管隐空间的维数较低)但会导致严重的过拟合,这意味着隐空间的某些点将在解码时给出无意义的内容,如下图所示。尽管这种精挑细选的一维例子太过极端,但可以注意到自编码器的隐空间规则性问题是普遍的,值得特别注意。

进入隐空间的编码数据之间缺乏结构是很正常的。我们训练的时候输入的数据是离散的(16*16的一张图片就是16*16维空间中的一个点),一个数据集也就是一个个的点,在训练过程中,网络很自然地会利用任何过拟合的可能性来尽可能地完成其任务(也就是只对这些点负责),模型通过训练只能确保隐空间中与输入空间对应的点重构是无误差的。在这些点之外的地方,我们都是任由模型自由发挥,自由拟合的(因为没有在损失函数加入规范化),点与点之间可能并没有做到平滑连接就会出现缺乏结构的情况。

正是因为如此,就有了VAE的诞生,写到这里发现内容有点多,那么VAE我们就到时再开一篇文章吧。

参考

https://zhuanlan.zhihu.com/p/144649293

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。