bn其实一点都不好。个人认为bn是深度学习界有史以来最恶心的trick,实现起来一堆坑不说,加上bn以后你的输入都不iid了,要是在深度学习爆火以前有人提出bn,肯定会被统计学家打死……无奈它在图像识别上效果很好,大家只能忍了。
bn的主要作用是控制数值区间,让比较深的网络训练起来稳定性比较好,更不容易爆炸。但是初始化和调参其实可以部分解决这个问题,能不用bn的时候还是尽量不要用,尤其是做一个新的问题的时候,不要想当然就把bn塞进去。
顺便推荐一下selu,是一个有希望代替bn的研究方向https://www.zhihu.com/question/60910412/answer/181988782