TensorFlow 常用優化器:GradientDescent、Momentum、Adam

Tensorflow中支持11中不同的優化器,包括:

  • tf.train.Optimizer
  • tf.train.GradientDescentOptimizer
  • tf.train.AdadeltaOptimizer
  • tf.train.AdagradOptimizer
  • tf.train.AdagradDAOptimizer
  • tf.train.MomentumOptimizer
  • tf.train.AdamOptimizer
  • tf.train.FtrlOptimizer
  • tf.train.RMSPropOptimizer
  • tf.train.ProximalAdagradOptimizer
  • tf.train.ProximalGradientDescentOptimizer

常用的主要有3種,分別是

(1) GradientDescent

optimizer  = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)

使用隨機梯度下降算法,使參數沿着
梯度的反方向,即總損失減小的方向移動,實現更新參數。
W[l]=W[l]α dW[l] W^{[l]} = W^{[l]} - \alpha \text{ } dW^{[l]} b[l]=b[l]α db[l] b^{[l]} = b^{[l]} - \alpha \text{ } db^{[l]}

(2) Momentum

optimizer = tf.train.MomentumOptimizer(learning_rate,momentum).minimize(loss)

在更新參數時,利用了超參數
{vdW[l]=βvdW[l]+(1β)dW[l]vdb[l]=βvdb[l]+(1β)db[l] \begin{cases} v_{dW^{[l]}} = \beta v_{dW^{[l]}} + (1 - \beta) dW^{[l]} \\ v_{db^{[l]}} = \beta v_{db^{[l]}} + (1 - \beta) db^{[l]} \end{cases}

{W[l]=W[l]αvdW[l]b[l]=b[l]αvdb[l]\begin{cases} W^{[l]} = W^{[l]} - \alpha v_{dW^{[l]}} \\ b^{[l]} = b^{[l]} - \alpha v_{db^{[l]}} \end{cases}

其中,
β\beta : the momentum
α\alpha : the learning rate

(3) Adam

optimizer =  tf.train.AdamOptimizer(learning_rate=0.001, 
                                   beta1=0.9, beta2=0.999, 
                                   epsilon=1e-08).minimize(loss)

利用自適應學習率的優化算法(此時learning_rate傳入固定值,不支持使用指數衰減方式),Adam 算法和隨機梯度下降算法不同。隨機梯度下降算法保持單一的學習率更新所有的參數,學習率在訓練過程中並不會改變。而 Adam 算法通過計算梯度的一階矩估計和二階矩估計而爲不同的參數設計獨立的自適應性學習率。
{vdW[l]=β1vdW[l]+(1β1)JW[l]vdb[l]=β1vdb[l]+(1β1)Jb[l]  (momentβ1)\begin{cases} v_{dW^{[l]}} = \beta_1 v_{dW^{[l]}} + (1 - \beta_1) \frac{\partial \mathcal{J} }{ \partial W^{[l]} } \\ v_{db^{[l]}} = \beta_1 v_{db^{[l]}} + (1 - \beta_1) \frac{\partial \mathcal{J} }{ \partial b^{[l]} } \end{cases}  (moment:\beta_1)

{sdW[l]=β2sdW[l]+(1β2)(JW[l])2sdb[l]=β2sdb[l]+(1β2)(Jb[l])2 (RMSprop:β2)\begin{cases} s_{dW^{[l]}} = \beta_2 s_{dW^{[l]}} + (1 - \beta_2) (\frac{\partial \mathcal{J} }{\partial W^{[l]} })^2 \\ s_{db^{[l]}} = \beta_2 s_{db^{[l]}} + (1 - \beta_2) (\frac{\partial \mathcal{J} }{\partial b^{[l]} })^2 \end{cases} (RMSprop:\beta_2)

{vdW[l]corrected=vdW[l]1 (β1)tvdW[b]corrected=vdW[b]1 (β1)tsdW[l]corrected=sdW[2]1 (β1)tsdW[b]corrected=sdW[2]1 (β1)t (Biascorrection)\begin{cases} v^{corrected}_{dW^{[l]}} = \frac{v_{dW^{[l]}}}{1 - (\beta_1)^t} \\ v^{corrected}_{dW^{[b]}} = \frac{v_{dW^{[b]}}}{1 - (\beta_1)^t} \\ s^{corrected}_{dW^{[l]}} = \frac{s_{dW^{[2]}}}{1 - (\beta_1)^t} \\ s^{corrected}_{dW^{[b]}} = \frac{s_{dW^{[2]}}}{1 - (\beta_1)^t} \end{cases} (Bias correction)

{W[l]=W[l]αvdW[l]correctedsdW[l]corrected  + εb[l]=b[l]αvdb[l]correctedsdb[l]corrected  + ε\begin{cases} W^{[l]} = W^{[l]} - \alpha \frac{v^{corrected}_{dW^{[l]}}}{\sqrt{s^{corrected}_{dW^{[l]}}}   +  \varepsilon}\\ b^{[l]} = b^{[l]} - \alpha \frac{v^{corrected}_{db^{[l]}}}{\sqrt{s^{corrected}_{db^{[l]}}}   +  \varepsilon} \end{cases}

其中,

  • β1\beta_1 and β2\beta_2 are hyperparameters that control the two exponentially weighted averages.
  • α\alpha is the learning rate
  • ε\varepsilon is a very small number to avoid dividing by zero
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章