深度学习中的优化策略

版权声明:https://blog.csdn.net/z0n1l2 https://blog.csdn.net/z0n1l2/article/details/85869342

SGD

w = w l r w w = w - lr*\partial w 其中
l r lr 是学习速率
w = l o s s w \partial w = \frac{\partial loss}{\partial w}

sgd_momentum

v = m u v l r w v=mu*v-lr*\partial w
w = w + v w = w + v
其中 m u [ 0 , 1 ] mu \in [0,1] 是momentum,一般 m u = 0.9 mu=0.9 , v v 是中间变量,令 w w 更新更加平缓
后续改进的思路是不同参数自适应的采用不同的学习速率,比如利用对于前一次变化较大的参数降低起学习速率,保持学习的平滑

rmsprop

c a c h e = d e c a y c a c h e + ( 1 d e c a y ) ( w ) 2 cache = decay * cache + (1-decay) * (\partial w)^2
w = w l r w c a c h e + ϵ w = w - lr * \frac{\partial w}{\sqrt{cache}+\epsilon}
其中
d e c a y [ 0 , 1 ] decay \in [0,1] 一般取值0.99
c a c h e cache 记录 w \partial w 幅度平方值,幅度变化大的参数降低学习速率,令 w w 更新平缓。
随着训练进度, c a c h e cache 的值逐渐变大,导致实际 l r lr 逐渐降低,学习速率越来越慢,这是一个缺陷。

adam

m = β 1 m + ( 1 β 1 ) w m=\beta_1 * m + (1-\beta_1) * \partial w
m t = m 1 β 1 t m_t = \frac{m}{1-\beta_1^t}
v = β 2 v + ( 1 β 2 ) ( w ) 2 v=\beta_2*v + (1-\beta_2)*(\partial w)^2
v t = v 1 β 2 t v_t = \frac{v}{1-\beta_2^t}
w = w l r m t v t + ϵ w = w - lr * \frac{m_t}{\sqrt{v_t}+\epsilon}
其中
t t 是训练进度,比如更新次数,或epoch
β 1 [ 0 , 1 ] \beta_1 \in [0,1] 一般取值0.9
β 2 [ 0 , 1 ] \beta_2 \in [0,1] 一般取值0.999
m m v v 分别是平滑后的 w \partial w ( w ) 2 (\partial w)^2
m t m_t v t v_t 避免训练启动阶段训练速度太慢(因为 m m v v 初始化都是0,训练最开始的一段时间二者都接近0)

猜你喜欢

转载自blog.csdn.net/z0n1l2/article/details/85869342
今日推荐