GD
θ
t
=
θ
t
−
1
−
α
∂
L
o
s
s
∂
θ
t
−
1
\theta_t=\theta_{t-1}-\alpha\ \frac{\partial Loss}{\partial \theta_{t-1}}
θt=θt−1−α ∂θt−1∂Loss
有三种,sgd,bgd,mini-batch gd,s,b, gd分别指stochastic, batch, gradient descent。区别分别是每一步计算一项,一小批,全部数据。在实现的时候,dataloader的batchsize分别是1,num_mini_batch, len(data)。
Exponentially Weighted (Moving) Average
θ
i
\theta_i
θi表示第
i
i
i天温度,
β
\beta
β 是超参数设为0.9,
v
i
v_i
vi表示第
i
i
i天以及前面的
1
/
(
1
−
β
)
−
1
1/(1-\beta)-1
1/(1−β)−1天的一共
1
/
(
1
−
β
)
1/(1-\beta)
1/(1−β)天的指数加权移动平均(exponentially weighted moving average),简称关于
θ
i
\theta_i
θi的移动平均数(moving average), 设
v
0
v_0
v0=0, 那么有:
v
0
=
0
v_0=0
v0=0
v
1
=
0.9
v
0
+
0.1
θ
1
v_1 = 0.9v_0+0.1\theta_1
v1=0.9v0+0.1θ1
…
v
t
=
0.9
v
t
−
1
+
0.1
θ
t
v_t = 0.9v_{t-1}+0.1\theta_t
vt=0.9vt−1+0.1θt
β
\beta
β分别取0.9,0.98,0.5分别表示10天,50天,2天的移动平均温度。
β
\beta
β取值过大,表示更多天的移动平均温度,拟合出来的线比真实的线有延迟,因为惯性太大。
过小表示更少天数的移动平均温度,拟合出来的线是锯齿状的,存在噪声,很不平滑,因为由过少的天数的温度决定,受局部的几天的温度影响很大,所以不稳定。
v
100
=
0.1
θ
100
+
0.9
v
99
=
0.1
θ
100
+
0.1
∗
0.9
θ
99
+
0.1
∗
0.
9
2
θ
98
+
.
.
.
+
0.1
∗
0.
9
9
θ
91
v_{100}=0.1\theta_{100}+0.9v_{99}=0.1\theta_{100}+0.1*0.9\theta_{99}+0.1*0.9^2\theta_{98}+...+0.1*0.9^{9}\theta_{91}
v100=0.1θ100+0.9v99=0.1θ100+0.1∗0.9θ99+0.1∗0.92θ98+...+0.1∗0.99θ91
指数加权体现在每一个
θ
\theta
θ前都有一个关于
β
\beta
β的指数的系数,比如上面的
v
100
v_{100}
v100,每一个
θ
\theta
θ前都有一个关于0.9的指数的系数。
Bias Correction
由于一开始设定的
v
0
v_0
v0为0,导致初始阶段的v都很小,要迭代一段时间(warm up)后才能拟合的好。
偏差修正(bias correction)可以解决这个问题:
v
t
c
o
r
r
=
v
t
1
−
β
t
v_t^{corr} = \frac{v_t}{1-\beta^t}
vtcorr=1−βtvt
一开始
t
t
t小,
β
t
\beta^t
βt大,分母小,v_t^corr大, 解决一开始
v
t
v_t
vt小的问题
后面
t
t
t大,
β
t
\beta^t
βt接近0,
v
t
v_t
vt接近
v
t
c
o
r
r
v_t^{corr}
vtcorr,解释了warm up 后不需要校正的现象。
Gradient Descent with Momentum
on iter
t
t
t:
compute
d
w
dw
dw,
d
b
db
db on current mini-batch
V
d
w
=
β
V
d
w
+
(
1
−
β
)
d
w
(
1
)
V_{dw}=\beta V_{dw} + (1-\beta)dw \ (1)
Vdw=βVdw+(1−β)dw (1)
V
d
b
=
β
V
d
b
+
(
1
−
β
)
d
b
(
2
)
V_{db}=\beta V_{db}+(1-\beta)db \ (2)
Vdb=βVdb+(1−β)db (2)
w
=
w
−
α
V
d
w
(
3
)
w=w-\alpha V_{dw} \ (3)
w=w−αVdw (3)
b
=
b
−
α
V
d
b
(
4
)
b=b-\alpha V_{db} \ (4)
b=b−αVdb (4)
(1),(2)是momentum, (3),(4)是gd。
V
d
w
V_{dw}
Vdw是关于
d
w
dw
dw的指数加权移动平均。
momentum使得gd的过程更稳定,loss曲线更平滑,减少噪声。
β
\beta
β取0.9,通常不使用偏差修正(bias correction),因为epoch的个数足够,一开始的欠拟合不影响最终的结果。
V
d
w
=
0
V_{dw}=0
Vdw=0,矩阵,和w的形状一样。
V
d
b
=
0
V_{db}=0
Vdb=0,向量,和b的形状一样。
对于(1),(2),有人会去掉
(
1
−
β
)
(1-\beta)
(1−β),去没去掉都work,推荐保留。
Gradient Descent with RMSProp
Momentum可以加快梯度下降的过程,RMSProp也可以。举例来说,假设水平方向是最快到达loss最低点的,但是由于竖直方向的梯度太大,水平方向的梯度太小,会导致竖直方向的步伐太大,水平方向的步伐太小,导致很慢到达loss最低点,RMSProp可以避免这种情况:
on iter t:
S
d
w
=
β
S
d
w
+
(
1
−
β
)
(
d
w
)
2
(
1
)
S_{dw}=\beta S_{dw}+(1-\beta) (dw)^2 \ (1)
Sdw=βSdw+(1−β)(dw)2 (1)
S
d
b
=
β
S
d
b
+
(
1
−
β
)
(
d
b
)
2
(
2
)
S_{db}=\beta S_{db}+(1-\beta)(db)^2 \ (2)
Sdb=βSdb+(1−β)(db)2 (2)
w
=
w
−
α
d
w
S
d
w
+
ϵ
(
3
)
w=w-\alpha \frac{dw}{\sqrt {S_{dw}}+\epsilon} \ (3)
w=w−αSdw+ϵdw (3)
b
=
b
−
α
d
b
S
d
b
+
ϵ
(
4
)
b=b-\alpha \frac{db}{\sqrt {S_{db}}+\epsilon} \ (4)
b=b−αSdb+ϵdb (4)
(1), (2)是关于
(
d
w
)
2
(dw)^2
(dw)2的移动平均。
(3), (4)是在梯度下降的基础上,将导数除以了一个移动平均的开方。
当某个梯度很大,比如
d
w
dw
dw很大,则
S
d
w
S_{dw}
Sdw很大,那么
α
d
w
S
d
w
+
ϵ
\alpha \frac{dw}{\sqrt {S_{dw}}+\epsilon}
αSdw+ϵdw就小,避免因为
d
w
dw
dw很大导致这个方向的步伐过大使得收敛变慢。
当某个梯度很小,比如
d
b
db
db很小,则
S
d
b
S_{db}
Sdb很大,那么
α
d
b
S
d
b
+
ϵ
\alpha \frac{db}{\sqrt {S_{db}}+\epsilon}
αSdb+ϵdb变大,避免因为
d
b
db
db很小导致这个方向的步伐过小使得收敛变慢。
Adam
Adam是momentum 和RMSProp的结合:
V
d
w
=
0
V_{dw}=0
Vdw=0,
V
d
b
=
0
V_{db}=0
Vdb=0
S
d
w
=
0
S_{dw}=0
Sdw=0,
S
d
b
=
0
S_{db}=0
Sdb=0
on iter t:
compute
d
w
dw
dw,
d
b
db
db on current mini-batch
V
d
w
=
β
1
V
d
w
+
(
1
−
β
1
)
d
w
V_{dw}=\beta_1 V_{dw}+(1-\beta_1)dw
Vdw=β1Vdw+(1−β1)dw
V
d
b
=
β
1
V
d
b
+
(
1
−
β
1
)
d
b
V_{db}=\beta_1 V_{db}+(1-\beta_1)db
Vdb=β1Vdb+(1−β1)db
S
d
w
=
β
2
S
d
w
+
(
1
−
β
2
)
(
d
w
)
2
S_{dw}=\beta_2 S_{dw} + (1-\beta_2)(dw)^2
Sdw=β2Sdw+(1−β2)(dw)2
S
d
b
=
β
2
S
d
b
+
(
1
−
β
2
)
(
d
b
)
2
S_{db}=\beta_2 S_{db}+(1-\beta_2)(db)^2
Sdb=β2Sdb+(1−β2)(db)2
V
d
w
c
o
r
r
=
V
d
w
1
−
β
1
t
V_{dw}^{corr}=\frac{V_{dw}}{1-\beta_1^t}
Vdwcorr=1−β1tVdw
V
d
b
c
o
r
r
=
V
d
b
1
−
β
1
t
V_{db}^{corr}=\frac{V_{db}}{1-\beta_1^t}
Vdbcorr=1−β1tVdb
S
d
w
c
o
r
r
=
S
d
w
1
−
β
2
t
S_{dw}^{corr}=\frac{S_{dw}}{1-\beta_2^t}
Sdwcorr=1−β2tSdw
S
d
b
c
o
r
r
=
S
d
b
1
−
β
2
t
S_{db}^{corr}=\frac{S_{db}}{1-\beta_2^t}
Sdbcorr=1−β2tSdb
w
=
w
−
α
V
d
w
c
o
r
r
S
d
w
c
o
r
r
+
ϵ
w=w-\alpha \frac{V_{dw}^{corr}}{\sqrt{S_{dw}^{corr}}+\epsilon}
w=w−αSdwcorr+ϵVdwcorr
b
=
b
−
α
V
d
b
c
o
r
r
S
d
b
c
o
r
r
+
ϵ
b=b-\alpha \frac{V_{db}^{corr}}{\sqrt{S_{db}^{corr}}+\epsilon}
b=b−αSdbcorr+ϵVdbcorr
α
:
\alpha:
α:自己设定
β
1
:
\beta_1:
β1: 0.9 first moment
β
2
:
\beta_2:
β2: 0.999 second monent
ϵ
:
1
0
−
8
\epsilon:10^{-8}
ϵ:10−8
Adam:Adaptive moment estimate