1. 程式人生 > >第2次課改善深層神經網路:超引數優化、正則化以及優化

第2次課改善深層神經網路:超引數優化、正則化以及優化

1. 除錯處理

超引數重要性排序

  1. 學習速率(learning rate)α
  2. 動量權重β=0.9,隱藏層節點數,mini-batch size
  3. 層數,learning rate decay
  4. Adam優化演算法的引數β1=0.9,β2=0.999,ϵ=108一般不改

調參方法

  1. 網格搜尋,使用引數較少的情況
  2. 隨機選擇,該方法較優,原因是對於一個具體問題,不清楚哪個引數比較重要,而網格搜尋是各個引數地位是平等的

    • 先確定一個大致的引數區間,然後再細緻搜尋

2. 為超引數選擇合適的範圍

一個例子 - 隱藏層節點數nx和層數L

  • 隱藏層節點數,隨機選擇50-100個
  • 層數,可以隨機選擇2-4,也可以網格搜尋

另一個例子 - 學習速率α

  • 問題:選擇一個可能下界0.0001和一個上界1,在[0.0001,1]中隨機取點,由於尺寸不對稱,小的數字被取到的概率小
  • 解決方法:把區間劃分成4個部分,[0.0001,0.001], [0.001,0.01], [0.01,0.1], [0.1,1],然後在4個區間內隨機取點,也就是對其取對數
  • 示例程式碼:
    python
    r = -4*np.random.rand()
    alpha = 10**r

最後一個例子 - 動量權重β

  • 問題:和學習速率一樣,[0.9,0.999]之間不能均勻取值
  • 解決方法:通過1β到[0.001,0.1],然後用學習速率的方法進行對數取值
  • 原因:11β之後,0.9到0.9005不敏感,但是0.999到0.9995很敏感,對結果的影響大,所以需要在接近1的地方密集取值

3. 超引數訓練實踐 - Pandas vs. Caviar魚子醬(analogy)

調整引數的方法 - 看計算能力

  1. Pandas - 計算能力不夠的時候,邊訓練邊調整引數
  2. Caviar - 同時嘗試多種引數組合進行模型訓練

4. 正則化網路的啟用函式

  • Batch Norm,對隱藏層節點啟用函式輸入或者輸出進行歸一化

Batch Norm

歸一化輸入可以加快訓練速度

x=xμσ

Batch Norm是對隱藏層進行歸一化操作

有兩個版本的Batch Norm:
1. (Default)對節點啟用函式的輸入z進行歸一化
2. 對節點的輸出a進行歸一化

演算法步驟

  • Given some intermediate values in NN z(1),...,z(m)

    • μ=1miz(i)
    • σ2=1mi(ziμ)2
    • z(i)norm=z(i)μσ2+ϵ
      • 分母加上ϵ是為了防止分母太小,保證演算法穩定性
    • z~(i)=γz(i)norm+β
      • 為了不讓隱藏層節點啟用函式的輸入都是均值為0方差為1,其中γ,β都是模型的學習引數,可以用梯度下降或者其他方法來更新這兩個引數的值,也可以設定成固定值
    • Use z~(i) to be the input of activate function
  • 如果γ=σ2+ϵ,β=μ,那麼z(i)=z~(i)

5. 將Batch Nrom擬合進神經網路

一個完整的網路

這裡寫圖片描述

一個節點

  1. X通過w和b進行求和得到z
  2. z通過γ[1],β[1]引數和BatchNorm操作得到z~[1]
  3. 用啟用函式計算節點的輸出

一些注意點

  1. 引數β和上一節中的不是一個引數
  2. γ[l],β[l]和w,b等價,可以用梯度下降進行更新,也可以用優化方法進行優化加快學習
  3. tf.nn.batch-normalization框架實現,不需要自己手動實現,但是要理解做法
  4. 因為歸一化要減去均值,所以偏置b就沒有用了,刪掉,β有相似的作用
  5. γ[l],β[l]的維度是(n[l], 1)

6. Batch Norm為什麼奏效

通過歸一化操作,把尺度不一的輸入限定在相同的量綱下,從而加快學習速度

Covariate shift

  • 定義:已經學習了x到y的對映,如果x的分佈改變了,需要重新訓練學習演算法。

對於一個多層的神經網路,把第二層的輸出當作輸入,有一個A[2]y^的對映,但是第二層的輸出也在變化,也就是x的分佈改變了,所以使用Batch Norm保證輸入的均值方差,減少了輸入改變的我呢體,變得更穩定,保證每層都可以獨立學習,從而加速整個網路的學習。

Batch Norm和regularization正則化

使用mini-batch,在每個mini-batch上計算均值方差進行歸一化。會給隱藏層的啟用函式帶來噪聲,產生類似於dropout的效果。因為新增的噪聲很小,只有輕微的正則化效果

和dropout一起使用獲得更好的正則化效果,mini-batch size越大,正則化效果越弱,Batch Norm的正則化效果只是小的副作用,不是其主要功能。

7. 測試時的Batch Norm

訓練的做法

分別對每個mini-batch進行歸一化處理

測試的做法

測試的時候需要對樣本逐個處理樣本

使用指數加權平均來估計均值和方差,也可以使用其他方法