1.SGD方法的一个缺点是,其更新方向完全依赖于当前的batch,因而其更新十分不稳定。解决这一问题的一个简单的做法便是引入momentum。
momentum即动量,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。这样一来,可以在一定程度上增加稳定性,从而学习地更快,并且还有一定摆脱局部最优的能力
2.常用的优化器以及优化器的学习率衰减
if args.optimizer == 'sgd':
optimizer = torch.optim.AdamW([{'params': global_model.parameters()}], lr=1.e-3, betas=(0.9, 0.999), weight_decay=1.e-6)#AdamW与adam不同
else:
print("优化器不存在!")
if args.adjust =='cosine':
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=5, eta_min=2.e-4)#T_max=50
else:
print("学习率不衰减!")
#optimizer.param_groups[0]['lr']可以通过这个打印出学习率