基于全连接神经网络的优化算法


主要介绍小批量梯度下降算法、动量梯度下降算法、RMSProp算法、Adam算法,结论:这四种优化算法默认选择Adam优化算法。

小批量梯度下降算法

梯度下降算法包含全批量梯度下降、小批量梯度下降、随机梯度下降算法。全批量梯度下降算法每次训练处理的是全部的数据集,当在训练样本数量庞大的时候,一次迭代耗时过长,而且在此过程中只做一次梯度下降。而小批量梯度下降每次训练Mini_batch_size条数据,在一个周期中将所有的样本训练一次,进行了更多次的梯度下降。因此在对神经网络模型优化时使用小批量梯度下降算法更为合适。当Mini_batch_size的大小为1时就是随机梯度下降,当Mini_batch_size的大小为整个训练集时就是全批量梯度下降。在神经网络算法中,常常使用随机梯度下降来表示小批量梯度下降算法。

随机梯度下降的关键为梯度使用小规模的样本近似估计,实现的时候就是在算法的每一步,在训练集中随机选取一个小批量样本,使用这个小批量样本的梯度均值作为整体样本的梯度估计,然后进行梯度下降。

算法1展示了该算法具体进行梯度下降的过程。
基于全连接神经网络的优化算法

使用随机梯度下降法时,损失值并不是一直降低的,这是因为该算法的梯度估计引入了噪声[15],因此如果该样本在进行梯度下降时所指的方向错误,则会远离全局最小值,不过大部分情况下朝着全局最小值移动。因此虽然存在噪声,但是损失值在整体上是呈现降低的趋势。另外由于噪声的存在,使用随机梯度下降法进行优化时一般不会收敛,而是在局部最小值附近来回波动。对于小批量样本的数量受存储器的存储容量限制,因此将其范围设置为[(32),(64),(128),(256)],以提高其运算效率。

动量梯度下降算法

尽管随机梯度下降法是当前经常使用的优化方法,不过有时其学习会很慢。引入动量的目的就是加速学习,尤其是应对高曲率、小但方向一致的梯度以及带噪声的梯度的情况。动量梯度下降算法积累历史梯度指数衰减的移动平均,并且沿该方向下降,其核心就是计算梯度的指数加权平均数,然后利用该梯度估计去更新权重。

算法2展示了该算法具体进行梯度下降的过程,其中动量参数设置为0.9。
基于全连接神经网络的优化算法

如果把梯度下降的过程比作小球由山坡滚向山谷的过程,损失值相当于小球当前的高度,优化的过程就是小球滚向山谷的过程。设小球的位置是x,每次移动dx, x处的高度为损失值。那么普通的梯度下降法对应的小球滚动是这样的:在出发点A处,计算坡度最陡的方向,沿着该方向移动到B点,然后停下来。在B点再计算坡度最陡的方向,沿该方向走一段再停下,然后重复上述步骤。可以看出小球每到一个位置都必须停下来,采用类似盲人下山的方式,用拐杖探明坡度最陡的方向,沿此方向移动一步后停下来,重复该过程直到到达山谷。动量梯度下降法对应的小球滚动过程则是在其从某个位置A滚动位置点B时,不停止而是此时小球获得一定速度,再继续滚动时,小球在此速度的基础上继续滚动,从而加速到达山谷的过程。所以这个过程中含有一个速度变量,利用该变量更新参数,该变量积累最近的梯度信息,当梯度方向一致时,速度增快从而加速收敛;当梯度方向不一致时,可以达到减小路径的曲折程度的效果。

RMSProp算法

随机梯度下降算法和动量梯度下降算法都是对参数向量进行整体操作,对向量每个元素的调整都是一样的,而所有的元素要同时调整到一个较优的学习率是很困难的,需要经过反复测试,耗费大量的计算资源,因此自适应的调整学习率,甚至是逐参数的自适应调整学习率是当下研究的热点。这些方法一般会引入新的超参数,但是训练集对这些超参数不敏感,参数设置比较容易。

凸优化中的AdaGrad算法能自适应调整学习率,缩放所有参数反比于其历史梯度平方值总和的平方根。因此对于高梯度值的参数,其历史积累和大,等效学习率减小,更新强度减弱;对于低梯度值的权重,其历史积累和小,等效学习率增大,更新强度增强。最终达到在参数空间中向更为平缓的方向移动的效果。AdaGrad应用于凸优化问题时可以实现快速收敛,但用于非凸函数优化时,AdaGrad由于从训练初期就开始积累梯度平方然后调整学习率,可能会使得学习率在达到局部最小值之前就变得相当小了。因此凸优化时该算法可取得令人满意的效果,但是在对深度神经网络模型进行训练时,即进行非凸优化时会使有效学习率过早和过度的减小。RMSProp算法丢弃过远的历史梯度信息,使用最近的梯度信息以改进AdaGrad算法,使其在非凸优化时仍可以取得较好的效果。RMSProp算法利用指数衰减平均进而摒弃过远的历史梯度,使其可以在找到局部最优值后保证有效学习率不会变得过小,进而加快神经网络的训练速度。

算法3展示了该算法具体进行梯度下降的过程。
基于全连接神经网络的优化算法

Adam算法

Adam算法是逐参数自适应调整学习率的又一算法,该算法将动量引入RMSProp算法中。该算法中,动量直接用于梯度一阶矩(指数加权)的估计,但这并没有明确的理论动机。另外,RMSProp的非中心的二阶矩不包含偏置修正,因此初期会有很高的偏置,Adam算法进行了偏置修正,修正一阶矩和非中心的二阶矩估计,该算法被证实对神经网络以及更加广泛的结构进行优化时可以取得不错的效果。
算法4展示了该算法具体进行梯度下降的过程。

基于全连接神经网络的优化算法

如何比较这四种优化算法收敛的速度

对于获取优化算法接近收敛时的迭代次数,借鉴sklearn中神经网络算法的实现,若连续10次没有达到优化最小目标(损失至少下降1e-5),则判定为已经找到近收敛点。
通过上述方法可以大致比较下这四种优化算法收敛的速度快慢。