1. 程式人生 > 其它 >深度學習之資料標準化方法綜述

深度學習之資料標準化方法綜述

在上一篇文章《深度學習之資料處理方法概述》中,我們介紹了深度學習中資料處理的方法,其中提到了資料標準化的方法,沒有進行詳細介紹,這篇文章主要就是針對資料標準化的方法的介紹,希望讓大家對資料標準化的理解和使用有一定的幫助。本文釋出於深度人工智慧訂閱公眾號原創文章,轉載請註明來源,我們長期致力於傳播人工智慧知識,發展深度人工智慧教育。

 


 


 

 

 

 

什麼是資料標準化

 

 

1、資料標準化概念

 

資料標準化,顧名思義,就是將原來分佈範圍不同的資料縮放在一個範圍之內,一般來說是標準化到均值為0,標準差為1的標準正態分佈,均值為0是為了讓資料中心化,讓各個維度的特徵都平衡,標準差為1是為了讓資料在各個維度上的長度都呈現一個單位向量(矩陣),也就是把原來大小範圍分佈不通的資料縮放成統一量綱,和拳擊比賽一樣,只有相同重量級的對手才能同臺比賽,這裡把資料的標準差縮放為1的意義就相當於把輕量級選手的體重加重,把重量級選手的體重減輕,讓他們在同一個擂臺上比賽,否則比賽就不公平。

 

 

在以深度學習為主的人工智慧專案的實現過程中,對資料的數量和質量的要求都極高,一般來說,原始資料可以通過各種不同的渠道去收集,最終能夠得到大量的資料,為了加快訓練,消除對訓練不利的因素,往往會使用資料標準化的方法來處理資料。

 

 

一般在現實環境中獲取到的資料,質量往往很難保證。很多收集來的原始資料中實際上是包括了很多噪聲資料的,這個時候就需要對資料進行去噪處理,除了去噪處理,一般還會對資料進行標準化處理,而資料的標準化處理,不僅僅指的是在資料輸入模型前的標準化處理,在資料輸入模型後,在對模型中每一層的輸出資料也要標準化處理。可以藉助tensorboard工具觀察網路模型中每一層的輸出結果和權重分佈是否在允許的範圍內,一般經過標準化處理後的資料,每一層的輸出都是固定在一定範圍內的。

 

 

 

2、資料標準化指標

 

既然要對資料標準化處理,那麼就需要提出標準化的指標是什麼,一般來說,對於從實際環境中獲取來的資料,我們會根據資料是否具有明顯的界限分為有界資料和無界資料,有界資料就是有著明確的資料邊界,也就是資料是固定的,無界資料就是沒有明確資料邊界,也就是說資料是有可能會改變的。

 

對於有界資料的標準化方法,由於資料的邊界是固定的,顯然會和資料的數量以及最小值、最大值有關係,所以一般會將原資料與資料數量大小、最小值及最大值進行計算操作,從而將資料按照一定的比例縮放在一定的範圍內。對於有界資料的標準化方法相對來說比較簡單,在實際的專案中我們處理的大部分資料也都是固定的資料,既然資料是固定的,那麼也就有有界的了。比如對影象資料處理將[0,255]之間的資料處理到[-1,1]之間,符合了均值為0和標準差為1的標準,就是對有界資料進行固定的縮放。

 

 

無界資料是指資料的邊界不一定是固定的,也就是資料的邊界不確定,隨時有可能發生變化,或者不知道資料的邊界,這類資料主要是使用均值方差的方法標準化,實際上也很容易想象得到,同一個均值方差下的不同資料集,只能證明這些資料集統計出的均值和方差是一樣的,也就是說明它們的分佈是一樣的,但是並不代表它們的數量是一致的,就像從標準正太分佈當中取樣一樣,你可以採集100個樣本,也可以採集200個、300個......,無論你採集多少數量的資料,它們的分佈都是一樣的,也就是均值和方差都一樣,都是從N[0,1]中取樣。

 

 


 

 

 

 

 

資料標準化的作用

 

 

1、統一量綱,平滑不同批次和不同層資料間的梯度,防止模型梯度爆炸或者梯度彌散

 

資料標準化後,由於原資料的數值被縮放在較小的範圍之內,其原來資料之間的“梯度鴻溝”也會被整體縮小,起到了平滑梯度的作用,能夠防止模型中某一層的資料出現大的震盪,不利於訓練。因為資料震盪過大,會導致其要訓練的各種引數的導數變化也會增大,而對於求導而言,當然是越平滑越好,那麼我們希望的就是模型的每一層輸出都不要發生劇烈的震盪,最好的辦法就是對模型每一層的輸出都進行標準化處理,將其縮放在一定範圍內,這樣在模型反向傳播求導的時候,模型的損失也會趨於平穩,不容易出現梯度爆炸或者梯度消失的問題。

 

 

 

2、消除奇異資料(離群點)對模型訓練的負面影響,加快收斂速度

 

奇異資料就是在原資料結構中方差較大的資料,在數軸上的表現就是遠離其他樣本資料,由於在以深度學習為主的梯度下降法中,對於模型的輸出和標籤之間所求的損失誤差,通過計算均值得到的一個平均誤差,因此使用梯度下降法反向傳播梯度的時候,也是通過這個均值誤差來更新各項引數的,由此我們可以判斷,模型最終的均值誤差對於模型的效果有著舉足輕重的影響,而影響均值誤差的因素就是所有誤差了。

 

 

比如模型載入的批次是100,也就是每次載入100個數據去訓練,那麼每一批次的訓練都會得到100個輸出,同樣會有100個誤差,而這100個誤差最終是通過計算均值得到一個均值誤差的,想要保證均值誤差能夠體現真正的資料分佈誤差,就要考慮到每個誤差都不能偏離均值太遠,但是實際情況卻恰恰相反,在採集到的原始資料中,往往會存在各種遠離資料均值的奇異資料,這些奇異資料的誤差往往會更大,直接會將損失拉的更高,由於損失下降對針對均值損失而言,只有所有損失的方差都在一定範圍內,才會達到損失平穩快速下降的目的,但是奇異資料產生的異常點損失會讓均值損失無法平穩快速的下降,還會容易讓損失產生一定震盪。

 

在資料做了標準化後,會將奇異資料的所產生的誤差縮小,讓損失能夠穩定快速地下降。此外還可以通過四分位法,通過刪除原始資料中的中位數,只擷取排序後資料中25%到75%之間的資料來去除奇異資料,然後再對剩餘的資料做標準化,這樣的效果會更好。只不過這種操作要確定資料中確實存在奇異資料才比較好用,否則會截除掉正常資料導致資料的數量變少。

 

3、消除噪聲資料對模型的負面影響,防止模型過擬合

 

資料標準化可以降低噪聲資料對於模型輸出結果的影響,一般來說,資料通過標準化處理,能夠去除量綱干擾,利用小波降噪處理去除隨機噪聲。由於噪聲一般屬於高通濾波,資料標準化在一定程度上可以起到平滑梯度的作用,而噪聲一般周圍其他資料間的梯度往往較大,使用了資料標準化處理,能夠降低它們之間的梯度,從而達到消除噪聲的效果。

 

當然對於資料去噪,我們不能依賴於資料標準化,資料標準化的最主要作用還是統一量綱,加快訓練速度,至於去噪,只是附帶作用,如果要真正的對資料做去噪處理,不妨嘗試使用低通濾波的方法,去除掉資料中高通部分,只留下低通和中通部分資料即可,比如高斯濾波、中值濾波、基於傅立葉變換的低通濾波等等。

 

 

嚴格來說,原資料中包含少量的噪聲對於模型訓練是有益的,能夠提高模型的泛化能力,因為噪聲資料可能擬合了現實世界中的各種不同的場景;如果原始資料包括了大量的噪聲資料,甚至於噪聲資料的佔比已經超過了一定的範圍,則是對訓練無益的,因為噪聲資料過大,說明採集的原資料和現實資料的偏差也過大,模型學到的分佈和現實資料的分佈也不一樣了,相當於是另一個數據分佈了。

 


 

 

 

 

資料標準化的方法

 

 

1、最大值標準化

 

最大值標準化就是讓資料中的每個值都除以最大值,把資料縮放到[0,1]之間:x=x/max(x),這種方法適合資料都是正數的情況,比如影象畫素是[0,255]之間的正數,讓每個畫素值都除以255,就可以把影象畫素值歸一化到[0,1]之間,還可以對歸一化後的資料再減去均值,除以標準差,規範到[-1,1]之間:x=(x-0.5)/0.5。

 

2、絕對最大值標準化

 

上面介紹的最大值標準化方法主要是針對正數而言,如果資料中包括了負數,使用上面的方法就無法保證資料被縮放到[-1,1]之間,這個時候我們需要先對資料取絕對值,然後再進行最大值標準化把資料縮放到[0,1]之間:x=x/max(abs(x)),如此便能消除負數太小帶來的影響。

 

3、最大最小值標準化

 

最大最小值標準化是利用資料的最大最小邊界值來標準化資料,具體操作就是讓每一個數據都減去最小值,然後除以最大值減去最小值的結果,將資料縮放到[0,1]之間:x=(x−min(x))/(max(x)−min(x)),根據公式,可以發現,如果當前資料為最小值,則分子為0.此時,標準化的結果也為0,反之如果當前資料為最大值,則分子與分母相等,標準化的結果為1,可見此方法無論資料為正數還是負數都能夠將資料縮放到[0,1]之間。

 

4、均值方差標準化

 

均值方差(標準差)標準化是最為常用的資料標準化方法,操作過程就是讓每個資料都減去均值,然後除以標準差:x=(x-mean(x))/sqrt(x-mean(x)**2),目的是將資料縮放到均值為0,標準差為1的標準正態分佈N[0,1]。

 

5、範數標準化

 

範數標準化就是讓當前資料除以當前維度上各個資料的範數之和,比如L1範數標準化就是讓當前資料除以當前維度上所有資料的絕對值之和:x=x/sum(abs(x)),L2範數標準化就是讓當前資料處理當前維度上所有資料的平方和再開方:x=x/sqrt(x**2),以此類推,可以擴充套件到N範數標準化。

 

6、四分位法標準化

四分位範圍(RobustScaler)縮放法是使用該縮放器刪除資料中的中位數,並根據百分位數範圍(預設值為IQR:四分位間距)縮放資料。 IQR是第1個四分位數(25%)和第3個四分位數(75%)之間的範圍。也就是去除資料中小於25%和大於75%的資料,這對異常噪聲資料的處理非常有益。

 


 

 

 

 

PyTorch中的資料標準化

 

 

1、BN(Batch Normalization)

 

BN的計算就是把每個通道的NHW單獨拿出來歸一化處理,針對每個channel我們都有一組γ,β,所以可學習的引數為2*C,當batch size越小,BN的表現效果也越不好,因為計算過程中所得到的均值和方差不能代表全域性。在pytorch中呼叫torch.nn.BatchNorm2d(out_channels)來實現。

 

 

 

2、LN (Layer Normalizaiton

 LN的計算就是把每個CHW單獨拿出來歸一化處理,不受batchsize 的影響。常用在RNN網路,但如果輸入的特徵區別很大,那麼就不建議使用它做歸一化處理。在pytorch中呼叫torch.nn.LayerNorm(out_channels,H,W)來實現。

 

 

 

3、IN(Instance Normalization

IN的計算就是把每個HW單獨拿出來歸一化處理,不受通道和batchsize 的影響常用在風格化遷移,但如果特徵圖可以用到通道之間的相關性,那麼就不建議使用它做歸一化處理。在pytorch中呼叫torch.nn.InstanceNorm2d(out_channels)來實現。

 

 

 

4、GN(Group Normalizatio

GN的計算就是把先把通道C分成G組,然後把每個gHW單獨拿出來歸一化處理,最後把G組歸一化之後的資料合併成CHW。GN介於LN和IN之間,當然可以說LN和IN就是GN的特列,比如G的大小為1或者為C。在pytorch中呼叫torch.nn.GroupNorm(num_groups,out_channels)來實現。

 

 

 

5、SN(Switchable Normalization):

將 BN、LN、IN 結合,賦予權重,讓網路自己去學習歸一化層應該使用什麼方法。集萬千寵愛於一身,但訓練複雜。

 

 

本文內容由深度人工智慧公眾號原創提供,轉載或摘錄請聯絡作者註明來源!

 

深度人工智慧是成都深度智谷科技旗下的教育資訊平臺,我們會為人工智慧學習者呈現最實用的乾貨技能,也會為人工智慧從業者考取人工智慧相關的證書提供報考服務,有意者可以聯絡我們。

 

中國人工智慧學會部分證書樣本:

 

 

 

工信部人工智慧證書樣本:

 

 


 

文中所使用的部分圖片來自網路素材,如果有侵權,請第一時間聯絡我們刪除!