1. 程式人生 > >深度學習中的優化策略

深度學習中的優化策略

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)