您的位置:首页 > 理论基础 > 计算机网络

经典卷积神经网络之GoogLeNet

2020-06-30 15:25 59 查看

如何提升卷积神经网络的表达能力??
        通常情况下,最直接的方式就是增加卷积神经网络的深度或者增大卷积神经网络的宽度,深度是指网络的结构层次,宽度是指网络的神经元的数量。一般来说增加深度的效果,要比增加宽度的效果要好,原因就是因为函数的嵌套更多,它的表达能力就会越强。
        但,是不是层次越深就越好呢?显然不是这样的,主要的原因就是层次越深,需要训练的网络参数就越多,那样计算的时间就更长,并且非常容易出现梯度消失的情况。
        那么有没有方法可以在加深网络的同时,使得参数不会增加的那么多,一种直接的想法就是将密集连接变成稀疏连接,那么就可以达到减少参数的目的。在实际的应用中,这种方式的确可以减少参数量,但是由于大部分的硬件都是针对密集矩阵进行计算优化的,虽然稀疏矩阵的参数是变少了,但是计算的时间并没有减小多少。
        那么,有没有一种方法既能保持网络结构的稀疏性,又能利用密集矩阵的高计算性能。大量的文献表明可以将稀疏矩阵聚类为较为密集的子矩阵来提高计算性能,就如人类的大脑是可以看做是神经元的重复堆积。
        因此,Google团队提出了GoogLeNet网络架构,它是通过堆叠Inception模块,来搭建整个网络。Inception模块发展至今,已经有了v1、v2、v3、v4这些版本,下面就详细的介绍各个版本。
Inception v1:

        上图就是Inception v1的网络结构,可以看到传入Inception模块的输入,会分别做以下操作:1×11\times11×1的卷积;1×11\times11×1的卷积、3×33\times33×3的卷积;1×11\times11×1的卷积、5×55\times55×5的卷积;3×33\times33×3的池化、1×11\times11×1的卷积。最后做一个拼接,得到Inception模块的输出。其中1×11\times11×1的卷积的主要作用有两点:降低维度、增加网络的非线性。
Inception v2:
        Inception v2在v1的基础上,提出了卷积分解:大尺寸的卷积核可以带来更大的感受野,但也意味着会产生更多的参数。比如5x5卷积核的参数有25个,3x3卷积核的参数有9个,前者是后者的25/9=2.78倍。因此,GoogLeNet团队提出可以用2个连续的3x3卷积层组成的小网络来代替单个的5x5卷积层,即在保持感受野范围的同时又减少了参数量。可以看出,大卷积核完全可以由一系列的3x3卷积核来替代,那能不能再分解得更小一点呢?任意nxn的卷积都可以通过1xn卷积后接nx1卷积来替代。GoogLeNet团队发现在网络的前期使用这种分解效果并不好,在中度大小的特征图(feature map)上使用效果才会更好(特征图大小建议在12到20之间)。

        上图中,我们使用3x3的卷积核代替了5x5的卷积核。

        上图中,我们进一步使用1xn卷积后接nx1卷积来替代3x3的卷积核。
Inception v3:
        Inception V3一个最重要的改进是分解,将7x7分解成两个一维的卷积(1x7,7x1),3x3也是一样(1x3,3x1),这样的好处,既可以加速计算,又可以将1个卷积拆成2个卷积,使得网络深度进一步增加,增加了网络的非线性(每增加一层都要进行ReLU)。
Inception v4:
        Inception V4研究了Inception模块与残差连接的结合。ResNet结构大大地加深了网络深度,还极大地提升了训练速度,同时可以防止出现梯度消失,因此使得性能也有提升。
        残差结构:

        将Inception模块与残差连接相结合:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐