当前神经网络模型的难点:
那么为了得到一个好的网络模型,需要从优化和正则化两个方面来考虑。
深层神经网络是一个高度非线性的模型,其风险函数是一个非凸函数,因此风险最小化是一个非凸优化问题,会存在很多局部最优点。
网络优化的难点
网络结构的多样性:现如今的神经网络结构中,比如卷积网络、循环网络等,其结构也是不相同,有些结构比较深,有些又比较宽。不同参数在网络中的作用也有很大的差异,如连接权重和偏置的不同,以及循环网络中循环连接上的权重和其他权重不同。所以很难找到一种通用的优化方法,不同的优化方法在不同网络结构的差异也比较大。另外网络的超参数也比较多,给化带来很大的挑战。
高维度变量的非凸优化:低维空间的非凸优化问题主要存在一些局部最优点。基于梯度下降的优化方法会陷入局部最优点。因此低维空间非凸优化的主要难点是如何选择初始化参数以及逃离局部最优点。深层神经网络的参数非常多,其参数学习是在非常高维空间中的非凸优化问题,其挑战和在低维空间的非凸优化问题有所不同。
鞍点:高维空间中,非凸优化的难点并不在于如何逃离局部最优点,而是如何逃离鞍点(Saddle Point)。鞍点的梯度为0,但是在一些维度上是最高点,在另一些维度上是最低点。
但是高维空间中,局部最优点要求在每一维度上都是最低点,这样的概率是非常低的。假设网络有10000维参数,一个点在某一维度是局部最低点的概率为p,那么在整个参数空间中,局部最优点的概率为 ,可能性非常小。换句话说,高维空间,大部分梯度为0的点都是鞍点,基于梯度下降的优化方法会在鞍点附近停滞,同样也很难从鞍点中逃离。
平坦底部:深层神经网络的参数非常多,并且有一定的冗余性,这使得每个参数对最终损失的影响都比较小,这导致了损失函数在局部最优点附近是一个平坦的区域,称为平坦最小值。在非常大的神经网络中,大部分局部最小值是相等的。虽然神经网络有一定概率收敛于比较差的局部最小值,但随着网络规模增加,网络陷入局部最小值的概率将大大降低。
深层网络的参数学习主要通过梯度下降方法来寻找一组最小化结构风险的参数,一般可以分为:批量梯度下降、随机梯度下降以及小批量梯度下降三种形式。根据收敛效果和效率上的差异,这三种方法都存在一些共同的问题:(1)如何初始化参数;(2)预处理数据;(3)如何选择合适的学习率,避免陷入局部最优点。
批量梯度下降(Batch Gradient Descent,BGD)
为整个训练集,为了使得损失函数能够达到全局最优值,对权值的更新公式为:
为可微分的损失函数,m为训练集样本总个数。
它得到的会是一个全局最优解,但是每个Iteration,都要用到训练集所有的数据,如果训练集规模很大的话,计算资源占用会很大,计算效率会变慢。
随机梯度下降(Stochastic Gradient Descent,SGD)[1]
批量梯度下降每次更新参数都需要用到所有的样本,随机梯度下降的区别在于每更新一次参数所用到的样本数只有1个,且是随机选取的。
, 为样本数以内的随机数。
假如训练集有十万个样本,对比于批量梯度下降,每次迭代都需要十万个样本,随机梯度下降有可能只需要其中5万个样本就可以达到最优解。但是SGD伴随的一个问题是对噪音数据比较敏感,遇到噪音数据时,随机梯度下降的方向有可能就不是朝着最优解方向,因此优化过程比较“曲折”。另外,因为每次只用到一个样本进行参数优化的缘故,因此得到最优解之前可能需要经历成千上万次的迭代,这也影响了计算的效率。
小批量梯度下降(Mini-Batch Stochastic Gradient Decsent,MBSGD)
目前在训练深层网络时,由于数据规模比较大,在梯度下降时,每次迭代都要计算整个训练数据上的梯度需要占用很大的计算资源,大规模训练集中的数据通常是非常冗余的,没必要在整个训练集计算梯度,在训练深层网络时,经常会用到小批量梯度下降法。
令 表示一个深层神经网络, 为网络参数,在使用小批量梯度下降进行优化时,每次随机选取K个样本 ,第t次迭代(iteration)时损失函数关于参数 的偏导数为:
(这里忽略了正则化项)
K为批量大小(Batch Size)。
第t次更新的梯度 定义为:
使用梯度下降来更新参数, ( 为学习率)
每次迭代时参数更新的差值
和梯度 并不需要完全一致, 为每次迭代时参数的实际更新方向,即 ,在标准小批量梯度下降中, 。
在MNIST数据集上,批量大小对损失下降的影响:
在标准的小批量梯度下降基础上,做一些速度优化的改进,主要是从学习率衰减和梯度方向优化两个角度去考虑
梯度下降过程中,学习率α的值很重要,如果过大容易错过最优导致不会收敛,如果过小则收敛速度太慢。从经验上看,学习率一开始要保持大些来保证收敛速度,在收敛到最优点附近时要小些以避免来回震荡。
假设初始学习率为 ,在第t次迭代时的学习率 ,常用的衰减方式为可以设置为按迭代次数进行衰减,比如
逆时衰减(inverse time decay):
指数衰减(exponential decay):
自然指数衰减(natural exponential decay):
为衰减率,一般取值为0.99。
自适应学习率调整
AdaGrad算法
在第t次迭代时,先计算每个参数梯度平方的累计值:
, 为按元素乘积, 是第 次迭代的梯度。
是为了保持数值稳定性而设置的非常小的常熟,一般取值 到 ,此外这里的开平方、除、加法运算都是按位操作。
在Adagrad算法中,如果某个参数的偏导数累计比较大,其学习率相对较小;相反如果其偏导数累计较小,其学习率相对较大,整体是随着迭代次数的增加,学习率逐渐变小。
缺点是经过一定次数的迭代依然没有找到最优点,由于此时学习率已经非常小,很难再继续找到最优点。
RMSprop算法
可以避免Adagrad算法中学习率不断单调下降以至于过早衰减的缺点。
RMSprop算法首先计算每次迭代梯度 平方的指数衰减移动平均,
为衰减率,一般取值为0.9。
RMSProp算法和Adagrad算法区别在于 的计算由累积方式变成了指数衰减移动平均,在迭代过程中,每个参数的学习率并不是呈衰减趋势,既可以变大也可以变小。
AdaDelta算法
AdaDelta算法通过梯度平方的指数衰减移动平均来调整学习率,此外AdaDelta算法还引入了每次参数更新差 的平方的指数衰减权移动平均。
第t次迭代时,每次参数更新差 , 的指数衰减权移动平均为:
其中 为衰减率,此时 还未知,只能计算到 。
的计算方式和RMSprop算法一样, 为参数更新差 的指数衰减权移动平均
AdaDelta算法将RMSrop算法中的初始学习率α改为动态计算的 ,一定程度上抑制了学习率的波动。
除了调整学习率之外,还可以通过使用最近一段时间内的平均梯度来代替当前时刻的梯度作为参数更新的方向,在小批量梯度下降中,如果每次选取样本数量较小,损失会呈现只震荡的方式下降。有效的缓解梯度下降中的震荡的方式是通过梯度的移动平均来代替每次的实际梯度,并提高优化速度,称为动量法。
动量法
用之前累动量来代替真正的梯度,每次迭代的梯度可以看作是加速度。
在第t次迭代时,计算负梯度的“加权移动平均”作为参数的更新方向,
, 为动量因子,通常设为0.9。
每个参数的实际更新差值取决于最近一段时间内梯度的加权平均值:某个参数在最近一段时间内的梯度方向不一致时,其真实的参数更新幅度变小;当在一段时间内的梯度方向都一致时,其真实的参数更新幅度变大,起到加速作用,可以更快地到达最优点。
在迭代初期,梯度方向都比较一致,动量法会起到加速作用更快到达最优点。迭代后期,梯度方向会在收敛值附近震荡,动量法会起到减速的作用增加稳定性。
Nesterov加速梯度/动量法(NAG)
在动量法中,实际的参数更新方向 为上一步的参数更新方向 和当前梯度 的叠加。 可以被拆分为两步进行,先根据 更新一次得到参数 ,再用 进行更新:
,
其中 为点 上的梯度,因此在第二步更新中有些不太合理,更合理的更新方向为 上的梯度。合并更新方向为:
其中 表示损失函数在点 上的偏导数。
AdaM算法
自适应动量估计算法可以看作动量法和RMSprop的结合,不但使用动量作为参数更新方向,可以自适应调整学习率。
AdaM算法计算梯度平方 的指数加权平均以及 的指数加权平均:
其中 和 分别为两个移动平均的衰减率,通常取值为 。
可以看作是梯度的均值, 可以看作是梯度的未减去均值的方差(二阶矩)。
假设 ,那么在迭代初期 的值会比真实均值和方差要小。特别是当 都接近1时,偏差会很大,需要对偏差进行修正:
,
Adam算法的参数更新差值:
α为初始学习率,通常设定为0.001,也可以进行衰减,比如 。
NAdaM算法
类似于带有Nesterov动量项的Adam。
Nadam对学习率有更强的约束,同时对梯度的更新也有更直接的影响,一般而言,想使用带动量的RMSprop,或者Adam的地方,大多可以使用Nadam取得更好的效果。
优化方法小结
SGD
现在的SGD一般指的都是mini-batch gradient descent,SGD就是每一次迭代计算mini-batch的梯度,然后对参数进行更新,是最常见的优化方法: 完全依赖于batch。
缺点
Momentum
, , 是动量因子
特点:
Nesterov
nesterov项在梯度更新时做一个校正,避免前进太快,同时提高灵敏度。将上式展开得:
, 。
momentum和nesterov都是为了使梯度更新更加灵活,对不同情况有针对性,但是人工设置一些学习率总是不太好,因此以下为自适应学习率方法
Adagrad
特点:
缺点:
Adadelta
Adagrad会累加之前所有梯度平方,而Adadelta只累加固定大小得项,并且也不直接存储这些项,仅仅是近似计算对应平均值(滑动平均值)
特点:
RMSprop
特点:
Adam
本质上是带有动量项的RMSprop,利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率。Adam的优点主要在于经过偏置校正后,每一次迭代学习率都有个确定的范围,使得参数比较平稳。
特点
参考书籍:《神经网络与深度学习》—邱锡鹏
参考博客:
ycszen:深度学习最全优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)电话:400-123-4567
传 真:+86-123-4567
手 机:13800000000
邮 箱:admin@eyoucms.com
地 址:广东省广州市天河区88号