淺談Python幾種常見的歸一化方法
數(shù)據(jù)歸一化是深度學(xué)習(xí)數(shù)據(jù)預(yù)處理中非常關(guān)鍵的步驟,可以起到統(tǒng)一量綱,防止小數(shù)據(jù)被吞噬的作用。
一:歸一化的概念
歸一化就是把所有數(shù)據(jù)都轉(zhuǎn)化成[0,1]或者[-1,1]之間的數(shù),其目的是為了取消各維數(shù)據(jù)之間的數(shù)量級(jí)差別,避免因?yàn)檩斎胼敵鰯?shù)據(jù)數(shù)量級(jí)差別大而造成網(wǎng)絡(luò)預(yù)測(cè)誤差過大。
二:歸一化的作用
- 為了后面數(shù)據(jù)處理的方便,歸一化可以避免一些不必要的數(shù)值問題。
- 為了程序運(yùn)行時(shí)收斂速度更快
- 統(tǒng)一量綱。樣本數(shù)據(jù)的評(píng)價(jià)標(biāo)準(zhǔn)不一樣,需要對(duì)其量綱化,統(tǒng)一評(píng)價(jià)標(biāo)準(zhǔn),這算是應(yīng)用層面的需求。
- 避免神經(jīng)元飽和。就是說當(dāng)神經(jīng)元的激活在接近0或者1時(shí),在這些區(qū)域,梯度幾乎為0,這樣在反向傳播過程中,局部梯度就會(huì)接近于0,這樣非常不利于網(wǎng)絡(luò)的訓(xùn)練。
- 保證輸出數(shù)據(jù)中數(shù)值小的不被吞食。
三:歸一化的類型
1:線性歸一化
線性歸一化也被稱為最小-最大規(guī)范化;離散標(biāo)準(zhǔn)化,是對(duì)原始數(shù)據(jù)的線性變換,將數(shù)據(jù)值映射到[0,1]之間。用公式表示為:
差標(biāo)準(zhǔn)化保留了原來數(shù)據(jù)中存在的關(guān)系,是消除量綱和數(shù)據(jù)取值范圍影響的最簡(jiǎn)單的方法。代碼實(shí)現(xiàn)如下:
def MaxMinNormalization(x,Max,Min): x = (x - Min) / (Max - Min); return x
適用范圍:比較適用在數(shù)值比較集中的情況
缺點(diǎn):
- 如果max和min不穩(wěn)定,很容易使得歸一化的結(jié)果不穩(wěn)定,使得后續(xù)使用效果也不穩(wěn)定。如果遇到超過目前屬性[min,max]取值范圍的時(shí)候,會(huì)引起系統(tǒng)報(bào)錯(cuò)。需要重新確定min和max。
- 如果數(shù)值集中的某個(gè)數(shù)值很大,則規(guī)范化后各值接近于0,并且將會(huì)相差不大。(如 1,1.2,1.3,1.4,1.5,1.6,10)這組數(shù)據(jù)。
2:零-均值歸一化(Z-score標(biāo)準(zhǔn)化)
Z-score標(biāo)準(zhǔn)化也被稱為標(biāo)準(zhǔn)差標(biāo)準(zhǔn)化,經(jīng)過處理的數(shù)據(jù)的均值為0,標(biāo)準(zhǔn)差為1。其轉(zhuǎn)化公式為:
其中為原始數(shù)據(jù)的均值,
為原始數(shù)據(jù)的標(biāo)準(zhǔn)差,是當(dāng)前用的最多的標(biāo)準(zhǔn)化公式
這種方法給予原始數(shù)據(jù)的均值(mean)和標(biāo)準(zhǔn)差(standard deviation)進(jìn)行數(shù)據(jù)的標(biāo)準(zhǔn)化。經(jīng)過處理的數(shù)據(jù)符合標(biāo)準(zhǔn)正態(tài)分布,即均值為0,標(biāo)準(zhǔn)差為1,這里的關(guān)鍵在于復(fù)合標(biāo)準(zhǔn)正態(tài)分布
代碼實(shí)現(xiàn)如下:
def Z_ScoreNormalization(x,mu,sigma): x = (x - mu) / sigma; return x
3:小數(shù)定標(biāo)規(guī)范化
這種方法通過移動(dòng)屬性值的小數(shù)數(shù)位,將屬性值映射到[-1,1]之間,移動(dòng)的小數(shù)位數(shù)取決于屬性值絕對(duì)值的最大值。轉(zhuǎn)換公式為:
4:非線性歸一化
這個(gè)方法包括log,指數(shù),正切
適用范圍:經(jīng)常用在數(shù)據(jù)分析比較大的場(chǎng)景,有些數(shù)值很大,有些很小,將原始值進(jìn)行映射。
四:批歸一化(BatchNormalization)
1:引入
在以往的神經(jīng)網(wǎng)絡(luò)訓(xùn)練時(shí),僅僅只對(duì)輸入層數(shù)據(jù)進(jìn)行歸一化處理,卻沒有在中間層進(jìn)行歸一化處理。雖然我們對(duì)輸入數(shù)據(jù)進(jìn)行了歸一化處理,但是輸入數(shù)據(jù)經(jīng)過了這樣的矩陣乘法之后,其數(shù)據(jù)分布很可能發(fā)生很大改變,并且隨著網(wǎng)絡(luò)的層數(shù)不斷加深。數(shù)據(jù)分布的變化將越來越大。因此這種在神經(jīng)網(wǎng)絡(luò)中間層進(jìn)行的歸一化處理,使得訓(xùn)練效果更好的方法就被稱為批歸一化(BN)
2:BN算法的優(yōu)點(diǎn)
- 減少了人為選擇參數(shù)
- 減少了對(duì)學(xué)習(xí)率的要求,我們可以使用初始狀態(tài)下很大的學(xué)習(xí)率或者當(dāng)使用較小的學(xué)習(xí)率時(shí),算法也能夠快速訓(xùn)練收斂。
- 破換了原來的數(shù)據(jù)分布,一定程度上緩解了過擬合(防止每批訓(xùn)練中某一個(gè)樣本經(jīng)常被挑選到)
- 減少梯度消失,加快收斂速度,提高訓(xùn)練精度。
3:批歸一化(BN)算法流程
輸入:上一層輸出結(jié)果X={x1,x2,.....xm},學(xué)習(xí)參數(shù),
算法流程:
1)計(jì)算上一層輸出數(shù)據(jù)的均值:
其中,m是此次訓(xùn)練樣本batch的大小。
2)計(jì)算上一層輸出數(shù)據(jù)的標(biāo)準(zhǔn)差:
3)歸一化處理得到
公式中的是為了避免分母為0而加進(jìn)去接近于0的很小的值。
4)重構(gòu),對(duì)經(jīng)過上面歸一化處理得到的數(shù)據(jù)進(jìn)行重構(gòu),得到:
其中,
為可學(xué)習(xí)的參數(shù)。
到此這篇關(guān)于淺談一下幾種常見的歸一化方法的文章就介紹到這了,更多相關(guān)常見的歸一化方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python設(shè)計(jì)tcp數(shù)據(jù)包協(xié)議類的例子
今天小編就為大家分享一篇python設(shè)計(jì)tcp數(shù)據(jù)包協(xié)議類的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-07-07對(duì)Python 除法負(fù)數(shù)取商的取整方式詳解
今天小編就為大家分享一篇對(duì)Python 除法負(fù)數(shù)取商的取整方式詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12Gradio構(gòu)建交互式Python應(yīng)用使用示例詳解
這篇文章主要為大家介紹了Gradio構(gòu)建交互式Python應(yīng)用使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12詳解Python中類方法@classmethod的應(yīng)用技巧
在Python中,類方法(class method)是一種特殊的方法,可以在不創(chuàng)建類的實(shí)例的情況下調(diào)用,本文將詳細(xì)介紹類方法的概念、用法以及在實(shí)際開發(fā)中的應(yīng)用場(chǎng)景,希望對(duì)大家有所幫助2024-03-03python使用篩選法計(jì)算小于給定數(shù)字的所有素?cái)?shù)
這篇文章主要為大家詳細(xì)介紹了python使用篩選法計(jì)算小于給定數(shù)字的所有素?cái)?shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-035行Python代碼實(shí)現(xiàn)圖像分割的步驟詳解
這篇文章主要介紹了5行Python代碼實(shí)現(xiàn)圖像分割的步驟詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05Python解析JSON數(shù)據(jù)的基本方法實(shí)例代碼
JSON (JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式,下面這篇文章主要給大家介紹了關(guān)于Python解析JSON數(shù)據(jù)的基本方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01