文章目录

  • 动机
  • 优化计算
  • 搭建Inception网络


动机

Inception网络的原始动机可能是“我全都要”,因为在普通的CNN中每次我们要么用一堆同样大小的过滤器,或者加一个池化层,而Inception模块则是想要在一层的运算中集合这几种运算:

c231n 卷积神经网络 卷积神经网络inception_池化


在上图中,分别使用c231n 卷积神经网络 卷积神经网络inception_池化_02的过滤器做等大卷积,之后用最大池化并填充,获得四个相同高和宽的矩阵,将它们的通道维度叠加在一起完成了运算。这就是最基本的Inception操作,它将多种过滤器以及池化合并在一起,输出一个信息更加多样的矩阵。其中运算的参数(包括过滤器的大小)都可以作为深度学习的内容。

优化计算

在一层中加入这么多操作,随之而来的就是计算量大大上升。对于32个c231n 卷积神经网络 卷积神经网络inception_dnn_03的过滤器来说,输出矩阵中的每一个元素都要进行c231n 卷积神经网络 卷积神经网络inception_dnn_03次乘法,而输出矩阵共有c231n 卷积神经网络 卷积神经网络inception_深度学习_05个元素,也就是说一共要进行c231n 卷积神经网络 卷积神经网络inception_池化_06即1.2亿次乘法,这还仅仅是一层运算中的一部分。所以为了减少计算量,我们在Inception模块中加入了“瓶颈层”来约束矩阵的大小。

c231n 卷积神经网络 卷积神经网络inception_c231n 卷积神经网络_07


瓶颈层事实上是一层c231n 卷积神经网络 卷积神经网络inception_池化_08的过滤器卷积,通过32个c231n 卷积神经网络 卷积神经网络inception_深度学习_09的过滤器将矩阵维度缩减到c231n 卷积神经网络 卷积神经网络inception_深度学习_05,这样再进行c231n 卷积神经网络 卷积神经网络inception_cnn_11的过滤器卷积,就只消耗c231n 卷积神经网络 卷积神经网络inception_cnn_12次运算,减少了约c231n 卷积神经网络 卷积神经网络inception_cnn_13的计算量。

c231n 卷积神经网络 卷积神经网络inception_cnn_14


只要合理地实现瓶颈层,就可以既缩小输入矩阵的大小,又不影响整体性能。

搭建Inception网络

有了上面的基本操作,我们就可以先搭建一个Inception模块:

c231n 卷积神经网络 卷积神经网络inception_池化_15


对于c231n 卷积神经网络 卷积神经网络inception_池化_16c231n 卷积神经网络 卷积神经网络inception_cnn_11的过滤器,我们都先加一个瓶颈层来优化计算。同时,因为填充池化后,通道数跟输入矩阵是一样的,为了减少一些通道数目,在池化过后接一个c231n 卷积神经网络 卷积神经网络inception_池化_08过滤器减少通道数。最后,将四条路经的输出通过通道连接组件组合在一起,构成一个完整的Inception模块。在下图中,就展示了一个完整的Inception网络:

c231n 卷积神经网络 卷积神经网络inception_cnn_19


网络中有大量重复的Inception模块,以及池化层调整激励的大小。

还有一点,除了最右侧的输出单元,还有两个输出单元,从网络的中段和后段引出。这两个输出用来保证即使是在稍浅的网络中,该模型的预测结果也不会太差,类似一种正则化,可以防止模型过拟合。

最后,还有当时论文中引用的梗,表达了当时研究人员提出Inception的初始动机😂:

c231n 卷积神经网络 卷积神经网络inception_池化_20