首页 理论教育 堆栈自编码神经网络

堆栈自编码神经网络

时间:2022-02-12 理论教育 版权反馈
【摘要】:自编码器是一种无监督学习算法,也是一种BP神经网络,它的核心思想是将输入信号进行编码,用编码之后的信号得到原始信号的重建信号,最后让重建信号与原始信号之间的误差最小。此外,SAE可视为多层BP神经网络的一种特例。稀疏自编码神经网络的训练方式本质上和BP神经网络一样,唯一不同之处在于隐藏层节点的残差公式调整为:SAE由多个自编码器逐层叠加而成。

5.4.1 自编码器的结构

SAE是一种包含多隐藏层神经元的神经网络模型,它由若干个自编码器组成。这里先介绍自编码器。

自编码器(或者说自编码神经网络)是一种无监督学习算法,也是一种BP神经网络,它的核心思想是将输入信号进行编码,用编码之后的信号得到原始信号的重建信号,最后让重建信号与原始信号之间的误差最小。自编码器的思想在计算机视觉中有广泛的应用,通过将信号编码成为另一种形式,可以有效提取信号中的主要信息,去除冗余,并且能够更加简洁地表达。

我们知道,神经网络可以以任意精度逼近任意函数。在自编码神经网络中,目标值等于输出值x,即

其中,W和b分别代表神经网络中各个节点之间的权值矩阵和偏置项向量。编码器模拟的是输出和输入之间的恒等映射,当隐藏层节点数小于输入层节点数时,隐藏层能够学习到输入的压缩表示方法,如图5.4所示。

图5.4 自编码神经网络图

在更一般的情况下,如果隐藏层节点数量很大,甚至比输入层节点数量还要多时,我们仍然可以使用自编码算法,但是这时需要加入稀疏性限制,增加了稀疏性限制的自编码器就称为稀疏自编码器。

简单地说,稀疏性限制要求隐藏层的神经元在大多数情况下处于被抑制的状态。具体来说,如果我们选择Sigmoid函数作为激活函数,那么其输出对于大部分的输入数据是0。我们用“激活度”这一概念来量化隐藏层的神经元处于激活的状态,假设表示在给定输入的情况下隐藏层第j个神经元的激活度,那么它对于m个输入数据的“平均激活度”被定义为:

对于稀疏度限制,具体来说,我们要求隐藏层节点的平均激活度=ρ,其中ρ为一个很小的常数(比如0.05)。这样,我们在优化目标函数中加入了一个惩罚因子,这个惩罚因子是基于相对熵(KL divergence)的:

其中,s 2是隐藏层(即第2层)的节点数。当而当两者差异越来越大时,相对熵会快速趋近于无穷大。

稀疏自编码神经网络的损失函数等于BP神经网络的损失函数加上一个稀疏性惩罚项:

其中,J(W,b)是网络的损失函数(无稀疏约束时),它的表达式如下:

式中,s l是第l层的节点数,n l是网络层数。

5.4.2 自编码器的训练过程

自编码神经网络的训练过程就是求解其损失函数J sparse(W,b)的最小值的过程。所采用的方法是批量梯度下降法。利用反向传播算法计算每层神经元的残差并以此更新W(l)和b(l)。此外,SAE可视为多层BP神经网络的一种特例(隐层数为1)。多层BP神经网络应用向量形式的反向传播算法总共分成以下几步:

(1)以前向传播的方式,从第2层开始直至输出层,采用以下关系式迭代计算各层神经元的激活值。

(3)对于第l层,l=n l-1,n l-2,n l-2,n l-3,…,2,计算

因此,以上由(5.26)式—(5.31)式描述的反向传播算法同样适用于SAE(在n c=3的情况下)。稀疏自编码神经网络的训练方式本质上和BP神经网络一样,唯一不同之处在于隐藏层节点的残差公式调整为:

其中,是隐藏层第i个神经元的残差。最终,自编码神经网络一次完整的迭代学习分为以下几步:

(1)对于所有l,令ΔW(l)=0,Δb(l)=0。

(2)对于i=1到m,

a)使用反向传播算法计算ΔW(l)J sparse(W,b)和Δb(l)J sparse(W,b)。

b)计算

c)计算

(3)更新权重参数:

5.4.3 堆栈自编码网络结构

SAE由多个自编码器逐层叠加而成。一个典型的SAE网络结构如图5.5所示,堆栈自编码神经网络的训练方法是贪婪逐层预训练算法,其基本思想为:首先针对深度结构神经网络的较低层,我们采用无监督学习算法和一阶梯度优化方法对其进行训练,得到第一层网络的初始参数值;然后把第一层的输出作为下一层的输入,采用和第一层同样的方法对该层参数进行优化,以此类推,逐层对原始信号作编码表达,最终可以发掘出隐含在信号内部的数据关系,实现对信号更加本质和有效的表达。在对多层进行初始化后,还需要使用监督方法对网络参数进行微调:网络层次连接后,在顶层增加一个逻辑回归层(logistic regression layer),然后自顶向下来整体微调参数,进一步提高网络的学习性能。

图5.5 堆栈自编码网络结构图

堆栈自编码神经网络的具体训练过程如下所示:

(1)根据原始输入的重建误差最小化的原则,以无监督学习的方式训练第一层的自编码器。

(2)将自编码器的隐层输出作为下一层的输入。

(3)按步骤(2)迭代初始化每一层的参数。

(4)层次连接后,最后一个隐层的输出通常作为输入连接在输出层用于有监督学习,同样初始化该层的参数。

(5)根据输出层产生的误差,反向调整整个网络的参数。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈