【深度學習】歸一化(十一)

今天要學習的內容是一個小知識點:歸一化

什麼是歸一化

歸一化(Normalization): 是一種無量綱處理手段,即將有量綱的表達式,經過變換,化成無量綱的表達式,稱爲標量。通常來說,想比較兩個有度量單位的物理量是不可以的,但是我們可以先將度量單位去掉,變成標量,就可以作比較了。歸一化的具體作用是:歸納樣本的統計分佈性;操作是:把數據經某種算法限制在(0,1)或者(-1,1)範圍內,限制數據到(0,1)區間是統計樣本的概率分佈,而限制到(-1,1)區間是統計樣本的座標分佈。

常見的歸一化方式是Rescaling (min-max normalization) 線性歸一化:適用在數據比較集中的情況
x=xmin(x)max(x)min(x)x^\prime=\frac{x-\min(x)}{\max(x)-\min(x)}

不論是計算,還是建模,首先要做的是對樣本數據進行預處理,這要求樣本的度量單位要統一,不然無法做統計分析,因此預處理的第一步往往是對數據去量綱。而去量綱化的操作通常有這幾種:歸一化和標準化。

易混淆概念–標準化

標準化(Standardization): 是對原始數據按比例進行縮放處理,使得數據落入一個小的特定區間,這跟歸一化差不多,但是唯一的差別就是縮放本質不同,歸一化是將樣本的特徵值轉化到同一量綱下,把數據映射到(0,1)或者(-1,1)區間。 而標準化是將數據通過去均值實現中心化(中心化:將數據的平均值變爲0的操作),得到的數據是符合標準正態分佈的,區別在於標準化是依照特徵矩陣的列,歸一化是依照特徵矩陣的行處理數據。

標準化的形式是:Standardization (Z-score normalization)標準差歸一化:將數據處理成符合均值爲0,方差爲1的標準正態分佈
x=xμ(x)σ(x)  ,  μσx^\prime=\frac{x-\mu(x)}{\sigma(x)}\;,\; \mu爲均值,\sigma爲方差

個人觀點:我認爲歸一化和標準化其實是起着相同效果的操作,在實際中無需將兩者劃分得這麼清楚,因爲他們的共同點都是消除不同量綱,都是一種線性變換,都是對樣本x按比例縮放再平移。

爲什麼要歸一化

在訓練神經網絡之前,我們一般都要對數據進行歸一化,這樣做的原因有三點:

  1. 避免神經元飽和: 當神經元的激活在接近0或1時會出現飽和現象,這時候,梯度幾乎爲0,一旦出現梯度接近0,根據梯度的鏈式反應,在反向傳播過程中就會出現梯度消失的問題;
  2. 加快收斂: 樣本數據中普遍會存在一些奇異樣本,這些樣本數據會引起網絡訓練時間加長,以及網絡無法收斂等問題。爲避免這種情況,加快網絡學習速度,我們先要對數據進行歸一化處理,使得所有的樣本的輸入信號的均值接近0,或者均方差很小;
  3. 避免數值問題: 太大的數會引發計算機的數值問題。

Batch Normalization

批量歸一化(Batch Normalization,BN): 顧名思義,就是批量地將樣本進行歸一化操作,它是基於mini-batch的數據計算均值和方差的,而不是整個training set。當小批次數量,即mini-batch設置較大時,數據分佈較接近,在訓練前充分打亂,將BN層設置在非線性映射前,這樣有利於網絡收斂。
BN
BN在具體訓練時的操作流程爲:

輸入:上一層輸出的結果X={x1,...,xi,...,xn}X=\{x_1,...,x_i,...,x_n\},學習參數γ,β\gamma,\beta

  1. 計算上一層輸出結果的均值:μβ=1mi=1mxi,\mu_\beta=\frac1m\sum_{i=1}^mx_i,m爲訓練樣本batch的大小(批次)
  2. 計算上一層輸出結果的方差:σβ2=1mi=1m(xiμi)2\sigma^2_\beta=\frac1m\sum_{i=1}^m(x_i-\mu_i)^2
  3. 將樣本數歸一化/標準化處理:x=xiμβσβ2+cx^\prime=\frac{x_i-\mu_\beta}{\sqrt{\sigma^2_\beta+c}},c是一個很小的常數,主要是避免分母爲0。
  4. 更新,將經過歸一化處理得到數據更新前向傳播:yi=γx+βy_i=\gamma x^\prime+\beta

Weight Normalization

權重歸一化(Weight Normalization,WN): 顧名思義是對權重做歸一化處理。在提出Weight Normalization之前,網絡都是偏向於對樣本進行歸一化,而爲了改進優化問題的條件,加快梯度下降的收斂速度,在一些諸如RNN之類的遞歸模型(因爲RNN的輸入Sequence/序列是變長的,無法固定批次來處理)和強化學習、對噪聲敏感的GAN來說,使用BN並不太合適,於是Tim Salimans就提出了權重歸一化,即對神經網絡中權重向量的長度與其方向分離。

權重歸一化的數學表達式爲:Scaling to unit length
γ=gvv\gamma^\prime=\frac{g}{||v||}v
其中,參數v是k維向量,||v||爲v的歐式範數,參數g爲標量。γ\gamma被分爲v和g兩個參數,從上面的式子中可以分析γ=g||\gamma||=g,與參數v獨立,而權重γ\gamma的方向變爲vv\frac v{||v||},因此權重向量γ\gamma用兩個獨立的參數表示幅度/大小和方向。

經過WN後,對於v和g的梯度爲:
gL=γLvv  vL=gγLvggLvv\triangledown_g L=\frac{\triangledown_\gamma L\cdot v}{||v||}\\ \\\;\\ \triangledown_v L=\frac{g\cdot\triangledown_\gamma L}{||v||}-\frac{g\cdot\triangledown_g L}{||v||}\cdot v
其中,γL\triangledown_\gamma L爲損失函數對爲進行WN的權重γ\gamma求偏導。

WN通過改變權重的方式來加速深度學習網絡參數收斂,並沒有引入mini-batch變量,不需要額外開闢空間來保留每個batch的均值和方差,減少了網絡的計算開銷,因此採用WN比BN的計算速度要快。

總結

本文主要介紹了歸一化,以及神經網絡中兩個常用的歸一化操作:批量歸一化和權重歸一化。

參考:
https://mp.weixin.qq.com/s?__biz=MzI5MDUyMDIxNA==&mid=2247494179&idx=1&sn=3ebf86b321ac73d276c004872c5ee926&chksm=ec1c07dadb6b8eccee16e828eb7154513e447f4f8a2df0ab27e1965b72a5a7bd547d0570c5fe&mpshare=1&scene=23&srcid=&sharer_sharetime=1585550731022&sharer_shareid=7f7e7160bc27c0d4e5d25b89aee9e9d5#rd
https://blog.csdn.net/shwan_ma/article/details/85292024
https://blog.csdn.net/donkey_1993/article/details/81871132
https://zhuanlan.zhihu.com/p/25732304?utm_source=com.miui.notes&utm_medium=social
https://blog.csdn.net/simsimiztz/article/details/89465836?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章