本站原创文章,转载请说明来自《老饼讲解-深度学习》www.bbbdata.com
Inception模块是GoogLeNet的核心与亮点,同时也是GoogLeNet的基础
本文讲解GoogLeNet第一个版本中的Inception模块,并剖析其意义与原理
通过本文可以快速、本质地掌握Inception模块的原理,为进一步学习GoogLeNet打下基础
本节介绍GoogLeNet的Inception模块是什么,它是GoogLeNet的核心思想
Inception-V1模块介绍
GoogLeNet的核心就是在网络中引入了Inception模块
Inception模块如下:
图中展示了原始的Inception模块与GoogLeNet提出的Inception模型
原始Inception 模块
Inception模块的原始版本如图A所示
它用多个模块(卷积、池化等等)对输入进行处理,再将处理结果合并,传出下一层
👉从生物角度,可以将它理解为,综合粗看、细看的结果作为输出
👉从数学角度来说,用不同的过滤器去捕获特征,这样可以使特征多样化
值得注意的是,Inception模块并不是全连接,它属于稀疏连接
GoodLeNet的Inception 模块
GoodLeNet的Inception模块主要在A的基础上加入1×1卷积层对各个处理单元进行降维,
它相当于原始Inception模块降的维改进版本,这种改进是意义重大的,
它的参数比原始版本A更加少,它使得Inception模块的可用性、实用性大大提高
本节讲解Inception-V1模块中1×1卷积的意义,从而理解Inception-V1的设计思路
Inception模块中1×1卷积
可以看到,Inception模块在卷积前和池化后都加入了1×1卷积模块,
为什么GoogLeNet要加入这些1×1卷积呢?这样做的好处是什么?
为了理解为什么要这样做,
下面我们按如下顺序理解Inception模块中的1×1卷积:
👉1.探讨1×1卷积本身的意义
👉2.卷积层之前加入的1×1卷积的意义
👉3.池化层之后加入的1×1卷积的意义
如何理解1×1卷积的意义
1×1卷积的意义如下:
1×1卷积相当于将输入的各个通道进行线性综合成一个新的输出
例如输入是100个通道,
那么10个1×1的卷积,就相当于将100个输入通道线性转换为10个输出通道
通俗来说,1×1的卷积就是将整块通道视为一个单元,进行线性合并
Inception模块中1×1卷积的意义
Inception中卷积层之前加入1×1卷积的意义
Inception中,卷积层之前先进行1×1卷积,主要是为了进行降维,减少参数的个数
例如,输入通道为128,输出通道我们希望也是256,
如果直接用5×5的卷积,那么参数个数为128*5*5*256+256=819456
但如果先通过1×1卷积,再用5×5卷积,那么参数个数会被1×1卷积的输出通道数控制
我们可以先设定1×1卷积的输出通道数为32,
那么参数个数为(128*1*1*32+32)+(32*5*5*256+256)=209184
最终的输出通道仍为256,但参数明显就减少了许多
总的来说,就是参数个数受输入通道和输出通道个数的影响,
而先利用1×1卷积对输入通道进行降维,再传给5×5的卷积,可以减少5×5卷积核的参数
池化层之后加入1×1卷积的意义
池化层之后附加一个1×1的卷积层,主要是为了减少输出通道个数
由于池化运算,输入有多少个通道,输出就有多少个通道,
如果没有进行降维,那么池化层与其它层的输出通道数之和,一定大于输入通道,
这样会导致在多个inception模块相连时,输出通道数会越来越多
所以在池化层之后 附加一个1×1的卷积层,以控制整体的输出通道个数
本节更深刻的理解Inception的本质及工作原理
老饼的解读:Inception模块的本质解读
Inception最基本要解决的问题就是,
在加深网络的深度、增加网络学习能力的同时,避免过拟合以及避免计算量过大
Inception模块通过以下的两点来实现以上需求
1. 通过合理的稀疏结构来降低模型的复杂度,以此避免过拟合
下面我们通过一个具体的例子来理解这句话
例如,如果我们用一个万能函数拟合一些数据点,
由于万能函数能揉出任意形状,所以揉出来的曲线即使拟合了所有数据点
但它在非数据点处可能会“疯掉”,这就是过拟合了
但如果我们知道数据点是线性关系,从一开始就限定模型结构是线性,
那么模型不仅简单,而且由于它只能是线性曲线,它不可能在非数据点处“疯掉”
这就是通过已知的“信息”来限制模型,从而加强模型形态的合理性,
Inception就是这样,利用"综合粗看、细看的结果作为输出"这个信息来限制模型的形态
总的来说,Inception就是设定一个合理的稀疏结构,替代原本的全连接,合理简化模型,
一方面避免模型过拟合,另一方面,稀疏结构也比全连接的参数更少,计算量更少
2. 加入1*1卷积进行降维,来避免计算量过于庞大
计算量过大既会令模型容易过拟合,也会令训练速度变慢,
Inception模块过通1*1卷积,调控参数的个数,减少计算量,使Inception模块得以投入实际使用
以上就是GoogLeNet-Inception-V1模块的全部内容了~
End