why
- 如果你不清楚选用什么尺寸的卷积核来进行卷积操作,那么Inception可以帮我们自动的选择是采用什么尺寸的卷积核或者干脆不进行卷积而是进行池化操作。
- 卷积核的选取其实有时候非常困难,图像不同很难一概而论,比如以下图片:
(图源:https://unsplash.com/)
狗的图像可以是以上任意情况。每张图像中狗所占区域都是不同的。由于信息位置的巨大差异,为卷积操作选择合适的卷积核大小就比较困难。信息分布更全局性的图像偏好较大的卷积核,信息分布比较局部的图像偏好较小的卷积核。
how
- Inception网络做的事情很直接,既然卷积核尺寸选择需要具体情况具体分析,那干脆我们就列出几个卷积核尺寸,让神经网络自己选择就好了。
- 见下图:
我们分别使用上面三种卷积核以及池化层,把所有操作都做一遍,让网络自己选择就好了。
Problem
- 计算复杂度会不会太高了,不说别的,单单拿出5*5的卷积核:
大家分析一下一共需要做多少次乘法操作呢?首先右边28*28*32的张量每个元素都是通过乘法计算得到的,而每个乘法计算过程是5*5*192的卷积核中每个元素与padding之后的左边张量进行乘法作和得到的,所以乘法总次数=5*5*192*28*28*32≈1.2亿,且卷积核的参数量也很大,=5*5*192*32=153600. - 怎么办呢?还记不记得1X1的卷积核能够减少参数?
使用了1X1卷积之后的惩罚次数就少多了,=28*28*16*192+28*28*32*5*5*16≈1200万,参数量=1*1*192*16+5*5*32*16=15872,都差不多变为了之前的十分之一。上图中的中间层,即1X1卷积层又被称为瓶颈层(bottleneck)
what
- 上图:
经过了上面的讲解,我们就可以得到这么一个Inception module. 将这个组件融入到网络中我们就可以得到下面的网络结构图:
这就是Inception网络,将需要卷积或者池化地方都采用了inception module,让神经网络帮我们做出选择使用哪种卷积核效果更好。其中一些地方加入了softmax预测,视频中说是它确保了即便是隐藏单元和中间层也参与了特征计算和图像分类,起到一种调整的效果,并且防止网络发生过拟合。 此处目前我还不太明白,另外其实本身Inception网络还与很多版本和变形,在这里简单介绍下,鉴于时间紧张,日后用到这些知识再来补充拓展。