0%

深度学习中的动量(momentum)

动量是深度学习训练中,一个用于更新模型参数的超参数。

动量的引入

在深度学习训练网络时,通常先对网络的初始权值按照某种分布进行初始化,如:高斯分布。初始化权值操作对最终网络的性能影响比较大,合适的网络初始权值能够使得损失函数在训练过程中的收敛速度更快,从而获得更好的优化结果。但是按照某类分布随机初始化网络权值时,存在一些不确定因素,并不能保证每一次初始化操作都能使得网络的初始权值处在一个合适的状态。不恰当的初始权值可能使得网络的损失函数在训练过程中陷入局部最小值,达不到全局最优的状态。因此,如何消除这种不确定性,是训练深度网络是必须解决的一个问题。

动量(momentum)能够在一定程度上解决这个问题。动量(momentum)是依据物理学的势能与动能之间能量转换原理提出来的。动量方法主要是为了解决两个问题:

  • Hessian矩阵病态条件问题(直观上讲就是梯度高度敏感于参数空间的某些方向)
  • 加速参数的学习,加快收敛

动量的使用

当动量(momentum)越大时,其转换为势能的能量也就越大,就越有可能摆脱局部凹域的束缚,进入全局凹域,进而获得全局最优解。动量(momentum)主要用在权重更新的时候。

一般,神经网络在更新权值时,采用如下公式:

`w = w - learning_rate * dw`

引入momentum后,采用如下公式:

`v = mu * v - learning_rate * dw`
`w = w + v`

其中,v初始化为 0,mu就是动量设定的超参数,最常见的设定值是 0.9

上式也可以直观的理解为:要是当前时刻的梯度与历史时刻梯度方向相似,这种趋势在当前时刻则会加强;要是不同,则当前时刻的梯度方向减弱。前者能够加速收敛,守着能够减小摆动。