關於bn與relu的順序的問題


關於bn和relu的相對順序網上的見解不一致,但在resnet、mobilenetv2、detectron2、maskrcnn_benchmark見到的都是conv+bn+relu的順序,沒見過conv+relu+bn的順序,遂感到很疑惑,於是上網上查了一下。

數據飽和區的角度講有比較好的討論,即如果先進行relu,那么在bn的時候有些單元已經失活了,造成bn不穩定,影響模型性能;bn將數據分布進行標准化,使數據回到非飽和區,然后在經過relu可以控制激活的飽和程度。這里可以假設從conv出來的數據很大部分進入失活,那么先relu再bn的結果就不穩定了。因此應該將置於relu之前。

參考知乎的這個問題,也有提到從實驗效果上看先relu再bn效果會更好一些,因為bn的作用就是對上層的輸出進行歸一化。

個人感覺還是偏向第一種,即conv+relu+bn。如果采用第二種方式,如果效果更好的話應該需要采取措施避免數據再relu之前進入飽和區,最直接的做法就是降低學習率和增大批處理數量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM