GoogleNetv2:Batch Normalization:Accelerating Deep Network Training by Reducing Internal Covariate Shift

在GoogleNetv1的基础上修改Inception block得到,并且引入历史性的BN层,使得网络训练的调参更简单

什么是GoogleNetv2?

  • 又名Inceptionv2,主要是在GoogleNetv1网络基础上,加入批规范化(Batch Normalization,BN)
  • BN的加入,使得神经网络的训练不再小心翼翼设计学习率、初始化、dropout等

GoogleNetv2的网络结构?

  • 在GoogleNetv1网络中加入批规范化(Batch Normalization,BN) ,并将Inception block 的5x5卷积改为2个3x3卷积

GoogleNetv2的Inception block?

  • 相比较GoogleNetv1的Inception block,将其中的5x5卷积改为2个3x3卷积

GoogleNetv2的损失函数?

  • 论文没有说使用辅助分类器,一般分类损失使用交叉熵损失(CrossEntropyLoss)

什么是内部协变量偏移(Internal Covariate Shift,ICS)?

  • 多层神经网络中,每一层的参数更新会导致上层的输入数据分布发生变化,通过层层叠加,高层的输入分布变化会非常剧烈,这就使得高层需要不断去重新适应底层的参数更新,这就是内部协变量偏移
  • 为了训好模型,以前神经网络训练前一般对输入数据进行白化操作(Whitening),但是这操作只在输入层进行,后来需要非常谨慎地去设定学习率、初始化权重、以及尽可能细致的参数更新策略
  • 批规范化(Batch Normalization,BN) 每层输入可以缓解该问题

为什么内部协变量偏移导致模型训练困难?

  • 数据分布不稳定: 多层神经网络中,每一层的参数更新会导致上层的输入数据分布发生变化,通过层层叠加,高层的输入分布变化会非常剧烈,这就使得高层需要不断去重新适应底层的参数更新
  • 神经元存在死亡: 如何不解决“内部协变量偏移”,神经网络的激活值整体分布逐渐往非线性函数的易饱和区域靠近,从而导致反向传播时低层神经网络的梯度消失(为0),这是训练深层神经网络时收敛较慢的本质原因
  • BN通过对输入数据进行规范化,每次都对激活值进行修正,确保层之间激活值的分布保持稳定来缓解该问题

什么是白化操作(Whitening)?

  • 白化的目的是去除输入数据的冗余信息。假设训练数据是图像,由于图像中相邻像素之间具有很强的相关性,所以用于训练时输入是冗余的;白化的目的就是降低输入的冗余性
  • 白化处理分PCA白化和ZCA白化,PCA白化保证数据各维度的方差为1,而ZCA白化保证数据各维度的方差相同。PCA白化可以用于降维也可以去相关性,而ZCA白化主要用于去相关性,且尽量使白化后的数据接近原始输入数据

白化操作与BN的区别?

  • 白化操作(Whitening)是在数据的预处理阶段,就是输入模型之前处理,而BN是在模型中处理

使用BN对学习率有什么影响?

  • 学习率问题: 在传统的深度网络中,过高的学习率可能会导致梯度爆炸或消失,并陷入较差的局部极小值,BN引入后可以设计更大的学习率
  • 收敛速度: 通过比较各个曲线的收敛点,可知加了BN的实验,可以使用更大学习率,其收敛速度更快
  • Sigmoid的饱和问题: 通过观察 BN-×5-Sigmoid ,加入BN后,Sigmoid 的饱和问题可以被消除

使用BN对网络权重有什么影响?

  • 初始化权重: 可以不用精心设计权值初始化
  • 权重L2衰减: 可以不用L2或者较小的权重衰减(weight decay)

使用BN对Dropout有什么影响?

  • BN可以实现了丢弃正则化(regularization)对模型正则化的作用,因此可以不用dropout或较小的丢弃正则化(Dropout)