64, 128, 256, 。。。。。。 数据大小适应CPU / GPU内存的大小
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在梯度累积的时候,会对“过去”与“现在”做一个平衡 θ 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
将动量与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θ
α = 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