如何确定mini-batch的大小?
64, 128, 256, 。。。。。。
数据大小适应CPU / GPU内存的大小
Exponentially weighted averages
v
t
=
β
v
t
−
1
+
(
1
−
β
)
θ
t
v_t = \beta v_{t-1} + (1-\beta) \theta_t
vt=βvt−1+(1−β)θt
θ
t
\theta_t
θt是原始数据,
v
t
v_t
vt是构造的新数据。
加入偏差校正
v
t
=
v
t
1
−
β
t
v_t = \frac{v_t}{1-\beta^t}
vt=1−βtvt
动量
v = β v + ( 1 − β ) ∇ w v = \beta v + (1-\beta)\nabla w v=βv+(1−β)∇w
w = w − α v w = w - \alpha v w=w−αv
RMSprop
RMSProp在梯度累积的时候,会对“过去”与“现在”做一个平衡
θ
t
=
β
θ
t
+
(
1
+
β
)
(
∇
w
t
)
2
\theta_t = \beta\theta_t + (1+\beta)(\nabla w_t)^2
θt=βθt+(1+β)(∇wt)2
w t = w t − α θ t + δ ∇ w t w_t = w_t -\frac{\alpha}{\sqrt{\theta_t+\delta}}\nabla w_t wt=wt−θt+δα∇wt
Adam
将动量与RMSprop结合起来。
v = β 1 v + ( 1 − β 1 ) ∇ w v = \beta_1 v + (1-\beta_1) \nabla w v=β1v+(1−β1)∇w
θ = β 2 θ + ( 1 − β 2 ) ( ∇ w ) 2 \theta = \beta_2 \theta + (1-\beta_2)(\nabla w)^2 θ=β2θ+(1−β2)(∇w)2
更新参数
w
=
w
−
α
θ
+
δ
v
w = w - \frac{\alpha}{\sqrt{\theta+\delta}}v
w=w−θ+δαv
开始时梯度会很小,
v
v
v和
θ
\theta
θ经常会接近0,因此需要进行校正:
v
=
v
1
−
β
1
t
,
θ
=
θ
1
−
β
2
t
v = \frac{v}{1-\beta^t_1},\quad \theta = \frac{\theta}{1-\beta^t_2}
v=1−β1tv,θ=1−β2tθ
Learning rate decay
α = 1 1 + d e c a y _ r a t e × e p o c h α 0 \alpha = \frac{1}{1+decay\_rate \times epoch}\alpha_0 α=1+decay_rate×epoch1α0