一,BN
tensorflow使用BN。
https://blog.csdn.net/fanzonghao/article/details/82864880
1,首先我们根据论文来介绍一下BN层的优点:
1)加快训练速度,这样我们就可以使用较大的学习率来训练网络。
2)提高网络的泛化能力。
3)BN层本质上是一个归一化网络层。
4)可以打乱样本训练顺序(这样就不可能出现同一张照片被多次选择用来训练)论文中提到可以提高1%的精度。
问题:深层网络训练过程中,每一层输入随着参数变化而变化,导致每一层都需要适应新的分布,这叫做内部协方差变化。
BN除了解决内部协方差变化,还能起到正则化作用。
BN通过归一化每一层的输入的均值和方差,可以有效解决梯度之间的依赖性。
2,加入γ与β的原因:
由于归一化每一层的输入可能影响该层的代表性,例如sigmoid本来用来做分类要用非线性区域,结果归一化到了线性区域,所以加入上述两个参数,当γ等于样本标准差时,β等于期望时就恢复到了未归一化状态。
3,用minibatch代表整个样本集原因:
当用整个训练集做梯度下降时是不现实的,故采用mini-batch的方式产生均值和方差的估计,通过这种方式的话可以把归一化加入到梯度回传的过程中。注意到这里提及了是计算一个minibatch每一个维度的方差,而不是整个方差。
4,mini-batch算法训练过程:
一个batch-size有m个样本。
输入:输入数据x1…xm(这些数据是准备进入激活函数的数据)
计算过程中可以看到,
1.求数据均值;
2.求数据方差;
3.数据进行归一化
4.训练参数γ,β
5.输出y通过γ与β的线性变换得到新的值
在正向传播的时候,通过可学习的γ与β参数求出新的分布值
在反向传播的时候,通过链式求导方式,求出γ与β以及相关权值。
5,预测过程中的均值和方差:
每层的γ与β两个参数, 通过训练时所得。
每一层均值和方差:
对于均值来说直接计算所有mini-batch均值的期望;然后对于标准偏差采用所有mini-batch σB期望的无偏估计。
6,对于CNN:
如果min-batch sizes为m,那么网络某一层输入数据可以表示为四维矩阵(m,f,w,h),m为min-batch sizes,f为特征图个数,w、h分别为特征图的宽高。在CNN中我们可以把每个特征图看成是一个特征处理(一个神经元),因此在使用Batch Normalization,mini-batch size 的大小就是:m*w*h,于是对于每个特征图都只有一对可学习参数:γ、β。说白了吧,这就是相当于求取所有样本所对应的一个特征图的所有神经元的平均值、方差,然后对这个特征图神经元做归一化。
二,感受野
Understanding the Effective Receptive Field in Deep Convolutional Neural Networks
特征的有效感受野(实际起作用的感受野)是远小于理论感受野的
可看出实际的感受野是呈高斯分布的.
感受野中心像素与边缘像素对于梯度的贡献是不一样的.
参考: