Pin-Jiun / Machine-Learing-NTU

0 stars 0 forks source link

4.7-Tips for Training: Adaptive Learning Rate #33

Open Pin-Jiun opened 1 year ago

Pin-Jiun commented 1 year ago

Critical Point不一定是訓練network時的最大障礙

當Loss不再下降,我們認為卡在Critical Point,意味著Gradient很小。但Gradient真的很小嗎? image

從Gradient的向量圖中可以得知,就算Loss幾乎沒有在動,Gradient也可能有震盪

一個可能:Gradient在Error surface的山谷間震盪

如果訓練時很少卡到Saddle Point 或 Local minima,很難走到這兩種點那這張圖怎麼畫出來的呢? image 因為這張圖不是用一般的Gradient descend訓練而成的成果 一般的Gradient descend不太能接近Critical Point 多數的Training在接近Critical Point前Loss就已經停止更新

通常在做Gradient descend時真正的魔王不是Critical Point 我們來看以下的例子 一個很簡單的Convex的Error surface,只有兩個參數 (Convex的surface:等高線是橢圓形的,像狹長山谷。關於Convex:https://en.wikipedia.orG/wiki/Convex_function) 直觀上感覺:這種surface不就一路滑下去再走過去 image

事實上:使用Gradient descend時

Learning  Rate大→步伐太大,飛太遠,在山谷間震盪
Learning  Rate小→步伐太小,幾乎不會前進

用Gradient descend訓練這種Convex怎麼這麼痛苦!! 這種簡單的題目都做不好→一室之不治何以天下國家為!! 所有參數都設同樣的Learning Rate顯然是不夠的→Learning Rate應該要為每個參數客製化

image

若在某個方向很平坦→Learning  Rate大一點,跑得快
若在某個方向很陡峭→Learning  Rate小一點,走得穩

Root Mean Square - Adagrad

此σ對於不同的參數i與迭代t有不同的值 η改成η/σ,我們獲得了一個parameter dependent的learning rate

image

這一招會用再一個叫做Adagrad(阿打軌)的方法裡面

image

針對不同的參數Θ,其Surface不一樣。 當Surface陡峭,σ上標t下標i較大,步伐變比較小 當Surface平緩,σ上標t下標i較小,步伐變比較大

這時候Root Mean Square就會有一個問題 Learning Rate不能只靠前面gradient去改變事實上會忽大忽小(可以說Root Mean Square是逐漸平緩或逐漸陡峭比較適用) 所以就算同參數同方向,Learning Rate也需要動態調整 image

所以就有傳奇的方法 - RMS Prop

Pin-Jiun commented 1 year ago

RMS Prop

找不到文獻的出處, 是某個大學的課程突然講解的方法

跟Adagrad大致相同,但從Step 2開始不一樣 Root Mean Square:每個Gradient有同等重要性 RMS Prop:可自行調整Gradient的重要性

image

透過α決定g上標t下標i的重要性,便可動態調整σ The recent gradient has larger influence, and the past gradients have less influence

image

Gradient大→用RMS Prop可讓剛看到的g影響變大→σ大→步伐小 Gradient小→用RMS Prop可讓剛看到的g影響變小→σ小→步伐大


Adam

最常用的Optimization策略(又稱Optimizer)

Adam:RMS Prop+Momentum

加上Adaptive Learning Rate後,剛剛簡單的Error surface 訓練的起來嗎? 卡住的地方加上Adagrad後走得動了 起始點顛簸,Gradient大→σ大→步伐小,走下去沒問題 左轉後平坦,Gradient小→σ小→步伐大 然而卻暴走了,Why? 因為算σ時會參考過去所有的Gradient 剛開始在y軸走了很遠,轉彎後雖Gradient 小,但累積了很多小的σ,導致步伐變大,突然噴飛到Gradient大的地方,又因Gradient大,步伐變小,震盪慢慢停下來回到中間。怎麼辦呢?

image


Learning Rate Scheduling

image

讓η跟時間有關,怎麼做呢? Learning Rate Decay,時間↑,η↓ 為什麼要這樣?隨著時間前進,離目標越來越近,減少η讓參數更新慢下來 剛剛的情況加上Learning Rate Scheduling就不會震盪

Warm Up

image

要先變大後變小 多大?多小?自己調整

不管用Adam、RMS Prop或Adagrad,都需要計算σ 一個統計的結果,需要大量數據才會精準→一開始σ不精準,那一開始就不要走太遠,要慢慢收集情報

許多論文都有使用


總結:Gradient descend之進化 Vanilla Gradient descend: 固定的步伐大小與當前Gradient方向 Various Improvements:

    1.g:Momentum:考慮過去所有Gradient方向來調整方向
    2.σ:Root Mean Square:考慮過去所有Gradient的大小來調整步伐幅度
    3.η:Learning Rate Scheduling:考慮時間來調整參數的更新速度

不論是什麼Optimizer,幾乎都是考慮、調整這三個參數