深入理解Batch Normalization批标准化 https://blog.csdn.net/ytusdc/article/details/85382518
深度学习】对batch Normalization(批归一化)的理解 https://blog.csdn.net/qq_36302589/article/details/84939038
透彻分析批归一化Batch Normalization强大作用 https://baijiahao.baidu.com/s?id=1621528466443988599&wfr=spider&for=pc
问题提出:
深度网络参数训练时内部存在协方差偏移(Internal Covariate Shift)现象:深度网络内部数据分布在训练过程中发生变化的现象。
为什么会带来不好影响:训练深度网络时,神经网络隐层参数更新会导致网络输出层输出数据的分布发生变化,而且随着层数的增加,根据链式规则,这种偏移现象会逐渐被放大。这对于网络参数学习来说是个问题:因为神经网络本质学习的就是数据分布(representation learning),如果数据分布变化了,神经网络又不得不学习新的分布。为保证网络参数训练的稳定性和收敛性,往往需要选择比较小的学习速率(learning rate),同时参数初始化的好坏也明显影响训练出的模型精度,特别是在训练具有饱和非线性(死区特性)的网络,比如即采用S或双S激活函数网络,比如LSTM,GRU。
解决办法:引入Batch Normalization,作为深度网络模型的一个层,每次先对input数据进行归一化,再送入神经网络输入层。
BN做了什么?
关于增加两个参数,用来恢复原始数据的分布形状的疑惑和解答:
需要在非线性和梯度较大这两个点之间做个权衡,人为设定可能不合适,因此由网络自行学习去衡量激活值的位置。
BN的位置:
BN操作在训练和测试时候的不同:
以上内容来源:深入理解Batch Normalization批标准化 https://www.cnblogs.com/wmr95/articles/9450252.html
深度学习中批归一化的陷阱 http://ai.51cto.com/art/201705/540230.htm
每当单个小批次(minibatch)的数据不能代表整个数据的分布时,都会遇到这样的问题。这就意味着忘记将输入随机打乱顺序的情况下使用批归一化是很危险的。
说的是每当单个小批次(minibatch)的数据不能代表整个数据的分布时,使用BN可能会导致预测的准确度下降,方差增大。
BN与CNN:
首先,BN是对单个神经元进行归一化的,而隐藏层的每一个神经元都会相应输入层的所有输入值,(输入层的每个神经元接受的是数据集中的一个样例x的其中一个特征)所以在对一个神经元进行归一化的时候,需要计算m个样例的均值和方差(也就是一个mini batch的均值和方差)。这是MLP中的情绪。当在CNN中的时候,由于是把一个特征图当成了一个MLP中的一个神经元,因此,参与计算均值和方差的前一层的样例个数有m*p*q个。这也就是
这句话的意思。【个人理解。。有待继续考证】
Batch Normalization详解 https://blog.csdn.net/sinat_24143931/article/details/78970904
这里说的channel其实和上面说的特征图的个数是一样的。
https://www.jianshu.com/p/86530a0a3935
另:
https://blog.csdn.net/smf0504/article/details/54600814
gamma指的是文章前问说的scale(主要起到缩放的作用)
最后,https://cloud.tencent.com/developer/article/1351476 这篇文章写了很多上面没有解释清楚的问题,并对上面的问题进行了更深刻的解释!!包括更详细的BN 的缺陷解释。和BN变体的介绍。