Learning Rate
機器學習嘗試Train的第一個資料集Mnist,大部分都會從此入手。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5yNhZjM2QTYllzYiVDZ4QTY0YTN0MTMhBDZiZGZyU2Nx8CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
當你的Loss在逐漸減小的時候,Gradient卻不一定減小
怎樣做才能将gradient descent(下面用gd代替)做的更好?需要一個更好版本的gd?
在之前做gd的時候,所有的參數都是設同樣的Lr,這肯定是不夠的。
Lr應該為每一個參數客制化
客制化的Lr(Learning Rate)
Learning Rate(以下用Lr代替)将決定Update參數時的步伐有多大。
Lr設定的太大,顯然步伐很大。
不同參數需要不同的學習率
若在某一個方向上gd的值很小很小,非常平坦(如下圖藍色箭頭),我們希望Lr調大一點。
相反,如果在某一個方向上(下圖綠色箭頭)很陡峭,那麼,我們希望将Lr調小一點。
Learning Rate如何做自動調整?
我們需要修改原來的Gradient Descent的式子。
原本的gd公式,這裡隻更改一個參數θ θθ
原式
将上式原來的η ηη修改為下面
這個方法被用到Adagrad
到此,這并不是最終的Lr版本。Lr怎麼實作動态調整呢?
再來看以下Error Surface
當在陡峭的(綠色箭頭)地方,我們需要很小的Lr。
走到中間比較平滑的(紅色箭頭),我們需要很大的Lr。
和上面的不同,這是在同一個參數同一個方向上,也能夠動态的調整Learning Rate!
就出現了以下的一個江湖失傳的算法(找不到論文出處)
RMS Prop
第一步算g i 0 g_i^0g
i
和上面Root Mean Square是一樣的,從第二步開始有所變化,其中α需要自己調。
由此就得到了一個目前比較常用的Optimization政策—Adam
Adam : RMSProp + Momentum
現在在Pytorch上有Adam的套件,直接可用,Adam的介紹在Pytorch裡面的
Doc講的更加詳細!
學習速率排程
Learning Rate Decay
通過不斷調整η ηη的大小。訓練結束後,我們離目的地很近,是以我們降低了學習率。
Summary
- 從最原始的Gradient Descent版本
- 進階版Gradient Descent