iT邦幫忙

2021 iThome 鐵人賽

DAY 8
0
AI & Data

30天搞懂機器學習是否搞錯了什麼系列 第 8

【Day 8】梯度下降法(Gradient Descent) --- Tip 1

之前在機器學習基本功(二) --- Regression中有簡單提到梯度下降法(Gradient Descent),為了要到最好的funciton,也就是要解一個最佳化的問題,式子會列成 https://chart.googleapis.com/chart?cht=tx&chl=%5Ctheta%5E*%20%3D%20arg%20%5C%20min%20L(%5Ctheta),我們的目標是要找一組參數 https://chart.googleapis.com/chart?cht=tx&chl=%5Ctheta 來讓Loss越小越好。
今天開始要教大家一些小技巧,接下來我會詳細說明怎麼把梯度下降法做得更好,我們先來複習之前講的梯度下降法的步驟,首先先隨機選取一組參數,接著去計算每個參數對Loss的偏微分,算完乘以learning rate https://chart.googleapis.com/chart?cht=tx&chl=%5Ceta,再用原本的參數減去該數值來得到新的參數。

Tip 1:小心調整你的Learning rate

從圖中我們可以看到,當你Learning rate比較小,你的Loss就會下降的很慢,但如果Learning rate比較大,你的Loss就有可能會卡住而到不了最低點,而如果Learning rate太大,你的Loss就甚至可能會變大。因此我們在做梯度下降法的時候應該把參數變化對Loss變化的圖畫出來,根據前幾次update參數的情況來確定你的Loss是穩定下降的。

通常Learning rate會隨著參數更新而越來越小,因為剛開始的起點通常離最低點是比較遠的,所以你的步伐要踏大步一點,才會比較快走到接近最低點的地方,經過幾次的參數更新以後,已經比較接近最低點了,就應該減少你的Learning rate讓他可以收斂在最低點的地方。因此最好的狀況是,每一個不同的參數都給它不同的Learning rate,而我覺得最簡單、最容易實作的應該是Adagrad。

Adagrad

  • 每一個參數的Learning rate都除上之前算出來的微分值的平方平均數(Root mean square)。

經過推導後可以看到 https://chart.googleapis.com/chart?cht=tx&chl=%5Csigma%5Et 可以寫成圖中的式子。

最後得出更新參數的式子。

矛盾

有一個矛盾的地方是分母 https://chart.googleapis.com/chart?cht=tx&chl=g%5Et 表示Gradient越大,踏的步伐就越大,但分子 https://chart.googleapis.com/chart?cht=tx&chl=%5Csqrt%7B%5Csum_%7Bi%3D0%7D%5Et(g%5Ei)%5E2%7D 表示Gradient越大,踏的步伐就越小。

那會這樣寫,比較直觀的解釋是要去看它跟前面幾次的Gradient比起來是不是有反差出現。

只考慮一個參數的時候,如果算出來的微分越大,就會離原點越遠,而我踏出去的步伐是跟微分的大小成正比,那它可能就是最好的步伐。

那考慮很多參數的時候我們就必須要考慮二次微分,最好的步伐就會不只是要正比於一次微分,它還同時要和二次微分的大小成反比。
從圖中可以看到 a 跟 c 如果只考慮微分值是不夠的,必須也要考慮 a 的一次微分值除掉二次微分,以及 c 的一次微分值除掉二次微分,才能真正顯示這些點跟最低點的距離。

回到Adagrad的式子,可以發現它是用過去所有微分值的平方和開根號來去代表二次微分,節省做二次微分的運算時間,可以想像成是在一次微分裡面做sampling,再把它的平方和開根號得出結果。


參考資料

李宏毅老師 - ML Lecture 3-1


上一篇
【Day 7】機器學習基本功(五)
下一篇
【Day 9】梯度下降法(Gradient Descent) --- Tip 2, 3
系列文
30天搞懂機器學習是否搞錯了什麼30

尚未有邦友留言

立即登入留言