梯度下降優化算法

梯度下降優化算法

寫這篇博客其實是爲了記錄所讀的這篇論文的筆記An overview of gradient descent optimization algorithms

Batch gradient descent

圖片
他每次爲整個數據集計算梯度,然後進行一次更新。

for i in range(nb_epochs): 
    params_grad = evaluate_gradient(loss_function, data, params)
    params = params - learning_rate * params_grad 

Stochastic gradient descent(SGD)

圖片
他對於每個樣本都會計算一次梯度,然後進行一次更新。

for i in range(nb_epochs):
  np.random.shuffle(data)
  for example in data:
    params_grad = evaluate_gradient(loss_function, example, params)
    params = params - learning_rate * params_grad

SGD 因爲更新比較頻繁,會造成 cost function 有嚴重的震盪
這裏寫圖片描述

Mini-batch gradient descent

MBGD每一次梯度更新是作用於一小批樣本n,n取50~256,收斂更穩定。
這裏寫圖片描述

for i in range(nb_epochs):
  np.random.shuffle(data)
  for batch in get_batches(data, batch_size=50):
    params_grad = evaluate_gradient(loss_function, batch, params)
    params = params - learning_rate * params_grad

Momentum

在當前更新向量中加入了上一次梯度更新因子,γ(伽馬)的值一般設爲0.9左右.
加入的這一項,可以使得梯度方向不變的維度上速度變快,梯度方向有所改變的維度上的更新速度變慢,這樣就可以加快收斂並減小震盪。

這裏寫圖片描述

Adagrad

g _t,i 爲t 時刻參數 θ_i 的梯度
這裏寫圖片描述
如果是普通的 SGD, 那麼 θ_i 在每一時刻的梯度更新公式爲:
這裏寫圖片描述
對於每個參數、時間,都對應不同的學習率
這裏寫圖片描述
G_t,ii是個對角矩陣,元素G_t,ii表示到t時刻爲止參數 θ_i所有梯度的平方和,E(不好意思這個不知道怎麼打也不知道怎麼讀[捂臉])是平滑參數,避免出現除0的情況。
其中 η 一般取 0.01。
Adagrad 的優點是減少了學習率的手動調節。它的缺點是分母會不斷積累,這樣學習率就會收縮並最終會變得非常小。

RMSprop

RMSprop 是 Geoff Hinton 提出的一種自適應學習率方法。
RMSprop 爲了解決 Adagrad 學習率急劇下降問題的。
這裏寫圖片描述
Hinton 建議設定 γ 爲 0.9, 學習率 η 爲 0.001。

Adam

這個算法是另一種計算每個參數的自適應學習率的方法。
除了像 Adadelta 和 RMSprop 一樣存儲了過去梯度的平方 vt 的指數衰減平均值 ,也像 momentum 一樣保持了過去梯度 mt 的指數衰減平均值:
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
建議 β1 = 0.9,β2 = 0.999,ϵ = 10e−8
實踐表明,Adam 比其他適應性學習方法效果要好。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章