momentum动量算法详解
1.原理
先看作用:
保留历史梯度对现有梯度的影响,具有减小梯度震荡,加速模型训练的作用。
再看解释:
如图所示,红色为SGD+Momentum。黑色为SGD。可以看到黑色为典型Hessian矩阵病态的情况,相当于大幅度的徘徊着向最低点前进。
而由于动量积攒了历史的梯度,如点P前一刻的梯度与当前的梯度方向几乎相反。因此原本在P点原本要大幅徘徊的梯度,主要受到前一时刻的影响,而导致在当前时刻的梯度幅度减小。
直观上讲就是,要是当前时刻的梯度与历史时刻梯度方向相似,这种趋势在当前时刻则会加强;要是不同,则当前时刻的梯度方向减弱。
2.算法实现
算法原理:
pytorch-SGD+Momentum源码:
class SGD(Optimizer):
.... #函数注释
def __init__(self, params, lr=required, momentum=0, dampening=0,
weight_decay=0, neste