深度學習之Batch Normalization

2021-08-20 07:50:13 字數 2081 閱讀 5854

bn(batch normalization),顧名思義也就是「批規範化「。目前很多深度學習網路中都會加入bn層,那麼它為何這麼有效呢?

與啟用層、卷積層、池化層一樣,bn也屬於神經網路的一層。在每次sgd時,通過mini-batch來對相應的activation做規範化操作,使得結果(輸出訊號各個維度)的均值為0,方差為1(cnn中bn一般加在卷積層與啟用層之間)。但是原本資料分布被破壞了,怎麼辦?最後的「scale and shift」變換重構操作就是為了讓因訓練所需而「刻意」加入的bn能夠有可能還原最初的輸入,從而保證整個network的capacit,這是演算法最關鍵的一步。

關於dnn中的資料預處理,最好的演算法應該是白化(whitening),經過白化預處理後,資料滿足條件:a、特徵之間的相關性降低,這個就相當於pca;b、資料均值、標準差歸一化,也就是使得每一維特徵均值為0,標準差為1。如果資料特徵維數比較大,要進行pca,也就是實現白化的第1個要求,是需要計算特徵向量,計算量非常大,於是為了簡化計算,bn的作者忽略了第1個要求,提出兩種簡化方式:1)直接對輸入訊號的每個維度做規範化(「normalize each scalar feature independently」);2)在每個mini-batch中計算得到mini-batch mean和variance來替代整體訓練集的mean和variance. 這便是我們所說的bn演算法。

具體演算法描述:

實現的話就是我們常見的鏈式求導:

bn的提出是為了克服深度神經網路難以訓練的弊病。深度網路的訓練是乙個複雜的過程,只要網路的前面幾層發生微小的改變,那麼後面幾層就會被累積放大下去。一旦網路某一層的輸入資料的分布發生改變,那麼這一層網路就需要去適應學習這個新的資料分布,所以如果訓練過程中,訓練資料的分布一直在發生變化,那麼將會影響網路的訓練速度。

在統計機器學習中的乙個經典假設是「源空間(source domain)和目標空間(target domain)的資料分布(distribution)是一致的」。如果不一致,那麼就出現了新的機器學習問題,如,transfer learning/domain adaptation等。而covariate shift就是分布不一致假設之下的乙個分支問題,它是指源空間和目標空間的條件概率是一致的,但是其邊緣概率不同大家細想便會發現對於神經網路的各層輸出,由於它們經過了層內操作作用,其分布顯然與各層對應的輸入訊號分布不同,而且差異會隨著網路深度增大而增大,可是它們所能「指示」的樣本標記(label)仍然是不變的,這便符合了covariate shift的定義。bn可以在某種程度上解決covariate shift的問題。

bn到底還是為了防止「梯度瀰散」。關於梯度瀰散,大家都知道乙個簡單的栗子:

0.930

≈0.04

0.930

≈0.04

詳細來說,反向傳播時經過該層的梯度是要乘以該層的引數的,即前向有:hl

=wtl

hl−1

h l=

wlth

l−1那麼反向傳播有:∂j

∂hl−

1=∂j

∂hl.

∂hl∂

hl−1

=∂j∂

hlwl

∂ j∂

hl−1

=∂j∂

hl.∂

hl∂h

l−1=

∂j∂h

lwl那麼考慮從l層傳到k層的情況,有:∂j

∂hk=

∂j∂h

l∏i=

k+1l

wi∂ j∂

hk=∂

j∂hl

∏i=k

+1lw

i問題就出在∏w

i ∏w

i上,當w

i<1 w

i<

1是,連乘結果會趨向於0,大於1則會趨向於無窮大。bn所做的就是解決這個梯度傳播的問題,因為bn作用抹去了w的scale影響,抑制了w的持續變大或變小的趨勢(不知道這麼理解對不對)。

深度學習之聯邦學習

聯邦學習 federated learning 能夠讓ai演算法借助位於不同站點的資料中獲得經驗。該方法能夠讓多個組織協作開發模型,而且不需要彼此之間直接共享敏感的資料 在多次訓練迭代過程中,共享模型所覆蓋的資料範圍會比任何乙個組織內部擁有的資料都要大得多。難點 不僅僅是資料量的問題,資料集還需要極...

深度學習之遷移學習

遷移學習 transfer learning 是一種機器學習方法,就是把為任務 a 開發的模型作為初始點,重新使用在為任務 b 開發模型的過程中。遷移學習是通過從已學習的相關任務中轉移知識來改進學習的新任務,雖然大多數機器學習演算法都是為了解決單個任務而設計的,但是促進遷移學習的演算法的開發是機器學...

動手學深度學習之深度學習基礎

資料集的形式主要有三種 訓練集測試集 測試資料集不可以用來調參 驗證集 k折交叉驗證 把原始資料分成k組,每次訓練時,使用k 1個子資料集訓練,使用乙個作為驗證,最後通過k次求取訓練誤差和驗證誤差的平均。過擬合 overfitting 模型的訓練誤差遠小於它在測試資料集上的誤差 欠擬合 underf...