1. 程式人生 > >Neural Networks for Machine Learning by Geoffrey Hinton (6)

Neural Networks for Machine Learning by Geoffrey Hinton (6)

Overview of mini-batch gradient descent

錯誤面

  • 線性神經元在均方誤差代價函式的錯誤面是一個拋物面,橫截面是橢圓。
  • 對於多層神經元、非線性網路,在區域性依然近似是拋物面。

Full Batch Learning 的收斂性問題

full batch 的方式雖然是朝著梯度最大的方向下降,但是當錯誤橫截面不是圓形的時候,前進的方向並不指向錯誤最小點,如圖1


這裡寫圖片描述
圖1

學習率問題

如果學習率過大,權重會在錯誤面上面來回震盪,如圖2,我們希望
- 在那些梯度較小,但是連續的方向上,快速前進。
- 在那些梯度較大,但是不連續的方向上,緩慢移動。


這裡寫圖片描述
圖2

隨機梯度下降法

如果資料集足夠充分,那麼用一半的資料訓練算出來的梯度與用全部資料訓練出來的梯度是幾乎一樣的。

極限情況就是每次只用1個樣本進行訓練,這就是線上(online)學習。

批梯度下降法(Mini-batches)通常比線上學習要好:
- 更少的計算量。
- 矩陣乘法跟適用於GPU。

批梯度下降法需要在訓練樣本選取上儘量均衡,比如隨機選取各類。

2類學習演算法

  • 使用全資料集的方法(如 non-linear conjugate gradient,非線性聯合梯度法)。
  • 使用批資料集的批梯度法,通常對於大型神經網路與大型資料集,批梯度下降法更合適,而mini-batch也要選取地足夠大,這樣在計算上會更高效。

基本批梯度下降法

設定一個初始學習率:
- 如果錯誤率持續變得糟糕或者劇烈震盪,需要減小學習率。
- 如果錯誤率基本上是平穩下降,但是非常緩慢,那麼應該增加學習率。

在批梯度下降快要結束前,應該儘量減小學習率:

因為在不同的mini-batch之間是有擾動成分的,減小學習率可以消除這個效應。

當錯誤率不再下降時,也需要減小學習率。

這個錯誤率是指的驗證(validation)資料集,與訓練資料集和測試資料集相互獨立。

各種批梯度下降法中的小技巧

權重值初始化

如果兩個神經元的權重初始值相同,輸入和輸出層相同,那麼它們將不能學習到不同的特徵。因此需要使用隨機初始化方法來打破這種對稱性。
如果一個神經元輸入端很多,那麼這些輸入權重的微小改變將會使得這個神經元反應過於劇烈。

  • 因此一般需要按照 fanin 等比例初始化權重。
  • 也可以按照相同的方式等比例放縮學習率。

中心化輸入(Shifting the inputs)

中心化即把輸入樣本全部減去全體樣本的均值,這樣輸入樣本具有0均值。
這樣做的好處是能夠平衡錯誤面,儘量擴大樣本差異性。

均一化輸入(Scaling the inputs)

均一化將資料都轉化到單位長度上,這樣可以把錯誤面變圓,如圖3


這裡寫圖片描述
圖3

更徹底的方法-去除相關性

對於球形錯誤面,梯度方向直接指向最小值處。

多層神經網路中容易出現的問題

  • 如果初始學習率較大,隱含層的權重值將會變成很大的負值,從而梯度會變得很小,錯誤率會停止下降。

    這是因為權重值跑道了一個很遠的平面( plateau )上了,而這常常被錯誤認為是區域性極值。

  • 對用於分類的神經網路而言,網路很容易學會一種策略,這種策略讓網路按照它應該輸出為1的次數,成比例作出輸出。

    然而讓網路學會更多關於輸入的資訊,會花費漫長的時間。這也因為是到了一個平面上,常常也被錯誤認為是到了區域性最優值。

4種加速批梯度下降的方法

  1. 使用動量-使用權重的速度而非位置來改變權重。
  2. 針對不同權重引數使用不同學習率。
  3. RMSProp-這是Prop 的均方根 ( Mean Square ) 改進形式,Rprop 僅僅使用梯度的符號,RMSProp 是其針對 Mini-batches 的平均化版本。

    Riedmiller, M., and H. Braun (1993), “A Direct Adaptive Method for Faster Backpropagation Learning: the Rprop Algorithm”, in: IEEE International Conference on Neural Networks, San Francisco, CA, pp. 586-591.

  4. 利用曲率資訊的最優化方法。

動量方法

動量的直觀理解

如圖4,小球在錯誤面上,最初朝梯度方向啟動,但一旦具有速度,就不再完全按照梯度最大的方向前進了
- 動量使得其安裝原先的方向執行。
- 動量通過和之前梯度方向的結合顯著減小在曲率交大處的震盪現象。
- 動量的結果是讓權重以一種溫和並連續的梯度方向前進。


這裡寫圖片描述
圖4

動量公式

v(t)=αv(t1)εEw(t)

α 是衰減係數,是一個比1略小的常數。權重的改變數等於此刻的速度。

Δw(t)=v(t)=αv(t1)εEw(t)=αΔw(t1)εEw(t)

極限速度

v()=11α(εEw)

由於α接近1,可以看出極限速度會很大。在訓練初始時刻,權重引數可能很大,需要把α設定較小(如0.5);當後期大權重係數消失後,權重可能卡在區域性最優值中,這時需要將α平滑過渡到最終值(0.9或0.99)。

如果沒有使用動量,會造成劇烈的震盪現象。

動量的改進版本

Ilya Sutskever 提出了一種新的動量,如圖5,核心思想是先按照之前的方向前進,計算新位置的梯度作為修正,然後按照合方向更新權重。本質上是先賭再改的方式。傳統方法是先改再賭

Sutskever, Ilya, et al. “On the importance of initialization and momentum in deep learning.” Proceedings of the 30th international conference on machine learning (ICML-13). 2013.


這裡寫圖片描述
圖5

對不同權重使用單獨的自適應學習率

思想的初衷

對於多層神經網路結構,針對不同隱含層的最合適的學習率可能相差甚遠。

一種可行的獨立調整方式

定義區域性增益 ( local gain ) gij作為權重增量的調整係數,根據梯度的符號是否改變來相應調整權重的增量:

Δwij=εgijEwijif(Ewij(t)Ewij(t1))>0thengij=gij(t1)+0.05elsegij=gij(t1)0.95
  • 這種策略保證了當震盪開始時,區域性增益顯著下降。
  • 如果梯度是完全隨機的,那麼區域性增益將會收斂於1附近。

提高自適應學習率效果的若干技巧


  • 限制增益在合理範圍內,如 [0.1,10]
  • 使用Full Batch學習方式或者 Big mini-batches:

這保證了梯度符號的改變並非是由 mini-batch 的取樣誤差導致。

  • 將自適應學習率與動量結合。

  • 自適應學習率只能處理維度對齊( axis-aligned )的情況
    而動量卻並不受影響。
  • RMSProp:把梯度平均修正

    Rprop:僅僅使用梯度的符號

    由於不同權重的梯度值差別巨大,因此選取一個全域性的學習率很困難。
    對於full batch learning,我們能夠只使用梯度的符號,對所有權重都更新相同的大小

    Rprop將只利用梯度符號針對性單獨更新各權值這兩種思路結合了起來。
    - 如果最近兩次梯度符號相同,則乘以 1.2。
    - 如果最近兩次梯度符號相異,則乘以0.5。
    - 讓步長限定在合理範圍內,如0.00001到50之間。

    為什麼Rprop不能用在 mini-batches上面?

    因為不同mini-batch之間是有采樣誤差的,這樣只要出現一次符號相異,之前積累的步長就完全被抵消了。

    RMSProp:mini-batch 版本的Rprop

    強制使得每次梯度的調整值非常接近:

    vt=αvt1+(1α)(f)2θt=θt1+εf(θt1)vt