2.1 为什么要进行实例探究
过去的卷积神经网络研究很多都集中在如何设计不同的卷积层、池化层等部件来实现最佳效果。在构建自己的卷积神经网络时,参考别人已经构建好的模型,是一个很好的方法,因为很多模型在一个领域表现良好,也可以迁移到其他领域。
2.2 经典网络
1. LeNet-5网络
Lécun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11):2278-2324.
LeNet-5是LeCun建立的文本识别模型,在较早的模型中padding操作还没有使用,这样数据的尺寸越来越小。此外,以往的激活函数多是logistic或tanh函数,而不是Relu函数。LeNet-5模型参数大约有6万个。
2. AlexNet
Krizhevsky A, Sutskever I, Hinton G E. ImageNet classification with deep convolutional neural networks[C]// International Conference on Neural Information Processing Systems. Curran Associates Inc. 2012:1097-1105.
AlexNet模型与LeNet-5模型类似,但是模型参数更多,大约有6000万个。与LeNet-5模型相比,AlexNet这么多的隐藏单元很善于处理具有类似特征的模块。此外,AlexNet采用Relu激活函数。
3.VGG-16
Simonyan K, Zisserman A. Very Deep Convolutional Networks for Large-Scale Image Recognition[J]. Computer Science, 2014.
VGG是一种没有很多超参数的模型,只要专注于构造卷积层就可以了,整体结构较为简单。VGG-16模型中的16代表的是16个卷积层和池化层。VGG-16模型共有1.38亿个参数
2.3 残差网络
非常深的神经网络是很难训练的,因为会出现梯度消失和梯度下降的问题。可以通过远跳连接(Skip connection)将某一层的激活值喂给后面较深的层,从而构建出能够训练深层网络的ResNets。
ResNets是由残差块(residual block)构成的,如图4所示。
图4 残差块
正常的神经网络由图4中黑线所描述的流程进行,对 l l 层的激活值,经过两次线性计算(乘以权重,加上偏置)和非线性计算(激活函数),得到 l+2 l + 2 层的输出 a[l+2] a [ l + 2 ] 。即:
残差块则通过设置一条捷径(short cut),如图4中蓝色线所示,来实现远跳连接。这时候第
l+2
l
+
2
层的输入不仅仅是
z[l+2]
z
[
l
+
2
]
,还有
a[l]
a
[
l
]
。
在标准神经网络中构建多个残差块,就可以使其成为残差网络,如图5所示。
对于标准神经网络,理论上当层数越多时,训练误差会越来越低。但是实际上,训练误差会先下降后升高,因为随着层数增加,神经网络会越来越难训练,如图6所示。但是残差网络却能够训练很深层的模型,甚至可以达到1000层以上。
图6 标准神经网络和残差训练误差随层数的变化规律
2.4 残差网络为什么有用?
标准神经网络在层数越来越多时,训练效率会越来越低。但是残差网络却没有这样的问题,以图7为例进行说明。
图7 标准神经网络和残差神经网络
图7中第一个模型是一个很深的神经网络,在 l l 层的激活值为,这时候模型已经很难训练。
如果在这个模型后面加个残差块,则有:
在经过训练的模型中,正则化会使得权重 W[l+2] W [ l + 2 ] 和偏置 b[l+2] b [ l + 2 ] 压缩为近似为零的值,因此,上式变为:
残差网络训练这个式子并不困难,这就意味着即使增加了两层,训练效率也没有显著下降。而新增加的两层可以学习到新的特征,进而提高模型精度。
2.5 网络中的网络及1×1卷积
1×1卷积作用于一个通道的数据时,似乎没有明显的特点,仅仅是把原数据按倍数放大而已。但是当输入数据为多通道时,这个1×1×32的作用类似于权重,乘上输入数据中某个切片的32个数据,进行ReLU计算。
图8 1×1卷积
2.6 谷歌Inception网络介绍
当你构建卷积层时,可能会纠结到底使用1×1,3×3还是5×5的卷积核,或者是否使用池化层等,Inception网络能够自动帮你决定。
图9 Inception网络
如图9所示,当你不确定用哪个合适时,可以用图中所示的方式把它们堆叠起来,然后让网络自己确定用哪一个设置。
Inception网络的一个重要问题是计算的成本。
图10 计算成本的问题
图10所示的卷积层所需的计算次数为120,000,000。
如果在其中加入1×1卷积层的话,计算次数能够缩减为12,400,000,减小近10倍。这个1×1卷积层又叫做 bottleneck 层
图11 Bottleneck layer
2.7 Inception网络
以Google Inception网络为例,说明了Inception网络构建的原理,详细内容见论文。
Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[J]. 2014:1-9.
2.8 使用开源的实现方案
许多表现良好的神经网络模型参数众多,调参复杂,通过别人的开源实现方案来理解并构建自己的网络模型,将会极大提高你的效率。
2.9 迁移学习
在进行计算机视觉领域的模型构建时,相比于你自己随机初始化权重,你从网上下载别人训练好的权重作为初始化权重,再进行训练,然后迁移到你所需要研究的领域,效率将会极大提高。
2.10 数据扩充
在构建计算机视觉领域的模型是,经常会遇到数据量不足的问题,这时候可以通过数据扩充来增加数据。主要方法有:镜像,剪裁,扭曲,颜色变化等