天天看點

CS231n作業筆記2.3:優化算法Momentum, RMSProp, AdamCS231n簡介作業筆記

CS231n簡介

詳見 CS231n課程筆記1:Introduction。

本文都是作者自己的思考,正确性未經過驗證,歡迎指教。

作業筆記

本部分實作的是Momentum,RMSProb, Adam三種優化算法,優化算法是用于從随機點出發,逐漸找到局部最優點的算法。關于各種優化算法的詳細介紹,請參考CS231n課程筆記6.1:優化疊代算法之SGD,Momentum,Netsterov Momentum,AdaGrad,RMSprop,Adam。

1. Momentum

方程:

v = mu*v - learning_rate*dx
x += v
           

代碼:

v = v*config['momentum']-config['learning_rate']*dw
  next_w = w + v
           

2. RMSProp

方程:

cache = cache*decay_rate + (-decay_rate)*dx*dx
x -= learning_rate * dx/(sqrt(cache)+e-)
           

代碼:

config['cache'] = config['cache']*config['decay_rate'] + (-config['decay_rate'])*dx*dx
  next_x = x - config['learning_rate']*dx/np.sqrt(config['cache']+config['epsilon'])
           

3. Adam

此算法需要注意的是ppt中的方程是錯誤的,正确方法如下圖,主要差別在于bias correction的部分,不更新m和v,詳見Adam: A Method for Stochastic Optimization

還要注意t的更新,此部分也沒有顯示的寫在ppt裡。

CS231n作業筆記2.3:優化算法Momentum, RMSProp, AdamCS231n簡介作業筆記

代碼:

m = config['m']*config['beta1']+(-config['beta1'])*dx
  v = config['v']*config['beta2']+(-config['beta2'])*dx*dx
  config['t'] += 
  mb = m / ( - config['beta1']**config['t'])
  vb = v / ( - config['beta2']**config['t'])
  next_x = x - config['learning_rate']*mb/(np.sqrt(vb)+config['epsilon'])
  config['m'] = m
  config['v'] = v
           

繼續閱讀