10.优化器(下)


本课程来自深度之眼deepshare.net,部分截图来自课程视频。

内容简介

learning rate学习率

梯度下降的更新思想 : w i + 1 = w i − g ( w i ) w_{i+1}=w_i-g(w_i) wi+1=wig(wi)
下面通过一个例子来观察梯度更新的过程:
函数: y = f ( x ) = 4 ∗ x 2 y=f(x)=4*x^2 y=f(x)=4x2
一阶导数: y ′ = f ′ ( x ) = 8 ∗ x y'=f'(x)=8*x y=f(x)=8x
图像:
在这里插入图片描述
x 0 = 2 x_0=2 x0=2这个点, y 0 = 16 , f ′ ( x 0 ) = 16 y_0=16,f'(x_0)=16 y0=16,f(x0)=16
采用梯度下降来更新x得到: x 1 = x 0 − f ′ ( x 0 ) = 2 − 16 = − 14 , y 1 = 784 , f ′ ( x 1 ) = − 112 x_1=x_0-f'(x_0)=2-16=-14,y_1=784,f'(x_1)=-112 x1=x0f(x0)=216=14,y1=784,f(x1)=112
再次梯度更新: x 2 = x 1 − f ′ ( x 1 ) = − 14 + 112 = 98 , y 2 = 38416 x_2=x_1-f'(x_1)=-14+112=98,y_2=38416 x2=x1f(x1)=14+112=98,y2=38416
一直往下…
可以看到y并没有减小(梯度爆炸了)
在这里插入图片描述
因此要改进梯度下降的公式 : w i + 1 = w i − L R ∗ g ( w i ) w_{i+1}=w_i-LR*g(w_i) wi+1=wiLRg(wi)
LR=0.5:
在这里插入图片描述
LR=0.2,4个迭代:
在这里插入图片描述
LR=0.2,20个迭代:
在这里插入图片描述
LR=0.1,20个迭代:
在这里插入图片描述
LR=0.125,20个迭代:其实第一步就直接到达零点,但是这个最佳学习率事先我们不可能知道。
在这里插入图片描述
查看LR从0.01到0.5,10个学习率分别使得损失函数的变化,发现前面几个曲线对应的学习率过大,造成了梯度爆炸。
在这里插入图片描述
查看LR从0.01到0.2,10个学习率分别使得损失函数的变化,蓝色曲线对应学习率为0.01,它的收敛速度最慢,到了30多次迭代才收敛,但是不是学习率在一定范围内越大收敛越快,而是紫色0.136的曲线收敛最快,因为它最靠近0.125,因此在设置LR的时候通常比较保守先设置一个比较小的值,先保证整体的收敛,时间上不做要求。
在这里插入图片描述
学习率(learning rate)控制更新的步伐

Momentum动量

Momentum(动量,冲量):结合当前梯度与上一次更新信息,用于当前更新
例如:下面图中黑色是普通的梯度更新,每个步长都是一样的(学习率是一样的嘛)
红色的带动量的梯度更新,第一个箭头和黑色箭头一样长,学习率不变,但是第二个箭头(梯度)结合了前面的梯度方向,所以变大了,多出了蓝色的1部分,第三个也一样,但是变得更大了,多出了蓝色2部分。
在这里插入图片描述
指数加权平均: v t = β ∗ v t − 1 + ( 1 − β ) ∗ θ t v_t=\beta*v_{t-1}+(1-\beta)*\theta_t vt=βvt1+(1β)θt
v t v_t vt是当前时刻的平均值, θ t \theta_t θt是当前时刻参数, β \beta β属于超参数,但是有常用取值范围(ng的课有讲)。 v t − 1 v_{t-1} vt1是上一时刻的平均值。
整个公式的意思就是说当前时刻的平均值,除了要考虑当前的时刻的参数之外,还要考虑之间的均值对当前时刻的均值的影响,这个影响考虑过程中,是有规律的,即:越靠近当前时刻的历史参数,影响越大,之前的历史参数对当前参数的影响因子呈指数变化。
在这里插入图片描述
求第100天的指数加权平均温度:
v 100 = β ∗ v 99 + ( 1 − β ) ∗ θ 100 v_{100}=\beta*v_{99}+(1-\beta)*\theta_{100} v100=βv99+(1β)θ100
( 1 − β ) ∗ θ 100 + β ∗ ( β ∗ v 98 + ( 1 − β ) ∗ θ 99 ) (1-\beta)*\theta_{100}+\beta*(\beta*v_{98}+(1-\beta)*\theta_{99}) (1β)θ100+β(βv98+(1β)θ99)
( 1 − β ) ∗ θ 100 + ( 1 − β ) ∗ β ∗ θ 99 + ( β 2 ∗ v 98 ) (1-\beta)*\theta_{100}+(1-\beta)*\beta*\theta_{99}+(\beta^2*v_{98}) (1β)θ100+(1β)βθ99+(β2v98)
( 1 − β ) ∗ θ 100 + ( 1 − β ) ∗ β ∗ θ 99 + ( 1 − β ) ∗ β 2 ∗ v 98 + ( β 3 ∗ v 97 ) (1-\beta)*\theta_{100}+(1-\beta)*\beta*\theta_{99}+(1-\beta)*\beta^2*v_{98}+(\beta^3*v_{97}) (1β)θ100+(1β)βθ99+(1β)β2v98+(β3v97)
把每项的参数前面的β重新用带指数的β表示,其中第一项相当于 β 0 = 1 \beta^0=1 β0=1
( 1 − β ) ∗ β 0 ∗ θ 100 + ( 1 − β ) ∗ β 1 ∗ θ 99 + ( 1 − β ) ∗ β 2 ∗ v 98 + ( β 3 ∗ v 97 ) (1-\beta)*\beta^0*\theta_{100}+(1-\beta)*\beta^1*\theta_{99}+(1-\beta)*\beta^2*v_{98}+(\beta^3*v_{97}) (1β)β0θ100+(1β)β1θ99+(1β)β2v98+(β3v97)
= ∑ i N ( 1 − β ) ∗ β i ∗ θ N − i =\sum_i^N(1-\beta)*\beta^i*\theta_{N-i} =iN(1β)βiθNi
由于β小于1,所以,参数前面的权重 β i \beta^i βi是呈指数下降的。绘制出来就是下面的形状(β=0.9),说明了距离当前时刻越近,权重越大,影响越大,反之亦然:
在这里插入图片描述
不同β曲线形状如下,表明β越小,记忆越短,例如红色曲线在20个时刻前的权重已经无法对当前的参数造成什么影响了。通常beta设置为0.9,也就是影响时刻约10个( 1 1 − β \frac{1}{1-\beta} 1β1)时间步。
在这里插入图片描述
原理明白后,下面看PyTorch中动量梯度下降的公式:
v i = m ∗ v i − 1 + g ( w i ) v_i=m*v_{i-1}+g(w_i) vi=mvi1+g(wi)
w i + 1 = w i − l r ∗ v i w_{i+1}=w_i-lr*v_i wi+1=wilrvi
其中:
w i + 1 w_{i+1} wi+1:第i+1次更新的参数
I r Ir Ir:学习率
v i v_i vi:更新量
m m m:momentum系数
g ( w i ) g(w_i) g(wi) w i w_i wi的梯度
例子:
在这里插入图片描述
下面看图说话:
LR分别为0.01和0.03,没有动量
在这里插入图片描述
LR分别为0.01和0.03,0.01动量为0.9
在这里插入图片描述
LR分别为0.01和0.03,0.01动量为0.63,看到0.01的曲线比0.03的收敛要快。
在这里插入图片描述

torch.optim.SGD

1.optim.SGD主要参数:
·params:管理的参数组
·Ir:初始学习率
·momentum:动量系数,贝塔
·weight_decay:L2正则化系数
·nesterov:是否采用NAG,默认是false
NAG参考文献:《On the importance of initialization and momentum in deep learning》

PyTorch的十种优化器

1.optim.SGD:随机梯度下降法(适用90%模型上)
2.optim.Adagrad:自适应学习率梯度下降法
3.optim.RMSprop:Adagrad的改进
4.optim.Adadelta:Adagrad的改进
5.optim.Adam:RMSprop结合Momentum
6.optim.Adamax:Adam增加学习率上限
7.optim.SparseAdam:稀疏版的Adam
8.optim.ASGD:随机平均梯度下降
9.optim.Rprop:弹性反向传播(所有样本直接参与计算的时候用,分batch时不用)
10.optim.LBFGS:BFGS的改进(L代表limit)
参考文献:
1.optim.SGD:《On the importance of initialization and momentum in deep learning》
2.optim.Adagrad:《Adaptive Subgradient Methods for Online Learning and Stochastic
Optimization》
3.optim.RMSprop:
http://www.cs.toronto.edu/-tijmen/csc321/slides/lecture_slides_lec6.pdf
4.optim.Adadelta:《AN ADAPTIVE LEARNING RATE METHOD》
5.optim.Adam:《Adam:A Method for Stochastic Optimization》
6.optim.Adamax:《Adam:A Method for Stochastic Optimization》
7.optim.SparseAdam
8.optim.ASGD:《Accelerating Stochastic Gradient Descent using Predictive Variance
Reduction》
9.optim.Rprop:《Martin Riedmiller und Heinrich Braun》
10.optim.LBFGS:BDGS的改进

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oldmao_2000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值