1. 程式人生 > >NN模型設定--引數初始化

NN模型設定--引數初始化

引數初始化的原理

  權值初始化對網路優化至關重要。早年深度神經網路無法有效訓練的一個重要原因就是早期人們對初始化不太重視。
  模型對初始的引數是很敏感的,如果引數都很大,那麼經過wx+b這個線性函式時,輸出的值也會很大,若是經過tanh這個啟用函式,輸出的結果絕對值都幾乎接近於1,也就是說每個神經元的輸出都幾乎相同,這完全違背了神經網路的初衷,事實上我們希望每個神經網路都能去學習一個不同的特徵,他們的輸出值應該是有差異的。
  另一方面,如果w值設定地太小了,經過線性函式wx+b的時候,wx可以忽略不計,於是線性函式的輸出都約等於b,經過啟用函式後的輸出也幾乎相同,又造成了神經元彼此雷同的尷尬局面呢。

權重初始化的要求

  神經元不容易飽和,學習速度不會太慢。
  這樣的⼀個神經元更不可能飽和,因此也不⼤可能遇到學習速度下降的問題。
在這裡插入圖片描述

引數初始化的常用方法

  初始化的基本思想:方差不變,即設法對權值進行初始化,使得各層神經元的方差保持不變。
  引數初始化可能導致梯度消失或爆炸,所以基本原則是確保每一層的權重矩陣的方差都近似為 1。

  1)為網路中的所有連線權值賦上一個服從均值為0,標準差為0.01的正態分佈的一個隨機數。為第二、四、五層的卷積層和所有的全連線層神經元的偏置都賦予1的初始值,而其他層神經元的偏置均為0。這種初始化方法在模型的訓練初期,能夠有效的提速。因為為ReLU輸入的都是正值。

  2)Xavier初始化
  從高斯分佈或均勻分佈中對權值進行取樣,使得權值的方差是1/n,其中n是輸入神經元的個數。該推導假設啟用函式是線性的。

  3)He初始化/MSRA初始化
  從高斯分佈或均勻分佈中對權值進行取樣,使得權值的方差是2/n。該推導假設啟用函式是ReLU。因為ReLU會將小於0的神經元置零,大致上會使一半的神經元置零,所以為了彌補丟失的這部分資訊,方差要乘以2。

  4)批量規範化(batch-normalization,BN)
  每層顯式地對神經元的啟用值做規範化,使其具有零均值和單位方差。批量規範化使啟用值的分佈固定下來,這樣可以使各層更加獨立地進行學習。批量規範化可以使得網路對初始化和學習率不太敏感。此外,批量規範化有些許正則化的作用,但不要用其作為正則化手段。

  5)
  ①經驗規則適用於[-1,1]的輸入,如果直接用,那麼會爆網路。
  ②ReLu的非飽和線性端是做迴歸用的啟用函式,輸出近似高斯分佈。
  基於以上兩點,Alex選擇了高斯分佈生成零均值、小標準差的隨機值作為初始化W,並且逐層加大標準差,使得W有彈性。(0.0001-0.01-0.01-0.1-0.1)
  由於高斯分佈的的不均勻性(超大值有,超小值也有),使得經過ReLu啟用,不會有很無解的爆數值問題.當然輸入不要太大,[ 0,256] ( 原始) 或 [ -128,128] ( 減均值)

  6)目前在神經網路中建議使用的權重初始化策略是將值歸一化到範圍[-b,b],b為:
在這裡插入圖片描述
  其中,Hk是前後隱含層的神經元數目。

小技巧

  1)統計一下L1的引數分佈;
  2)在大初始化的情況下,DNN 的泛化能力也會變差。