没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
第 6 章 网络优化与正则化
任何数学技巧都不能弥补信息的缺失。
— Cornelius Lanczos,1964
虽然神经网络具有非常强的表达能力,但是当应用神经网络模型到机器学
习时依然存在一些难点。主要分为两大类:
(1)优化问题:神经网络模型是一个非凸函数,再加上在深度网络中的梯
度消失问题,很难进行优化;另外,深层神经网络模型一般参数比较多,训练
数据也比较大,会导致训练的效率比较低。
(2)泛化问题:因为神经网络的拟合能力强,反而容易在训练集上产生过
拟合。因此,在训练深层神经网络时,同时也需要通过一定的正则化方法来改
进网络的泛化能力。
目前,研究者从大量的实践中总结了一些经验技巧,从优化和正则化两个
方面来提高学习效率并得到一个好的网络模型。
6.1 网络优化
深层神经网络是一个高度非线性的模型,其风险函数是一个非凸函数,因
此风险最小化是一个非凸优化问题,会存在很多局部最优点。
6.1.1 网络优化的难点
有效地学习深层神经网络的参数是一个具有挑战性的问题,其主要原因有
以下几个方面。
134 2018 年 10 月 30 日 第 6 章 网络优化与正则化
6.1.1.1 网络结构多样性
神经网络的种类非常多,比如卷积网络、循环网络等,其结构也非常不同。
有些比较深,有些比较宽。不同参数在网络中的作用也有很大的差异,比如连
接权重和偏置的不同,以及循环网络中循环连接上的权重和其它权重的不同。
由于网络结构的多样性,我们很难找到一种通用的优化方法。不同的优化
方法在不同网络结构上的差异也都比较大。
此外,网络的超参数一般也比较多,这也给优化带来很大的挑战。
6.1.1.2 高维变量的非凸优化
低维空间的非凸优化问题主要是存在一些局部最优点。基于梯度下降的优
化方法会陷入局部最优点,因此低维空间非凸优化的主要难点是如何选择初始
化参数和逃离局部最优点。深层神经网络的参数非常多,其参数学习是在非常
高维空间中的非凸优化问题,其挑战和在低维空间的非凸优化问题有所不同。
鞍点 在高维空间中,非凸优化的难点并不在于如何逃离局部最优点,而是如何
逃离鞍点(Saddle Point)[Dauphin et al., 2014]。鞍点的梯度是 0,但是在一些
鞍点的叫法是因为其形状像
马鞍。
维度上是最高点,在另一些维度上是最低点,如图6.1所示。
1
1/2
0
1/2
1
1
1/2
0
1/2
1
1
1/2
0
1/2
1
图 6.1 鞍点示例
在高维空间中,局部最优点要求在每一维度上都是最低点,这种概率非常
低。假设网络有 10, 000 维参数,一个点在某一维上是局部最低点的概率为 p,那
么在整个参数空间中,局部最优点的概率为 p
10,000
,这种可能性非常小。也就
是说高维空间中,大部分梯度为 0 的点都是鞍点。基于梯度下降的优化方法会
在鞍点附近接近于停滞,同样很难从这些鞍点中逃离。
邱锡鹏:《神经网络与深度学习》 https://nndl.github.io/
6.2 优化算法 2018 年 10 月 30 日 135
平坦底部 深层神经网络的参数非常多,并且有一定的冗余性,这导致每单个参
数对最终损失的影响都比较小,这导致了损失函数在局部最优点附近是一个平
坦的区域,称为平坦最小值(Flat Minima)[Hochreiter and Schmidhuber, 1997,
Li et al., 2017a]。并且在非常大的神经网络中,大部分的局部最小值是相等的。
虽然神经网络有一定概率收敛于比较差的局部最小值,但随着网络规模增加,网
络陷入局部最小值的概率大大降低 [Choromanska et al., 2015]。图6.2给出了一
种简单的平坦底部示例。
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
图 6.2 神经网络中的平坦底部示例
6.2 优化算法
目前,深层神经网络的参数学习主要是通过梯度下降方法来寻找一组可以
最小化结构风险的参数。在具体实现中,梯度下降法可以分为:批量梯度下降、
随机梯度下降以及小批量梯度下降三种形式。根据不同的数据量和参数量,可
以选择一种具体的实现形式。除了在收敛效果和效率上的差异,这三种方法都
存在一些共同的问题,比如 1)如何初始化参数;2)预处理数据;3)如何选择
合适的学习率,避免陷入局部最优等。
6.2.1 小批量梯度下降
目前,在训练深层神经网络时,训练数据的规模比较大。如果在梯度下降
时,每次迭代都要计算整个训练数据上的梯度需要比较多的计算资源。此外,大
规模训练集中的数据通常也会非常冗余,也没有必要在整个训练集上计算梯度。
因此,在训练深层神经网络时,经常使用小批量梯度下降算法。
邱锡鹏:《神经网络与深度学习》 https://nndl.github.io/
136 2018 年 10 月 30 日 第 6 章 网络优化与正则化
令 f(x, θ)表示一个深层神经网络,θ 为网络参数,在使用小批量梯度下降进
行优化时,每次选取K 个训练样本 I
t
= {(x
(k)
, y
(k)
)}
K
k=1
。第 t次迭代(iteration)
时损失函数关于参数 θ 的偏导数为
g
t
(θ) =
1
K
(x
(k)
,y
(k)
)∈I
t
∂L
y
(k)
, f(x
(k)
, θ)
∂θ
, (6.1)
其中 L(·) 为可微分的损失函数,K 称为批量大小(Batch Size)。
这里的损失函数忽略了正则
化项。加上 ℓ
p
正则化的损失
函数参见第6.7.1节。
第 t 次更新的梯度 g
t
定义为
g
t
, g
t
(θ
t−1
). (6.2)
使用梯度下降来更新参数,
θ
t
← θ
t
−
1
− αg
t
, (6.3)
其中 α > 0 为学习率。
每次迭代时参数更新的差值 ∆θ
t
定义为
∆θ
t
, θ
t
− θ
t−1
. (6.4)
∆θ
t
和梯度 g
t
并不需要完全一致。∆θ
t
为每次迭代时参数的实际更新方向,即
θ
t
= θ
t−1
+ ∆θ
t
。在标准的小批量梯度下降中,∆θ
t
= −αg
t
。
图6.3给出了在 MNIST数据集上,批量大小对损失下降的影响。从图6.3a可
以看出,每次迭代选取的批量样本数越多,下降效果越明显,并且下降曲线越
平滑。当每次选取一个样本时(相当于随机梯度下降),损失整体是下降趋势,
但局部看会来回震荡。从图6.3b可以看出,如果按整个数据集上的迭代次数的
来看损失变化情况,则是批量样本数越小,下降效果越明显。
Epoch(回 合) 和 Iteration
(单次更 新) 的 关 系 为 1 个
epoch 等 于 (
训练样本的数量N
批量大小K
)
次 Iterations。
0 1000 2000 3000 4000 5000
iterations
10
-3
10
-2
10
-1
10
0
10
1
loss
SGD(batchsize=1 learningrate=0.01)
SGD(batchsize=32 learningrate=0.5)
SGD(batchsize=2048 learningrate=0.5)
(a) 按每次小批量更新的损失变化
0 1 2 3 4 5 6 7 8
epochs
10
-3
10
-2
10
-1
10
0
10
1
loss
SGD(batchsize=1 learningrate=0.05)
SGD(batchsize=32 learningrate=0.5)
SGD(batchsize=2048 learningrate=0.5)
(b) 按整个数据集迭代的损失变化
图 6.3 小批量梯度下降中,批量大小对损失下降的影响
邱锡鹏:《神经网络与深度学习》 https://nndl.github.io/
6.2 优化算法 2018 年 10 月 30 日 137
为了更有效地进行训练深层神经网络,在标准的小批量梯度下降方法的基
础上,也经常使用一些改进方法以加快优化速度。常见的改进方法主要从以下
两个方面进行改进:学习率衰减和梯度方向优化。这些改进的优化方法也同样
可以应用在批量或随机梯度下降方法上。
6.2.2 学习率衰减
在梯度下降中,学习率 α 的取值非常关键,如果过大就不会收敛,如果过
小则收敛速度太慢。从经验上看,学习率在一开始要保持大些来保证收敛速度,
在收敛到最优点附近时要小些以避免来回震荡。因此,比较简单直接的学习率
调整可以通过学习率衰减(Learning Rate Decay)的方式来实现。
假设初始化学习率为 α
0
,在第 t 次迭代时的学习率 α
t
。常用的衰减方式为
可以设置为按迭代次数进行衰减。比如逆时衰减(inverse time decay)
α
t
= α
0
1
1 + β × t
, (6.5)
或指数衰减(exponential decay)
α
t
= α
0
β
t
, (6.6)
或
自然指数衰减
(
natural exponential decay
)
α
t
= α
0
exp(−β × t), (6.7)
其中 β 为衰减率,一般取值为 0.96。
除了这些固定衰减率的调整学习率方法外,还有些自适应地调整学习率的
方法,比如 AdaGrad、RMSprop、AdaDelta等。这些方法都对每个参数设置不
同的学习率。
6.2.2.1 AdaGrad 算法
在标准的梯度下降方法中,每个参数在每次迭代时都使用相同的学习率。
由于每个参数的维度上收敛速度都不相同,因此根据不同参数的收敛情况分别
设置学习率。
AdaGrad(Adaptive Gradient)算法 [Duchi et al., 2011] 是借鉴 L2 正则化
的思想,每次迭代时自适应地调整每个参数的学习率。在第 t 迭代时,先计算每
个参数梯度平方的累计值
G
t
=
t
τ =1
g
τ
⊙ g
τ
, (6.8)
其中 ⊙为按元素乘积,g
τ
∈ R
|θ|
是第 τ 次迭代时的梯度。
邱锡鹏:《神经网络与深度学习》 https://nndl.github.io/
剩余32页未读,继续阅读
禁忌的爱
- 粉丝: 20
- 资源: 334
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0