添加时间:2024-04-15 12:17:19
?
pytorch特性:张量梯度不自动清零。
import torch.optim as optim
optim.SGD(params, lr=<required parameter>, momentum=0, dampening=0, weight_decay=0, nesterov=False)
原始的梯度下降法:没有添加momentum的情况下的计算公式:
? ? ? ------------------------------------------------(1)
其中的??表示学习率,?表示??的梯度,然后依次进行更新参数;
以实际代码来看一下不同的学习对梯度下降的影响!
以简单的二次函数:? ,对这个函数的x进行求导数:
?使用梯度下降法,即添加一个学习率的情况:这里我们选择从上图二次函数x = 2的时刻开始进行更新;
学习率具体作用是干嘛的呢?:可以理解为控制更新的步伐;
参考博文:
?此时的学习率设置为0.02,虽然可以到达最小值,但是速度还是很慢,需要走很多步;尝试设置大一点学习率,其实就是调参数;
最佳的学习率设置为:0.125,观察一下最终的效果如何,从下图可以看出相比上一个学习率而言,这个只需要两步就可以达到最小值;
那么我们如何能够最快找到合适的学习率呢?如果我们站在上帝视角绝对可以!!!
下面我们看一下在多个学习率情况下的效果如何:
我们这里设置学习的范围为:[0.01,0.2]? 所有的学习率都设置在这个区间内
?
?从上图5可以看出,在iteration为0时,学习率为0.136时刻下降的最快!这就是针对二次函数??使用梯度下降法最佳的学习率!!!
但是梯度下降法存在两个缺点:
于是学者们又提出添加momentum(动量或者冲量):结合当前梯度与上一次更新信息,用于当前更新!
主要分为两个情况:
一、momentum
其中 ?表示第i+1次更新的参数,lr表示学习率,?表示更新量,?表示momentum系数,?表示??的梯度。(一般训练时的动量设置为0.9)
下面以100次更新为例:
二、Nesterov版本进行了类似的修改。参数和上面的定义是一样的!
以上两种情况都是动量优化法,引入物理中的动量思想,加速梯度下降,主要有上面两种方法。由上图梯度下降法,从山顶到山底,没有阻力的情况下,它的动量会越来越大,如果遇到阻力,速度就会变小。动量优化方法就是基于此思想,使得梯度方向在不变的维度上,参数更新变快,梯度有所改变时,更新参数变慢,这样就能加快收敛并且减少动荡。
下面整体再以代码的形式看一下optim.SGD:(以RMB二分类为例)
测试效果:
1. optim.SGD:随机梯度下降法《On the importance of initialization and momentum in deep learning 》
3. optim.RMSprop: Adagrad的改进http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf
4. optim.Adadelta: Adagrad的改进《 AN ADAPTIVE LEARNING RATE METHOD》
5. optim.Adam:RMSprop结合Momentum《Adam: A Method for Stochastic Optimization》
6. optim.Adamax:Adam增加学习率上限《Adam: A Method for Stochastic Optimization》
9. optim.Rprop:弹性反向传播《Martin Riedmiller und Heinrich Braun》
10. optim.LBFGS:BFGS的改进
地址:海南省海口市电话:0898-08980898传真:0898-1230-5678
Copyright © 2012-2018 耀世娱乐-耀世注册登录入口 版权所有ICP备案编号:琼ICP备xxxxxxxx号