关于动量更新的概括

一下是看CS231n后自己总结的笔记

动量更新 是另一种在深度学习过程中经常能获得不错收敛率的学习方法。这个方法的灵盖来自物理学(我就意译了),想象优化空间如同一个延绵起伏不断延伸的丘陵地带,优化过程类似于把一个小球轻轻地放在这个地带任何一个位置,让它自然运动直到停止,一般来说,当它停下来的时候这个小球肯定是在某一个最低点,不一定是全局最低点,但是一定是局部的最低点。我们把损失函数类比这个小球的重力势能( U = m g h U=mgh U=mgh);由于力是能量函数相对于位移的梯度,所以损失函数的梯度可以看成作用在小球上的力;又由于加速度和力成正比(F=ma),当m=1的时候我们认为树枝上力和加速度一样,我们就认为梯度就是加速度;接下来,我们利用这个公式$v =at $加速度是均匀的时候,加速度在时间上积累就是速度(其实准确来说加速度速度函数对时间的梯度),在时间是单位时间的情况下,速度又可以等于加速度,而加速度又等于力,力等于梯度,所以速度就以这样一个方式和梯度挂上钩了。之后还有再加上一个条件——牛一定律告诉我们,如果不施以外力,物体会始终保持匀速运动或静止状态——对于这个小球来说如果不施加一个外力,那么高处的势能是无法耗尽的,这个小球会在这个空间中永远运动下去,所以我们给速度增加一个衰减因子,让速度在每次迭代的时候都适当的衰减,那么最后小球就能慢慢的停下来了。这个衰减因子被习惯称之为“momentum”动量,这个就是动量更新的来源,其实从上面的分析来看,这个更应该是现实世界中的摩擦系数,叫“动量”应该算是一个约定俗成的“误传”

# Momentum update
v = mu * v - learning_rate * dx # integrate velocity
x += v # integrate position

当交叉验证的时候,我们经常会从[0.5,0.9,0.95,0.99]这几个数里挑一个作动量参数。
类似于学习率的退火方法,在学习的最后阶段动量(摩擦系数)会增加,这种方法对整个优化过程也会有点帮助。一般用法是这样:一开始的时候动量设置为0.5,当经过了多轮(epoch)训练之后把它变成0.99。

利用动量更新方法,参数向量就可以沿着和梯度方向积累速度。

你可能感兴趣的:(CS231n,机器学习)