日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

聊聊Batch Normalization在网络结构中的位置

發布時間:2025/3/8 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 聊聊Batch Normalization在网络结构中的位置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Batch Normalization在網絡結構中的位置

1. 什么是Batch Normalization?

谷歌在2015年就提出了Batch Normalization(BN),該方法對每個mini-batch都進行normalize,下圖是BN的計算方式,會把mini-batch中的數據正規化到均值為0,標準差為1,同時還引入了兩個可以學的參數,分別為scale和shift,讓模型學習其適合的分布。

那么為什么在做過正規化后,又要scale和shift呢?當通過正規化后,把尺度縮放到0均值,再scale和shift,不是有可能把數據變回"原樣"?因為scale和shift是模型自動學習的,神經網絡可以自己琢磨前面的正規化有沒有起到優化作用,沒有的話就"反"正規化,抵消之前的正規化操作帶來的影響。

2. 為什么要用Batch Normalization?

(1) 解決梯度消失問題

拿sigmoid激活函數距離,從圖中,我們很容易知道,數據值越靠近0梯度越大,越遠離0梯度越接近0,我們通過BN改變數據分布到0附近,從而解決梯度消失問題。

(2) 解決了Internal Covariate Shift(ICS)問題

先看看paper里對ICS的定義:

由于訓練過程中參數的變化,導致各層數據分布變化較大,神經網絡就要學習新的分布,隨著層數的加深,學習過程就變的愈加困難,要解決這個問題需要使用較低的學習率,由此又產生收斂速度慢,因此引入BN可以很有效的解決這個問題。

(3)加速了模型的收斂

和對原始特征做歸一化類似,BN使得每一維數據對結果的影響是相同的,由此就能加速模型的收斂速度。

(4)具有正則化效果

BN層和正規化/歸一化不同,BN層是在mini-batch中計算均值方差,因此會帶來一些較小的噪聲,在神經網絡中添加隨機噪聲可以帶來正則化的效果。

3. Batch Normalization添加在哪?

所以實際使用上,BatchNorm層應該放在哪呢?層與層直接都要加嗎?加在激活函數前還是激活函數后?卷積層和pooling層要不要加?有人說這個應該加在非線性層后,如下順序。

Linear->Relu->BatchNorm->Dropout

論文里有提到,BN層常常被加到Relu之前,但是沒有明確的標準,需要嘗試不同配置,通過實驗得出結論(很多實驗結果偏向于Relu在BN之前)。

那BN層和dropout層的順序呢?

我們可以看到這樣的代碼,BN在dropout之后。

也可以看到這樣的代碼,BN在dropout之前。


實際上,BN消除了對dropout的依賴,因為BN也有和dropout本質一樣的正則化的效果,像是ResNet, DenseNet等等并沒有使用dropout,如果要用并用BN和dropout,還是建議BN放在dropout之前。

注:對BN和dropout感興趣的可以看下這篇論文《Understanding the Disharmony between Dropout and Batch Normalization by Variance Shif》arxiv.org/pdf/1801.0513

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的聊聊Batch Normalization在网络结构中的位置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。