CNN模型之GoogLeNet(Inception) v2

一、介绍

         2015年谷歌团队提出了Inception V2,首次提出了批量(Batch Normalization)归一化方法,可以提高网络的收敛速度。应用范围广泛。主要的创新点包括:

  1. Batch Normalization:在神经网络的每层计算中,参数变化导致数据分布不一致,会产生数据的协方差偏移问题,通过对第i层的数据进行BN操作,也就是对数据进行归一化。可以将数据控制在一定的范围内,在输入到第i+1层。可以提高网络的收敛能力,较少dropout的使用。
  2. 将卷积核拆分:使用小的感受野代替大的感受野,v1版本中使用了5×55\times 5的卷积核,v2版本使用两个3×33\times 3的卷积核可以替代它。这样保证了感受野的范围还减少了参数量。并且增加了网络的深度,使表达能力更强。

二、模型结构

v1中Inception 结构
v2中Inception结构

Batch Normalization实现

第一步:对网络某一层的输入样本做均值为0,方差为1的零均值化处理。使每一层的输入都服从相同的分布,克服内部协方差偏移的影响。
x^(k)=x(k)E[x(k)]Var[x(k)] \hat{x}^{(k)}=\frac{x^{(k)}-E[x^{(k)}]}{\sqrt{Var[x^{(k)}]}}
其中,E[x(k)]E[x^{(k)}]是样本均值,Var[x(k)]\sqrt{Var[x^{(k)}]}是样本方差。
第二步:因为数据量可能过多,因此选择每个batch来进行Normalization。得到BN的处理方式。
BN处理流程
第三步:梯度反向传播,需要计算BN各个参数的梯度,公式如下
求导过程
第四步:在推理阶段可以不适用BN,只需在训练阶段使用BN。完整流程如下:
BN完成流程

三、总结

        Inception v2主要包含两个创新:一是引入批量归一化。二是使用小的卷积核替换大的卷积核。批量归一化解决了协方差偏移的问题。让数据可控。即使使用大的学习率,网络也不会发生梯度消失或梯度爆炸的问题。减少了梯度对参数大小或初始值的依赖。还可以使用非线性饱和激活函数,因为可以避免陷入饱和状态。卷积核的替换则可以保证感受野的同时,增加网络的表达能力。

友情链接:
代码实现:https://github.com/guoyuantao/CNN_Model/tree/master/CNN_on_cifar_ByPytorch
联系方式:2391855138(加好友请备注)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章