天天看点

从PCA到AutoEncoder

文章目录

    • PCA
    • PPCA
    • Kernel PCA
    • ICA
    • AutoEncoder
      • Undercomplete AutoEncoder
      • Sparse AutoEncoder
      • Stacked AutoEncoder
      • Denoising AutoEncoder
      • Contrastive AutoEncoder
      • VAE and AAE
      • More
      • 推荐阅读
      • Reference

PCA

理论简单,计算只涉及到线性代数的计算,特征保持正交性,如果原始特征不具有正交性,只有独立性,这个时候可以使用ICA。

有两种可产生相同算法的等价视角:最大方差和最小重构误差。两种视角都希望找到一组正交投影,把原数据投影到低维的线性子空间上。但最大方差视角是说,我们希望数据投影之后在投影方向上有最大方差;而最小重构误差视角是说,我们希望投影后的数据和原数据之间的均方差最小。

计算过程:

  1. 定义样本均值和样本协方差
  2. 可以得到某个投影方向u_1上的方差
  3. 方差最大作为目标函数,把这个问题看作有约束最优化问题,因此可用拉格朗日乘子法求解,令导数为0,线性代数中的特征值分解问题,求得特征值和特征向量。

    在余下的方向中依次选择最大方差方向,就是S由大到小给出的各个特征值以及对应的特征向量,由于S是实对称矩阵,得到的特征向量之间是正交,线性无关,可以互不影响,依次求解。

    最小重构误差视角和最大方差视角一样,也是特征值问题。只不过这里是去掉较小特征值对应的方向,因为那些方向对应着较小的重构误差,而先前是保留较大特征值对应的方向。但得到的结果是完全一样的。

    从PCA到AutoEncoder

PCA的复杂度问题,特征分解是 O(n^3) 复杂度,

如果仅需要前M个最大的特征值以及特征向量,那么有一些算法可达到O(M*D^2)复杂度

PPCA

PPCA比起传统PCA,有一点优势就是利用了概率分布。因为我们的数据即使在某个低维子空间上,也不可能分布在整个子空间,而是只处在其中一个小区域。概率模型就很好地利用了这一点。当然,除了生成数据之外,概率模型更大的优势还是通过观察变量,也就是手里的数据,去推断参数也就是 W W W、 μ \mu μ、 σ 2 \sigma^2 σ2是什么。这就要利用一些统计推断方法,比如最大似然法。但想用最大似然,必须先知道似然函数是什么。

x = W z + μ + ϵ x=Wz+{\mu}+{\epsilon} x=Wz+μ+ϵ

假定各维噪声之间是独立的、且方差相等。从这个概率框架可以看出,我们先是用 W W W建立了隐变量与观察变量之间的关系,再用 μ \mu μ和 ϵ \epsilon ϵ描述了观察变量的概率分布是什么样的。

从概率角度看,这些隐变量张成的子空间以及从该子空间如何生成样本比较重要,但取这个子空间的哪些方向则不是那么重要。只要子空间一致,我们可以任意旋转张成子空间的这些方向。我觉得这也是PPCA和传统PCA的区别之一。

Kernel PCA

在低维空间无法区分的特征,先通过Kernel函数从低维空间映射到高维空间,再通过PCA进行降维。

ICA

PCA假设隐变量服从高斯分布,这样想得到各维之间独立的隐变量,只需旋转隐变量使其协方差阵为对角阵即可,即隐变量各维之间线性无关。对于高斯分布来说,线性无关就是独立,因此其联合分布可分解为各维分布的乘积。

如果不要求隐变量一定是高斯分布,但仍保持观察变量和隐变量之间具有线性关系,那就是ICA。这样的话,协方差阵为对角阵就不够了,因为对于任意分布来说,线性无关只是独立的必要条件而非充分条件。

得到这个独立解可以有很多方法,比如用高阶统计量而不仅仅是二阶的协方差来度量独立性,或者用互信息等方式来度量。

AutoEncoder

从PCA到AutoEncoder
从PCA到AutoEncoder

对 X X X重新表达后,再用 regression 来预测 y y y会效果很好。那隐含层的 x ′ x' x′向量,一般就假设是相互独立,也就是开始的x里的correlation被抹去了。

Undercomplete AutoEncoder

将未标注的训练集,拿来做监督学习,学习输入的重构输出。通过最小化重构损失函数L(x,x̂ ),训练未标注训练集,得到x的中间表示。 输出的神经元数量要和输入的数量一样,也称Undercomplete AutoEncoder,是PCA的非线性泛化。 如果每一层不加激活函数,也可以视作是线性的PCA降维表示。

Undercomplete AutoEncoder 中不考虑正则化部分

为了防止模型只是记住 x 和 overfitting,增加模型的泛化能力,在L中加入正则化

L(x,x̂ ) + regularizer

Sparse AutoEncoder

It’s worth noting that this is a different approach towards regularization, as we normally regularize the weights of a network, not the activations.

和上面提到的正则化不同,正则化是对网络学习得到的权重进行,而Sparse AE是对激活函数进行正则化,本质上就是在损失函数里加上能让隐向量h稀疏化的正则项。A sparse autoencoder involves a sparsity penalty Ω(h) on

the code layer h.

从PCA到AutoEncoder
从PCA到AutoEncoder

One result of this fact is that we allow our network to sensitize individual hidden layer nodes toward specific attributes of the input data. Whereas an undercomplete autoencoder will use the entire network for every observation, a sparse autoencoder will be forced to selectively activate regions of the network depending on the input data. As a result, we’ve limited the network’s capacity to memorize the input data without limiting the networks capability to extract features from the data.

也就是对于不同的输入,激活的网络结构是不一样的。而对于上面的undercomplete autoencoder 来说,对于所有的输入,网络结构都是一样的。这样我们可以在不限制网络学习特征的能力同时又限制网络记忆数据的能力。(Learning features!)

有两种正则化的方式,一种是L1正则化,另一种是KL 散度。对于每个节点来说,处于激活或者不激活状态,也就是服从伯努利分布。

两个伯努利分布的KL 散度计算如下:

从PCA到AutoEncoder

Stacked AutoEncoder

从PCA到AutoEncoder

由于包含了非线性变换,因此目标函数不再是简单的二次函数,会变成非凸问题,优化起来容易陷入局部极值。deep learning解决的问题之一,就是利用逐层优化的pretraining方式,使得在最后整体优化之前,找到一个比较好的初始解,这样即使陷入局部极值,找到的也会是比较好的局部极值。

逐层贪婪训练,每层训练的时候固定住其他层的参数不变,只训练当层参数。而不是每次训练,每层参数都处于变化中。

Denoising AutoEncoder

上面提到的各种AE都是基于input和output完全一致的,另一中提升泛化能力的做法是将input加入noise后作为input 提供给网络。

从PCA到AutoEncoder
从PCA到AutoEncoder

Contrastive AutoEncoder

for very similar inputs, the learned encoding would also be very similar 对于比较相似的输入,表示也很相似

derivative of the hidden layer activations are small with respect to the input

收缩自编码器是一种正则自编码器。它在编码h=f(x)的基础上添加了显示的正则项,鼓励 f 的导数尽可能小,它的惩罚项Ω(h) 是平方Frobenius范数(元素平方的和),作用于与编码器的函数相关偏导数的Jacobian矩阵。

从PCA到AutoEncoder

VAE and AAE

add a constraint on the encoding

network, that forces it to generate latent vectors that roughly

follow some distribution q(z | x), e.g. unit Gaussian.

从PCA到AutoEncoder

一共有两个encoder,一个decoder,绿色小原点部分是 一个 encoder 表示,黄色小原点部分是另一个encoder ,相当于噪声,棕色小圆点部分相当于采样变量。Reparameterization Trick 从服从我们将从 N(μ,σ^

2) 采样变成了从 N(0,1) 中采样,然后通过参数变换得到从N(μ,σ^2) 中采样的结果。

它本质上就是在我们常规的自编码器的基础上,对 encoder 的结果(在VAE中对应着计算均值的网络)加上了“高斯噪声”,使得结果 decoder 能够对噪声有鲁棒性;而那个额外的 KL loss(目的是让均值为 0,方差为 1),事实上就是相当于对 encoder 的一个正则项,希望 encoder 出来的东西均有零均值。

那另外一个 encoder(对应着计算方差的网络)的作用呢?它是用来动态调节噪声的强度的。

直觉上来想,当 decoder 还没有训练好时(重构误差远大于 KL loss),就会适当降低噪声(KL loss 增加),使得拟合起来容易一些(重构误差开始下降)。

反之,如果 decoder 训练得还不错时(重构误差小于 KL loss),这时候噪声就会增加(KL loss 减少),使得拟合更加困难了(重构误差又开始增加),这时候 decoder 就要想办法提高它的生成能力了。

在 VAE 中,重构跟噪声是相互对抗的,重构误差跟噪声强度是两个相互对抗的指标,而在改变噪声强度时原则上需要有保持均值不变的能力,不然我们很难确定重构误差增大了,究竟是均值变化了(encoder的锅)还是方差变大了(噪声的锅)。

而均匀分布不能做到保持均值不变的情况下改变方差,所以正态分布应该更加合理。

重参数技巧

我们将从 N(μ,σ^2) )采样变成了从 N(0,1) 中采样,然后通过参数变换得到从N(μ,σ^2) 中采样的结果。这样一来,“采样”这个操作就不用参与梯度下降了,改为采样的结果参与,使得整个模型可训练了。

从PCA到AutoEncoder

More

从PCA到AutoEncoder

推荐阅读

VAE for NLP

skip thought vectors

花式解释AutoEncoder与VAE

Reference

[1]. PRML读书会第十二章 Continuous Latent Variables(PCA,PPCA,核PCA,Autoencoder,非线性流形)

[2]. Introduction to autoencoders.

[3]. PCA and Autoencoders

[4]. Autoencoder

[5]. 变分自编码器VAE:原来是这么一回事

继续阅读