卷积神经网络(六):谷歌的深度学习网络架构Inception与Inception-ResNet

reference:
[v1] Going Deeper with Convolutions
[v2] Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
[v3] Rethinking the Inception Architecture for Computer Vision
[v4] Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning

Inception-V1-GoogLeNet

首先先上Incetption的网络结构
这里写图片描述

结构区别于VGG之处:

1.采用了inception

2.尾部的全连接层换成了avg pool

3.在中间层输入带权重的监督信号

为什么要这么改动?

提高神经网络深度的两大问题:

1.网络参数增多,容易过拟合,所以需要更多标记好的高质量训练集,训练集的制作有一定难度

2.计算资源需求暴增,如果增加的计算力没有被有效使用(比如大部分的权值趋于0),那么大量的计算会被浪费。实际应用中可用的计算力是有限的,即使是以提高模型质量为主要目标,高效分布计算资源,其实也比盲目增加网络体积更加有效。

解决这两个问题的基本方法一般是把全连接改成稀疏连接的结构\(sparse architecture)

稀疏结构是什么:基于Hebbian原理,把相关连的输入聚类在一起,然后连接到下一层

其实相对于全连接层而言,卷积就是一种稀疏结构

GoogLeNet取消了末尾的全连接层,换成平均池化层,效果显著,使用了比ALEX,VGGNet中更少的参数量,在ImageNet上却获得了更好的精度。

(因为全连接层几乎占据了AlexNet或VGGNet中90%的参数量,而且会引起过拟合,去除全连接层后模型训练更快并且减轻了过拟合)。

以上是改动2的原因。

再来看改动1,Inception
这里写图片描述
其实就是将多种不同尺度卷积核堆叠在一起,最后结果将各种卷积结果在通道这一维度上相接,形成了一种密集的效果,可以密集的计算,而不用调整CPU,GPU结构以适应庞大的稀疏的计算。

这就是改动1

改动3的原因是为了加快收敛速度,并且减少梯度消失或梯度爆炸。

Inception-V2

Inception-V2与Inception-V1网络结构相似,但是首次提出了Batch Normalization,并且验证了其优秀的表现,下面介绍一下BN。

Batch Normalization

在Minibatch中使用规范化,因为规范化后的数据更稳定,可以保持在一个以0为均值的波动较小的分布上,这样使得网络更容易收敛

img

上图中最后一行,在Normalization完成后,Google的研究员仍对数值稳定性不放心,又加入了两个参数gammabeta

gamma和beta也经过训练来调整,梯度反向传播公式如下(一是计算对x的梯度使得反向传播继续,二是计算r,b的梯度):

img

两点细节:

.一、在训练的最后一个epoch时,要对这一epoch所有的训练样本的均值和标准差进行统计,这样在一张测试图片进来时,使用训练样本中的标准差的期望和均值的期望对测试数据进行归一化

二、在wx+b处归一化,而不是应用了激活函数之后归一化,因为这样可以使激活函数效果更好。

Inception-V3

小卷积核替换大卷积核

img

两个3X3的卷积核替换一个5X5卷积核,通过上面的图片可以看出来,两个3X3的卷积核提取一块5X5的区域,最后的结果与一个5X5卷积核提取结果一样,即变成了一块1X1的区域,由于卷积核的权值是可以训练的,因此在设计时并不在乎提取的结果是否一样,而只关注卷积核感受野的大小。

这样替换减少了参数量,且文中通过试验证明了不会降低特征提取能力。

这里写图片描述

通过上图可以看出,同样可以用不对称卷积核
(即1X3+3X1的卷积核)
来替换3X3的卷积核,进一步减少参数量。

Inception-V3的结构:

这里写图片描述

其中三种Inception模块的结构如下,使用了小卷积核替换大卷积核的思想:
这里写图片描述

这里写图片描述

这里写图片描述
可以看出越到后面的层所使用的小卷积核越大,这和一般卷积网络中越高层使用越大的卷积核一样,是为了扩大后面的卷积核的感受野,以提取到更高级更抽象的特征。
除此之外,Inception-V3中还有以下细节变化:

池化处理方式

这里写图片描述
即将池化层与步长为二的卷积层并行进行,最终将它们得到的特征相接。

低分辨率图像的识别

对于低分辨率的图像,应降低前两层的步长,或将第一个池化层去除。

label-smoothing regularization or LSR

也就是标签平滑处理

softmax函数:
这里写图片描述

假设样本x的GroundTruth实际分布为q(k|x),其中

这里写图片描述
即若k=y时q为1,k!=y时q为0

那么交叉熵为
这里写图片描述

这样的交叉熵会表现得对标签十分自信,因此可能会出现过拟合等现象,为了增加模型的泛化能力,使用q’(k)代替q(k)
这里写图片描述
u(k)=1/K(在ImageNet上是1/1000) ε是一个权重(0.1)

这样可以使得训练时网络不会对标签那么自信,争强网络的泛化与适应能力

Inception-ResNet-v1、Inception-ResNet-v2

继续发展下去,Inception-V4其实就是Inception-ResNet-v1
下面给出网络的总体架构:
这里写图片描述
改变的比较大的就是Inception-resnet模块了,以Inception-resnet-C为例,其结构如下:
这里写图片描述
左边是Inception-ResNet-v1-C,右边是Inception-ResNet-v2-C.
可以看到,所谓Inception-ResNet,就是在Inception中添加了Resnet的残差结构,即每个Inception-Resnet层的输出都会加上其输入值,以便加深网络的深度。
Inception-ResNet-v1与Inception-ResNet-v2的结构相似,其区别主要在于一个层次更深更复杂,对应的参数也更多,能够达到更高的精度,具体细节可自行查阅论文,链接在开始已经给出。

论文中还提到了几个点:

1.在Inception-resnet层末尾都会有Conv1用来提升维度,这是很必要的,因为我们为了减少Inception的计算量会使用1x1卷积核降维。

2.batch-normalization只在传统的卷积层顶部使用,而不在Inception-ResNet层顶部使用,虽然在所有的层顶部使用效果肯定会更好,但是这样就不能把一个模型放在单GPU(NVidia Kepler)上训练了,会造成显存不够。

3.谷歌研究人员发现如果在Inception-ResNet层的卷积核数量超过1000,会造成网络训练时死亡(输出全部为0)

,即使使用降低学习率的方法(Resnet提出者提出的),或者添加额外的BN,也无法阻止这一情况发生。

这个问题通过按比例降低残差的方式解决了,即在卷积输出部分乘以一个0.1到0.3的缩放因子。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值