之前比较googlenet和VGG的时候,提到过googlenet比起VGG来说要更加轻量,googlenet之所以模型小参数少主要就是inception的功劳。直白地讲,inception本质上就是说两个小卷积的叠加可以用很少的参数得到跟大卷积相同的效果。举例说明,5*5的卷积可以用两个3*3的叠加卷积替代,而参数由5*5*depth减少为了2*3*3*depth,从某种意义上,这也可以解释,VGG16都是用3*3的小卷积,通过层数的加深得到了良好性能的原因。更进一步3*3的卷积我们甚至可以用1*3和3*1来代替,这样参数可以进一步的减少。而鉴于pooling层在CNN中的成功应用,在inception层中也增加了pooling层来方便训练,最后将各个不同尺度下的feature map通过深度上的concatenation得到该层的输出,为下一层输入做准备。
而为什么要用两个小卷积来替代一个大卷积呢,当然是为了减少参数,防止过拟合。早前就有人用稀疏化来减少参数,但是在训练时,并没有加快,主要是由于硬件的限制,大多数硬件还是用来计算稠密矩阵,而inception的这种思路也是为了将稀疏矩阵稠密化,方便处理,从而加快训练速度。
inception 会在开始先加入1X1的卷积,主要的目的是为了降维,整合不同通道的特征,通过卷积核的个数控制输出的通道数,使输出的通道数减少,从而减少下一次的参数数量