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裡。

代碼:
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