本课程来自深度之眼deepshare.net,部分截图来自课程视频。
内容简介
learning rate学习率
梯度下降的更新思想 :
w
i
+
1
=
w
i
−
g
(
w
i
)
w_{i+1}=w_i-g(w_i)
wi+1=wi−g(wi)
下面通过一个例子来观察梯度更新的过程:
函数:
y
=
f
(
x
)
=
4
∗
x
2
y=f(x)=4*x^2
y=f(x)=4∗x2
一阶导数:
y
′
=
f
′
(
x
)
=
8
∗
x
y'=f'(x)=8*x
y′=f′(x)=8∗x
图像:
在
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=x0−f′(x0)=2−16=−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=x1−f′(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=wi−LR∗g(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=β∗vt−1+(1−β)∗θt
v
t
v_t
vt是当前时刻的平均值,
θ
t
\theta_t
θt是当前时刻参数,
β
\beta
β属于超参数,但是有常用取值范围(ng的课有讲)。
v
t
−
1
v_{t-1}
vt−1是上一时刻的平均值。
整个公式的意思就是说当前时刻的平均值,除了要考虑当前的时刻的参数之外,还要考虑之间的均值对当前时刻的均值的影响,这个影响考虑过程中,是有规律的,即:越靠近当前时刻的历史参数,影响越大,之前的历史参数对当前参数的影响因子呈指数变化。
求第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+(β2∗v98)
(
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−β)∗β2∗v98+(β3∗v97)
把每项的参数前面的β重新用带指数的β表示,其中第一项相当于
β
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−β)∗β2∗v98+(β3∗v97)
=
∑
i
N
(
1
−
β
)
∗
β
i
∗
θ
N
−
i
=\sum_i^N(1-\beta)*\beta^i*\theta_{N-i}
=i∑N(1−β)∗βi∗θN−i
由于β小于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=m∗vi−1+g(wi)
w
i
+
1
=
w
i
−
l
r
∗
v
i
w_{i+1}=w_i-lr*v_i
wi+1=wi−lr∗vi
其中:
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的改进