之前在機器學習基本功(二) --- Regression中有簡單提到梯度下降法(Gradient Descent),為了要到最好的funciton,也就是要解一個最佳化的問題,式子會列成 ,我們的目標是要找一組參數 來讓Loss越小越好。
今天開始要教大家一些小技巧,接下來我會詳細說明怎麼把梯度下降法做得更好,我們先來複習之前講的梯度下降法的步驟,首先先隨機選取一組參數,接著去計算每個參數對Loss的偏微分,算完乘以learning rate ,再用原本的參數減去該數值來得到新的參數。
從圖中我們可以看到,當你Learning rate比較小,你的Loss就會下降的很慢,但如果Learning rate比較大,你的Loss就有可能會卡住而到不了最低點,而如果Learning rate太大,你的Loss就甚至可能會變大。因此我們在做梯度下降法的時候應該把參數變化對Loss變化的圖畫出來,根據前幾次update參數的情況來確定你的Loss是穩定下降的。
通常Learning rate會隨著參數更新而越來越小,因為剛開始的起點通常離最低點是比較遠的,所以你的步伐要踏大步一點,才會比較快走到接近最低點的地方,經過幾次的參數更新以後,已經比較接近最低點了,就應該減少你的Learning rate讓他可以收斂在最低點的地方。因此最好的狀況是,每一個不同的參數都給它不同的Learning rate,而我覺得最簡單、最容易實作的應該是Adagrad。
經過推導後可以看到 可以寫成圖中的式子。
最後得出更新參數的式子。
有一個矛盾的地方是分母 表示Gradient越大,踏的步伐就越大,但分子 表示Gradient越大,踏的步伐就越小。
那會這樣寫,比較直觀的解釋是要去看它跟前面幾次的Gradient比起來是不是有反差出現。
只考慮一個參數的時候,如果算出來的微分越大,就會離原點越遠,而我踏出去的步伐是跟微分的大小成正比,那它可能就是最好的步伐。
那考慮很多參數的時候我們就必須要考慮二次微分,最好的步伐就會不只是要正比於一次微分,它還同時要和二次微分的大小成反比。
從圖中可以看到 a 跟 c 如果只考慮微分值是不夠的,必須也要考慮 a 的一次微分值除掉二次微分,以及 c 的一次微分值除掉二次微分,才能真正顯示這些點跟最低點的距離。
回到Adagrad的式子,可以發現它是用過去所有微分值的平方和開根號來去代表二次微分,節省做二次微分的運算時間,可以想像成是在一次微分裡面做sampling,再把它的平方和開根號得出結果。