老饼讲解-深度学习 机器学习 神经网络 深度学习
经典CNN模型
1.LeNet与ALexNet网络
2.VGG网络
3.GoogLeNet-Inception
4.ResNet

【模块】GoogLeNet-Inception-V1模块

作者 : 老饼 发表日期 : 2023-07-28 10:48:00 更新日期 : 2024-03-05 03:44:44
本站原创文章,转载请说明来自《老饼讲解-深度学习》www.bbbdata.com


Inception模块是GoogLeNet的核心与亮点,同时也是GoogLeNet的基础

本文讲解GoogLeNet第一个版本中的Inception模块,并剖析其意义与原理

通过本文可以快速、本质地掌握Inception模块的原理,为进一步学习GoogLeNet打下基础



    01. GoogLeNet的Inception-V1模块介绍    




本节介绍GoogLeNet的Inception模块是什么,它是GoogLeNet的核心思想




       Inception-V1模块介绍      


GoogLeNet的核心就是在网络中引入了Inception模块
Inception模块如下:
 Inception模块
图中展示了原始的Inception模块与GoogLeNet提出的Inception模型
  原始Inception 模块  
Inception模块的原始版本如图A所示
它用多个模块(卷积、池化等等)对输入进行处理,再将处理结果合并,传出下一层
 👉从生物角度,可以将它理解为,综合粗看、细看的结果作为输出               
👉从数学角度来说,用不同的过滤器去捕获特征,这样可以使特征多样化         
值得注意的是,Inception模块并不是全连接,它属于稀疏连接             
 
 
GoodLeNet的Inception 模块
 
GoodLeNet的Inception模块主要在A的基础上加入1×1卷积层对各个处理单元进行降维,
它相当于原始Inception模块降的维改进版本,这种改进是意义重大的,
它的参数比原始版本A更加少,它使得Inception模块的可用性、实用性大大提高






    02. GoogLeNet的Inception-V1模块-意义解读    




本节讲解Inception-V1模块中1×1卷积的意义,从而理解Inception-V1的设计思路




       Inception模块中1×1卷积      


   可以看到,Inception模块在卷积前和池化后都加入了1×1卷积模块,
 Inception模块的1x1卷积
为什么GoogLeNet要加入这些1×1卷积呢?这样做的好处是什么?
为了理解为什么要这样做,
下面我们按如下顺序理解Inception模块中的1×1卷积:
👉1.探讨1×1卷积本身的意义                                           
👉2.卷积层之前加入的1×1卷积的意义                             
👉3.池化层之后加入的1×1卷积的意义  
                           




      如何理解1×1卷积的意义    


1×1卷积的意义如下:
1×1卷积相当于将输入的各个通道进行线性综合成一个新的输出
 1x1卷积的意义
例如输入是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的卷积层,以控制整体的输出通道个数






     03. Inception模块的本质     




本节更深刻的理解Inception的本质及工作原理




      老饼的解读:Inception模块的本质解读     


Inception最基本要解决的问题就是,
在加深网络的深度、增加网络学习能力的同时,避免过拟合以及避免计算量过大
Inception模块通过以下的两点来实现以上需求
 
1. 通过合理的稀疏结构来降低模型的复杂度,以此避免过拟合                
 下面我们通过一个具体的例子来理解这句话                     
例如,如果我们用一个万能函数拟合一些数据点,              
            由于万能函数能揉出任意形状,所以揉出来的曲线即使拟合了所有数据点      
但它在非数据点处可能会“疯掉”,这就是过拟合了            
                  
模型稀疏化是什么
         但如果我们知道数据点是线性关系,从一开始就限定模型结构是线性,     
                   那么模型不仅简单,而且由于它只能是线性曲线,它不可能在非数据点处“疯掉”     
         这就是通过已知的“信息”来限制模型,从而加强模型形态的合理性,     
                       Inception就是这样,利用"综合粗看、细看的结果作为输出"这个信息来限制模型的形态   
      
                          总的来说,Inception就是设定一个合理的稀疏结构,替代原本的全连接,合理简化模型,
                               一方面避免模型过拟合,另一方面,稀疏结构也比全连接的参数更少,计算量更少      
 2. 加入1*1卷积进行降维,来避免计算量过于庞大                                 
 计算量过大既会令模型容易过拟合,也会令训练速度变慢,       
                          Inception模块过通1*1卷积,调控参数的个数,减少计算量,使Inception模块得以投入实际使用




以上就是GoogLeNet-Inception-V1模块的全部内容了~






 End 





联系老饼