自编码器--简介


自编码器(autoencoder, AE)是一类在半监督学习和非监督学习中使用的人工神经网络(Artificial Neural Networks, ANNs),其功能是通过将输入信息作为学习目标,对输入信息进行表征学习(representation learning)。

自编码器包含编码器(encoder)和解码器(decoder)两部分。按学习范式,自编码器可以被分为收缩自编码器(undercomplete autoencoder)、正则自编码器(regularized autoencoder)和变分自编码器(Variational AutoEncoder, VAE),其中前两者是判别模型、后者是生成模型。按构筑类型,自编码器可以是前馈结构或递归结构的神经网络。

自编码器--简介

自编码包括两个过程:encode和decode,输入图片通过encode进行处理,得到code,再经过decode处理得到输出,控制encode的输出维数,就相当于强迫encode过程以低维参数学习高维特征,这导致的结果和PCA类似。

自编码器--简介

高维数据对于感官体验总是不友好,如果将输入降低至二维,放在二维平面中就会更加直观,下图是MNIST数据集做自编码,上面是PCA的结果,下面是自编码的结果:
自编码器--简介

encode和decode两个过程可以理解成互为反函数,在encode过程不断降维,在decode过程提高维度。当自编码过程中用卷积操作提取特征,相当于encode过程为一个深度卷积神经网络,好多层的卷积池化,那么decode过程就需要进行反卷积和反池化。

自编码器--简介

反池化

池化过程实际上就是降维过程,假设图片大小为32x32,池化大小为2x2,就相当于将图片中相邻的2x2个像素点替换为四个点中最大数值(max-pooling),池化处理之后得到的图片大小为16x16,反池化过程则需要将16x16的图片变为32x32,其实在池化过程中,会标记2x2像素点中最大值的位置,在反池化过程将最大值还原,其他位置填0。

反卷积

卷积过程是一个矩阵在另一个矩阵上面做滑动运算,反卷积也是一样,实际上,反卷积就是卷积,假设有5个像素点,卷积核为3,步长为1,卷积之后生成3个feature,我们想象中的反卷积应该是中间所示的情形,由3个输入生成5个输出,如果我们将反卷积中的输入做2的padding,这样原本3个输入变成7个输入,再做卷积,生成5个输出,对比左右两侧的图,是完全相反的,所以,我们加上padding,使反卷积变成了卷积运算。

去噪自编码器

去噪自动编码器(DAE)是在传统自动编码器的基础上,通过向输入中注入噪声,然后利用含噪声的“腐坏”的样本去重构不含噪声的“干净”输入,这是与传统编码器的主要区别。同时这种训练策略也使得DAE能够学习到更能反映输入数据的本质特征。传统自动编码器单纯依靠最小化输入与重构信号之间的误差来得到输入的隐含层特征表示,但这种训练策略并不能保证提取到数据的本质特征,因为单纯依靠最小化重构误差可能导致编码器学习到的特征仅仅是原始输入的复制。为避免上述问题,引入噪声注入策略,这就是DAE产生的动机。

DAE仍然是通过最小化输入与重构信号之间的误差来对网络参数进行调整,这一点传统的自动编码器相同;不同的是,DAE的隐含层表示并不是由原始输入直接映射得到,而是由原始输入的“腐坏”版本得到。DAE按照一定比例将原始输入中的元素随机置零,对剩余元素不作处理,便得到了原始输入的“腐坏”版本。相当于向原始输入中引入一定比例的“空白”元素,减少了原始输入包含的信息;而DAE就是通过对和进行学习,尝试着去填补丢失的信息,进而学习到的数据结构,使得提取到的特征更能反映原始输入的特点。

自编码器--简介
自编码器--简介

稀疏自编码器

稀疏自编码背后的思想是,高维而稀疏的表达是好的。一般而言,不会指定隐层表达h中哪些节点是被抑制的(对于sigmoid单元即输出为0),而是指定一个稀疏性参数ρ,代表隐藏神经元的平均活跃程度(在训练集上取平均)。比如,当ρ=0.05时,可以认为隐层节点在95%的时间里都是被一直的,只有5%的机会被**。实际上,为了满足这一条件,隐层神经元的活跃度需要接近于0。

稀疏性限制是指:若**函数是sigmoid,则当神经元的输出接近于1的时候认为神经元被**,输出接近于0的时候认为神经元被抑制。使得大部分神经元别抑制的限制叫做稀疏性限制。若**函数是tanh,则当神经元的输出接近于-1的时候认为神经元是被抑制的。

补充:稀疏限制和L1/L2正则化的关系
①稀疏限制是对**函数的结果增加限制,使得尽量多的**函数的结果为0(如果**函数是tanh,则为-1)
②L2/L1是对参数增加限制,使得尽可能多的参数为0。
若自编码器编码函数f(wx+b),若f是一个线性函数,则编码器便可以写成wx+b,限制**函数的结果尽量为0,即是限制w尽量为0,此时稀疏限制和正则化限制相同
自编码器--简介
如上图所示,浅色的神经元表示被抑制的神经元,深色的神经元表示被**的神经元。通过稀疏自编码器,我们没有限制隐藏层的单元数,但是防止了网络过度记忆的情况。
自编码器--简介
自编码器--简介
KL散度经常作为惩罚因子。

变分自编码器

变分编码器类似自编码器在中间添加了噪音。从数据增强的角度来说,增加噪音可以提高生成的数据的多样性,所以变分编码器自身的特点非常适用于数据增强。
自编码器--简介
变分自编码器的隐含层设计为连续的分布以便进行随机采样和插值,编码器输出两个n维向量,分别为均值向量u以及标准差向量sigma;随后通过对u和sigam作为均值和方差采样得到随机变量x,n次采样后形成n维采样后结果作为编码输出,送入后续的解码器

在模型训练时,希望得到尽量互相靠近但依然有一定距离的编码,以便在隐含层中进行插值并重建出新的样本。为了实现满足要求的编码需要在损失函数中引入Kullback-Leibler散度(KL散度)。KL散度描述两个概率分布之间的发散程度。最小化KL散度在这里意味着优化概率分布的参数(μ,σ)尽可能的接近目标分布。

收缩自编码器

为了提高对训练集数据点周围小扰动的鲁棒性,收缩自编码器在基础自编码器上添加了正则项,其形式为编码器的映射 f 关于输入 x 的 Jacobian 矩阵的 Frobenius 范数(具体形式如下),目的是迫使其学习在训练样本上有更强收缩作用的映射。
自编码器--简介
其中 L 是重构误差,形式为平方误差(线性自编码器)或者交叉熵损失(非线性误差),而λ 则是控制正则化强度的超参数。