学习笔记3-BN-inception

论文Batch Normalization:Accelerating Deep Network Training by Reducing Internal Covariate Shift的学习记录。

一、提出问题:Internal covariate shift内部协变量转移

由于前面层的参数会发生变化,导致后面每层输入的分布在训练过程中同样会发生变化。这将要求较低的学习率和仔细的参数初始化减慢了训练,并且使具有饱和非线性的模型训练起来非常困难,使训练深度神经网络更加复杂。

1、随机梯度下降(SGD)

这里的SGD指的是所说的小批量梯度下降,SGD优化网络参数Θ来最小化损失。考虑大小为m的小批量数据来近似损失函数关于参数的梯度。

学习笔记3-BN-inception

优点:简单有效。使用小批量数据既能大大减小收敛的迭代次数,同时使收敛的结果更加接近使用整个数据集梯度下降的效果。

缺点:需要仔细调整模型的超参数,特别是优化中使用的学习速率以及模型参数的初始值。但由于每层的输入都会受到前面所有层参数的影响,当网络变得更深时,网络参数的微小变化就会被放大。

出现问题:层输入分布的变化会使训练更复杂

对于网络计算,我们可以用以下公式表示学习笔记3-BN-inception通过学习参数Θ1,Θ2以最小化损失ℓ。我们可以将F1(u,Θ1)看作输入x送入子网络,学习笔记3-BN-inception这样当x的分布是固定时,训练Θ2是很容易收敛的;但当x的分布不断变换时,Θ2必须重新调整来补偿x分布的变化。

同理,对于梯度下降公式可以等价于输入为x的单独网络F2。

学习笔记3-BN-inception

2、优化器饱和状态问题

饱和问题:对于**函数g(x)=1/(1+exp(−x))的层,u是层输入,权重矩阵W和偏置向量b是要学习的层参数,随着|x|的增加,g′(x)会趋向于0。即对于x=Wu+b的所有维度,流向u的梯度将会不断消失,模型将缓慢的进行训练。训练期间参数的改变可能会将x的许多维度移动到非线性的饱和状态并减慢收敛。并且这个影响随着网络深度的增加而放大。

之前已有解决方法:使用修正线性单元ReLU(x)=max(x,0),谨慎的初始化和较低的学习率来解决。

本文思想:如果能够在网络训练时保证非线性输入的分布更稳定,那么优化器将不太容易陷入饱和状态,训练将加速。

提出解决方法批标准化Batch Normalization,它通过修正层输入的均值和方差的标准化步骤来实现。

二、减少Internal Covariate Shift

对网络的输入进行白化,即输入线性变换为具有零均值和单位方差,并去相关,网络训练将会收敛的更快。

原理:由于图像数据的每一维一般都是0-255之间的数字,因此数据点只会落在第一象限,而且图像数据具有很强的相关性,所以数据点一般会聚在第一象限的一个小区域内。由于参数是随机的,在使用梯度下降时,可能需要很多次迭代才会对数据点进行有效的分割,可能会造成资源的浪费。可以通过对数据减去其均值,将数据点不再只分布在第一象限,使用去除相关性的算法,让数据不再是一个狭长的分布,随机分界面有效的概率就又大大增加了。

当标准化参数在梯度下降步骤之外计算时,模型会爆炸。

问题:白化层输入是昂贵的,因为它要求计算协方差矩阵和它的平方根倒数,从而生成白化的**和这些变换进行反向传播的偏导数。

解决方法:寻求一种以可微分的方式执行输入标准化的替代方案,并且在每次参数更新后不需要对整个训练集进行分析。

两个简化:

1、对于每个输入维度单独标准化每个标量特征(代替在层输入输出对特征进行共同白化),使其具有零均值和单位方差。

学习笔记3-BN-inception

简单标准化层可能改变层的能力,所以对于每一个**值x,我们引入成对的参数γ,β,它们会归一化和移动标准化值,这些参数与原始的模型参数一起学习,并恢复网络的表示能力。

学习笔记3-BN-inception

2、在mini-batches上进行Normalization

学习笔记3-BN-inception

参数γ和β需要进行学习。

在训练过程中需要通过下面公式变换反向传播损失ℓ的梯度,以及计算关于BN变换参数的梯度。我们需要求最终的损失函数对参数γ和β的导数,以及损失函数对Wx+b中的x的导数,使误差继续向后传播,推导主要采用了链式法则。

学习笔记3-BN-inception

从推导可以看出,BN变换是将标准化**引入到网络中的可微变换。并且BN变换表示为恒等变换并保留网络的能力。

三、BN的训练和预测

预测使用总体统计来进行标准化,而不是小批量数据统计。使用无偏方差估计。

学习笔记3-BN-inception   学习笔记3-BN-inception

下图算法2总结了训练批标准化网络的过程

学习笔记3-BN-inception

四、批标准化卷积网络

仿射变换和元素级非线性组成的变换:z=g(Wu+b)。

1、选择标准化层输入u,但由于u可能是非线性的输出,它的分布形状可能在训练过程中改变,可能不能去除协变量转移。

2、选择标准化线性输出,Wu+b更可能具有对称,非稀疏分布,即“更高斯”,对其标准化可能产生具有稳定分布的**。

z=g(Wu+b)被z=g(BN(Wu))所替代。希望标准化遵循卷积特性:为的是同一特征映射的不同元素,在不同的位置,以相同的方式进行标准化。解决方法:在所有位置联合标准化了小批量数据中的所有**。

五、实验

1、mnist数据集

28x28的二值图像作为输入,以及三个全连接层,每层100个**。每一个隐藏层用sigmoid非线性计算,权重W初始化为小的随机高斯值。最后的隐藏层之后是具有10个**(每类1个)和交叉熵损失的全连接层。训练网络50000次迭代,每份小批量数据中有60个样本。在网络的每一个隐藏层后添加批标准化。

学习笔记3-BN-inception

从结果中可以看到:批标准化网络具有更高的测试准确率。批标准化网络中的分布比原始网络分布更加稳定,这有助于训练。

2、ImageNet分类

5×5卷积层被两个连续的3x3卷积层替换,最多可以有128个滤波器。

对网络进行了修改优化:

(1)提高学习率。(2)删除丢弃。推测由于批标准化提供了类似丢弃的正则化收益,因为对于训练样本观察到的**受到了同一小批量数据中样本随机选择的影响。(3)更彻底地搅乱训练样本。(4)减少L2全中正则化。(5)加速学习率衰减。(6)删除局部响应归一化。(7)减少光照扭曲。

单网络模型

对下面的网络进行了评估,在LSVRC2012训练数据上训练,并在验证数据上测试:

1)Inception:上面所描述的网络,初始学习率以0.0015进行训练。

2)BN-Baseline:每个非线性之前加上批标准化,其它的与Inception一样。

3)BN-x5:带有批标准化的Inception,初始学习率增加5倍到了0.0075。

4)BN-x30:在BN-x5基础上,初始学习率为0.045。

5)BN-x5-Sigmoid:在BN-x5基础上,使用sigmoid非线性来代替ReLU。

学习笔记3-BN-inception

通过仅使用批标准化,在不到Inception一半的训练步骤数量内将准确度达到和其相同的数值。可以看出显著提高了网络的训练速度。

组合网络分类

使用了6个网络。每个都是基于BN-x30的,进行了一些修改:增加卷积层中的初始权量;使用Dropout(丢弃概率为5%或10%,而原始Inception为40%);模型最后的隐藏层使用非卷积批标准化。

学习笔记3-BN-inception

六、总结

1、批标准化的优点:(1)批标准化减少了梯度对参数或初始值尺度上的依赖,对通过网络的梯度流动有有益的影响。

(2)能够使用更高的学习率而没有发散的风险,防止层参数的微小变化被放大。

(3)批标准化使模型正则化并减少了对Dropout的需求。

(4)批标准化通过阻止网络陷入饱和模式让使用饱和非线性成为可能。

2、BN-inception与GoogleNet的区别:

1)用两个连续的3x3卷积层替代5x5卷积层,这增加了网络的深度、参数量和计算消耗。

2)28x28inception模块的数量从2个增加到3个。

3)在模块中,有时采用average,有时采用最大池化。

4)任意两个inception modules中没有全面池化层(across the board pooling layers)。只在3c,4e模型里会有stride-2的卷积/池化层。

关于批量梯度下降、随机梯度下降、小批量梯度下降的理解:https://www.cnblogs.com/lliuye/p/9451903.html