Autoencoder

  2019-10-9 


Autoencoder

AE可以看为一个单隐藏层的NN

目标函数为重构误差(reconstruction error),目标是使得解码器的输出与编码器的输入同分布

隐藏层单元数<输入层单元数即可用于降维,如果编码的激活函数为线性函数就成为了PCA

但现在一般隐藏层单元数>=输入层单元数比较多,这样可以挖掘更多高维特征,但容易造成神经网络的输出为输入的直接“复制”,为了解决这个问题,引入了正则随机性等等,且可以组合使用

Regularized Autoencoder

正则项自编码器

神经网络的输入直接“复制”输出的一个具体表现就在于一些神经元权重过大,使得神经网路直接变成直连通路

于是可以直接向损失函数正则项

实现方法:使用传统的加入正则项实现方法

Sparse Autoencoder

稀疏自编码器

使得参数变得稀疏,避免过多神经元被激活

引入稀疏度公式

此公式计算了第$j$个神经元在训练集$\{x^{i}\}$上激活度的平均值,那么就可以取一个足够小的$\rho$,保证$\hat{\rho}_j=\rho,j=1,2,3,\cdots$

对于$\hat{\rho}_j>>\rho$,对其使用KL散度进行惩罚,KL散度可以用于衡量两个分布的相似度(在前面这篇论文的阅读笔记:Explaining and Harnessing Adversarial Examples中使用到了这个数学工具。

向损失函数中加入KL散度

实现方法:可以设置一个三维矩阵,第一维为$||\{x^{(i)}\}||$,第二和第三维对应神经网络每一个神经元。然后在数据流经一次模型后抽取出每一层神经元的参数,作平均。抽取方法可以用我以前写的pytorch获取中间层参数、输出与可视化/一文中提到的中间层参数可视化方法

Denoising Autoencoder

降噪自编码器(DAE)

向输出加入噪声$\hat{x}$,并设置损失函数尽量减少输出的噪声,目标使得模型学习重构分布$p_{decoder}(x|\hat{x})$,增强模型健壮性

最小化

也就是要使得正确输入与加噪声的输入经过模型后还原得到的输出尽量一样

实现方法:加入噪声的方法可以有多种,比如增加高斯分布随机扰动$x\to x+\epsilon,\epsilon ~ N(μ,\sigma^2)$,也可以使用掩码方法遮蔽部分特征

补充:得分匹配是最大似然的代替。它提供了概率分布的一致性估计,使得模型在各个数据点$x$上获得与数据分布相同的得分,在这种情况下,得分是一个特定的梯度场:

DAE的训练目标可以使得AE学到能估计数据分布得分的向量场$(g(f(x))-x)$

Contractive Autoencoder

收缩自编码器(CAE)

是正则自编码器的一个变形,将正则项设置为惩罚导数——隐藏层函数对输入求导,也即其Jacobi矩阵$J_h$

注意这里是矩阵的F-范数,即矩阵每项平方求和

可以看出收缩惩罚目标是使得学习到的参数在所有方向上不变,而是在整体上进行参数的缩放,其使得函数梯度很小,所以能够很好的学习到流形结构,(而使得$J_x$很大的方向$x$,会快速改变$h$,则很可能是近似流形切平面的方向)


且听风吟