自编码器及其相关模型

简介

自编码器是一种无监督的神经网络模型,其核心作用是学习到输入数据的深层表示。主要应用在两方面:一是特征提取;二是非线性降维,用于高维数据的可视化,与流行学习关系密切。

本节主要介绍几种常见的自编码器及其变种网络。

1、自编码器(AutoEncoder,AE)

20世纪80年代提出,原始的AE网络是一个三层的前馈型神经网络,包括输入层、隐含层、输出层
输入层:x={x1,x2,……xi,……xn}
隐含层:h={h1,h2,……,hi,……hm}
输出层:x^={x1^,x2^,……,xi^……,xn^} 输出层的神经元个数必须和输入层神经元个数相同
整个AE有下面两个操作构成:
输入层到隐含层的编码过程:

h(x)=f(wTx+b)

隐含层到输出层的解码过程:如果w*=wT,成为tied weights

x^=f((w*)Th(x)+c)

AE是一个无监督网络,其学习目的就是将输入层的数据x通过转换得到其隐含层的表示h(x),然后由隐含层重构,还原出接近原始数据的抽象的表示x^。由此,得到构建AE的损失函数:对于二值神经网络,也就是输入层的数据非0即1,那么损失函数通常由交叉熵来表示:
这里写图片描述
若输入神经元是任意实数,则通常用均方误差来定义损失函数:
这里写图片描述
利用梯度下降法等优化方法求得w,b,c。
隐含层设计方式有两种:
1)隐含层神经元个数小于输出层神经元个数时,称为undercomplete。这种设计方式使得输入层到隐含层的变换本质上是一种降维操作。网络试图以更小的维度来表示原始数据而又不损失信息,从而得到输入层的压缩信息。当隐含层的激活函数采用线性激活函数时,自编码器也称为线性自编码器,其效果等同于PCA(主成分分析)降维。
2)隐含层神经元个数大于输出层神经元个数时,称为overcomplete。这种设计方式一般用于稀疏编码器,可以获得稀疏的特征表示,也就是隐含层中有大量的神经元值为0.

2、降噪自编码器(Denoising AutoEncoder,DAE)

当输入层含有噪声时,输入数据无法体现出原始数据的正确分布情况,那么输出层的结果肯定也包含噪声,为了避免噪声的影响,在输入层x之后又加了一层去噪声的隐含层x`,所以DAE是一个四层的自编码器结构。
去噪声的隐含层设计方法有很多,列如mask noise。设置一个噪音阈值p,0

3、栈式自编码器(Stacked AutoEncoder,SAE)

将多个自编码器叠加,利用上一层的隐含层表示作为下一层的输入,得到更抽象的表示。即x->h1->h2->……hi->……->x^
SAE的一个很重要的应用就是初始化网络权重参数,以提高训练收敛速度和减缓梯度消失。对于有监督学习来说,主要从以下两个阶段作用于网络。
1)逐层预训练
逐层预训练是指通过自编码器来训练每一层的参数,作为神经网络的初始化参数。
2)微调
通过上一步预训练得到的权重来初始化网络,接下来通过梯度下降法最优化损失函数迭代网络获得最优参数。

4、稀疏编码器(Sparse Coding)

稀疏编码器是自编码器的变种网络,能够学习到输入数据的稀疏特征表示,因此被广泛用于无监督的特征提取学习中。
数学表示:稀疏编码器和自编码器一样都是三层网络结构,对于任意的输入数据x,期望模型都能得到隐含层的表示h和输出层的表示x^,且x、h、x^满足下列两个性质:
1)隐含层向量是稀疏的,即隐含层中有尽可能多的0值
2)输出层数据能尽可能还原输入数据

猜你喜欢

转载自blog.csdn.net/qq_31425127/article/details/80570291