自编码器(AE)和变分编码器(VAE)

近期在看胶囊网络(Capsule Networks)相关的Survey,发现里面涉及的自编码器相关的内容有点遗忘,本文应运而生

无监督预训练网络

无监督,顾名思义,不需要任何标注信息。

无监督预训练网络可以进一步细分成

  • 自动编码器
  • 深度信念网络
  • 生成对抗网络

本文主要就自动编码器及其相关进行展开。

自编码器(AE)

如今,数据可视化的数据降噪和降维被认为是自编码器的两个主要的实际应用。使用适当的维度和稀疏性约束,自编码器可以得到比PCA或其他类似技术更好的数据投影。

自编码器通过数据示例自动学习。这意味着很容易训练在特定类型的输入中表现良好的算法的特定实例,并且不需要任何新的结构,只需适当的训练数据即可。

但是,自编码器在图像压缩方面做得并不好。由于自编码器是在给定的一组数据上进行训练的,因此它将得到与所用训练集数据相似的压缩结果,但对通用的图像压缩器来说效果并不好。至少不如像JPEG这样的压缩技术。

自编码器被训练成,可以在输入通过编码器和解码器后保留尽可能多的信息,但也会被训练成,使新的表示具有各种不错的属性。不同类型的自编码器旨在实现不同类型的属性。

原理

自动编码器是一种只有三层的神经网络:输入层、隐藏层(编码层)和解码层。该网络的目的是重构其输入,使其隐藏层学习到输入的良好特征表示。

自动编码器神经网络是一种无监督机器学习算法,其应用了反向传播,可将目标值设置成与输入值相等。自动编码器的训练目标是将输入复制到输出。在内部,它有一个描述用于表征其输入的代码的隐藏层。

自编码器网络结构

自编码器的目标:学习函数 $h(x)\approx x$,其中x是输入,h(x)是自编码器经过编码和解码后的输出。也就是说,自编码器需要学习一个近似恒等函数,使得输出近似等于输入。

因为中间隐藏层的维度比输入输出层的维度小很多,在神经网络推断过程中如果把隐藏层的参数拿出来,通过神经网络前向传播就产生输出值x,相当于从低维到高维的解压缩过程,而输入层到隐藏层的高维到低维的过程可看作压缩过程。当然我们讨论的是理想情况,神经网络基本不可能实现x=f(x),在压缩后再解压的过程会产生损失,可类比于有损压缩。

工作流程示意

自编码器的特点:

  1. 一种类PCA的无监督算法
  2. 最小化目标函数和PCA的一致
  3. 一种简单神经网络
  4. 训练目标,网络输入近似等于网络输出

注意:

自编码器从某种程度上和PCA很相似,但自编码器比PCA灵活很多。由于自编码器是一种简单神经网络,决定了它既能表征线性变换也能表征非线性变换;而PCA只能通过线性变换实现降维。自编码器可将其作为层构建深度学习网络。

类型

自编码器主要有以下四类

  1. 去噪自编码器 最基本的一种自编码器,通过随机地部分采用受损的输入来解决恒等函数风险,使得自动编码器必须进行恢复或去噪,该技术可用于得到输入的良好表征。良好的表征是指可以从受损的输入稳健地获得的表征,该表征可被用于恢复其对应的无噪声输入。去噪自动编码器背后的思想很简单,为了迫使隐藏层发现更加稳健的特征并且为了防止其只是学习其中的恒等关系,我们在训练自动编码器时会让其从受损的版本中重建输入。应用在输入上的噪声量以百分比的形式呈现。一般来说,30% 就很好,但如果你的数据非常少,可能就需要考虑增加更多噪声。
  2. 稀疏自编码器 通过在训练期间对隐藏单元施加稀疏性(同时保持隐藏单元的数量比输入更多),自动编码器可以在输入数据中学习有用的结构。 这种对输入的稀疏表示在分类任务的预训练中很有用。一般可以通过训练期间在损失函数中添加附加项来实现稀疏性或通过手动将除了几个最重要的隐藏单元全部调零(k稀疏自动编码器,k-sparse autoencoder)。
  3. 变分自编码器 变分自编码器模型继承了自编码器体系结构,但对潜变量的分布做出了强有力的假设。他们使用变分方法进行潜在表示学习,但这会导致额外的损失和并需要特定的训练算法——称为随机梯度变分贝叶斯(SGVB)。
  4. 收缩/压缩自编码器 收缩自动编码器在它们的目标函数中增加了一个正则项,迫使模型学习一个对输入值的细微变化具有鲁棒性的函数。

信息熵和KL散度

这部分内容见本人的博文 理解KL散度(相对熵)

变分自编码器(VAE)

变分自编码器由Diederik P Kingma和Danilo Jimenez Rezende在2013年提出,因为其坚实的理论基础、应用的多样性和比MCMC更优异的性能让它生成模型中得到广泛的研究和改进,现在已经成为生成模型算法中的一大主力。如下图的MNIST的手写体数据库图片的生成和名人图片就是使用VAE生成的。变分自编码器理论涉及不少统计学习的内容而目前的实现方法大多是基于深度神经网络。本文以图像识别为例讲解VAE,实际上VAE在文本、语音、视频等领域都可以应用,具体实现采用人工神经网络,实际上VAE也可以用其它的优化技术实现,它是一种很普适的生成模型算法。

从神经网络角度看vae

从神经网络角度看,变分自编码器由编码器、解码器和损失函数三部分组成。

编码器是一个神经网络,它的输入是一个数据点 $x$ ,输出是变分自编码器的隐藏表示 $z$ ,同时它有权重和偏置参数 $\theta$ 。举个例子,假设 $x$ 是一张大小为$28\times 28$的手写数字图片,那么编码器的作用就是负责将上述$784$维的输入数据点编码为隐藏表示空间的 $z$(隐藏层维数是$h$,$h\ll784$)。隐藏层的维数远小于输入层数据点的维数归因于编码器必须学习一种将高维输入数据有效压缩到低维空间的表示。编码器用来拟合 $z$ 的条件分布 $q_\theta(z|x)$ 满足相互独立的高斯分布,实际上编码器就是用于生成这些高斯分布的参数 $(u_1,\sigma_1^{2}),(u_2,\sigma_2^{2}),…,(u_h,\sigma_h^{2})$ 。

解码器是变分自编码器的另一部分神经网络,用条件概率 $p_\phi(x|z)$ 表示,它的输入是 $z$ 的表示,输出是数据概率分布所需要的参数 $\phi$ (包括权重和偏置)。同样以 $28\times 28$ 手写数字为例,令输入手写数字图片为黑白图片,每个pixel的值是 0 或 1 。那么,单个pixel的概率分布能表示为伯努利分布。解码器以 $z$ 作为输入并输出784个伯努利分布的参数 ,每个参数表示784个像素点的其中一个。解码器对数字向量 $z$ 进行解码,输出784个取值为 0或1 的数字,不可避免的解码结果和输入的784维存在差异,这个差异用损失函数进行度量。

从神经网络的角度看,变分自编码器的损失函数由一个负的似然函数加上一个正则项组成。由于没有一个全局的表示能够一次计算所有数据点的损失,这里将总的损失分解为每个数据点对应的损失$li$的求和 $\sum{i=1}^{N}l_i$ 。下面是单个数据点的损失函数表达式:

从神经网络角度,第一个部分表示重建损失(第$i$个数据点的对数似然的负期望)这部分的理解我还有点迷。第一部分表达式鼓励解码器更好的重建原始数据,当重建效果不佳时,这部分损失会很大。第二部分是正则项,计算的是编码器的分布 $q_\theta (z|x)$ 和 $z$ 的先验概率分布 $p(z)$ 之间的KL散度。当使用q的条件概率分布去表示原始p的先验分布时,$z$ 的信息损失,也就是q分布与p分布的接近程度。

在变分自编码器中,$p(z)=N(0,1)$ 。如果编码器输出的 $z$ 的表示不满足标准状态分布,将受到来自损失函数正则项的惩罚。正则项存在的作用就是确保两种分布尽可能的一致。

训练过程使用梯度下降算法优化损失来完成,这里的损失与编码器和解码器的参数 $\theta$ 和 $\phi$ 有关。使用步长为 $\rho$ 随机梯度下降算法时,编码器参数更新表达式:$\theta\gets \theta-\rho\frac{\partial l}{\partial \theta}$ ,解码器参数更新表达式:$\phi\gets \phi-\rho\frac{\partial l}{\partial \phi}$ 。

从概率模型角度看vae

说完从神经网络角度看待vae,接下来就是从概率推导角度对vae进行分析,这个角度也有助于更好地理解vae,它是可解释的,现在,你需要做的就是先把前面神经网络有关的一切都忘掉和无忌小哥学太极拳太极剑法一样,是不是很奈斯

从概率模型角度,变分自编码器由输入变量 $x$ 和潜在变量 $z$ 的特定概率模型组成,且满足联合概率密度公式 :

对每个输入数据点 $i$ :

  • 潜在变量 $z_i \sim p(z)$
  • 输入数据点 $x_i\sim p(x|z)$

相应图模型表示

上图是从概率模型角度解释变分自编码器的核心目标,潜在变量由先验概率 $p(z)$ 表示,输入数据的似然 $p(x|z)$ 以潜在变量 $z$ 为条件。概率模型定义了基于输入数据和潜在变量的联合概率分布: $p(x,z)$ ,其和似然(条件概率)和 $z$ 的先验的关系: $p(x,z)=p(x|z)p(z)$ 。对于二值图像,似然满足伯努利分布

概率模型的目标式在给定输入数据的情况下推断出潜在变量好的表示,也就是推断出好的后验概率 $p(z|x)$。用贝叶斯公式表示,就是

这里需要通过对 $x,z$ 联合概率密度求边缘积分计算贝叶斯公式的分母 $p(x)$ :

不幸地,当潜在变量 $z$ 的维数 $h$ 很大时, 在高维空间进行积分没有操作性。因此需要使用 $q_\lambda(z|x)$ 来近似后验分布函数 $p(z|x)$ ,这也是变分拟合操作存在的原因。顺便提一下,拟合后验分布函数也可以使用马尔科夫链蒙特卡罗方法(MCMC),不过一般MCMC算法对于图像数据,语音数据,视频数据这类高维数据计算量非常巨大,基本在算力上不可行。

近似表示的分布和标准后验分布函数 $p(z|x)$ 为

其中, $p(x)$ 是数据的分布,与参数无关,因此我们最小化KL散度时与其无关,定义:

那么

因为KL散度不为负,因此 $ln^{p(x)}\geq ELBO\lambda$ ,$ELBO\lambda$ 就是 $ln^{p(x)}$ 的下界(evidence lower bound),最小化变分后验概率分布与理论后验概率分布的KL散度相当于最大化 $ELBO_\lambda$ ,对于每一个数据输入 $x_i$ ,有

令:

此为单个输入值时神经网络的损失函数,这里面没有不可计算的变量,可以使用随机梯度下降(SGD)之类的训练算法训练神经网络,也可以配合批正则化(batch normalization)去降低神经网络训练过程中的梯度弥散问题,让训练结果更加稳定可靠。再重新考虑一下 $l_i$ 的意义,第一项相当于给定数据后的条件后验概率与先验概率的距离,最小化此项可以让z最终的分布接近我们设定的先验分布,可以认为这是一个正则修正项,否则最终z的分布如果不符合我们设定的先验分布,我们从先验分布中随机取的点就不能被解码器网络正确解码,第二项是给定数据下对z条件分布下的对数似然函数,当最小化 $l_i$ 时就相当于最大化这个对数似然函数,相当于我们要让训练数据中编码器编码过的 $z$ ,再经过解码器后要与原始数据差距比较小,减少在压缩编码和解码过程中产生的噪声。

Reference

自动编码器

深度学习:自动编码器基础和类型

Building Autoencoders in Keras

【AI数学】变分自编码器(VAE)

CMU lec12.vae.pdf

理解变分自编码器(VAE)

如何理解K-L散度

Some say the world will end in fire,

Some say in ice.

From what I’ve tasted of desire

I hold with those who favor fire.

But if it had to perish twice,

I think I know enough of hate

To say that for destruction ice

Is also great

And would suffice.

-------------本文结束感谢阅读-------------
Thanks for your rewarding ~
0%