Inception v2 / BN-Inception:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
摘要:
\quad    \; 各层输入数据分布的变化阻碍了深度网络的训练。这使得训练过程中要设置更低的学习速率,从而减慢了模型的训练;同时使得使用饱和非线性激活函数的模型变得极度难训练。作者将这种现象称为内部协方差变换,并通过normalization层的输入解决了这个问题。文中,作者还提出了mini-batch版的normalization(BN)。BN允许使用更高的学习速率和less careful initialization。BN也是一个regularizer,在某种程度上减轻了dropout的必要性。BN能将当前state of art分类模型的训练steps减少为1/14,并且以明显优势击败了原始模型。
关键点:BN、用两个3x3代替一个5x5、LRN是不必要的。
BN 的好处:
- BN 减少了内部协方差,提高了梯度在网络中的流动,加速了网络的训练。
- BN 使得可以设置更高的学习速率。
- BN 正则了模型。
文章目录
1.简介
\quad    \; 深度学习在视觉、语音和其它领域方面的state of art提高了许多。随机梯度下降(SGD)已经被证明是训练深度网络的一个高效方法,并且SGD的其它变种,例如momentum和Adagrad已经被使用去获得state of art。SGD优化网络的参数 Θ \Theta Θ的方法是最小化loss: Θ = a r g m i n Θ 1 N ∑ i = 1 N l ( x i , Θ ) \Theta=arg{min\\{\Theta}}\frac{1}{N}\sum_{i=1}^{N}{l(x_{i},\Theta)} Θ=argminΘN1i=1∑Nl(xi,Θ)这里 x 1... N x_{1...N} x1...N是训练集,使用SGD训练时,训练的一个step输入一个batch_size ( m m m)的数据 x 1... m x_{1...m} x1...m。mini-batch被用来计算一个近似梯度: 1 m ∂ l ( x i , Θ ) ∂ Θ \frac{1}{m}\frac{\partial{l(x_{i},\Theta)}}{\partial{\Theta}} m1∂Θ∂l(xi,Θ) \quad    \; 使用mini-batch个example而不是单个example有很多好处。首先在mini-batch上计算的梯度是整个数据集上计算的梯度的一个近似;mini-batch越大,两者越接近。其次,batch比整个数据集( m m m)上计算梯度更高效。
\quad    \; 尽管随机梯度是简单、高效的,但它需要对模型的超参数进行精心地微调,尤其是优化过程中使用的学习速率和模型参数的初始值。每一层的输入都被前面层的参数影响,这使得训练过程变得复杂。模型参数的微小改变会随着网络的加深而放大。
\quad    \; 每一层输入的分布的改变导致一个问题,因为各层需要持续的去适应新的分布。当一个学习系统的输入的分布改变时,据说经历了 c o v a r i a t e covariate covariate s h i f t shift shift2。这通常通过domain adaptation3来处理。但是,协方差变换的概念可以从整个网络扩展到它的部件,例如,一个sub-network或一层。假设一个网络计算: l = F 2 ( F 1 ( u , Θ 1 ) , Θ 2 ) l=F_{2}(F_{1}(\text{u},\Theta_{1}),\Theta_{2}) l=F2(F1(u,Θ1),Θ2)当 F 1 F_{1} F1和 F 2 F_{2} F2是任意的变换,参数 Θ 1 \Theta_{1} Θ1和 Θ 2 \Theta_{2} Θ2是为了最小化loss l l l需要学习的参数。如果假设 x = F 1 ( u , Θ 1 ) x=F_{1}(\text{u},\Theta_{1}) x=F1(u,Θ1),那么学习参数 Θ 2 \Theta_{2} Θ2的过程,能够被看作: l = F 2 ( x , Θ 2 ) l=F_{2}(\text{x},\Theta_{2}) l=F2(x,Θ2)例如,一个梯度下降step: Θ 2 ← Θ 2 − α m ∑ i = 1 m ∂ F 2 ( x i , Θ 2 ) ∂ Θ 2 \Theta_{2}\leftarrow\Theta_{2}-\frac{\alpha}{m}\sum_{i=1}^{m}\frac{\partial{F_{2}}(\text{x}_{i},\Theta_{2})}{\partial\Theta_{2}} Θ2←Θ2−mαi=1∑m∂Θ2∂F2(xi,Θ2)batch size= m m m和学习速率= α \alpha α,上面的公式等价于一个标准的单层网络 F 2 ( x , Θ 2 ) F_{2}(\text{x},\Theta_{2}) F2(x,Θ2)。因此,输入的分布特性使得训练更加更加高效:例如,训练数据和测试数据有相同的分布,同样这个规则也适用于sub-network。如上面所说,x的分布保持不变将是很有益处的。因此, Θ 2 \Theta_{2} Θ2不必重新调整去补偿x的分布的变化。
\quad    \; 固定一个sub-network输入的分布也会对sub-network外的网络产生积极影响。考虑一个使用sigmoid激活函数的层 z = g ( W u + b ) \text{z}=g(W\text{u}+b) z=g(Wu+b),这里 u \text{u} u是该层的输入,权重矩阵 W W W,偏差 b b b是该层需要学习的参数,其中 g ( x ) = 1 1 + e x p ( − x ) g(x)=\frac{1}{1+exp(-x)} g(x)=1+exp(−x)1。随着 ∣ x ∣ |x| ∣x∣的增加, g ′ ( x ) g'(x) g′(x)趋向于0。这意味着 x = W u + b \text{x}=W\text{u}+b x=Wu+b中除 x \text{x} x很小的部分,其余梯度将vanish并且模型将会训练的很慢。但是,因为 x \text{x} x受 W W W和 b b b和下面层的参数影响,训练过程中,这些参数的改变将使得 x \text{x} x中更多部分移向非线性激活函数的饱和区,从而减慢收敛过程。这一效应会随着网络的加深而放大。在实践中,饱和问题和由此导致的vanishing gradients通常使用ReLU、精心的参数初始化和小学习速率来解决。但是,如果我们能够在训练过程中,能够保证非线性激活函数的输入的分布保持稳定;因此,优化函数将几乎不会陷入饱和区并且训练会加速。
\quad    \; 我们将训练过程中,一个网络内部节点的分布的改变称为 I n t e r n a l Internal Internal C o v a r i a t e Covariate Covariate S h i f t Shift Shift。消除它必定将加快训练。我们提出了一个新机制: B a t c h Batch Batch N o r m a l i z a t i o n Normalization Normalization,它采取一个step去减少internal covariate shift,通过该step将显著加速深度神经网络的训练。normalization step固定层的输入的均值和方差。Batch Normalization通过减少梯度对参数scale和初始值的依赖,有利于梯度在网络内部的流动。这允许我们去使用更高的学习速率而不会有发散的风险。更进一步,BN regularizes模型并且减少了模型中dropout的必要性。最终,BN通过阻止网络陷入饱和,使得可以使用饱和非线性激活函数。
\quad    \; 在4.2节,我们应用BN到分类的state of art网络。我们只要原始steps的7% step就可以达到相同的性能,最终可以取得较大的准确率提升。使用训练好的BN之后网络的集成版本,top-5错误率超过了当前的最好结果。
2.减少内部协方差(Towards Reducing Internal Covariate Shift)
\quad    \; 我们定义 I n t e r n a l Internal Internal C o v a r i a t e Covariate Covariate S h i f t Shift Shift为训练过程中网络参数变化导致的网络activation的分布的改变。为了提高训练(加速,提升效果,原文为:To improve the training),我们必须想办法去减少内部协方差。通过固定训练过程中层输入 x \text{x} x的分布,我们期望去提升训练速度。模型的输入被白化能加速模型训练过程中的收敛速度。例如,通过线性变换将activations变换到0均值、1方差并且去相关。因为每一层的输入都来自前一层,所以对每一层的输入进行白化将会十分有益处。通过白化每一层的输入,我们将采取一个step去固定输入的分布,它将消除 i n t e r n a l internal internal c o v a r i a t e covariate covariate s h i f t shift shift带来的不利影响。
\quad    \; 我们可以考虑在训练过程中的每一个step或间隔一些step白化activations。白化方法:1.直接修改网络参数;2.根据网络的activations修改优化算法的参数。但是,如果这些修改被分散到所有优化step,那么,梯度下降step需要在更新参数前更新normalization,这讲降低梯度下降的效果(then the gradient descent step may attempt to update the parameters in a way that requires the normalization to be updated, which reduces the effect of the gradient step)。例如,考虑一个输入为 u u u,偏差为 b b b的层,然后normalizes该层的输出by减去整个数据集( χ \chi χ)上的activation的mean: x ^ = x − E [ x ] \hat{x}=x-E[x] x^=x−E[x],这里 x = u + b x=u+b x=u+b, χ = { x 1... N } \chi=\{x_{1...N}\} χ={ x1...N}代表整个训练集, E [ x ] = 1 N ∑ i = 1 N x i E[x]=\frac{1}{N}\sum_{i=1}^{N}x_{i} E[x]=N1∑i=1Nxi。如果一个梯度下降step忽略 E [ x ] E[x] E[x]依赖于 b b b,那么它会这么更新 b b b: b ← b + Δ b b \leftarrow b+\Delta b b←b+Δb,这里 Δ b ∝ ∂ l / ∂ x ^ \Delta b \propto \partial l / \partial \hat{x} Δb∝∂l/∂x^。然后 u + ( b + Δ b ) − E [ u + ( b + Δ b ) ] = u + b − E [ u + b ] u+(b+\Delta b)-E[u+(b+\Delta b)]=u+b-E[u+b] u+(</