当然,计算训练集的\(\mu\)和\(\simga\)的方法除了上面的求均值之外。吴恩达老师在其课程中也提出了,可以使用指数加权平均的方法。不过都是同样的道理,根据整个训练集来估计测试机的均值方差。
BN层的好处有哪些
BN使得网络中每层输入数据的分布相对稳定,加速模型学习速度。
BN通过规范化与线性变换使得每一层网络的输入数据的均值与方差都在一定范围内,使得后一层网络不必不断去适应底层网络中输入的变化,从而实现了网络中层与层之间的解耦,允许每一层进行独立学习,有利于提高整个神经网络的学习速度。
BN允许网络使用饱和性激活函数(例如sigmoid,tanh等),缓解梯度消失问题
通过normalize操作可以让激活函数的输入数据落在梯度非饱和区,缓解梯度消失的问题;另外通过自适应学习\(\gamma\)与 \(\beta\) 又让数据保留更多的原始信息。
BN具有一定的正则化效果
在Batch Normalization中,由于我们使用mini-batch的均值与方差作为对整体训练样本均值与方差的估计,尽管每一个batch中的数据都是从总体样本中抽样得到,但不同mini-batch的均值与方差会有所不同,这就为网络的学习过程中增加了随机噪音
【weight normalization】
Weight Normalization是对网络权值进行normalization,也就是L2 norm。
相对于BN有下面的优势:
WN通过重写神经网络的权重的方式来加速网络参数的收敛,不依赖于mini-batch。BN因为以来minibatch所以BN不能用于RNN网路,而WN可以。而且BN要保存每一个batch的均值方差,所以WN节省内存;
BN的优点中有正则化效果,但是添加噪音不适合对噪声敏感的强化学习、GAN等网络。WN可以引入更小的噪音。
但是WN要特别注意参数初始化的选择。
【Layer normalization】
更常见的比较是BN与LN的比较。
BN层有两个缺点:
无法进行在线学习,因为在线学习的mini-batch为1;LN可以
之前提到的BN不能用在RNN中;LN可以
消耗一定的内存来记录均值和方差;LN不用
但是,在CNN中LN并没有取得比BN更好的效果。
参考链接:
https://zhuanlan.zhihu.com/p/34879333
https://www.zhihu.com/question/59728870
https://zhuanlan.zhihu.com/p/113233908
https://www.zhihu.com/question/55890057/answer/267872896