深度学习笔记(30) Inception网络


1. Inception模块

构建卷积层时
要决定过滤器的大小究竟是1×1,3×3还是5×5,或者要不要添加池化层
Inception网络的作用就是自主决定
虽然网络架构因此变得更加复杂,但网络表现却非常好

在这里插入图片描述

例如,28×28×192维度的输入层
Inception网络或Inception层的作用:
代替人工来确定卷积层中的过滤器类型,或者确定是否需要创建卷积层或池化层

如果使用1×1卷积,输出结果会是28×28×filters
假设输出为28×28×64,并且这里只有一个层

如果使用3×3的过滤器,,应用same卷积,输出是28×28×128
然后把第二个值堆积到第一个值上

或许用5×5过滤器或许会更好,输出变成28×28×32
再次使用same卷积,保持维度不变

或许只用池化操作,得到一些不同的输出结果
把它也堆积起来,这里的池化输出是28×28×32
为了匹配所有维度,需要对最大池化使用padding,它是一种特殊的池化形式
因为如果输入的高度和宽度为28×28,则输出的相应维度也是28×28
然后再进行池化,padding不变,步幅为1

有了Inception模块,就可以输入某个量,因为它累加了所有数字
这里的最终输出32+32+128+64=256

基本思想是Inception网络不需要人为决定使用哪个过滤器或者是否需要池化
而是由网络自行确定这些参数,可以给网络添加这些参数的所有可能值,然后把这些输出连接起来
让网络自己学习它需要什么样的参数,采用哪些过滤器组合


2. 瓶颈层

但不难发现,所描述的Inception层有一个问题,就是计算成本
在这里插入图片描述
在之前5×5的过滤器,一个28×28×192的输入块,执行一个5×5卷积,它有32个过滤器,输出为28×28×32
计算这个28×28×32输出的计算成本:
它有32个过滤器,因为输出有32个通道,每个过滤器大小为5×5×192,输出大小为28×28×32
所以要计算28×28×32个数字
对于输出中的每个数字来说,都需要执行 5×5×192 次乘法运算
所以乘法运算的总次数为每个输出值所需要执行的乘法运算次数(5×5×192)乘以输出值个数(28×28×32)
把这些数相乘结果等于1.2亿(120422400)
即使在现在,用计算机执行1.2亿次乘法运算,成本也是相当高的

在这里插入图片描述
这是另外一种架构,其输入为28×28×192,输出为28×28×32
其结果是这样的,对于输入层,使用1×1卷积把输入值从192个通道减少到16个通道
然后对这个较小层运行5×5卷积,得到最终输出

请注意,输入和输出的维度依然相同,输入是28×28×192,输出是28×28×32
但要做的就是把左边这个大的输入层压缩成这个较小的的中间层,它只有16个通道,而不是192个
这被称为 瓶颈层
瓶颈通常是某个对象最小的部分,瓶颈就是这个瓶子最小的部分
同理,瓶颈层也是网络中最小的部分,先缩小网络表示,然后再扩大它

这个第一个卷积层的计算成本:
应用1×1卷积,过滤器个数为16,每个过滤器大小为1×1×192
这两个维度相匹配(输入通道数与过滤器通道数)
28×28×16这个瓶颈层的计算成本:
输出28×28×16中每个元素都做192次乘法,用1×1×192来表示
相乘结果约等于240万

第二个卷积层的计算28×28×32,对每个输出值应用一个5×5×16维度的过滤器
计算结果为1000万

所以所需要乘法运算的总次数是这两层的计算成本之和1204万
计算成本从1.2亿下降到了原来的十分之一

总结一下,如果在构建神经网络层的时候,不想决定池化层是使用1×1,3×3还是5×5的过滤器
那么Inception模块就是最好的选择,可以应用各种类型的过滤器,只需要把输出连接起来
之后关于计算成本问题,可以通过使用1×1卷积来构建瓶颈层,从而大大降低计算成本


3. Inception网络

Inception模块会将之前层的激活或者输出作为它的输入,作为前提
这是一个28×28×192的输入

先通过一个1×1的层,再通过一个5×5的层
1×1的层可能有16个通道,而5×5的层输出为28×28×32
在这里插入图片描述

为了在这个3×3的卷积层中节省运算量,也可以做相同的操作
这样的话3×3的层将会输出28×28×128
在这里插入图片描述

或许还想将其直接通过一个1×1的卷积层
这样的话过程就只有一步,假设这个层的输出是28×28×64
在这里插入图片描述

接着是池化层
为了能在最后将这些输出都连接起来,会使用same类型的padding来池化
使得输出的高和宽依然是28×28,这样才能将它与其他输出连接起来
在这里插入图片描述

但注意,如果进行了最大池化,即便用了same padding,3×3的过滤器,stride为1
其输出将会是28×28×192,其通道数或者说深度与这里的输入(通道数)相同
所以看起来它会有很多通道
实际要做的就是再加上一个1×1的卷积层,将通道的数量缩小,缩小到28×28×32
也就是使用32个维度为1×1×192的过滤器,所以输出的维度其通道数缩小为32
这样就避免了最后输出时,池化层占据所有的通道
在这里插入图片描述
最后,将这些方块全都连接起来,把得到的各个层的通道都加起来
最后得到一个28×28×256的输出
在这里插入图片描述
这就是一个Inception模块
而Inception网络所做的就是将这些模块都组合到一起


4. Inception网络的细节

在这里插入图片描述
这是一张取自Szegety et al的论文中关于Inception网络的图片
会发现图中有许多重复的模块,可能整张图看上去很复杂
但如果只截取其中一个环节,就会发现上述的Inception模块

所以Inception网络只是很多这些学过的模块在不同的位置重复组成的网络
所以如果理解了之前所学的Inception模块,就也能理解Inception网络

在这里插入图片描述
在网络的最后几层,通常称为全连接层
在它之后是一个softmax层(编号1)来做出预测
这些分支(编号2)所做的就是通过隐藏层(编号3)来做出预测
所以这其实是一个softmax输出(编号2),(编号1)也是

另一条分支(编号4),它也包含了一个隐藏层
通过一些全连接层,然后一个softmax来预测,输出结果的标签

应该把它看做Inception网络的一个细节
它确保了即便是隐藏单元和中间层(编号5)也参与了特征计算
它在Inception网络中,起到一种调整的效果,并且能防止网络发生过拟合
Inception网络,无非是很多个Inception模块一环接一环,最后组成了网络


参考:

《神经网络和深度学习》视频课程


相关推荐:

深度学习笔记(29) 1×1 卷积
深度学习笔记(28) 残差网络
深度学习笔记(27) 经典卷积网络
深度学习笔记(26) 卷积神经网络
深度学习笔记(25) 池化层


谢谢!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

氢键H-H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值