论文题目:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
首先看看博客http://blog.csdn.net/happynear/article/details/44238541中最开始介绍的:
为什么中心化,方差归一化等,可以加快收敛?
补充一点:输入x集中在0周围,sigmoid更可能在其未饱和区域,梯度相对更大一些,收敛更快。
Abstract
1.深层网络训练时,由于模型参数在不断修改,所以各层的输入的概率分布在不断变化,这使得我们必须使用较小的学习率及较好的权重初值,导致训练很慢,同时也导致使用saturating nonlinearities 激活函数(如sigmoid,正负两边都会饱和)时训练很困难。
这种现象加 internal covariate shift ,解决办法是:对每层的输入进行归一化。
本文方法特点是 :making normalization a part of the model architecture and performing the normalization for each training mini-batch
Batch Normalization 让我们可以使用更大的学习率,初值可以更随意。它起到了正则项的作用,在某些情况下,有它就不需要使用Dropout了。
在Imagenet上, achieves the same accuracy with 14 times fewertraining steps
Introduction
1. SGD:
Towards Reducing Internal Covariate Shift
Normalization via Mini-Batch Statistics
1.有两个方面简化计算:
a.把 x 向量中每个元素当成独立随机变量单独进行规范化,向量中各变量独立了,也没有什么协方差矩阵了。这种规范化在各变量相关的情况下依然能加速收敛,(LeCun et al., 1998b),此外,如果看成向量中变量的联合概率,需要计算协方差矩阵,如果变量个数大于minibatch中样本数,协方差矩阵不可逆!!
b.在每个mini-batch中计算得到mini-batch mean和variance来替代整体训练集的mean和variance. Algorithm 1.
simply normalizing each input of a layer may change what the layer can represent.normalizing the inputs of a sigmoid would constrain them to the linear regime of the nonlinearity
为了解决这个问题,we make sure that the transformation inserted in the network can represent the identity transform.也就是用用可以学习的 γ 和 β 去拟合出与原先等价的变换。
采用 normalize via mini-batch statistics ,the statistics used for normalization can fully participate in the gradient backpropagation
Batch Normalizing Transform:
只要minibatch中的样本采样与同一分布,规范化后的输入 x 期望为0,方差为1,把规范后的 x 进行线性变换得到 y 作为后续层的输入,可以发现 后续层的输入具有固定的均值和方差的。尽管 规范化后的 x 的联合分布在训练过程中会改变(源于第一个简化,本文的规范化是把 x 向量中各个变量当作独立的,单独规范化的,所以他们的联合分布并不稳定,只是单独是稳定的),但还是可以使训练加速。
2.优化中也需要对 BN 变换的两个参数进行优化,链式法则求导就可以了:
BN 变换是可微的,通过BN变换,可以减弱输入分布的 internal covariate shift ,并且学习到这个线性变换让 BN变换 与网络本来的变换 等价,preserves the network capacity
Training and Inference with Batch-Normalized Networks
1.使用BN,把网络中各层输入 x 变为 BN(x)即可。可以使用SGD及其各种变种训练。
2.训练时候在minibatch内规范化非常高效,但是推断时就不需要而且不应该这样了。推断是我们希望输出只取决于输入,所以规范化中的期望、方差用全部数据计算:
就是各minibatch的方差求平均,minibatch数量为m。
注意:推断时,均值和方差是固定的,那么规范化这步线性变换可以和 γ、β 这步线性变换 合成 一个线性变换。训练BN网络步骤如下:
Batch-Normalized Convolutional Networks
1. BN 可以用于任意层的 activations,但是把 BN 加在 W u +b 之后,非线性激活函数之前更好!
因为前层的 activations (这层的输入 u)是非线性输出的,其分布很可能在训练中变化;而 W u +b 更可能有 a symmetric, non-sparse distribution, that is “more Gaussian”
(Hyv¨arinen & Oja, 2000); 规范化它更有可能得到稳定的 activations 分布。
2. 注意 b 可以不管,因为减均值时 b 会被消掉,b 的作用其实被 β 代替了,所以:
BN是对 x =W u 的每一维单独规范化
3.对卷积层,规范化也该保持卷积特性,即 相同feature map,不同 location 的元素 用相同方式规范化:
a mini-batch of size m and feature maps of size p × q, m*p*q个元素一起规范化!每个 feature map 有一对 γ β。
Batch Normalization enables higher learning rates
1.太大的学习率可能导致 梯度爆炸或消失以及卡在局部极值,BN可以防止参数小变换被逐层放大,通过修改 γ、β可以优化 activations的变化。
一般来说,大学习率增加参数的scale,在BP中放大了梯度,导致模型爆炸。然而使用了 BN,每层的BP不受其参数影响:
The scale does not affect the layer Jacobian nor, consequently, the gradient propagation.
而且:大权重会导致更小的梯度,所以BN可以稳定参数的增长。
2.BN还可以使 layer Jacobians 的奇异值接近 1 .这更利于训练 (Saxe et al.,2013).
论文中有在高斯、独立且变换为线性等条件下,可以推出来,但是说实话假设有点太苛刻,有点强行解释的味道,论文也提出更普适的结论需后续研究。
Batch Normalization regularizes the model
1.使用BN后,训练时对于单个样本与整个minibatch综合考虑了,training network no longer producing deterministic values for a given training example
这有利于提升网络的泛化能力,可以代替 Dropout
Experiments
Activations over time
在mnist上用3个隐层,每层100个的神经元的网络进行实验,初值为高斯,sigmoid函数,迭代50000次,minibatch为60个样本,损失为交叉熵。
(a)可以看到,加BN测试精度更高,而且最开始就达到了较高的精度;
(b,c)可以明显看到加BN后分布更加稳定。图中三条线为{15,50,85}分位数。
后面的实验就看论文了。来源:CSDN
作者:slim1017
链接:https://blog.csdn.net/u012816943/article/details/51691868