Batch normalized 應該放在非線性啟用層的前面還是後面?

時間 2021-05-08 15:06:57

1樓:少動腦子

我的理解:我覺得BN + relu 和 relu+BN 問題都不大;

BN 並不是單純的歸一化到零均值單位方差,後面還不是有兩個縮放(alpha)和平移(gamma)的 recover操作?

通過這兩個可學習的引數有沒有可能把兩者的差別盡可能縮小;

因為relu是簡單的非線性,recover操作是線性;雖然不完全等價,但是我覺得努努力,也能擬合個七七八八吧 (不夠嚴謹,哈哈哈!!!)

如果上面一條能通過的話,是不是也可以解釋,就是relu與Bn順序調換有爭論的原因;是不是換成sigmod,tanh這種複雜非線性效果就沒有那麼好說話了。

2樓:郭嘉

前面答案說了一大堆bn放在relu後面的好處和理論依據。而我用resnet18訓練手部檢測,只改變bn和relu的順序,和有些答主一樣,bn放在relu前面效果稍微好一點。深度學習的理論真的有那麼肯定的話,就不需要做那麼多實驗來調整網路了,根據自己的使用場景,自己實驗才是正確的答案。

3樓:ShengCiun Liang

非線性啟用目的是讓輸出達到類似 if else的效果

而bn是批標準化就是在隱藏層的標準化

那麼未啟用的神經元是否需要標準化呢我個人認為是不需要的所以我個人一般放在relu後面

4樓:王超鋒

個人理解上和 @論智 差不多一致

實驗上,放後面更有效。為什麼放後面有效,談一下我自己的理解。例如,這裡兩層卷積:

1、before, conv1-bn1-ReLU1-conv2-bn2-ReLU2

2、after,conv1-ReLU1-bn1-conv2-ReLU2-bn2

BN與常用的資料歸一化最大的區別就是有α和β兩個引數,這兩個引數主要作用是在加速收斂和表徵破壞之間做的trade off。在初期資料歸一化比較明顯,所以網路可以迅速收斂。至於為什麼資料歸一化可以加速收斂,這篇部落格解釋的不錯,可以參考下,Batch Normalization詳解。

隨著訓練來到中後期這兩個引數學習到差不多的時候,主要是用來恢復上一層輸入分布。

所以這麼去理解,上面的兩個結構的斜線加粗部分。1和2中都相當於作conv2的輸入做了歸一化,從conv2的看來,其輸入都是ReLU1之後的資料,但區別在於1中ReLU1截斷了部分bn1歸一化以後的資料,所以很有可能歸一化的資料已經不再完全滿足0均值和單位方差,而2中ReLU1之後的資料做了歸一化,歸一化後仍滿足0均值和單位方差。所以放後邊更有效也是可以理解的。

以上純屬個人理解,其實可以做這麼個實驗,在1結構的中在加乙個BN,conv1-bn1-ReLU1-bn-conv2-bn2-ReLU2,把截斷後的資料在做個歸一化,這樣和原始的1比較下看看是否更有效。如果有的話,說明conv2更喜歡0均值和單位方差的分布~,不過我也沒試過。不知道會不會被打臉

統一劃線後,非全分數線暴漲,複試的只有幾個非全日制的學生,如果非全招不滿,低於複試線的非全能不能調劑?

重力勢能 幾乎是沒有可能的。1,學校在劃線的時候是知道上線的考生名單的。還這樣劃說明學校是有準備的。2,找不滿還可以調劑,今年300多萬人的考研大軍,要調劑的一大把。今年就業嚴峻,意味著明年的考研形式更加艱難。大把人想在今年上岸。說不定學校是故意把線劃那麼高。好把位置騰出來給高分落榜考生。有正規渠道...

在Redux中,應該把邏輯放在action creator裡,還是分散在reducer裡?

海棠頭場雪 如果需要多加只是關閉彈窗這種簡單操作。因為我們專案的這種狀態一般是放在local state裡面的。所以一般會讓第乙個action creater返回promise。在ui層setstate 我之前也思考過這個問題,我的答案是業務邏輯放action裡,理由很簡單,acton能訪問整個st...

鋼琴應該放在家裡的什麼位置?

小兜歐尼 鋼琴要放在家裡最通風的地方,而且相對比較乾燥,同時鋼琴也要保持旁邊的衛生。鋼琴不要放在房間外面的牆,因為外牆濕氣比較大,外氣也很多。如果鋼琴靠牆會很容易損壞,所以最好是放房間內牆比較理想。最好也不要放在靠窗戶,靠窗Sunny照射比較嚴重,有時天氣多變打雷啊閃電啊等等,還有颳風這些,很容易導...