Inception
Inception网络是CNN发展史上一个重要的里程碑。在Inception出现之前,大部分流行CNN仅仅是把卷积层堆叠得越来越多,使网络越来越深,以此希望能够得到更好的性能。但是存在以下问题:
- 图像中突出部分的大小差别很大。
- 由于信息位置的巨大差异,为卷积操作选择合适的卷积核大小就比较困难。信息分布更全
局性的图像偏好较大的卷积核,信息分布比较局部的图像偏好较小的卷积核。 - 非常深的网络更容易过拟合。将梯度更新传输到整个网络是很困难的。
- 简单地堆叠较大的卷积层非常消耗计算资源。
Inception module
解决方案:
为什么不在同一层级上运行具备多个尺寸的滤波器呢?网络本质上会变得稍微「宽一些」,而不是「更深」。作者因此设计了Inception 模块。
Inception模块( Inception module) : 它使用3个不同大小的滤波器(1x1、 3x3、 5x5)对输入执行卷积操作,此外它还会执行最大池化。所有子层的输出最后会被级联起来,并传送至下一个Inception模块。
- 方面增加了网络的宽度,另一方面增加了网络对尺度的适应性
实现降维的Inception模块:如前所述,深度神经网络需要耗费大量计算资源。为了降低算力成
本,作者在3x3和5x5卷积层之前添加额外的1x1卷积层,来限制输入通道的数量。尽管添加额
外的卷积操作似乎是反直觉的,但是1x1卷积比5x5卷积要廉价很多,而且输入通道数量减少也
有利于降低算力成本。
InceptionV1–Googlenet
- Googl eNet采用了Inception模块化(9个)的结构,共22层;
- 为了避免梯度消失,网络额外增加了2个辅助的softmax用于向前传导梯度(只用于训练)。
Inception V2在输入的时候增加了BatchNormalization:
所有输出保证在0~1之间。
- 所有输出数据的均值接近0,标准差接近1的正太分布。使其落入激活函数的敏感区,避免梯度消失,加快收敛。
- 加快模型收敛速度,并且具有-定的泛化能力。
- 可以减少dropout的使用。