没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
21页
自动编码机是当前深度学习研究的热点之一,被使用在很多重要的应用领域。这里仅举一个有趣的例子,大家知道百度推出的上传你的照片,系统帮你找到与你像的明星这个活动吗?其实这个功能就可以用自动编码机来实现,首先,我们将已经训练好的自动编码机的输入层和中间层组成的网络拿出来,将所有明星的脸进行压缩,得到一个人脸向量,将其保存起来。然后,在普通用户上传了自己的照片后,系统将用户照片输入自动编码机的输入层,从中间层得到该用户的人脸向量。最后,用用户的人脸向量与明星的人脸向量进行比较,找出向量距离最近的一个或几个明星,再将明星的照片作为与用户最像的照片返回给用户。百度这项服务推出的时间较早,所以它应该不是基于自动编码机实现的,但是使用自动编码机完全可以实现这个功能,有兴趣的读者可以试一下。
资源推荐
资源详情
资源评论
自动编码机
截至目前为止,我们所讨论的神经网络技术,如线性回归模型、逻辑回归模型、多层
感知器(MLP)、多层卷积神经网络(CNN),都可以视为前馈神经网络的变形,都会采用
信号前向传播及误差反向传播修正连接权值,采用有监督学习方式,解决样本分类问题。
从本章开始,我们将介绍与此有些不同的神经网络架构,即自动编码机的网络。自动
编码机属于非监督学习,不需要对训练样本进行标记。自动编码机由三层网络组成,输入
层神经元数量与输出层神经元数量相等,中间层神经元数量少于输入层和输出层神经元数
量。在网络训练期间,每个训练样本经过网络都会在输出层产生一个新的信号,网络学习
的目的就是使输出信号与输入信号尽量相似。自动编码机训练结束之后由两部分组成,首
先是输入层和中间层,可以用这个网络对信号进行压缩;其次是中间层和输出层,可以将
压缩的信号进行还原。
在本章中,我们将先讲述自动编码机原理;然后分别介绍自动编码机的两种主流扩展:
去噪自动编码机、稀疏自动编码机;最后分别给出运行实例,讲述一个自动编码机的实际
应用场景。自动编码机最主要的用途是采用分层训练,堆叠成深层网络,这种应用场景将
在下一章讲述,并以 MNIST 手写数字识别为例讲述堆叠去噪自动编码机的应用。
8.1 自动编码机概述
自动编码机是当前深度学习研究的热点之一,被使用在很多重要的应用领域。这里仅
举一个有趣的例子,大家知道百度推出的上传你的照片,系统帮你找到与你像的明星这个
活动吗?其实这个功能就可以用自动编码机来实现,首先,我们将已经训练好的自动编码
机的输入层和中间层组成的网络拿出来,将所有明星的脸进行压缩,得到一个人脸向量,
第 8 章 自动编码机
-287-
将其保存起来。然后,在普通用户上传了自己的照片后,系统将用户照片输入自动编码机
的输入层,从中间层得到该用户的人脸向量。最后,用用户的人脸向量与明星的人脸向量
进行比较,找出向量距离最近的一个或几个明星,再将明星的照片作为与用户最像的照片
返回给用户。百度这项服务推出的时间较早,所以它应该不是基于自动编码机实现的,但
是使用自动编码机完全可以实现这个功能,有兴趣的读者可以试一下。
8.1.1 自动编码机原理
假设有一个 d 维输入信号 x,经过输入层到达中间层,信号变为 y,可以用以下公式
表示:
=
(
+
)
(1)
式中,f 为一个非线性函数,如 Sigmol 函数、双曲正切函数或 ReLU 函数。W 是输入层到
中间层的连接权值,b 为中间层的 Bias 值,信号 y 经过解码层解码,输出到 d 个神经元的
输出层,公式如下:
=
(
+
)
(2)
式中,s 为一个非线性函数,如 Sigmol 函数。
是中间层到输出层的连接权值,
为输出
层的 Bias 值。
在通常情况下,有
=
,即中间层到输出层连接权值矩阵是输入层到中间层连接
权值矩阵的转置,当然可以没有这种关系,不过多数情况下取二者相等,在本书中,我们
就取二者相等。这时整个网络的参数就变为:,,
。
当前的问题就变成通过调整网络参数 ,,
使得最终输出 z 与原始输入信号 x 尽量
接近。
如果将输入层与中间层之间的函数 f 变为线性函数,将最终输出层信号 z 与原始输入信
号的误差变为平方误差,则:
(
,
)
=
‖
−
‖
(3)
则这个问题就变成了一个线性代数中的主成分分析问题。假设中间层有 k 个节点,就
变成由输入信号 x 的前 k 个主成分项来近似表示原始输入信号,我们会在深度学习数学基
础的线性代数章节中详细分析这一过程。
因为 y 可以视为 x 的有损压缩形式,通过优化算法,可以对训练样本产生很好的压缩效果,
同时在测试样本集上有很好的表现,但是并不能保证网络在所有样本上都有好的压缩效果。
8.1.2 去噪自动编码机
我们可以通过在编解码过程中添加随机噪声来解决这一问题,这也是我们把现在要介
深度学习算法实践(基于 Theano 和 TensorFlow)
-288-
绍的网络称为去噪自动编码机的原因。
这个方法的核心思想很简单,就是随机地将原始信号的一些维度数值变为 0,有时甚至
可以达到一半左右,将这个加入随机噪声的信号输入到去噪自动编码器,计算得到的输
出与原始输入信号之间的误差,再采用前面的随机梯度下降算法对权值进行调整,使误
差达到最小。如果网络可以做到这一点,就可以视为网络自动将人为加入的随机噪声去
掉了。
为什么要这样做呢?以图像信号为例,很多信号内容是冗余的,去掉之后不影响信息
量,例如当图像信号有一些雪花时,还是可以识别出图像内容的。这说明让自动编解码机
去噪是可能的。加入噪声是因为人对图像内容的理解,完全可以在某些信息缺失的情况下
得出结论,如图像中的物体被遮盖或破损时,我们依然可以识别图像中的物体。去噪自动
编码机通过加入随机噪声,试图使神经网络也具有与人类类似的能力。
8.1.3 稀疏自动编码机
随着对自动编码机的研究,研究者们发现,当中间层神经元个数大于输入层神经元个
数时,采用非线性编码和随机梯度下降算法时,网络误差和泛化的效果会更好一些。
这是什么原因呢?因为采用的是随机梯度下降和早期终止优化算法,自动编码器编码
层非线性神经元的连接权值要非常小,这样才能模拟出线性变换的效果。同时,解码网络
又需要非常大的权值才能有效恢复原始信号(可以想象成编码层是乘以一个数,而解码层
是乘以这个数的倒数),而优化算法很难产生特别大的连接权值。因此,自动编码机只能拟
合于训练样本集。增加中间层神经元的数量,可以在一定程度上解决这个问题。
但是,如果把自动编码机的编码层视为对输入信号的压缩,且中间层的神经元数量多
于输入层,那么不仅不能实现压缩,反而使信号扩大了。为此,很多研究人员提出,可以
通过向中间层神经元引入稀疏性,使大部分神经元为 0 或接近 0,从而达到信号压缩的目的。
从实践来看,这种方法产生的效果还不错。
由于在实际中得到了广泛应用,我们将在本节详细介绍稀疏自动编码机理论。
假设我们有一组没有标记的训练样本:
()
,
()
,⋯,
()
,
()
∈ℝ
。
我们将这组训练样本输入到自动编码机,自动编码机的输出层输出
()
∈ℝ
,与输入
信号的维度相同,自动编码机通过误差反向传播算法,使得输出信号
()
与输入信号
()
尽
量相同。同时,由于可以自由选择隐藏层神经元数目,所以可以实现各种需要的特性。在
这节里,我们主要通过隐藏层的稀疏性来实现输入信号的特征提取。
自动编码机的网络架构如图 8.1 所示。
第 8 章 自动编码机
-289-
图 8.1 自动编码机的网络架构
以 MNIST 手写数字识别为例,我们知道图像分辨率为 28×28,所以输入信号为 28×28=
784 维,即 n=784。假设中间层的神经元数为 500,输出层神经元数为 784。先来介绍一下
所使用的符号,详细信息见第 4 章多层感知器模型。用 x 表示输入信号,其上标表示是第
几个训练样本;用 a 表示网络层输出,其上标表示是哪层的输出;用
表示第二层神经元
个数。现在的网络训练任务就是:
()
=
(
)
=
()
,即输出信号与输入信号相同。这样训
练完成的网络,如果将
()
输入到输出层,则可以在输出层得到原始的输入信号。由上面的
分析可以看出,可以将中间层的输出视为原始输入信号的压缩信号,同时可以视中间层输
出为原始输入信号的特征。正是因为以上特性,才使自动编码机在深度学习中得到了越来
越广泛的应用。
但是使用自动编码机有一个难点,就是输出层输出
()
可以视为 x 的有损压缩形式,通
过优化算法,可以对训练样本产生很好的压缩效果,同时在测试样本集上有很好的表现,
但是并不能保证网络在所有样本上都有好的压缩效果。
要想解决这个问题,基本有两种策略:一种策略是使用去噪自动编码机,另一种策略
就是使用稀疏自动编码机。
稀疏自动编码机的基本思想是不要求中间层神经元数量小于输入层,但是限制中间层
必须具有稀疏性,这样虽然中间层神经元数量可能多于输入信号,但是由于具有稀疏性,
也可以压缩输入信号或发现原始输入信号的特征。
我们设定中间层神经元采用 Sigmoid 函数,规定当神经元输出接近 1 的时候,称其为激
活状态;当神经元输出接近 0 时,称其为非激活状态。由于稀疏性可知,中间层神经元大
部分时间都应该处于非激活状态。而且在某一时刻,中间层多数神经元也需要处于非激活
状态。
L1
L2
L3
x
0
=1
x
1
x
2
x
3
x
4
x
5
x
6
x
0
=1
1
2
3
4
5
6
深度学习算法实践(基于 Theano 和 TensorFlow)
-290-
在多层感知器模型中,采用
()
代表第 i 层第 j 个神经元的输出,这里我们仍沿用这个
表示法,但是稀疏自动编码机具有稀疏性,所以中间层神经元在多数时间都处于非激活状
态,只有在少数情况下才处于激活状态。我们希望记录下中间层神经元在每个输入信号的
状态,因此引入以下符号:
()
()
,代表第 2 层第 j 个神经元在第 i 个样本下的输出值。
定义中间层神经元在整个训练样本集上的平均激活值为:
=
1
()
()
(4)
定义稀疏参数为,其为一个接近 0 的数,并且希望=
。在实际中,稀疏参数通常
取 0.05。
我们希望
=,可以视为一个优化问题,即希望中间层每个神经元的激活都与稀疏参
数尽量接近。为此可以对与稀疏参数不一致的中间层神经元进行惩罚,例如:
log
+
(
1−
)
log
1−
1−
(5)
其实上式就是 KL 散度公式,用于衡量
、之间的相似程度,KL 散度的定义为:
KL||
(6)
我们知道,KL||
表示以为均值的伯努利分布变量和以
为均值的伯努利分布变量
之间的相似关系。如果=
,则KL||
=0,、
相差越大,KL||
的值也越大。
对于稀疏自动编码机我们可以定义以下代价函数:
(
,
)
=
(
,
)
+ KL||
(7)
式中,
(
,
)
为在多层感知器中定义的代价函数,为稀疏惩罚项系数。因为 W、b 决定中
间层神经元输出,因此可以决定
。
稀疏自动编码机的训练过程与多层感知器模型非常相似,所以在这里就不详细展开了,
只讲解其中不同的部分,其余部分读者可以参考多层感知器模型的介绍。
我们来回忆一下多层感知器模型训练算法,首先需要计算各层误差
()
,然后求代价函
数对参数的偏导,最后调整参数值。在这里,只是求中间层误差时与多层感知器模型不同,
剩余20页未读,继续阅读
资源评论
好知识传播者
- 粉丝: 483
- 资源: 4204
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功