理论教育 网络优化方法:小批量梯度下降的应用

网络优化方法:小批量梯度下降的应用

时间:2023-07-01 理论教育 版权反馈
【摘要】:一个好的网络优化方法,有助于损失函数快速准确地收敛至最小值,大大提高训练效率。对网络优化问题的定义如下:寻找深度网络上的一组参数θ,它能显著地降低损失函数J(θ)。3)小批量梯度下降小批量梯度下降是BGD算法和SGD算法的折中,能够在减轻计算负担的同时抑制噪声的影响。

网络优化方法:小批量梯度下降的应用

深度网络训练的过程实质上是不断调整网络参数的过程。其训练目标是使得损失函数能够达到最小值。损失函数值衡量了网络性能,通常由网络模型预测值和数据真实值之间的误差定义。通过最小化损失函数值来调整网络参数θ的方法即为网络优化方法。一个好的网络优化方法,有助于损失函数快速准确地收敛至最小值,大大提高训练效率

对网络优化问题的定义如下:寻找深度网络上的一组参数θ,它能显著地降低损失函数J(θ)。该损失函数通常包括整个训练集上的性能评估和额外的正则化项[5]。下面介绍几种常用的深度网络优化方法。

1.梯度下降

梯度实际是一个向量,表示函数在某一位置处的方向导数最大值方向,也即函数值在该点处沿此梯度的方向变化最快。梯度可以通过对函数求偏导来计算。对于函数J,其在点(θ1,θ2)处的偏导分别表示为imgimg,则函数在该点处的梯度表示为

变量θ1和θ2沿梯度反方向移动以减小函数值,从而使该函数快速收敛到局部最小值甚至全局最小值,这种优化方法被称为梯度下降[6]。这里仅以两个变量为例,而在实际网络模型中,参数数目远大于两个。在梯度下降法中,模型参数随着迭代次数的增加,逐渐向损失函数的最小值靠近,表示为

其中,∈表示学习率,也称为步长,用于控制网络参数的更新幅度。

在实际应用中,需要考虑训练样本数量对模型训练的影响,通常采用的梯度下降算法有批量梯度下降(batch gradient descent,BGD)、随机梯度下降(stochastic gradient descent,SGD)和小批量梯度下降(mini-batch gradient descent,MBGD)。

1)批量梯度下降

批量梯度下降是梯度下降中最原始的形式,即沿着整个训练集的梯度方向来调整模型参数,从而提高模型性能,其数学形式为

其中,θ为模型参数;xi为输入样本;yi为输入样本的真实标注;f(xi;θ)为模型输出的预测值;L为损失函数;m为整个训练集的大小。BGD算法由于每一次更新参数都利用了训练集中的所有数据,因此能够保证收敛于极值点。但是当训练集比较大时,会消耗较大的计算资源,并且梯度计算速度慢。

2)随机梯度下降

为解决BGD算法因训练样本数据增多而训练速度变慢的问题,随机梯度下降被提出。与BGD算法不同的是,SGD算法每次随机选取一个样本来更新网络参数,表示为

其中,(xi,yi)为随机选择的样本。SGD算法运算量大幅度减少,当数据集规模很大时,它的训练速度远超于BGD算法。但是由于SGD算法每次只用一个样本更新参数,很容易受到噪声的影响。

3)小批量梯度下降

小批量梯度下降是BGD算法和SGD算法的折中,能够在减轻计算负担的同时抑制噪声的影响。MBGD算法的核心思想是:在每一次迭代时,都随机从训练集中选择n(n<m,m表示训练集的总样本数)个样本来更新模型参数,这一过程表示为

其中,(xi,yi)为当前小批量样本中的某个样本。MBGD算法既可以减轻计算负担又能抑制噪声的影响,因此它比BGD算法和SGD算法更加常用。

2.动量

MBGD算法使得模型可以利用大规模数据集进行训练,但是每次更新时都完全依赖于当前随机选择的小批量样本,这样会导致更新不够稳定。因此,Polyak[7]在1964年提出了动量算法,其目的是加速训练过程并且有效抑制振荡。之后,受Nesterov加速梯度算法[8-9]启发,Sutskever等人[10]在2013年对动量算法进行改进,提出了Nesterov动量。

1)动量算法

动量算法[7]模拟物体运动惯性对MBGD算法进行了改进。动量算法在更新时会在一定程度上保留之前更新的方向,同时结合当前小批量样本计算得到的梯度来得到最终的更新方向。动量的概念来自物理学,定义为物体质量和速度的乘积。在动量算法中,假设粒子是单位质量,速度向量v就可以看作是粒子的动量。因此,动量算法的更新规则如下:

其中,α为动量因子,用于控制保留之前的动量多少,一般取值为0.9。(www.daowen.com)

当梯度方向不变时,动量不断积累,能够加速学习。当梯度方向改变时,更新速度变慢,能够抑制振荡,增加模型训练的稳定性。当模型处于局部最优时,虽然当前小批量样本的梯度趋于0,但是由于之前积累的动量存在,也可能使模型参数摆脱局部极值点而继续更新。

2)Nesterov动量

和动量算法相比,Nesterov动量主要改变了梯度计算过程。它首先使用之前的速度进行临时更新,然后再进行梯度计算,其数学形式为

Nesterov动量中,根据之前的速度网络参数会先更新至一个临时点θ+αv,然后在这个临时点计算梯度。这就相当于Nesterov动量提前知道了下一时刻的梯度变化,从而能够提前做出反应,适当调整当前速度,这有助于更加快速地收敛。因此,Nesterov动量可以理解为向标准动量中添加了一个校正因子。

3.自适应

学习率是深度网络优化过程中的重要超参数之一,因为它对模型训练的速度和精度有很大影响。学习率太大容易导致损失函数波动较大从而难以找到最优值,而学习率设置太小则会导致收敛过慢、耗时太长。不同的模型需要选取不同的学习率,同一个模型的不同训练阶段也需要不同的学习率,所以学习率的设置十分关键。因此,人们希望优化算法在训练过程中能够根据不同的情况自动地调整学习率,提出了一些学习率自适应优化算法。

1)AdaGrad

AdaGrad[11]是一种经典的自适应优化算法。它在训练过程中能够自动地调整模型每个参数的学习率,使其反比于梯度在各参数方向上幅值历史平方总和的平方根。这样就使得损失函数在参数空间中方向导数幅度较大的方向有更平缓的学习率,而在方向导数幅度较小的方向有着较大的学习率。总的效果是使参数空间中损失函数在更为平缓的方向取得更大的学习率,而在陡峭的方向取得更小的学习率。AdaGrad算法的更新规则为

其中,梯度累计变量r初始值设为0,δ是防止分母为零的一个极小常数。在凸优化背景中,AdaGrad算法具有一些令人满意的理论性质。然而,人们在实践中发现,对于训练深度网络而言,从训练开始时积累梯度平方会导致有效学习率过早和过量地减小。

2)RMSProp

RMSProp[12]将AdaGrad的梯度累计过程改进为指数加权的平均移动,使得在非凸优化的情况下效果更好。AdaGrad通常应用于凸问题的快速收敛。当应用于非凸问题时,AdaGrad可能会陷于局部极值点。原因是根据整个梯度历史累积来收缩学习率,当模型达到某个局部的凸区域时学习率可能已经很小了,无法摆脱该区域。RMSProp使用指数衰减平均来逐渐丢弃久远的历史梯度信息,能够在找到凸区域后快速收敛,就像一个初始化在凸区域的AdaGrad算法。RMSProp的参数更新过程为

其中超参数ρ表示衰减速率,用来控制移动平均的长度范围。结合Nesterov动量后,RMSProp的更新流程为

在实践中,RMSProp已被证明是一种有效且实用的深度网络优化算法。

3)Adam

Adam[13]实质上是带有动量项的RMSProp。它利用梯度的一阶矩估计和二阶矩估计动态调整参数学习率。Adam结合了AdaGrad善于处理稀疏梯度和RMSProp善于处理非平稳目标的优点,在学习率的自适应性方面表现较好,适用于大多非凸优化问题。Adam更新参数时,首先计算当前小批量样本的梯度:

然后更新有偏一阶矩估计s和有偏二阶矩估计r(s和r都初始化为0):

其中,ρ1和ρ2为矩估计的指数衰减速率,一般建议取0.9和0.999。之后,修正一阶矩和二阶矩的偏差:

其中,t表示时间步,初始为0。最后,更新模型参数:

Adam的优点主要在于经过偏置校正后,每一次的迭代学习率都有确定范围,使得参数更新比较平稳。Adam对超参数鲁棒,在实践中也取得了很好的效果,是目前深度网络优化的主流算法。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈