关于CNN,迄今为止已经提出了各种网络结构。在1998年首次被提出的CNN元祖LeNet(读音:lei nei te),另一个是在深度学习受到关注的2012年被提出的AlexNet(读音:ai lei ke si nei te)。
1. LeNet
LeNet在1998年被提出,是进行写数字识别的网络。如图7-27所示,它有连续的卷积层和池化层(正确地讲,是只“抽选元素”的子采样层),最后经全连接层输出结果。
和“现在的CNN"相比,LeNet有几个不同点。第-个不同点在于激活函数。LeNet中使用sigmoid函数,而现在的CNN中主要使用ReLU函数。此外,原始的LeNet中使用子采样(subsampling)缩小中间数据的大小,而现在的CNN中Max池化是主流。
综上,LeNet与现在的CNN虽然有些许不同,但差别并不是那么大。想到LeNet是20多年前提出的最早的CNN,还是很令人称奇的。
2. AlexNet
在LeNet问世20多年后,AlexNet被发布出来。AlexNet是引发深度学习热潮的导火线,不过它的网络结构和LeNet基本上没有什么不同,如图7-28所示。
AlexNet叠有多个卷积层和池化层,最后经由全连接层输出结果。虽然结构.上AlexNet和LeNet没有大的不同,但有以下几点差异。
●激活函数使用ReLU。
●使用进行局部正规化的LRN (Local Response Normalization)层。
●使用Dropout (6.4.3节)。
如上所述,关于网络结构,LeNet 和AlexNet没有太大的不同。但是,围绕它们的环境和计算机技术有了很大的进步。
这些年深度学习取得了不斐的成绩,其中VGG、GoogLeNet、ResNet已广为人知,在与深度学习有关的各种场合都会遇到这些网络。下面我们就来简单地介绍一下这3个有名的网络。
3.VGG
VGG是由卷积层和池化层构成的基础的CNN。不过,如图8-9所示,它的特点在于将有权重的层(卷积层或者全连接层)叠加至16层(或者19层),具备了深度(根据层的深度,有时也称为“VGG16”或“VGG19”)。VGG中需要注意的地方是,基于3×3的小型滤波器的卷积层的运算是连续进行的。如图8-9所示,重复进行“卷积层重叠2次到4次,再通过池化层将大小减半”的处理,最后经由全连接层输出结果。
VGG在 2014年的比赛中最终获得了第 2名的成绩(下一节介绍的GoogleNet是 2014年的第 1名)。虽然在性能上不及 GoogleNet,但因为 VGG结构简单,应用性强,所以很多技术人员都喜欢使用基于VGG的网络。
4.GoogLeNet
GoogLeNet的网络结构如图8-10所示。图中的矩形表示卷积层、池化层等。
只看图的话,这似乎是一个看上去非常复杂的网络结构,但实际上它基本上和之前介绍的CNN结构相同。不过,GoogLeNet的特征是,网络不仅在纵向上有深度,在横向上也有深度(广度)。
GoogLeNet在横向上有“宽度”,这称为“Inception结构”,以图8-11所示的结构为基础。
如图8-11所示,Inception结构使用了多个大小不同的滤波器(和池化),最后再合并它们的结果。GoogLeNet的特征就是将这个Inception结构用作一个构件(构成元素)。此外,在GoogLeNet中,很多地方都使用了大小为1 × 1的滤波器的卷积层。这个1 × 1的卷积运算通过在通道方向上减小大小,有助于减少参数和实现高速化处理。
5.ResNet
ResNet是微软团队开发的网络。它的特征在于具有比以前的网络更深的结构。
我们已经知道加深层对于提升性能很重要。但是,在深度学习中,过度加深层的话,很多情况下学习将不能顺利进行,导致最终性能不佳。ResNet中,为了解决这类问题,导入了“快捷结构”(也称为“捷径”或“小路”)。导入这个快捷结构后,就可以随着层的加深而不断提高性能了(当然,层的加深也是有限度的)。
如图8-12所示,快捷结构横跨(跳过)了输入数据的卷积层,将输入x合计到输出。
图8-12中,在连续2层的卷积层中,将输入x跳着连接至2层后的输出。这里的重点是,通过快捷结构,原来的2层卷积层的输出F(x)变成了F(x) + x。通过引入这种快捷结构,即使加深层,也能高效地学习。这是因为,通过快捷结构,反向传播时信号可以无衰减地传递。
因为快捷结构只是原封不动地传递输入数据,所以反向传播时会将来自上游的梯度原封不动地传向下游。这里的重点是不对来自上游的梯度进行任何处理,将其原封不动地传向下游。因此,基于快捷结构,不用担心梯度会变小(或变大),能够向前一层传递“有意义
的梯度”。通过这个快捷结构,之前因为加深层而导致的梯度变小的梯度消失问题就有望得到缓解。
ResNet以前面介绍过的VGG网络为基础,引入快捷结构以加深层,其结果如图8-13所示。
如图8-13所示,ResNet通过以2个卷积层为间隔跳跃式地连接来加深层。另外,根据实验的结果,即便加深到150层以上,识别精度也会持续提高。并且,在ILSVRC大赛中,ResNet的错误识别率为3.5%(前5类中包含正确解这一精度下的错误识别率),令人称奇。
6.SENET
2017年提出的SENet