神經網絡訓練技巧


參數初始化

  • 是否可以將全部參數初始化為0
    • 同一層的任意神經元都是同構的
    • 它們的輸入輸出都相同,因此前向反向傳播的取值完全相同
    • 訓練一直是對稱的,同一層參數都是相同的
  • 隨機初始化參數
    • 初始化參數為取值范圍\((-\dfrac{1}{\sqrt{d}}, \dfrac{1}{\sqrt{d}})\)的均勻分布,或者是高斯分布
    • \(d\)是一個神經元接受的輸入維度
    • 偏置可以設為啟發式常數,並不會導致參數對稱問題

Dropout原理與實現

  • 以一定概率隨機地“臨時丟棄”一部分神經元
  • 相當於每次迭代都在訓練不同結構的神經網絡,類似於Bagging方法
  • 輕量級的Bagging集成近似,能夠實現指數級數量神經網絡的訓練與評測
  • 具體實現:
    • 包含\(N\)個神經元的網絡,在Dropout作用下可看作為\(2^N\)個模型的集成
    • 這些模型可看作原網絡的子網絡,共享部分權值,具有相同網絡層數,整體參數數目不變
    • 減弱全體神經元之間的聯合適應性,較少過擬合的風險
    • 前向傳播:
      • 以概率\(p\)隨機生成取值為0或1的向量,代表每個神經元是否被丟棄

        \[r_j^{(l)} \sim Bernoulli(p) \]

      • 更新神經元輸出

        \[\tilde{y}^{(l)}=r^{(l)} * y^{(l)} \]

    • 測試階段
      • 每個神經元參數乘以概率系數\(p\)
      • 恢復在訓練中該神經元只有\(p\)的概率被用於整個網絡的前向傳播計算

Normalization

Internal Covariate Shift

統計機器學習中的一個經典假設是“源空間(source domain)和目標空間(target domain)的數據分布(distribution)是一致的”。如果不一致,那么就出現了新的機器學習問題,如 transfer learning / domain adaptation 等。而 covariate shift 就是分布不一致假設之下的一個分支問題,它是指源空間和目標空間的條件概率是一致的,但是其邊緣概率不同,即對所有的\(x \in \mathcal{X}\)

\[P_s(Y|X=x) = P_t(Y|X=x) \]

但是,

\[P_s(X) \neq P_t(X) \]

簡而言之,每個神經元的輸入數據不再是“獨立同分布”

  • 上層參數需要不斷適應新的輸入數據分布,降低學習速度
  • 下層輸入的變化可能趨向於變大或者變小,導致上層落入飽和區,使得學習過早停止
  • 每層的更新都會影響到其它層,因此每層的參數更新策略需要盡可能的謹慎

通用框架與基本思想

以一個神經元為例,接收一組輸入向量

\[\mathbf{x} = (x_1, x_2, \cdots, x_d) \]

通過某種運算后,輸出一個標量值:

\[y = f(\mathbf{x}) \]

以BN為代表的方法進行了簡化的白化操作,通用框架如下所示:

\[h = f(g \cdot \frac{\mathbf{x} - \mu}{\delta} + b) \]

其中,\(\mu\)\(\delta\)是平移參數和縮放參數,\(g\)\(b\)是再縮放參數和再平移參數。之所以引入再縮放和再平移,是為了模型的表達能力不會因為規范化下降。這兩個參數都是可學習的,保證每個Normalization層學到的是真正有用的分布。

Batch Normalization:縱向規范化

結合上述通用公式,BN中均值和方差由以下公式計算

\[\mu_i=\dfrac{1}{m}\sum \limits_{i=1}^m x_i \]

\[\sigma_i=\sqrt{\dfrac{1}{m}\sum \limits_{i=1}^m(x_i-\mu_i)^2 + \epsilon} \]

BN獨立地規范化每一個輸入維度\(x_i\),但規范化的參數是一個 mini-batch的一階統計量和二階統計量。這就要求每一個 mini-batch的統計量是整體統計量的近似估計,或者說每一個 mini-batch彼此之間,以及和整體數據,都應該是近似同分布的。分布差距較小的mini-batch可以看做是為規范化操作和模型訓練引入了噪聲,可以增加模型的魯棒性;但如果每個mini-batch的原始分布差別很大,那么不同 mini-batch的數據將會進行不一樣的數據變換,這就增加了模型訓練的難度。

訓練時,BN層利用隱藏層輸出結果的均值與方差來標准化每一層特征的分布,並且維護所有mini-batch數據的均值與方差,最后利用樣本的均值與方差的無偏估計量在測試時使用

Layer Normalization:橫向規范化

與 BN不同,LN是一種橫向的規范化,它綜合考慮一層所有維度的輸入,計算該層的平均輸入值和輸入方差,然后用同一個規范化操作來轉換各個維度的輸入:

\[\mu = \sum_i x_i \]

\[\delta = \sqrt{\sum_i (x_i - \mu)^2 + \epsilon} \]

LN針對單個訓練樣本進行,不依賴於其他數據,因此可以避免BN 中受mini-batch 數據分布影響的問題,可以用於小mini-batch場景、動態網絡場景和RNN,特別是自然語言處理領域。此外,LN不需要保存mini-batch 的均值和方差,節省了額外的存儲空間

但是,BN的轉換是針對單個神經元可訓練的——不同神經元的輸入經過再平移和再縮放后分布在不同的區間,而 LN對於一整層的神經元訓練得到同一個轉換——所有的輸入都在同一個區間范圍內。如果不同輸入特征不屬於相似的類別(比如顏色和大小),那么LN的處理可能會降低模型的表達能力

Weight Normalization:參數規范化


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM