iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 7
0

上一篇有說明Linear regression利用SGD來train,今天我們就把一些相關概念一次解釋清楚,之後在train模型,或者自己運用在自己的case上的時候會更清楚了解,如何運作,以及如何debug模型。今天主要會講兩個概念: Gradient descent以及Optimizer。

梯度下降 (Gradient Descent)

GD(Gradient Descent)主要是透過對loss function偏微分等方法,找出最佳的參數,是一個最佳化的方法。簡單來說就是透過微積分找極端值求出微分等於0的解。而爲什麼他會被稱為梯度下降法,因為這個方法會沿著梯度的反方向走,找出最小值。也因為Gradient Descent應用於各大Deep Learning or Machine learnig的方法。所以一般來說activation function都要找可微分的。
https://ithelp.ithome.com.tw/upload/images/20190922/20119971f1xcOILWAG.png
Gradient Descent

這邊我們跳過證明求導的部分,可參考李宏毅老師課程的部分,因此我們可以簡單將一個GD公式描述如下:
https://ithelp.ithome.com.tw/upload/images/20190922/20119971OdteMyOTPG.png

每次的更新可視為此次參數剪掉learning rate乘上gradient。這邊的t為第t次更新參數,alpha為learning rate。learning rate為控制每次要更新的大小。而learning rate的設定很重要,可以搭配下圖來看。假如設太大,一次跨步的距離太大,很有可能從這個山頭,直接跳到另外一個山頭。但設太小,有時候就像樹懶一樣,雖然最終會達到目的地,但是學習速度非常緩慢。因此,針對learning rate調整有許多方法,一般來說,在一個整個learning process,一開始的learning rate要比較大,後面learning rate逐漸變小,開始"地毯式"的搜尋。
https://ithelp.ithome.com.tw/upload/images/20190922/201199710PVinbT175.png
Learning rate 大小比較 (Sourece: 李教授投影片)

因此,learning rate需要隨著training 時間而改變,所以有許多研究改變了optimize的公式,讓training結果能更好 。

Adagrad

為了要解決learning rate隨著epoch而遞減,因此,有人有研究一些方法去改變update function,讓learning rate可以隨著時間針對某種要素改變。像是Adagrad。Adagrad主要概念就是將learning rate除以過去所有gradient的平方和。而運算過程如下:
https://ithelp.ithome.com.tw/upload/images/20190922/20119971nhNBqGPQj0.png

RMSProp

當然,Adagrad也有一些缺點可以改進。例如:隨著learning process,過去的gradient裡應來講重要性要越來越低,新的gradient的重要性相對要較高 (類似Decay的概念)或者是Error surface 太complex,讓adagrad無法解決 (learning rate需要忽大忽小)。
https://ithelp.ithome.com.tw/upload/images/20190922/20119971pK9WUnRtvJ.png

Adam

Adam就是RMSprop加上Momentum,因此一般來說,不管在DNN,CNN等等都會先使用Adam做為optimizer。

而什麼是momentum呢?在跑DNN或者NN的時候,有時候會看到momentum這個參數 ,大家可能會有疑惑想說Momentum是什麼東西?賣球鞋品牌?。Momentum簡單來說就是動能,若momentum參數調的適當,他除了可以增快學習速度,也可以透過動能可以讓GD在遇到local minimun的時候衝過去。簡單來說,就像一顆球在山波上丟下去,當下坡階段,球速度越來約快,你的learning速度也會越來越快,若設定太高,也有可能衝破Global minimun。
https://ithelp.ithome.com.tw/upload/images/20190922/201199715qZTDsk8x6.png
Momentum

因此,當加入Momentum,GD的update公式就會轉變成
https://ithelp.ithome.com.tw/upload/images/20190922/20119971Owr6AZimgd.png

一般來說,Momentum所設定就是beta的參數。

TF2.0

一般來說,你在程式的model部分最常會看到這段code:

#optimizer
optimizer = tf.optimizers.Adam(learning_rate)

Tensorflow已經幫你把optimizer都做好變成api,因此你只要在tf.optimizers下去換即可。

小結:

大致上瞭解了GD到各式optimizer,接下來就會討論如何build一個NN或者DNN。感謝大家,漫長閱讀。了解SGD以及optimizer的應用對於在tune一些參數會更有感覺。之後會在其中一天說明overfiting 跟 underfiting的issue。

一日一梗圖:
https://ithelp.ithome.com.tw/upload/images/20190922/201199711mZ41MtuX3.png
Source

Reference:
Adagrad
RMSprop


上一篇
[Day-6] Tensorflow Linear regression
下一篇
[Day-8] Deep Neural Network (Lab: Airbnb)
系列文
Towards Tensorflow 2.030

尚未有邦友留言

立即登入留言