iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 28
0
AI & Data

Machine Learning for Dummies系列 第 28

[Day 28] 不同的 Optimizer (2)

昨天的文章中介紹到了 Adagrad 的方式,今天我們來看看其他的優化器

局部最低點的問題

昨天提到關於 learning rate 太大太小的問題,這邊我們可以用 Adaptive Gradient Descent 來解決,但是還有個問題可能還沒有辦法被解決,那就是我們透過了 Gradient Descent or Adagrad 來達到一個低點,但那可能只是局部的最低點,而不是整體的最低點。

因為在接近局部最低點的時候,下降速度會越來越慢,如果我們是用 Adagrad 的話那就更慢了,導致我們沒有任何機會能夠跳出這個點來找到另外一個更低的點。

因此,我們需要其他的辦法來解決這個問題

考慮一下 Momentum

Momentum 在物理學裡面稱作動量,你可以想像是它用來描述一個物體運動的傾向。以日常經驗來說,一個移動越快的物體,動量也就越大,因為越難讓它停止下來;另外一方面,在一樣的速度下,越重的物體(譬如公車)動量也就越大,因為它比輕的物體(譬如水滴)難以停下來。

套用在梯度下降上,我們希望能夠加入動量這個概念,也就是說,如果目前梯度下降的方向,跟過去參數更新的方向一致的話,那麼就會增強這個方向上的梯度;如果目前梯度下降的方向,跟過去參數更新的方向相反的話,那麼梯度就會降低。

你可以想像過去我們一直往北邊跑,如果今天跑到某一個點,這個點繼續要我們往北邊跑,那麼我們就可以輕易地加速;但是如果這個點告訴我們要往南跑,因為方向相反,這時候我們就不得不放慢腳步,考慮是不是真的要往南跑。

動量對於梯度下降的影響

在這樣的情況下,當我們越往局部最低點靠近的時候,因為歷史下降的方向和當前下降的方向一致,因此在下降的速度上不會快速的趨近於零,並有機會根據不同的下降方向做調整,甚至可以跳出局部最低點。

Adam Optimizer 登場

概念上就先講解到這邊,這裡我們介紹 TensorFlow 當中的 Adam Optimizer 出場。Adam 的意思為 Adaptive Moment Estimation,也就是一個採用的 Adagrad 以及 Momentum 優點的算法。

在 TensorFlow 當中使用也很簡單,帶入一個 learning rate 以及兩個參數作為調整用(建議值為 0.9 & 0.99)

optimizer = tf.train.AdamOptimizer(1,0.9,0.99)

得到的 loss 下降結果如下

Imgur

我們會發現雖然他一開始好像在亂跳,但同樣跑 50 次的情況下,實際上下降的速度比一般的 Gradient Descent 跟 Adagrad 還要快

不同的行進方式

如果比較三者的參數的變化(行進方式):

Gradient Descent(下降速度較慢)
Imgur

Adagrad(下降速度較快,可以看到前面的步伐比較大)
Imgur

Adam(除了下降的速度更快,也發現他會左右跳動)
Imgur


如果換成從更遠的地方開始 (20,20) 然後執行 100 次,讓三種方法的差異更為明顯

Gradient Descent
Imgur

Adagrad
Imgur

Adam
Imgur

可以看到 Adam 一開始在往左下角前進的時候,是一路往前衝,不像 Adagrad 開始減速。然而衝過頭之後,就會往回修正,因此就會看到像是蛇行的路線。Adam 是目前為止我們看到較好的優化器。

那麼,我們今天就先談到這裡。我們明天見!


上一篇
[Day 27] 不同的 Optimizer
下一篇
[Day 29] 神經網路
系列文
Machine Learning for Dummies30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言