前言:
SGD的不足:
①呈“之”字型,迂回前进,损失函数值在一些维度的改变得快(更新速度快),在一些维度改变得慢(速度慢)- 在高维空间更加普遍
②容易陷入局部极小值和鞍点
③对于凸优化而言,SGD不会收敛,只会在最优点附近跳来跳去
这里面主要讲解一下梯度更新的两个技巧,在训练的时候
应用比较多.
目录:
- momentum
- learn rate decay
一 momentum
正常的梯度更新公式:
通过动量更新梯度公式:
当前的梯度更新方向 由当前的梯度和历史梯度叠加组成的。
Momentum算法的优点:
当某个参数在最近一段时间内的梯度方向不一致时,其真实的参数更新幅度变小;
相反,当在最近一段时间内的梯度方向都一致时,其真实的参数更新幅度变大,起到加速作用。
一般而言,在迭代初期,梯度方向都比较一致,动量法会起到加速作用,可以更快地到达最优点。在迭代后期,梯度方向会取决不一致,在收敛值附近震荡,动量法会起到减速作用,增加稳定性。从某种角度来说,当前梯度叠加上部分的上次梯度,一定程度上可以近似看作二阶梯度。
PyTorch 里面的API 函数
torch.optim.SGD(net.parameters(), lr=lr, momentum=0.9,weight_decay=wd)
对于ADM 这类优化器,是内部自带的,不需要手动设置。
二 learn rate decay
学习率衰减
现有问题:
1 学习率太小,长时间无法到达最优点
2 学习率太大,参数激烈震荡,无法收敛
默认的学习率是1e-3,1e-4
解决方案:
learn rate decay
每训练一些batch 后,学习率逐渐降低,如下图
如下图,随着训练的batch 增加,学习率降低,降低了
参数震荡,能够快速的朝一个方向收敛
PyTorch方案1
通过观测loss 是否减少,来动态调整学习率
-
torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode=‘min’, factor=0.1, patience=10, verbose=False, threshold=0.0001, threshold_mode=‘rel’, cooldown=0, min_lr=0, eps=1e-08)
-
PyTorch方案2:
如下图,每训练30次
参考:
课时59 动量与学习率衰减_哔哩哔哩_bilibili
https://www.cnblogs.com/shiliuxinya/p/12261966.html
pytorch 中ReduceLROnPlateau 的使用_pytorch的reducelronplateau_zx66zx的博客-CSDN博客文章来源:https://www.toymoban.com/news/detail-428734.html
【pytorch 优化器】ReduceLROnPlateau详解_reducelronplateau参数_devil_son1234的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-428734.html
到了这里,关于【chapter30】【PyTorch】[动量与学习率衰减】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!