BN层

BN层具体是怎么操作的?
比如某层的特征维度是[m,f,p,q],分别是batch_num:m,维度: f,特征尺寸p,q。CNN中可把每个特征图看成是一个特征处理(神经元),因此在使用BN的时候,Mini-batch size的大小就是mpq,对于每一个特征图只有一对科学系的参数。说白了,就是相当于求所有样本(batch_num:m个)所对应的的一个特征图的所有神经元的平均值和方差,然后对这一个神经元做归一化,假设特征维度只有一维的话,就相当于一个batch的所有图片像素的均值和方差来对每一张图片来做归一化,也是容易理解的。

BN层的作用?
加快收敛
每一批次的数据分布如果不相同的话,那么网络就要在每次迭代的时候都去适应不同的分布,这样会大大降低网络的训练速度。网络一旦训练起来,参数就要发生更新,出了输入层的数据外,其它层的数据分布是一直发生变化的,因为在训练的时候,网络参数的变化就会导致后面输入数据的分布变化,比如第二层输入,是由输入数据和第一层参数得到的,而第一层的参数随着训练一直变化,势必会引起第二层输入分布的改变,把这种改变称之为:Internal Covariate Shift,BN就是为了解决这个问题的。

防止“梯度弥散”
加速网络收敛速度
可以使用较大的学习率
可代替其他正则方式,例如Dropout等

BN层为什么能缓解过拟合?
BN每次的mini-batch的数据都不一样,但是每次的mini-batch的数据都会对moving mean和moving variance产生作用,可以认为是引入了噪声,这就可以认为是进行了data augmentation,而data augmentation被认为是防止过拟合的一种方法。因此,可以认为用BN可以防止过拟合。
BN让神经网络中各个神经元的训练更加均衡,也就避免不同参数取值相差很大(想象多项式回归,如果参数取值很大或很小那学习出的曲线震荡幅度很大就容易过拟合而我们希望学习的曲线更平滑)

你可能感兴趣的:(算法面试)