没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
第七章 网络优化与正则化
虽然神经网络具有非常强的表达能力,但是当应用神经网络模型到机器学
习时依然存在一些难点。主要分为两大类:(1)优化问题:神经网络模型是一
个非凸函数,再加上在深度网络中的梯度消失问题,很难进行优化;另外,深
度神经网络模型一般参数比较多,训练数据也比较大,会导致训练的效率比较
低。(2)泛化问题:因为神经网络的拟合能力强,反而容易在训练集上产生过
拟合。因此,在训练深度神经网络时,同时也需要掌握一定的技巧。目前,人
们在大量的实践中总结了一些经验技巧,从优化和正则化两个方面来提高学习
效率并得到一个好的网络模型。
7.1 网络优化
深度神经网络是一个高度非线性的模型,其风险函数也是一个非凸问题。
在非凸问题中,一个会存在一些局部最优点。
有效地学习深度神经网络的参数是一个具有挑战性的问题,其主要原因有
以下几个方面。
网络结构多样性 神经网络的种类非常多,比如卷积网络、循环网络等,其结
构也非常不同。有些比较深,有些比较宽。不同参数在网络中的作用也有很大
的差异,比如连接权重和偏置的不同,以及循环网络中循环连接上的权重和其
它权重的不同。
网络结构的多样性导致了很难找到一种通用的优化方法。不同的优化方法
在不同网络结构上的差异也都比较大。
此外,网络的超参数一般也比较多,这也给优化带来很大的挑战。
138 2017 年 11 月 8 日 第七章 网络优化与正则化
1
1/2
0
1/2
1
1
1/2
0
1/2
1
1
1/2
0
1/2
1
图 7.1: 鞍点示例。
高维变量的非凸优化 深度神经网络的参数非常多,其参数学习是在非常高维
空间中的非凸优化问题,其挑战和在低维空间的非凸优化问题有所不同。低维
空间的非凸优化问题主要是存在一些局部最优点。采用梯度下降方法时,不合
适的参数初始化会导致陷入局部最优点,因此主要的难点是如何选择初始化参
数和逃离局部最优点。
Dauphin et al. [2014] 指出在高维空间中,非凸优化的难点并不在于如果逃
离局部最优点,而是如何逃离鞍点。鞍点(saddle point)是梯度为 0,但是在
一些维度上是最高点,在另一些维度上是最低点,如图7.1所示。梯度下降方法
同样很难从这些鞍点中逃离。
鞍点的叫法是因为其形
状像马鞍。
目前,深度神经网络的参数学习主要是通过梯度下降方法来寻找一组可以
最小化结构风险的参数。在具体实现中,梯度下降法可以分为:批量梯度下降、
随机梯度下降以及小批量梯度下降三种形式。根据不同的数据量和参数量,可
以选择一种具体的实现形式。除了在收敛效果和效率上的差异,这三种方法都
存在一些共同的问题,比如 1)如何初始化参数;2)预处理数据;3)如何选择
合适的学习率,避免陷入局部最优等。
邱锡鹏:《神经网络与深度学习》 https://nndl.github.io/
7.1 网络优化 2017 年 11 月 8 日 139
w1
2.0
1.5
1.0
0.5
0.0
0.5
1.0
1.5
2.0
w2
2.0
1.5
1.0
0.5
0.0
0.5
1.0
1.5
2.0
0.00
0.25
0.50
0.75
1.00
1.25
1.50
1.75
2.00
图 7.2: 神经网络中的非凸优化问题。
7.1.1 参数初始化
神经网络的训练过程中的参数学习是基于梯度下降法进行优化的。梯度下
降法需要在开始训练时给每一个参数赋一个初始值。这个初始值的选取十分关
键。在感知器和 logistic 回归的训练中,我们一般将参数全部初始化为 0。但是
这在神经网络的训练中会存在一些问题。因为如果参数都为 0,在第一遍前向
计算时,所有的隐层神经元的激活值都相同。这样会导致深层神经元没有区分
性。这种现象也称为对称权重现象。
为了打破这个平衡,比较好的方式是对每个参数都随机初始化,这样使得
不同神经元之间的区分性更好。
但是一个问题是如何选取随机初始化的区间呢?如果参数太小,会导致神
经元的输入过小。经过多层之后信号就慢慢消失了。参数过小还会使得 sigmoid
型激活函数丢失非线性的能力。以 logistic 函数为例,在 0 附近基本上是近似线
性的。这样多层神经网络的优势也就不存在了。如果参数取得太大,会导致输
入状态过大。对于 sigmoid 型激活函数来说,激活值变得饱和,从而导致梯度接
近于 0。
邱锡鹏:《神经网络与深度学习》 https://nndl.github.io/
140 2017 年 11 月 8 日 第七章 网络优化与正则化
因此,如果要高质量地训练一个网络,给参数选取一个合适的初始化区间
是非常重要的。一般而言,参数初始化的区间应该不用神经元的性质进行差异
化的设置。如果一个神经元的输入连接很多,它的每个输入连接上的权重就应
该小一些,以避免神经元的输出过大(当激活函数为 ReLU 时)或过饱和(当
激活函数为 sigmoid 函数时)。
经常使用的初始化方法有以下几种:
Gaussian 分布初始化
Gaussian 初始化方法是最简单的初始化方法,参数从一个固定均值(比如
0)和固定方差(比如 0.01)的 Gaussian 分布进行随机初始化。
初始化一个深度网络时,一个比较好的初始化方案是保持每个神经元输入
的方差为一个常量。当一个神经元的输入连接数量为 n
in
时,可以设置其输入
连接权重以 N(0,
√
1
n
in
) 的 Gaussian 分布进行初始化。如果同时考虑输出连接
的数量
n
out
,则可以按
N
(0
,
√
2
n
in
+ n
out
) 的 Gaussian 分布进行初始化。
均匀分布初始化
均匀分布初始化是在一个给定的区间 [−r, r] 内采用均匀分布来初始化参
数。超参数 r 的设置也可以按神经元的连接数量进行自适应的调整。
Xavier 初 始 化 方 法 中,
Xavier 是发明者 Xavier
Glorot 的名字。
Xavier 初始化方法 Glorot and Bengio [2010] 提出一个自动计算超参数 r 的
方法,参数可以在 [−r, r] 内采用均匀分布进行初始化。
如果神经元激活函数为 logistic 函数,对于第 l − 1 到 l 层的权重参数区间 r
可以设置为
r =
√
6
n
l−1
+ n
1
, (7.1)
这里 n
l
是第 l 层神经元个数,n
l−1
是第 l − 1 层神经元个数。
对于
tanh
函数,
r
可以设置为
r = 4
√
6
n
l−1
+ n
l
. (7.2)
邱锡鹏:《神经网络与深度学习》 https://nndl.github.io/
剩余19页未读,继续阅读
胡说先森
- 粉丝: 53
- 资源: 280
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- threadmanager.cpp
- 腾讯云小程序 - 一站式开发与部署平台
- 基于JSP+Java+Servlet采用MVC模式开发的购物网站+源码(毕业设计&课程设计&项目开发)
- fastgestures安装包,模拟mac的触控板收拾,两指代表右击, 三指拖拽
- 基于组态王的升降式横移立体车库控制系统+源码(毕业设计&课程设计&项目开发)
- 基于python+Django和协同过滤算法的电影推荐系统+源码(毕业设计&课程设计&项目开发)
- 环境配置 vscode+jupyter
- 项目全部代码,还包含使用到的图片
- 项目全部代码,还包含使用到的图片
- 基于java+MapReduce实现基于物品协同过滤算法,即电影推荐系统+源码+开发文档+算法解析(毕业设计&课程设计&项目开发
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0