文章目录
- 动机
- 优化计算
- 搭建Inception网络
动机
Inception网络的原始动机可能是“我全都要”,因为在普通的CNN中每次我们要么用一堆同样大小的过滤器,或者加一个池化层,而Inception模块则是想要在一层的运算中集合这几种运算:
在上图中,分别使用的过滤器做等大卷积,之后用最大池化并填充,获得四个相同高和宽的矩阵,将它们的通道维度叠加在一起完成了运算。这就是最基本的Inception操作,它将多种过滤器以及池化合并在一起,输出一个信息更加多样的矩阵。其中运算的参数(包括过滤器的大小)都可以作为深度学习的内容。
优化计算
在一层中加入这么多操作,随之而来的就是计算量大大上升。对于32个的过滤器来说,输出矩阵中的每一个元素都要进行次乘法,而输出矩阵共有个元素,也就是说一共要进行即1.2亿次乘法,这还仅仅是一层运算中的一部分。所以为了减少计算量,我们在Inception模块中加入了“瓶颈层”来约束矩阵的大小。
瓶颈层事实上是一层的过滤器卷积,通过32个的过滤器将矩阵维度缩减到,这样再进行的过滤器卷积,就只消耗次运算,减少了约的计算量。
只要合理地实现瓶颈层,就可以既缩小输入矩阵的大小,又不影响整体性能。
搭建Inception网络
有了上面的基本操作,我们就可以先搭建一个Inception模块:
对于和的过滤器,我们都先加一个瓶颈层来优化计算。同时,因为填充池化后,通道数跟输入矩阵是一样的,为了减少一些通道数目,在池化过后接一个过滤器减少通道数。最后,将四条路经的输出通过通道连接组件组合在一起,构成一个完整的Inception模块。在下图中,就展示了一个完整的Inception网络:
网络中有大量重复的Inception模块,以及池化层调整激励的大小。
还有一点,除了最右侧的输出单元,还有两个输出单元,从网络的中段和后段引出。这两个输出用来保证即使是在稍浅的网络中,该模型的预测结果也不会太差,类似一种正则化,可以防止模型过拟合。
最后,还有当时论文中引用的梗,表达了当时研究人员提出Inception的初始动机😂: