目录
1)Why look at case studies?
2)Classic networks(理解)
3)ResNets(理解)
4)Why ResNets work?(经典)
5)Networks in Networks and 1x1 Convolutions(理解)
6)Inception network motivation
7)Inception network
8)Using open-source implementations
9)Transfer Learning(理解)
10)Data augmentation(重点)
11)The state of computer vision
本博客笔记是吴恩达老师深度学习课程第四门课第二周的的学习笔记:Deep convolutional models: case studies。笔记参考了黄海广博士的整理,在此表示感谢。
1)Why look at case studies?
本周课程吴恩达老师讲到的经典 CNN 模型包括:
-
LeNet-5
-
AlexNet
-
VGG
此外还有 ResNet(Residual Network,残差网络),以及 Inception Neural Network。
2)Classic networks(理解)
LeNet-5
特点:
LeNet-5 针对灰度图像而训练,因此输入图片的通道数为 1
该模型总共包含了约 6 万个参数,远少于标准神经网络所需
典型的 LeNet-5 结构包含卷积层(CONV layer),池化层(POOL layer)和全连接层(FC layer),排列顺序一般为 CONV layer->POOL layer->CONV layer->POOL layer->FC layer->FC layer->OUTPUT layer。一个或多个卷积层后面跟着一个池化层的模式至今仍十分常用
当 LeNet-5模型被提出时,其池化层使用的是平均池化,而且各层激活函数一般选用 Sigmoid 和 tanh。现在,我们可以根据需要,做出改进,使用最大池化并选用 ReLU 作为激活函数。
相关论文:LeCun et.al., 1998. Gradient-based learning applied to document recognition。吴恩达老师建议精读第二段,泛读第三段。
AlexNet
特点:
AlexNet 模型与 LeNet-5 模型类似,但是更复杂,包含约 6000 万个参数。另外,AlexNet 模型使用了 ReLU 函数。
当用于训练图像和数据集时,AlexNet 能够处理非常相似的基本构造模块,这些模块往往包含大量的隐藏单元或数据。
相关论文:Krizhevsky et al.,2012. ImageNet classification with deep convolutional neural networks。这是一篇易于理解并且影响巨大的论文,计算机视觉群体自此开始重视深度学习。
VGG
特点:
VGG 又称 VGG-16 网络,16指网络中包含 16 个卷积层和全连接层。
超参数较少,只需要专注于构建卷积层。
结构不复杂且规整,在每一组卷积层进行滤波器翻倍操作。
VGG 需要训练的特征数量巨大,包含多达约 1.38 亿个参数。
相关论文:Simonvan & Zisserman 2015. Very deep convolutional networks for large-scale image recognition。
3)ResNets(理解)
因为存在梯度消失和梯度爆炸问题,网络越深,就越难以训练成功。残差网络(Residual Networks,简称为 ResNets)可以有效解决这个问题。
上图的结构被称为残差块(Residual block)。通过捷径(Short cut,或者称跳跃连接,Skip connections)可以将 添加到第二个 ReLU 过程中,直接建立与 之间的隔层联系。表达式如下:
构建一个残差网络就是将许多残差块堆积在一起,形成一个深度网络。
ResNets 经典论文He et al., 2015. Deep residual networks for image recognition。
在理论上,随着网络深度的增加,性能应该越来越好。但实际上,对于一个普通网络,随着神经网络层数增加,训练错误会先减少,然后开始增多。但残差网络的训练效果显示,即使网络再深,其在训练集上的表现也会越来越好。
残差网络有助于解决梯度消失和梯度爆炸问题,使得在训练更深的网络的同时,又能保证良好的性能。
4)Why ResNets work?(经典)
假设有一个大型神经网络,其输入为,输出为 。给这个神经网络额外增加两层,输出为。将这两层看作一个具有跳远连接的残差块。为了方便说明,假设整个网络中都选用 ReLU 作为激活函数,因此输出的所有激活值都大于等于 0。
则有:
当发生梯度消失时,,,则有:
因此,这两层额外的残差块不会降低网络性能。而如果没有发生梯度消失时,训练得到的非线性关系会使得表现效果进一步提高。
注意,如果与 的维度不同,需要引入矩阵与 相乘,使得二者的维度相匹配。参数矩阵 既可以通过模型训练得到,也可以作为固定值,仅使 截断或者补零。
上图是论文提供的 CNN 中 ResNet 的一个典型结构。卷积层通常使用 Same 卷积以保持维度相同,而不同类型层之间的连接(例如卷积层和池化层),如果维度不同,则需要引入矩阵。
5)Networks in Networks and 1x1 Convolutions(理解)
1x1 卷积(1x1 convolution,或称为 Network in Network)指滤波器的尺寸为 1。当通道数为 1 时,1x1 卷积意味着卷积操作等同于乘积操作。
而当通道数更多时,1x1 卷积的作用实际上类似全连接层的神经网络结构,从而降低(或升高,取决于滤波器组数)数据的维度。
池化能压缩数据的高度()及宽度(),而 1×1 卷积能压缩数据的通道数()。在如下图所示的例子中,用 32 个大小为 1×1×192 的滤波器进行卷积,就能使原先数据包含的 192 个通道压缩为 32 个。
虽然论文Lin et al., 2013. Network in network中关于架构的详细内容并没有得到广泛应用,但是 1x1 卷积的理念十分有影响力,许多神经网络架构(包括 Inception 网络)都受到它的影响。
6)Inception network motivation
在之前的卷积网络中,我们只能选择单一尺寸和类型的滤波器。而 Inception 网络的作用即是代替人工来确定卷积层中的滤波器尺寸与类型,或者确定是否需要创建卷积层或池化层。
如图,Inception 网络选用不同尺寸的滤波器进行 Same 卷积,并将卷积和池化得到的输出组合拼接起来,最终让网络自己去学习需要的参数和采用的滤波器组合。
相关论文:Szegedy et al., 2014, Going Deeper with Convolutions
在提升性能的同时,Inception 网络有着较大的计算成本。下图是一个例子:
图中有 32 个滤波器,每个滤波器的大小为 5x5x192。输出大小为 28x28x32,所以需要计算 28x28x32 个数字,对于每个数,都要执行 5x5x192 次乘法运算。加法运算次数与乘法运算次数近似相等。因此,可以看作这一层的计算量为 28x28x32x5x5x192 = 1.2亿。
为了解决计算量大的问题,可以引入 1x1 卷积来减少其计算量。
对于同一个例子,我们使用 1x1 卷积把输入数据从 192 个通道减少到 16 个通道,然后对这个较小层运行 5x5 卷积,得到最终输出。这个 1x1 的卷积层通常被称作瓶颈层(Bottleneck layer)。
改进后的计算量为 28x28x192x16 + 28x28x32x5x5x15 = 1.24 千万,减少了约 90%。
只要合理构建瓶颈层,就可以既显著缩小计算规模,又不会降低网络性能。
7)Inception network
上图是引入 1x1 卷积后的 Inception 模块。值得注意的是,为了将所有的输出组合起来,红色的池化层使用 Same 类型的填充(padding)来池化使得输出的宽高不变,通道数也不变。
多个 Inception 模块组成一个完整的 Inception 网络(被称为 GoogLeNet,以向 LeNet 致敬),如下图所示:
注意黑色椭圆圈出的隐藏层,这些分支都是 Softmax 的输出层,可以用来参与特征的计算及结果预测,起到调整并防止发生过拟合的效果。
经过研究者们的不断发展,Inception 模型的 V2、V3、V4 以及引入残差网络的版本被提出,这些变体都基于 Inception V1 版本的基础思想上。顺便一提,Inception 模型的名字来自电影《盗梦空间》。
8)Using open-source implementations
很多神经网络复杂细致,并充斥着参数调节的细节问题,因而很难仅通过阅读论文来重现他人的成果。想要搭建一个同样的神经网络,查看开源的实现方案会快很多。
9)Transfer Learning(理解)
在“搭建机器学习项目”课程中,迁移学习已经被提到过。计算机视觉是一个经常用到迁移学习的领域。在搭建计算机视觉的应用时,相比于从头训练权重,下载别人已经训练好的网络结构的权重,用其做预训练,然后转换到自己感兴趣的任务上,有助于加速开发。
对于已训练好的卷积神经网络,可以将所有层都看作是冻结的,只需要训练与你的 Softmax 层有关的参数即可。大多数深度学习框架都允许用户指定是否训练特定层的权重。
而冻结的层由于不需要改变和训练,可以看作一个固定函数。可以将这个固定函数存入硬盘,以便后续使用,而不必每次再使用训练集进行训练了。
上述的做法适用于你只有一个较小的数据集。如果你有一个更大的数据集,应该冻结更少的层,然后训练后面的层。越多的数据意味着冻结越少的层,训练更多的层。如果有一个极大的数据集,你可以将开源的网络和它的权重整个当作初始化(代替随机初始化),然后训练整个网络。
10)Data augmentation(重点)
计算机视觉领域的应用都需要大量的数据。当数据不够时,数据增强(Data Augmentation)就有帮助。常用的数据扩增包括镜像翻转、随机裁剪、色彩转换。
其中,色彩转换是对图片的 RGB 通道数值进行随意增加或者减少,改变图片色调。另外,PCA 颜色增强指更有针对性地对图片的 RGB 通道进行主成分分析(Principles Components Analysis,PCA),对主要的通道颜色进行增加或减少,可以采用高斯扰动做法来增加有效的样本数量。具体的 PCA 颜色增强做法可以查阅 AlexNet 的相关论文或者开源代码。
在构建大型神经网络的时候,数据扩增和模型训练可以由两个或多个不同的线程并行来实现。
11)The state of computer vision
通常,学习算法有两种数据来源:
被标记的数据
特征工程
特征工程(Hand-engineering,又称 hacks)指精心设计的特性、网络体系结构或是系统的其他组件。特征工程是一项非常重要也比较困难的工作。在数据量不多的情况下,特征工程是获得良好表现的最佳方式。正因为数据量不能满足需要,历史上计算机视觉领域更多地依赖于手工工程。近几年数据量急剧增加,因此特征工程量大幅减少。
另外,在模型研究或者竞赛方面,有一些方法能够有助于提升神经网络模型的性能:
集成(Ensembling):独立地训练几个神经网络,并平均输出它们的输出
Multi-crop at test time:将数据扩增应用到测试集,对结果进行平均
但是由于这些方法计算和内存成本较大,一般不适用于构建实际的生产项目。