1.1 自动编码器(AutoEncoder,AE)
自动编码器(AutoEncoder,AE)就是一种尽可能复现输入信号的神经网络,其输出向量与输入向量同维,常按照输入向量的某种形式,通过隐层学习一个数据的表示或对原始数据进行有效编码。值得注意的是,这种自编码器是一种不利用类标签的非线性特征提取方法, 就方法本身而言, 这种特征提取的目的在于保留和获得更好的信息表示, 而不是执行分类任务,尽管有时这两个目标是相关的。
一个典型的最简单的自动编码器拥有一个表示原始数据或者输入特征向量的输入层,一个表示特征转换的隐层和一个跟输入层匹配、 用于信息重构的输出层,如图一所示。当隐层数目大于 1 时, 自动编码器就被视为深层结构,我们称其为堆叠式自动编码器,而我们通常所说的自动编码器指的都是隐层数为1层的结构。自动编码器的主要目标是让输入值和输出值相等,所以首先用 W 1 W_1 W1对输入进行编码,经过激活函数后,再用 W 2 W_2 W2进行解码,而编码层和解码层的权重 W 1 W_1 W1、 W 2 W_2 W2通常取为互为转置矩阵,即 W 2 = W 1 T W_2=W_1^T W2=W1T,这便是自动编码器的核心思想:先编码,后解码,前后保持不变。
图
一
自
动
编
码
器
结
构
图一 \ 自动编码器结构
图一 自动编码器结构
除了上述介绍的最典型的自动编码器结构,还有其他几种自动编码器的变形结构。例如,如果自动编码器的基础上加上L1的正规性限制(L1主要是约束每一层中的节点中大部分都要为0,只有少数不为0,这就是Sparse名字的来源),我们就可以得到稀疏自动编码器(SAE,Sparse AutoEncoder)。还有,如果在自动编码器上加入了一个规则项,使其对权重值进行惩罚,就得到了收缩自动编码器(CAE,Contractive AutoEncoder)。此外,如果在网络的可视层(即数据的输入层)引入随机噪声,然后再进行编解码来恢复输入层的数据或特征,就得到了降噪自动编码器(DAE,Denoise AutoEncoder)。
单隐层的自动编码器,充其量也就是个强化补丁版PCA(主成分分析),只用一次好不过瘾。于是Bengio等人在2007年的 “Greedy Layer-Wise Training of Deep Networks”一文中,仿照堆叠受限玻尔兹曼机(RBM)来构成深度置信网络(DBN)的方法,提出堆叠式自动编码器(Stacked AutoEncoder)。接下来,就将对其中的堆叠式降噪自动编码器(Stacked Denoise AutoEncoder)进行详细地分析。
1.2 堆叠式降噪自动编码器(Stacked Denoise AutoEncoder,SDAE)
对于单隐层的自动编码器,通常利用反向传播算法的诸多变种之一来进行训练(其中最典型的方法是随机梯度下降法), 就可以取得非常有效的结果。但是,如果仍将其应用于多隐层的网络中,反向传播的训练方法就会产生一些问题:通过最初的几层后, 误差会变得极小, 训练也随之变得无效。尽管更多先进的反向传播方法一定程度上缓解了这一问题, 但依然无法解决学习速度缓慢的问题,尤其是当训练数据量有限时, 该问题更为明显。 正如前面所提到的,如果可以通过把每一层当作一个简单的自解码器来进行预训练,然后再进行堆叠,那么训练效率就会得到大大地提高。正如图二所示,先对每个单隐层的降噪自动编码器单元进行无监督预训练,然后再进行堆叠,最后进行整体的反向调优训练,就得到了一个两层隐藏层结构的堆叠式降噪自动编码器。
图
二
堆
叠
式
降
噪
自
动
编
码
器
结
构
图二\ 堆叠式降噪自动编码器结构
图二 堆叠式降噪自动编码器结构
下面详细介绍一下构建上述两层隐藏层结构的降噪自动编码器的具体步骤。
- 首先对第一个DA单元进行预训练,其中
X
^
\hat X
X^为恢复后的输入数据或特征,
X
X
X为未被噪声污染的原始输入数据或特征,
y
y
y为被噪声污染后的输入数据或特征,
σ
(
⋅
)
\sigma(\cdot)
σ(⋅)为sigmoid函数:
图 三 对 第 一 个 D A 单 元 进 行 预 训 练 图三 \ 对第一个DA单元进行预训练 图三 对第一个DA单元进行预训练 - 第一个自动编码器的输出可以表示如下:
h ( y ) = σ ( W 1 y , b 1 ) h(y)=\sigma(W_1y,b_1) h(y)=σ(W1y,b1)
X ^ = W 1 T h ( y ) + b 2 \hat X=W_1^Th(y)+b_2 X^=W1Th(y)+b2
采用最小均方差作为代价函数,且利用梯度下降的方法进行权重值W和偏置值b的更新:
J ( W 1 , b 1 , b 2 ) = ∑ i n ∣ ∣ X i − X ^ i ∣ ∣ 2 2 J(W_1,b_1,b_2)=\sum^{n}_{i}||X_i-\hat X_i||_2^2 J(W1,b1,b2)=i∑n∣∣Xi−X^i∣∣22
( W 1 , b 1 , b 2 ) ← a r g m i n ( J ( W 1 , b 1 , b 2 ) ) (W_1,b_1,b_2)\leftarrow arg\ min(J(W_1,b_1,b_2)) (W1,b1,b2)←arg min(J(W1,b1,b2))
其中梯度下降法的具体计算方式如下:
W 1 T : Δ W i , j = ϵ ⋅ ∂ J ∂ X ^ i ⋅ ∂ X ^ i ∂ W i , j W_1^T:\Delta W_{i,j}=\epsilon\cdot \frac {\partial J}{\partial \hat X_i}\cdot\frac {\partial \hat X_i}{\partial W_{i,j}} W1T:ΔWi,j=ϵ⋅∂X^i∂J⋅∂Wi,j∂X^i
b 2 : Δ b i = ϵ ⋅ ∂ J ∂ X ^ i ⋅ ∂ X ^ i ∂ b i b_2:\Delta b_i=\epsilon\cdot \frac {\partial J}{\partial \hat X_i}\cdot\frac {\partial \hat X_i}{\partial b_i} b2:Δbi=ϵ⋅∂X^i∂J⋅∂bi∂X^i
b 1 : Δ b i = ϵ ⋅ ∂ J ∂ X ^ i ⋅ ∂ X ^ i ∂ h ( y ) ⋅ ∂ h ( y ) ∂ b i b_1:\Delta b_i=\epsilon\cdot \frac {\partial J}{\partial \hat X_i}\cdot\frac {\partial \hat X_i}{\partial h(y)}\cdot\frac {\partial h(y)}{\partial b_i} b1:Δbi=ϵ⋅∂X^i∂J⋅∂h(y)∂X^i⋅∂bi∂h(y)
预训练完毕后,去掉输出层及其相应的权重和偏置,只保留输入层和隐藏层的 W 1 W_1 W1和 b 1 b_1 b1即可。然后将第一个DA单元的隐藏层作为第二个DA单元的输入,进行第二个DA单元的预训练如下所示:
图 四 对 第 二 个 D A 单 元 进 行 预 训 练 图四\ 对第二个DA单元进行预训练 图四 对第二个DA单元进行预训练
-
第二个降噪自动编码器的输出可以表示如下:
h ( h ( y ) ) = σ ( W 2 h ( y ) , b 2 ) h(h(y))=\sigma(W_2h(y),b_2) h(h(y))=σ(W2h(y),b2)
h ( X ^ ) = W 2 T h ( h ( y ) + b 3 ) h(\hat X)=W_2^Th(h(y)+b_3) h(X^)=W2Th(h(y)+b3)
采用最小均方差作为代价函数,且利用梯度下降的方法进行权重值W和偏置值b的更新:
J ( W 2 , b 2 , b 3 ) = ∑ i n ∣ ∣ h ( X i ) − h ( X ^ i ) ∣ ∣ 2 2 J(W_2,b_2,b_3)=\sum^{n}_{i}||h(X_i)-h(\hat X_i)||_2^2 J(W2,b2,b3)=i∑n∣∣h(Xi)−h(X^i)∣∣22
( W 2 , b 2 , b 3 ) ← a r g m i n ( J ( W 2 , b 2 , b 3 ) ) (W_2,b_2,b_3)\leftarrow arg\ min(J(W_2,b_2,b_3)) (W2,b2,b3)←arg min(J(W2,b2,b3))
其中梯度下降法的具体计算方式如下:
W 2 T : Δ W i , j = ϵ ⋅ ∂ J ∂ h ( X ^ i ) ⋅ ∂ h ( X ^ i ) ∂ W i , j W_2^T:\Delta W_{i,j}=\epsilon\cdot \frac {\partial J}{\partial h(\hat X_i)}\cdot\frac {\partial h(\hat X_i)}{\partial W_{i,j}} W2T:ΔWi,j=ϵ⋅∂h(X^i)∂J⋅∂Wi,j∂h(X^i)
b 3 : Δ b i = ϵ ⋅ ∂ J ∂ h ( X ^ i ) ⋅ ∂ h ( X ^ i ) ∂ b i b_3:\Delta b_i=\epsilon\cdot \frac {\partial J}{\partial h(\hat X_i)}\cdot\frac {\partial h(\hat X_i)}{\partial b_i} b3:Δbi=ϵ⋅∂h(X^i)∂J⋅∂bi∂h(X^i)
b 2 : Δ b i = ϵ ⋅ ∂ J ∂ h ( X ^ i ) ⋅ ∂ h ( X ^ i ) ∂ h ( h ( y ) ) ⋅ ∂ h ( h ( y ) ) ∂ b i b_2:\Delta b_i=\epsilon\cdot \frac {\partial J}{\partial h(\hat X_i)}\cdot\frac {\partial h(\hat X_i)}{\partial h(h(y))}\cdot\frac {\partial h(h(y))}{\partial b_i} b2:Δbi=ϵ⋅∂h(X^i)∂J⋅∂h(h(y))∂h(X^i)⋅∂bi∂h(h(y)) -
第二个DA单元预训练完毕后,去掉其输出层和相应的权重和偏置,只保留输入层和隐藏层的 W 2 W_2 W2和 b 2 b_2 b2,并将其堆叠在第一个DA单元上即可。最后,再第二个DA单元的隐藏层之上添加一层输出层(对输出层的权重值 W 3 W_3 W3和 b 3 b_3 b3偏置进行随机初始化即可),进行解码恢复。
-
两个DA单元的预训练完毕后,最后要进行的是整体的反向调优训练。调优训练的代价函数也可以采用上述提到的代价函数,并利用梯度下降法自顶到底(预训练时的反向误差传播只有两层,而这里的误差反向传播为三层)进行权重和偏置值的更新。
参考文献:
- 文章:Li Deng, A tutorial survey of architectures, algorithms, and applications for deep learning, (2014,APSIPA Transactions on Signal and Information Processing)
- 博客:《自动编码器》,网址:https://www.cnblogs.com/taojake-ML/p/6475422.html