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)