0.引言
在2014年的ImageNet挑战赛(ILSVRC14)上,GoogLeNet和VGGNet成为了当年的双雄。GoogLeNet获得了图片分类大赛的第一名,VGGNet紧随其后。这两种模型的共同特点是网络深度更深。VGGNet是基于LeNet和AlexNet的一些框架结构,而GoogLeNet则采用了更加大胆的网络结构。尽管GoogLeNet仅有22层,它的尺寸比AlexNet和VGGNet要小得多。GoogLeNet的参数数量为500万个,而AlexNet的参数数量是GoogLeNet的12倍,VGGNet的参数数量又是AlexNet的3倍。因此,当内存或计算资源有限时,GoogLeNet是更好的选择。从模型结果来看,GoogLeNet的性能表现更加优越。
小知识:GoogLeNet是谷歌公司研究出来的深度网络结构,命名为GoogLeNet而不是GoogleNet的原因据说是为了向LeNet致敬。
GoogLeNetV1论文名称:Going Deeper with Convolutions
GoogLeNetV2论文名称:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
下载地址:https://proceedings.mlr.press/v37/ioffe15.html
GoogLeNetV3论文名称:Rethinking the Inception Architecture for Computer Vision
GoogLeNetV4论文名称:Inception-V4, Inception-ResNet and the Impact of Residual Connections on Learning
下载地址: https://ojs.aaai.org/index.php/aaai/article/view/11231
GoogLeNetV5论文名称:Xception: Deep Learning with Depthwise Separable Convolutions
1.GoogLeNetV1
1.1 研发动机
一般来说,提升网络性能最直接的办法就是增加网络深度和宽度,或者输入数据的大小;但这种方式存在以下问题:
(1)参数太多:如果训练数据集有限,参数太多很容易产生过拟合。
(2)难以应用:网络越大、参数越多,计算复杂度越大,导致应用问题。
(3)难以优化模型:网络越深,越容易出现梯度弥散问题(梯度越往后越容易消失)难以进行模型优化。
所以,有人调侃“深度学习”其实是“深度调参”。
GoogLeNetV1认为解决上述几个缺点的根本方法是将全连接层甚至一般的卷积层都转化为稀疏连接。一方面,现实中的生物神经系统连接也是稀疏的,即神经系统在传递信息时,只有少部分神经元会被激活,大部分神经元处于不反应状态。另一方面,一些文献指出,对于大规模稀疏的神经网络,可以通过分析激活值的统计特性和对高度相关的输出进行聚类,来逐层构建出一个最优网络。这表明,臃肿的稀疏网络可能会失去性能,但可以在不影响性能的情况下简化。
早些时候,为了打破网络的对称性和提高其学习能力,同时受限于硬件设备的能力,传统的卷积网络(LeNet模型时代)都使用了随机稀疏连接(每次卷积得到的特征图随机选取一部分送入后续计算)。然而,计算机软硬件对非均匀稀疏数据的计算效率很差,因此,在AlexNet中重新启用了常规的卷积(每次卷积得到的特征图全部送入后续计算),以更好地优化并行运算。
那么,有没有一种方法,既能保持网络结构的稀疏性,又能利用密集矩阵的高计算性能?大量的文献表明可以将稀疏矩阵聚类为较为密集的子矩阵集合来提高计算性能,基于这一想法,此论文提出了名为Inception的结构来实现此目的。
1.2 模型结构
Inception结构将四个不同卷积核尺寸的卷积操作聚类成一个集合,如图1所示。
![图片[1]-GoogLeNet:探索宽度的力量-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2023/11/20231111143342993.png)
具体来说,就是将输入信息复制四份,分别送入四个不同的分支,分支中是卷积核尺寸不同的卷积操作,四个分支卷积计算后的特征图在特征通道维度上合并,得到一组特征图送入后续操作,如图2所示。
(1)卷积核的大小在神经网络里是一种超参数,没有一种严格的数学理论证明哪种尺寸的卷积核更适合提取特征,因此GoogLeNet选择了成年人的方式:“我全都要”。
(2)采用不同大小的卷积核意味着不同大小的计算感受野,最后拼接操作意味着不同尺度特征的融合。
(3)卷积核大小采用1、3和5是为了对齐。设定卷积步长为1之后,只要分别设定填充尺寸为0、1、2,那么卷积之后便可以得到相同维度的特征,然后这些特征就可以直接在特征通道维度拼接在一起了。
(4)文章说很多地方都表明池化的有效性,所以Inception结构中也嵌入了池化操作。
(5)网络越到后面,特征越抽象,而且每个特征所涉及的感受野也更大了,因此随着层数的增加,3×3 和 5×5 卷积的比例也要增加。
![图片[2]-GoogLeNet:探索宽度的力量-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2023/11/20231111143443894.png)
但是,使用 5×5 的卷积核仍然会带来相对较大的计算量。为此,可以先采用 1×1 卷积核进行降维。例如:上一层的输出数据形状为(100 x 100 x 128),经过具有256个输出的 5×5 卷积层之后(Stride=1,Padding=2),输出数据形状为(100 x 100 x 256)。其中,卷积层的参数为128 x 5 x 5 x 256。假如上一层输出先经过具有32个输出的1 x1 卷积层,再经过具有256个输出的 5×5 卷积层,那么最终的输出数据的形状仍为(100 x 100 x 256),但卷积参数量已经减少为128 x 1 x 1 x 32 x 5 x 5 x 256,大约减少了4倍。
改进后的网络模型子结构如图3所示。
![图片[3]-GoogLeNet:探索宽度的力量-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2023/11/20231111143836502.png)
完整的GoogLeNet就是由这种Inception模块堆叠而成的,如图4所示。
![图片[4]-GoogLeNet:探索宽度的力量-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2023/11/20231111144040452.png)
(1)GoogLeNet采用了模块化的结构(Stage、Block、Layer),每个Stage中都由多个Block堆叠而成,GoogLeNet中Block就是Inception模块,每个Block中又包含多个神经网络层。这样模块化结构的优点是方便增添和修改模型结构。
(2)网络最后采用了平均池化层来代替全连接层。事实证明可以将准确率提高0.6%,此外,平均池化允许网络接受不同大小的输入图片。最后,尽管添加了一个全连接层,但这主要是为了方便进行微调。
(3)在最后一个全连接层之前,GoogLeNet仍然使用了Dropout来减轻过拟合的问题。最后一个全连接层前依然使用了Dropout。
(4)为了避免梯度消失,GoogLeNet在网络中额外增加了两个Softmax辅助分类器,用于帮助模型训练时回传梯度。但是在实际测试中,这两个辅助分类器会被去掉。网络的详细参数见表1。
type | Patch sizestride | outputsize | depth | 1×1 | 3×3reduce | 3×3 | 5×5reduce | 5×5 | poolproj |
convolution | 7×7/2 | 112×112×64 | 1 | ||||||
max pool | 3×3/2 | 56×56×64 | 0 | ||||||
convolution | 3×3/1 | 56×56×192 | 2 | 64 | 192 | ||||
max pool | 3×3/2 | 28×28×192 | 0 | ||||||
inception(3a) | 28×28×256 | 2 | 64 | 96 | 128 | 16 | 32 | 32 | |
inception(3b) | 28×28×480 | 2 | 128 | 128 | 192 | 32 | 96 | 64 | |
max pool | 3×3/2 | 14×14×480 | 0 | ||||||
inception(4a) | 14×14×512 | 2 | 192 | 96 | 208 | 16 | 48 | 64 | |
inception(4b) | 14×14×512 | 2 | 160 | 112 | 224 | 24 | 64 | 64 | |
inception(4c) | 14×14×512 | 2 | 128 | 128 | 256 | 24 | 64 | 64 | |
inception(4d) | 14×14×528 | 2 | 112 | 144 | 288 | 32 | 64 | 64 | |
inception(4e) | 14×14×832 | 2 | 256 | 160 | 320 | 32 | 128 | 128 | |
max pool | 3×3/2 | 7×7×832 | 0 | ||||||
inception(5a) | 7×7×832 | 2 | 256 | 160 | 320 | 32 | 128 | 128 | |
inception(5b) | 7×7×1024 | 2 | 384 | 192 | 384 | 48 | 128 | 128 | |
avg pool | 7×7/1 | 1×1×1024 | 0 | ||||||
dropout(40%) | 1×1×1024 | 0 | |||||||
linear | 1×1×1000 | 1 | |||||||
softmax | 1×1×1000 | 0 |
1.3 GoogLeNetV1小结
GoogLeNetV1模型的最大特点在于使用了Inception模块,该模块可以同时使用多种不同尺寸的卷积核和池化层来提取特征,从而增加网络的表达能力和准确性,同时减少了模型的参数数量。Inception模块包含了多个不同的卷积和池化分支,每个分支都有不同的卷积核尺寸和步长。在训练过程中,网络会自动学习如何选择最优的分支以及如何将它们组合起来。
另外,GoogLeNetV1还采用了全局平均池化来替代展平操作,减少模型的参数数量,并防止过拟合。全局平均池化可以将整个特征图进行平均化操作,得到一个特征向量作为最终的输出。
GoogLeNetV1还引入了一种被称为辅助分类器的技术,用于帮助网络更快地收敛。该技术在网络中添加了两个辅助的分类器,分别在中间层和末尾层进行分类,可以在训练过程中提供额外的监督信号,从而促进网络的训练。
GoogLeNetV1在ImageNet图像分类竞赛中取得了优异的成绩,准确率达到了74.8%,并且模型参数数量仅为AlexNet的1/12。这表明了GoogLeNetV1在参数数量和分类准确率之间取得了很好的平衡。
2 GoogLeNet V2
GoogLeNetV2最显著的贡献是提出了批量数据归一化方法。
2.1 研发动机
首先,虽然与VGGNet模型在图像分类领域的性能接近,但GoogLeNetV1模型在其它领域也都得到了成功的应用。然而,与VGGNet相比,GoogLeNet具有更高的计算效率,仅使用大约500万参数,相当于AlexNet的1/12。
此外,二者的发展方向不同。从某种角度可以这样理解:VGGNet追求的是网络深度;GoogLeNet追求的是网络宽度。
尽管GoogLeNetV1表现良好,但是在尝试通过简单地放大Inception结构来构建更大的网络时,会遇到计算过程中数值不稳定性的问题。为了提升训练速度和稳健性,提出对模型结构的部分做归一化处理,即对每个训练的小批量数据做批量数据归一化。随后,批量数据归一化被广泛应用于神经网络中,并成为神经网络中必不可少的一环。BN操作的主要好处如下:
(1)BN使得模型可以使用较大的学习率而不用特别关心诸如梯度爆炸或消失等优化问题。
(2)BN降低了模型效果对初始权重的依赖。
(3)BN不仅可以加速收敛,还起到了正则化作用,提高了模型泛化性。
由于网络训练过程中参数不断改变导致后续每一层输入的分布也随之发生变化,而学习的过程又要使每一层适应输入的分布,因此我们不得不降低学习率、小心地初始化。这个分布发生变化的现象被称之为内部协变量偏移(Internal Co-variate Shift,ICS)。
为了解决这个问题,研究人员提出了一种解决方案:在训练网络时,将输入数据减去均值。这一操作的目的是加快网络的训练速度。
首先,图像数据具有高度的相关性,相似的图像在抽象为高维空间的数据分布时是接近的。假设其分布如图5(a)所示(一个点代表一个图像,简化为二维)。由于初始化的时候,参数一般都是0均值的,因此开始的拟合 y = wx + b,基本在原点附近,如图5(b)线所示。因此,网络需要经过多次学习才能逐步达到如实线的拟合,即收敛得比较慢。如果对输入数据先做减均值操作,显然可以加快学习,如图5(c)所示。
![图片[5]-GoogLeNet:探索宽度的力量-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2023/11/20231111154204572-1024x299.png)
再用一个可视化的解释:BN就是对神经网络每层输入数据的数据分布进行归一化操作,由不规律的数据分布,如图6(a)所示;变成了规则的数据分布,如图6(b)所示。箭头表示模型寻找最优解的过程,显然图6(b)中的方式更方便,更容易。
![图片[6]-GoogLeNet:探索宽度的力量-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2023/11/20231111154407764.png)
最后,BN方法的公式如下所示:
输入信息: \(\quad x\) 的值超过小批量: \(\quad B=\left\{x_{1 . . m}\right\}\) ;
要学习的参数: \(\gamma 、 \beta\)
输出信息: \(\left\{y_i=B N_{\gamma, \beta}\left(x_i\right)\right\}\) 。
算法过程如下:
$$
\begin{gathered}
\mu_{\mathcal{B}} \leftarrow \frac{1}{m} \sum_{i=1}^m x_i \\
\sigma_{\mathcal{B}}^2 \leftarrow \frac{1}{m} \sum_{i=1}^m\left(x_i-\mu_{\mathrm{B}}\right)^2 \\
\hat{X}_1 \leftarrow \frac{X_{\mathrm{i}}-\mu_{\mathrm{B}}}{\sqrt{\sigma_{\mathcal{B}}+\epsilon}} \\
y_i \leftarrow \hat{\gamma} x_i+\beta = B N_{\beta, \gamma}\left(x_i\right)
\end{gathered}
$$
上述公式首先沿着通道计算了每个批量的均值 \(\mu\);
接着沿着通道计算了每个批量的方差 \(\sigma^2\);
然后对 \(x\) 做归一化 \(x^{\prime}=(x-\mu) / \sqrt{\delta^2+\varepsilon}\);
最后公式加入缩放和平移变量 \(\gamma\)和 \(\beta\) 。
其中归一化后的值, \(y=\gamma x^{\prime}+\beta\) 加入缩放平移变量的原因是: 不一定每次都是标准正态分布, 也许需要偏移或者拉伸。保证每一次数据经过归一化后还保留原有学习得来的特征,同时又能完成归一化操作, 加速训练。这两个参数是用来学习的参数。
2.2 模型结构
GoogLeNetV2网络详细参数见表2,除了BN层,基本没有什么太大的变动。
type | pool pro | depth | 1×1 | 3×3reduce | 3×3 | double 3×3reduce | double3×3 | poolproj |
convolution* | 7×7/2 | 1 | ||||||
max pool | 3×3/2 | 0 | ||||||
convolution | 3×3/1 | 1 | 64 | 192 | ||||
max pool | 3×3/2 | 0 | ||||||
inception (3a) | 3 | 64 | 64 | 64 | 64 | 96 | avg +32 | |
inception(3b) | 3 | 64 | 64 | 96 | 64 | 96 | avg +64 | |
inception(3c) | stride 2 | 3 | 0 | 128 | 160 | 64 | 96 | Patch size stride |
inception (4a) | 3 | 224 | 64 | 96 | 96 | 128 | avg+128 | |
inception(4b) | 3 | 192 | 96 | 128 | 96 | 128 | avg+128 | |
inception(4c) | 3 | 160 | 128 | 160 | 128 | 160 | avg+128 | |
inception (4d) | 3 | 96 | 128 | 192 | 160 | 192 | avg+128 | |
inception(4e) | stride 2 | 3 | 0 | 128 | 192 | 192 | 256 | max+ pass-through |
inception (5a) | 3 | 352 | 192 | 320 | 160 | 224 | avg+128 | |
inception(5b) | 3 | 352 | 192 | 320 | 192 | 224 | max+128 | |
avg pool | 7 7 /1 | 0 |
2.3 GoogLeNetV2模型小结
GoogLeNetV2模型引入了批量数据归一化技术。这可以使得网络更加稳定和收敛更快。在训练过程中,批量数据归一化可以对每个小批量的数据进行标准化操作,从而使得输入数据更加平稳和稳定。
GoogLeNetV2在ImageNet图像分类竞赛中取得了优异的成绩,准确率达到了78.8%。它的性能和效率都比GoogLeNetV1更好。
3. GoogLeNetV3
GoogLeNet V3在Rethinking the Inception Architecture for Computer Vision中提出,该论文的亮点在于:
(1)提出四个通用的网络结构设计准则。
(2)引入卷积分解提高效率(空间可分离卷积)。
(3)引入高效的特征图降维方法。
(4)平滑样本标签。
3.1 研发动机
在GoogLeNetV1版本中,并没有给出对于如何构建Inception结构清晰明确的指导。GoogLeNetV3首先提出了一些通用准则和优化方法,这些方法已经被证明可以有效地用于放大网络。不仅适用于Inception结构的构建,也适用于其它结构的构建。
3.2 网络通用设计准则(General Design Principles)
(1)准则1:模型设计者应避免在神经网络的前若干层产生特征表示的瓶颈。
神经网络的特征提取过程包括多层卷积。一个直观且符合常识的理解是:如果网络前面的特征提取过程过于粗糙,那么就可能会丢失细节信息,即使后面的结构再精细也无法有效地进行特征表示和组合。
例如,如果一开始就直接从 35x35x320 被抽样降维到了17x17x320,那么特征的细节就会大量丢失,即使后续使用Inception结构进行各种特征提取和组合也无济于事。因此,在对特征图进行降维的同时,一般会对通道进行升维。
因此,随着层数的加深,特征图的大小应该逐渐变小,但为了保证特征能得到有效表示和组合,其通道数量会逐渐增加。一个简单的理解是:卷积操作可以在图像的空间维度上进行特征提取,并把提取到的特征转移到通道维度上。
(2)准则2:在模型中增加卷积次数可以解耦更多特征,帮助网络的收敛。
当输出特征相互独立时,输入信息就能被更彻底地分解,而子特征内部相关性就会更高。将相关性强的特征聚集在了一起会更容易收敛。简单点说就是:提取到的特征越多,对下游任务的帮助就越大。例如,如果只知道眼睛这一个特征,识别某个人会很难;但如果能够了解到五官的所有特征,那么问题就会更容易解决,从而提高识别准确率。
对于神经网络的某一层,通过更多的输出分支,可以产生互相解耦的特征表示,从而产生更多高阶稀疏特征,而加速收敛,具体方法如下:
首先,一个前置小知识:5×5大小的卷积核可以使用两个3×3的小卷积核代替。因为5×5大小的卷积核感受野是5×5=25,而两个3×3的卷积核堆叠在一起时,第一层的感受野是9,第二层的感受野是25,两者感受野相同。同理,3×3卷积核大小的卷积核可以使用一个1×3和一个3×1的小卷积核代替,3×3卷积核如图7(a)所示,两个小卷积核如图7(b)所示。
![图片[7]-GoogLeNet:探索宽度的力量-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2023/11/20231112142013658.png)
所以,为了在网络中增加更多的卷积次数,GoogLeNetV3对Inception做了如下改进:首先将Inception中的卷积核大小为5×5卷积使用两个卷积核大小为3×3卷积进行替代,再组合使用卷积核大小为3×1和卷积核大小为1×3的卷积来替代卷积核大小为3×3的卷积,具体过程如图8所示。
![图片[8]-GoogLeNet:探索宽度的力量-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2023/11/20231112142145977-1024x795.png)
值得一提的是:一个nxn卷积核可以分解为通过顺序相连的两个1xn和nx1的卷积核,这种操作也称为空间可分离卷积(类似于矩阵分解)。如果n=3,计算性能可以提升1-(3+3)/9=0.33。它的缺点也很明显,并不是所有的卷积核都可以拆成两个1xn和nx1卷积核相乘的形式。实际上,在网络的前期使用这种分解效果并不好,只有在中度大小的特征图上使用效果才会更好。(对于mxm大小的特征图,建议m在12到20之间)。
在图8中,1xn和nx1的卷积组合方式是并联的,这是为了使模型变得更宽而不是更深,以解决表征性瓶颈。如果该模块没有被拓展宽度,而是变得更深,那么特征图的维度会减小过快,造成信息损失。在网络通用设计准则的1和2中也有解释。
(3)准则3:对模型的特征维度进行合理的压缩,可以减少计算量
GoogLeNetV1中提出的用 1×1 卷积核先对特征维度降维再进行特征提取就是利用这个准则。这是因为在降维过程中,相邻单元之间存在强关联性,因此在输出用于空间聚合的情况下,信息损失要小得多。由于这些信号易于压缩,降维甚至有助于更快地学习。
(4)准则4:模型网络结构的深度和宽度(特征维度数)要做到平衡
深度和宽度都是神经网络的重要参数。深度通常与网络的抽象能力相关,而宽度则与网络的容量相关。在设计网络时,需要在深度和宽度之间找到合适的平衡,以便网络能够有效地学习复杂的模式。
3.3 优化辅助分类器
GoogLeNetV1中的辅助分类器可以帮助网络训练时回传梯度,并在一定程度上能够起到正则的作用。不过GoogLeNetV3在训练时发现,GoogLeNetV1中的辅助分类器存在问题:辅助分类器在训练初期的时候并不能加速收敛,只有当训练快结束时它才会略微提高网络精度。因此,在GoogLeNetV3版本中,第一个辅助分类器被去掉了。
3.4 优化下采样操作
一般情况下,如果想让图像缩小,可以有两种方式:先池化再作卷积,或者先做卷积再作池化,如图9所示。
方法一:先做池化会导致特征表示遇到瓶颈(特征缺失),如图9(a)所示。
方法二:先卷积再池化,正常的缩小,但计算量很大,如图9(b)所示。
![图片[9]-GoogLeNet:探索宽度的力量-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2023/11/20231112142506704.png)
为了保持特征表示的同时,降低计算量,可以将网络结构改为使用两个并行化的模块同时进行卷积和池化(卷积、池化并行执行,再进行合并),如图10所示。
![图片[10]-GoogLeNet:探索宽度的力量-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2023/11/20231112142602103.png)
3.5 优化标签
深度学习中通常使用One-Hot向量作为分类标签,用于指示分类器的唯一结果。这种标签类似于信号与系统中的脉冲函数,也被称为Dirac Delta,即只在某个位置上取1,其它位置上都是0。这种方式会鼓励模型对不同类别的输出差异较大的分数,或者说,模型过分相信它的判断。然而,对于一个由多人标注的数据集中,不同人标注的规则可能不同,每个人的标注也可能会有一些错误。模型对标签的过分信任会导致过拟合。
标签平滑(Label-Smoothing Regularization,,LSR)是一种正则化方法,是应对该问题的有效方法之一,它的具体思想是降低对标签的信任,例如将目标标签从1稍微降到0.9,或者将从0稍微升到0.1,转换成Python代码如下:
New_labels = (1.0 - label_smoothing) * one_hot_labels + label_smoothing / num_classes
在网络实现的时候,令label_smoothing = 0.1,num_classes = 1000,标签平滑提高了0.2%的网络精度。
标签平滑操作稍微地平滑了原本突兀的one_hot_labels,避免了网络过度学习标签而产生的弊端。
3.6 模型结构
GoogLeNetV3 模型的详细超参数配置,见表3。
type | patch size/Stride | input size |
conv | 3×3/2 | 299×299×3 |
conv | 3×3/1 | 149×149×32 |
conv padded | 3×3/1 | 147×147×32 |
pool | 3×3/2 | 147×147×64 |
conv | 3×3/1 | 73×73×64 |
conv | 3×3/2 | 71×71×80 |
conv | 3×3/1 | 35×35×192 |
3×Inception | 35×35×288 | |
5×Inception | 17×17×768 | |
2×Inception | 8×8×1280 | |
pool | 8×8 | 8×8×2048 |
linear | logits | 1×1×2048 |
softmax | classifier | 1×1×1000 |
网络架构的概述:每个模块的输出大小是下一个模块的输入大小。使用填充操作来保持不同卷积层输出的特征图大小一致。 |
3.7 GoogLeNetV3模型小结
GoogLeNetV3模型旨在通过重新设计Inception模块的结构,提高深度卷积神经网络的性能和效率。GoogLeNetV3总结了设计网络的四个准则,并且优化了下采样操作,辅助分类器和标签平滑。通过这些技巧和方法,GoogLeNetV3在图像分类、目标检测和语义分割等计算机视觉任务中取得了很好的表现。
4 GoogLeNetV4
GoogLeNetV4, Inception-ResNet and the Impact of Residual Connections on Learning一文中的亮点是:提出了效果更好的GoogLeNet InceptionV4网络结构;与残差网络(详见博章ResNet:神来之“路”)融合,提出效果不逊于GoogLeNet InceptionV4但训练速度更快的GoogLeNet Inception ResNet结构。
4.1 GoogLeNet InceptionV4网络结构
网络子结构如图11所示(展示的仅为部分网络结构,完整的网络结构详见原论文)。
![图片[11]-GoogLeNet:探索宽度的力量-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2023/11/20231112210211787.png)
4.2 GoogLeNet Inception ResidualV4网络结构
网络子结构如图12所示(展示的仅为部分网络结构,完整的网络结构详见原论文)。
![图片[12]-GoogLeNet:探索宽度的力量-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2023/11/20231112210404615.png)
总而言之,GoogLeNetV4模型变得更加复杂了,笔者认为这样复杂的模型设计实际上融合了大量的人为先验知识;不如像ResNet这样简单的模型,通过大量的数据来让模型自己学习总结知识。模型学习到的知识往往比人为赋予的归纳偏置上限更高。所以这里不再对这些结构做展开介绍。
4.3 GoogLeNetV4模型小结
GoogLeNet V4,也被称为 Inception V4,是一个卷积神经网络模型,它是 Inception 系列模型的一个重要扩展。Inception 系列模型最初由 Google 提出,旨在通过复杂的 Inception 模块优化网络的结构,以提高效率和性能。
Inception V4 模型引入了许多改进,包括:
(1)更深更宽的网络:Inception V4 有更多的层和更宽的层,这使得它能够学习更复杂的模式。然而,这也增加了计算的复杂性。
(2)引入残差连接:在 Inception V4 中,引入了残差连接,这是一种跳跃连接,可以帮助梯度更好地流过网络。这种结构的灵感来自于 ResNet,它已经在深度学习中显示 出了其强大的性能。
(3)进一步优化的 Inception 模块:Inception V4 进一步优化了 Inception 模块,包括了更多的分支和更复杂的结构。这使得模型能够更好地平衡宽度和深度,从而提高性能。
总的来说,Inception V4 通过引入一系列的优化和改进,提高了网络的性能和效率。然而,这也增加了模型的复杂性和计算负担。不过,考虑到其在各种任务上的优秀表现,这种复杂性是值得的。
5 GoogLeNetV5
深度可分离卷积(Depthwise Separable Convolution)最初由Laurent Sifre在其博士论文Rigid-Motion Scattering For Image Classification中提出。
这篇文章主要从Inception模块的角度出发,探讨了Inception模块和深度可分离卷积的关系,以一个全新的角度解释深度可分离卷积。再结合经典的残差网络(详见5.6章ResNet:神来之“路”),一个新的架构Xception应运而生。Xception取义自Extreme Inception,即Xception是一种极端的Inception模型。
5.1 Inception模型回顾
Inception的核心思想是将通道拆分成若干个不同感受野大小的通道。这个操作除了能获得不同的感受野,Inception还能大幅地降低参数数量,简单版本的Inception模型如图13所示。
![图片[13]-GoogLeNet:探索宽度的力量-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2023/11/20231112210535225.png)
2.Inception模型改进
对于一个输入的特征图,首先通过三组1×1卷积得到三组特征图,它和先使用一组 1×1 卷积得到特征图,再将这组特征图分成三组是完全等价的,如图14所示。假设图14中 1×1 卷积核的个数都是 \(k_1\),3×3 的卷积核的个数都是\(k_2\), 输入特征图的通道数为m,那么这个简单版本的参数个数为:
$$
m \times k_1+3 \times 3 \times 3 \times k_1 / 3 \times k_2 / 3=m \times k_1+3 \times k_1 \times k_2
$$
![图片[14]-GoogLeNet:探索宽度的力量-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2023/11/20231112212121375.png)
对比相同通道数,但是没有分组的普通卷积,普通卷积的参数数量为:
$$
m \times k_1+3 \times 3 \times k_1 \times k_2
$$
参数数量约为图14中Inception模块参数量的三倍。
值得注意的是,像上图中这种基于分组的卷积(不含图中 1×1 卷积部分)称为分组卷积。分组卷积中的k有两个极端值,一个是1,一个是N(分组数等于通道数)。1是普通卷积,N为深度可分离卷积,经典的ShuffleNet系列算法(ShuffleNet:轻量化网络)便是采用深度可分离卷积作为其核心结构。
5.3 Xception
考虑一种极端的情况,我们如果将Inception的 1×1 得到的 \(k_1\) 个通道的特征图完全分开呢?也就是使用 \(k_1\) 个不同的 3×3 卷积分别在每个通道上进行卷积,它的参数数量是\(m \times k_1+k_1 \times 3 \times 3\) 。
这个的参数数量是普通卷积的\(1 / k\),我们把这种形式的Inception叫作Extreme Inception,如图15所示。
![图片[15]-GoogLeNet:探索宽度的力量-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2023/11/20231112213017358.png)
5.4 对比深度可分离卷积
深度可分离卷积的详细介绍请移步MobileNet系列文章(详见 MobileNet系列模型博文),深度可分离卷积的操作简图如图16所示。
![图片[16]-GoogLeNet:探索宽度的力量-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2023/11/20231112213137124.png)
可以看出,两者非常类似。唯一的区别是在执行 1×1 卷积的先后顺序不同。两个算法的提出时间相近,不存在抄袭的问题。他们从不同的角度揭示了深度可分离卷积的强大作用,MobileNet的思路是通过将普通卷积拆分的形式来减少参数数量,而Xception是通过对Inception的充分解耦来完成的。
5.5 GoogLeNetV5模型结构
GoogLeNetV5模型的详细超参数配置如图17所示。
![图片[17]-GoogLeNet:探索宽度的力量-点头深度学习网站](https://venusai-1311496010.cos.ap-beijing.myqcloud.com/wp-content/upload-images/2023/11/20231112213339739-1024x644.png)
5.6 GoogLeNetV5小结
作为GoogLeNet系列文章的终章,GoogLeNetV5 模型以实验结果为导向,放弃了GoogLeNetV1-V4中将1×1、3×3、5×5 卷积核并列的结构。与GoogLeNetV4中复杂的模型结构相比,Xception这种简单的模型结构反而取得了更好的性能。这也是为什么笔者没有详细介绍GoogLeNetV4模型的原因。在笔者看来,GoogLeNetV4模型的设计中过于强调了人为的思维方式,试图将人类对图像的理解方式直接赋予给模型。但模型和人的思维方式是不同的,因此设计一个简单的结构,让模型从数据中自主学习会更加有效。
暂无评论内容