前面說過梯度下降是用來做最佳化,也就是調整參數的重要方法,今天的文章會附上了一段程式動畫來直觀看到梯度下降是怎麼調整預測,以及說明實際上學習的時候會遇到什麼問題和如何改善。
深度學習也是機器學習的一種,讓我們重新複習一下機器學習的三步驟:
在步驟1. 的部分,一開始參數 w 和 b 要用什麼數值呢?
也就是梯度下降時你的山坡起始點要從哪邊開始往下走。
因為從哪邊開始走沒考慮好會容易引起梯度消失,這邊學者做了很多研究,目前主要是配合激勵函數:
在步驟3. 的部分,梯度下降既然要下山,每次跨多大步也要設定,這個叫做學習率(learning rate)。
通常不是跨大步走的快就比較好,我們可以看看這張圖
步伐太小 | 步伐適中 | 步伐太太 |
---|---|---|
學習率 = 0.02 | 學習率 = 0.1 | 學習率 = 0.99 |
步伐太小走到天荒地老,步伐太大一直走過頭。
像這種需要人決定的設定值,就叫做超參數。
除了學習率,梯度下降也有幾個超參數要設定:
1 epoch = iteration 次數 = 訓練集/batch size
舉例來說,訓練集有1000筆資料,batch size = 10,那麼 1次 epoch 會有 100次 iteration。也就是這本習題1000頁,一次只讀10頁要分100次唸完。
iteration 是由 batch size 決定的,所以 iteration 不用設定。
而正常學習的話 epoch 跑越多次 loss 會逐漸下降。多複習幾次學習成果越好的概念。
根據不同的 batch size 設定,有三種梯度下降法:
項目 | batch | mini-batch | stochastic(簡稱SGD) |
---|---|---|---|
batch size | 全部資料 | 資料的一部分 | 資料的一筆 |
安定性 | 安定 | 稍微安定 | 不安定 |
計算量 | 大 | 大 | 小 |
這邊用程式做了一段動畫,可以直觀看到梯度下降是怎麼改善預測,也能感受三種 batch size 的差異。假設訓練集有100筆:
batch(每次100筆) | 訓練狀況 |
---|---|
mini-batch(每次10筆) | 訓練狀況 |
---|---|
SGD(每次1筆) | 訓練狀況 |
---|---|
目前用 mini-batch 比較多。而 SGD 屬於 Online Learning 的一種,後面會介紹。
我們在下山的時候,有時候會碰到一個平地以為到山谷了,然後就停住的狀況。
這種會造成停留的地點就叫平穩點。
以數學來說就是函數做微分求斜率結果為0的狀況。
以這張圖來說,在下山時有可能停在藍點(局部最優)或橘點(平穩點),但其實離真正的目的地(全局最優)還很遠。
平穩點(Stationary Point)
該點切線斜率為0。
局部最優解(Local Optimal Solution)
某個範圍的最佳解
全局最優解(Global optimal solution)
函數的最佳解,真正的目標。
通常會考慮用變更學習率大小來解決陷入局部最優解的問題,比如說跨大步一點越過局部最優點,但是萬一因此也跨過全局最優解就不好了,所以在適當的時機把學習率調小也是很重要的。但是更糟糕的問題是陷在鞍點。
鞍點(Saddle point)
平穩點的一種,長的就像馬鞍一樣,從某個方向來看是最低點,但是換個方向看其實是一個最高點。
高原(Plateau)
鞍點附近梯度接近0的平緩區域,一種陷在鞍點比較難脫離的情形。
鞍點 3D 圖 | 最低點方向 | 最高點方向 |
---|---|---|
針對鞍點問題,最早是加上移動的慣性(Momentum),後來又加入了調整行進方向及加速,減速以達到脫離鞍點的目的。
這張圖應該是最能說明各種學習優化器(optimizer)的狀況。
下山走到了一個平穩的鞍點,然後透過慣性慢慢的在高原變更移動的方向往下一個方向移動。可以看到一般的梯度下降 SGD 就停在鞍點動彈不得。
—— 圖片出處:CS231n: Convolutional Neural Networks for Visual Recognition.
慣性(Momentum),1990年
針對動作的趨勢方向作加速。
Adagrad(Adaptive Gradient Algorithm),2011年
根據各個參數自動做個別的學習率調整,但是會有學習率逐漸變小而消失的問題。
AdaDelta,2012年
以Adagrad為基礎,主要是解決學習率消失的問題。
RMSprop(Root Mean Square Propagation),2012年
Geoffrey Hinton 教授在線上課程 Coursera 提案的方法。
也是為了解決學習率消失的問題。
Adam(Adaptive Moment Estimation),2015年,目前主流的演算法
結合了 RMSprop 和 momentum 的優點。在大部分的場合都表現得很好。
其他還有 AdaBound(2019年)和 AMSBound 等優化器,但目前還是 Adam 比較常用。