0. 前言
在非监督学习中,最典型的一类神经网络莫过于autoencoder(自编码器),它的目的是基于输入的unlabeled数据 X = { x ( 1 ) , x ( 2 ) , x ( 3 ) , . . . } X=\{x^{(1)}, x^{(2)}, x^{(3)}, ...\} X={
x(1),x(2),x(3),...},通过训练得到数据的一个降维特征表达 H = { h ( 1 ) , h ( 2 ) , h ( 3 ) , . . . } H=\{h^{(1)}, h^{(2)}, h^{(3)}, ...\} H={
h(1),h(2),h(3),...}。以图像识别为例,隐层 H H H会提取出图像的边角,将这种更为抽象的特征作为后续的多层感知网络的输入,可以更好地表达输入图像,在图像分类等任务上获得更好的性能。
从最原始的自编码器衍生出很多不同的种类:
- 降噪自编码器,接受加噪的输入来进行训练
- 稀疏自编码器,对隐层的激活输出进行正则,同一时间只有部分隐层神经元是活跃的
- 栈式自编码器,级联多个自编码器,逐层提取抽象特征
1. 自编码器
1.1 定义
自编码器分为两个部分,编码器encoder和解码器decoder。一个单隐层的AE的网络结构如下图所示:
从上图可以看到,自编码器输出层的节点数与输入层相等,训练这个网络以期望得到近似恒等函数,以下分别对encoder/decoder以及损失函数进行表示:
编码器:
h = σ ( W x + b ) h=\sigma{(Wx+b)} h=σ(Wx+b)
解码器:
x ^ = σ ( W ′ h + b ′ ) \hat{x}=\sigma{(W^{'}h+b^{'})} x^=σ(W′h+b