Pytorch基础知识-动量

2019-11-17 21:51:55 浏览数 (1)

上节课讲了Regularization的原理和使用,它作为一个有效的减少over-fitting的手段使用十分广泛,本节课补充介绍一些小技巧(动量)。

动量(Tricks)的概念来源于物理学,可理解为惯性(momentum)。

动量的概念来源于我们所使用的梯度信息

其物理意义如下图所示

此时若加入不同的参数值也会使其方向发生改变。

我们以一个实际例子讲解

当没有惯性时,初始点(starting point)经过不断地更新仍达不到最小值值(optimum),该网络在局部最优解(solution)即停了下来。且刚开始的更新方向非常的随机化,方向跨度很大。

若此时保持learning rate不变,但设置一个惯性,则优化图像变为

惯性(beta)设置为0.78,这样保留之前历史信息就多一些,而另外一方向为0.22,两者合并后的新方向就比之前的短了。后续更新的节奏也会慢慢缓和下来。另外在之前所遇到的极小值点也没有停下来,借助惯性继续前滑。

但要注意,并不是所有的模型都适合加入惯性,有些加了反而速度变慢(因为考虑了之前的历史因素)。

那么具体到代码中是如何操作的呢

在pytorch中添加momentum参数十分方便,只需在优化器设置函数中进行设计即可

代码语言:javascript复制
optimizer = torch.optim.SGD(model.parameters(), 
                            args.lr,
                            momentum=args.momentum,
                            weight_decay=args.weight_decay)

但要注意,对于Adam优化器来说,Adam已经内置了momentum函数,只有SGD需要额外添加代码。

0 人点赞