深度学习(二十七)——RBM & DBN & Deep Autoencoder

VAE(续)

正态分布?

对于p(ZX)的分布,是不是必须选择正态分布?可以选择均匀分布吗?

正态分布有两组独立的参数:均值和方差,而均匀分布只有一组。前面我们说,在VAE中,重构跟噪声是相互对抗的,重构误差跟噪声强度是两个相互对抗的指标,而在改变噪声强度时原则上需要有保持均值不变的能力,不然我们很难确定重构误差增大了,究竟是均值变化了(encoder的锅)还是方差变大了(噪声的锅)。而均匀分布不能做到保持均值不变的情况下改变方差,所以正态分布应该更加合理。

条件VAE

最后,因为目前的VAE是无监督训练的,因此很自然想到:如果有标签数据,那么能不能把标签信息加进去辅助生成样本呢?这个问题的意图,往往是希望能够实现控制某个变量来实现生成某一类图像。当然,这是肯定可以的,我们把这种情况叫做Conditional VAE,或者叫CVAE。(相应地,在GAN中我们也有个CGAN。)

但是,CVAE不是一个特定的模型,而是一类模型,总之就是把标签信息融入到VAE中的方式有很多,目的也不一样。这里基于前面的讨论,给出一种非常简单的VAE。

深度学习(二十七)——RBM & DBN & Deep Autoencoder深度学习(二十七)——RBM & DBN & Deep Autoencoder

在前面的讨论中,我们希望X经过编码后,Z的分布都具有零均值和单位方差,这个“希望”是通过加入了KL loss来实现的。如果现在多了类别信息Y,我们可以希望同一个类的样本都有一个专属的均值μY(方差不变,还是单位方差),这个μY让模型自己训练出来。这样的话,有多少个类就有多少个正态分布,而在生成的时候,我们就可以通过控制均值来控制生成图像的类别。事实上,这样可能也是在VAE的基础上加入最少的代码来实现CVAE的方案了,因为这个“新希望”也只需通过修改KL loss实现:

Lμ,σ2=12i=1d[(μ(i)μ(i)Y)2+σ(i)2logσ(i)21]

VAE的另一个介绍

以下章节的内容主要摘自:

https://www.jeremyjordan.me/variational-autoencoders/

Variational autoencoders

该文中文版:

https://mp.weixin.qq.com/s/tRB85VF8XH9TTXZsiNVLhA

深入理解变分自编码器

自编码器是发现数据的一些隐状态(不完整,稀疏,去噪,收缩)表示的模型。 更具体地说,输入数据被转换成一个编码向量,其中每个维度表示从数据学到的属性。 最重要的是编码器为每个编码维度输出单个值, 解码器随后接收这些值并尝试重新创建原始输入。

变分自编码器(VAE)提供了描述隐空间观察的概率方式。 因此,我们不需要构建一个输出单个值来描述每个隐状态属性的编码器,而是要用编码器描述每个隐属性的概率分布。

举个例子,假设我们已经在一个大型人脸数据集上训练了一个Autoencoder模型, encoder的维度是6。理想情况下, 我们希望自编码器学习面部的描述性属性,比如肤色,人是否戴眼镜,从而能够用一些特征值来表示这些属性。

深度学习(二十七)——RBM & DBN & Deep Autoencoder

在上面的示例中,我们使用单个值来描述输入图像的隐属性。 但是,我们其实更愿意用一个分布去表示每个隐属性。 比如, 输入蒙娜丽莎的照片,我们很难非常自信的为微笑属性分配一个具体值, 但是用了变分自编码器, 我们有能比较自信的说微笑属性服从什么分布。

深度学习(二十七)——RBM & DBN & Deep Autoencoder

通过这种方法,我们现在将给定输入的每个隐属性表示为概率分布。 当从隐状态解码时,我们将从每个隐状态分布中随机采样,来生成向量作为解码器的输入。

深度学习(二十七)——RBM & DBN & Deep Autoencoder

通过构造我们的编码器来输出一系列可能的值(统计分布),然后随机采样该值作为解码器的输入,我们能够学习到一个连续,平滑的隐空间。因此,在隐空间中彼此相邻的值应该与非常类似的重建相对应。而从隐分布中采样到的任何样本,我们都希望解码器理解, 并准确重构出来。

深度学习(二十七)——RBM & DBN & Deep Autoencoder

我们可以进一步将此模型构造成神经网络架构:

深度学习(二十七)——RBM & DBN & Deep Autoencoder

下图是VAE的结构图:

深度学习(二十七)——RBM & DBN & Deep Autoencoder

Reparameterization Trick的图示:

深度学习(二十七)——RBM & DBN & Deep Autoencoder

Reparameterization Trick的反向传播:

深度学习(二十七)——RBM & DBN & Deep Autoencoder

数值计算 vs 采样计算

VAE的基本概念到此差不多了,苏剑林趁热打铁又写了以下理论文章:

https://kexue.fm/archives/5343

变分自编码器(二):从贝叶斯观点出发

特将要点摘录如下。

对于不是很熟悉概率统计的读者,容易混淆数值计算和采样计算的概念。

已知概率密度函数p(x),那么x的期望也就定义为: