mini-batch
在应用梯度下降训练神经网络时,常规的batch训练是一次遍历整个数据集,做一次梯度更新,那么样本量较大的情况下,网络迭代的速度就较慢,mini-batch,则是在每个epoch中,一次遍历mini-batch的样本量,做 b a t c h − s i z e / m i n i − b a t c h − s i z e batch-size/mini-batch-size batch−size/mini−batch−size次梯度更新,这样可以加快网络参数更新的速度
当mini-batch-size = m时,叫做batch gradient descent(BGD),大样本情况下,单次迭代训练时间过长
当mini-batch-size = 1时,叫做stochastic gradient descent(SGD),虽然可以通过减小学习率降噪,但是失去了向量化的优势,也会使计算减慢
采用mini-batch 训练的一个问题是会产生梯度下降过程中的波动,如果想要使用一个较大的学习率的话,就要想办法减少梯度更新的波动,也就是后面介绍的以指数加权移动平均理论为基础的网络训练优化方法。
指数加权移动平均
指数加权平均是通过设置不同的权值参数来获得不同的移动平均值,以此作为新数据进行预测
当前时刻的EWMA只需要前一时刻的EWMA加上当前时刻的值,而不需要整个历史序列的数据来计算平均数,这样可以节省存储空间并简化计算
指数加权的由来:离当前时刻越远的值,其权值呈指数衰减,以
1
/
e
1/e
1/e作为截止近似,即在权值为
β
\beta
β时,当前时刻往前推n时刻,权重衰减为原来的1/3,则以近n时刻数据的平均值作为该时刻的加权平均数
v
t
=
β
v
t
−
1
+
(
1
−
β
)
θ
t
=
β
(
β
v
t
−
2
+
(
1
−
β
)
θ
t
−
1
)
+
(
1
−
β
)
θ
t
=
(
1
−
β
)
[
θ
t
+
β
θ
t
−
1
+
β
2
θ
t
−
2
+
.
.
.
.
]
+
β
t
v
0
v_t = \beta v_{t-1}+(1-\beta) \theta_t =\beta (\beta v_{t-2}+(1-\beta) \theta_{t-1})+(1-\beta) \theta_t=(1-\beta)[\theta_t+\beta \theta_{t-1}+\beta^2 \theta_{t-2}+....]+\beta^tv_0
vt=βvt−1+(1−β)θt=β(βvt−2+(1−β)θt−1)+(1−β)θt=(1−β)[θt+βθt−1+β2θt−2+....]+βtv0
偏差修正
在计算时,令
v
0
=
0
v_0=0
v0=0 ,则
v
1
=
(
1
−
β
)
θ
1
v_1 = (1-\beta) \theta_1
v1=(1−β)θ1,
v
2
=
β
(
1
−
β
)
θ
1
+
(
1
−
β
)
θ
2
v_2 = \beta(1-\beta)\theta_1+(1-\beta)\theta_2
v2=β(1−β)θ1+(1−β)θ2
当
β
\beta
β值设置的比较大时,就会出现计算后的EWMA值头部数据较小,即产生了偏差修正的问题:用
v
t
1
−
β
t
≈
v
t
\frac{v_t}{1-\beta^t }\approx v_t
1−βtvt≈vt
Momentum 动量梯度下降法
用
d
w
,
d
b
dw,db
dw,db的EWMA值代替
d
w
,
d
b
dw,db
dw,db,实现动量加速的效果
v
d
w
=
β
v
d
w
+
(
1
−
β
)
d
w
v_{dw} = \beta v_{dw}+(1-\beta)dw
vdw=βvdw+(1−β)dw
v
d
b
=
β
v
d
b
+
(
1
−
β
)
d
b
v_{db} = \beta v_{db}+(1-\beta)db
vdb=βvdb+(1−β)db
w
=
w
−
α
v
d
w
w = w-\alpha v_{dw}
w=w−αvdw
b
=
b
−
α
v
d
b
b = b-\alpha v_{db}
b=b−αvdb
超参数
α
,
β
=
0.9
\alpha,\beta=0.9
α,β=0.9
RMSprop(root mean square prop)
做
d
w
2
,
d
b
2
dw^2,db^2
dw2,db2的加权移动平均,波动越大,所求得的EWMA值越大,在梯度更新时,除以该值,可以减小波动
s
d
w
=
β
s
d
w
+
(
1
−
β
)
d
w
2
s_{dw} = \beta s_{dw}+(1-\beta) dw^2
sdw=βsdw+(1−β)dw2
s
d
b
=
β
s
d
b
+
(
1
−
β
)
d
b
2
s_{db} = \beta s_{db}+(1-\beta) db^2
sdb=βsdb+(1−β)db2
w
=
w
−
α
d
w
s
d
w
+
ϵ
w = w-\alpha \frac{dw}{\sqrt s_{dw}+\epsilon}
w=w−αsdw+ϵdw
b
=
b
−
α
d
b
s
d
b
+
ϵ
b = b-\alpha \frac{db}{\sqrt s_{db}+\epsilon}
b=b−αsdb+ϵdb
超参数
α
,
β
=
0.999
,
ϵ
=
1
0
−
8
\alpha,\beta=0.999,\epsilon=10^{-8}
α,β=0.999,ϵ=10−8
Adam(adaptive momentum estimation)
结合了momentum与rmsprop优化方法,适用于大多数网络的优化
初始化 v d w = 0 , v d b = 0 , s d w = 0 , s d b = 0 v_{dw}=0,v_{db}=0,s_{dw}=0,s_{db}=0 vdw=0,vdb=0,sdw=0,sdb=0,在迭代时,首先计算梯度 d w , d b dw,db dw,db
然后推算
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)dw2
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)db2
梯度更新
w
=
w
−
α
v
d
w
s
d
w
+
ϵ
w = w-\alpha \frac{v_{dw}}{\sqrt s_{dw}+\epsilon}
w=w−αsdw+ϵvdw
b
=
b
−
α
v
d
b
s
d
b
+
ϵ
b = b-\alpha \frac{v_{db}}{\sqrt s_{db}+\epsilon}
b=b−αsdb+ϵvdb
超参数 α , β 1 = 0.9 , β 2 = 0.999 , ϵ = 1 0 − 8 \alpha,\beta_1=0.9,\beta_2=0.999,\epsilon=10^{-8} α,β1=0.9,β2=0.999,ϵ=10−8
学习率衰减
随着时间变化慢慢降低学习率
1.
α
=
1
1
+
d
e
c
a
y
_
r
a
t
e
∗
e
p
o
c
h
_
n
u
m
α
0
\alpha = \frac{1}{1+decay\_rate*epoch\_num}\alpha_0
α=1+decay_rate∗epoch_num1α0
超参数
d
e
c
a
y
_
r
a
t
e
decay\_rate
decay_rate
2. α = 0.9 5 e p o c h _ n u m α 0 \alpha = 0.95^{epoch\_num}\alpha_0 α=0.95epoch_numα0指数衰减
3. a l p h a = k e p o c h _ n u m α 0 alpha = \frac{k}{\sqrt epoch\_num}\alpha_0 alpha=epoch_numkα0
4.阶梯状衰减