深度神經網路中BN(Batch Norm)的理解

2021-10-08 21:06:50 字數 1265 閱讀 3676

之前的研究表明在影象處理中,對輸入的影象進行白化(whiten),就是對輸入資料分布變換到0 均值,單位方差的正態分佈,那麼神經網路就會較快收斂。在神經網路中,相對下一層來說,每乙個隱層都是輸入層,那麼能不能對每個隱層都做白化呢?這就是啟發bn產生的原初想法,可以理解為對深層神經網路每個隱層神經元的啟用值做簡化版本的白化操作。

深層神經網路在做非線性變換前的啟用輸入值隨著網路深度的加深或在訓練過程中,其分布逐漸發生偏移或變動,之所以收斂慢,一般是整體分布逐漸往非線性函式取值區間的上下限兩端靠近,導致反向傳播時低層神經網路的梯度消失。而**bn的思想就是對於每乙個隱層神經元,把越來越偏的分布強制拉回到均值為0,方差為1的比較標準的分布,使得輸入值落在非線性函式對輸入值比較敏感的區域。**這樣輸入的小變化就會導致損失函式較大的變化,避免梯度消失問題,加快訓練收斂過程。

對於mini-batch sgd來說,一次訓練過程包含m個訓練例項,其具體bn操作就是對於隱層內每個神經元的啟用值來說,進行如下變換:

變換的意思是:某個神經元對應的原始的啟用x通過減去mini-batch內m個例項獲得的m個啟用x求得的均值e(x)並除以求得的方差var(x)來進行轉換。

batch normalization網路層的前向傳播過程

bn變換加快收斂的同時也會導致網路表達能力下降,為了防止這一點,每個神經元增加兩個調節引數(scale和shift),這兩個引數是通過訓練來學習到的,用來對變換後的啟用反變換,使得網路表達能力增強,即對變換後的啟用進行如上圖所示黑框中的scale和shift操作,這其實是變換的反操作:

bn在訓練的時候可以根據mini-batch裡的若干訓練例項進行啟用數值調整,但是在推理(inference)的過程中,輸入就只有乙個例項,看不到mini-batch其它例項,如何獲取均值e(x)和方差var(x)。可以直接用全域性統計量(所有的訓練例項參與計算),即每次做mini-batch訓練時,把每個mini-batch的均值和方差統計量記住,然後對這些均值和方差求其對應的數學期望即可得出全域性統計量。

為了讓啟用函式更有效地使用輸入資訊,一般bn放在卷積層之後,啟用函式之前。

深度神經網路

關於卷積神經網路cnn,網路和文獻中有非常多的資料,我在工作 研究中也用了好一段時間各種常見的model了,就想著簡單整理一下,以備查閱之需。如果讀者是初接觸cnn,建議可以先看一看 deep learning 深度學習 學習筆記整理系列 中關於cnn的介紹 1 是介紹我們常說的lenet為例,相信...

機器學習,深度學習,神經網路,深度神經網路

先來說一下這幾者之間的關係 人工智慧包含機器學習,機器學習包含深度學習 是其中比較重要的分支 深度學習源自於人工神經網路的研究,但是並不完全等於傳統神經網路。所以深度學習可以說是在傳統神經網路基礎上的公升級。神經網路一般有輸入層 隱藏層 輸出層,一般來說隱藏層大於2的神經網路就叫做深度神經網路,深度...

如何除錯神經網路(深度神經網路)?

神經網路的除錯基本上難於絕大多數的程式,因為大部分的神經網路的錯誤不會以型別錯誤或執行時錯誤顯現,他們只是使得網路難以收斂。如果你是乙個新人,這可能會讓你非常沮喪。乙個有經驗的網路訓練者可以系統的克服這些困難,儘管存在著大量似是而非的錯誤資訊,比如 你的網路訓練的不太好。對缺少經驗的人來說,這個資訊...