1. 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。2个卷积+3全连接。
- 当 LeNet-5模型被提出时,其池化层使用的是平均池化,而且各层激活函数一般选用 Sigmoid 和 tanh。现在,我们可以根据需要,做出改进,使用最大池化并选用 ReLU 作为激活函数。
2. AlexNet
特点:
- AlexNet 模型与 LeNet-5 模型类似,但是更复杂,包含约 6000 万个参数。另外,AlexNet 模型使用了 ReLU 函数。
- 当用于训练图像和数据集时,AlexNet 能够处理非常相似的基本构造模块,这些模块往往包含大量的隐藏单元或数据。
3. VGG
特点:
- VGG 又称 VGG-16 网络,“16”指网络中包含 16 个卷积层和全连接层。
- 超参数较少,只需要专注于构建卷积层。
- 结构不复杂且规整,在每一组卷积层进行滤波器翻倍操作。
- VGG 需要训练的特征数量巨大,包含多达约 1.38 亿个参数
4. 残差网络
残差网络(Residual Networks,简称为 ResNets)残差网络有助于解决梯度消失和梯度爆炸问题,使得在训练更深的网络的同时,又能保证良好的性能。残差块定义如下,通过捷径(Short cut,或者称跳远连接,Skip connections)可以将 a[l]添加到第二个 ReLU 过程中,直接建立a[l] 与a[l+2] 之间的隔层联系
理论上,随着网络深度的增加,性能应该越来越好。但实际上,对于一个普通网络,随着神经网络层数增加,训练错误会先减少,然后开始增多。但残差网络的训练效果显示,即使网络再深,其在训练集上的表现也会越来越好。
残差网络有效的原因:
- 看似很深的神经网络,由于许多残差块的存在,弱化削减了某些神经层之间的联系,实现隔层线性传递,而不是一味追求非线性关系,模型本身也就能“容忍”更深层的神经网络了。
- 从性能上来说,这两层额外的Residual blocks也不会降低Big NN的性能,所以给大型神经网络增加两层,不论是把残差块添加到神经网络的中间还是末端位置,都不会影响网络的表现
- 如果 a[l]与 a[l+2]的维度不同,需要引入矩阵 Ws与 a[l]相乘,使得二者的维度相匹配。参数矩阵 Ws既可以通过模型训练得到,也可以作为固定值,仅使 a[l]截断或者补零
- 卷积层通常使用 Same 卷积以保持维度相同,而不同类型层之间的连接(例如卷积层和池化层),如果维度不同,则需要引入矩阵 Ws
5. 1x1卷积
1x1 卷积的作用实际上类似全连接层的神经网络结构,从而降低(或升高,取决于滤波器组数)数据的维度,1×1卷积层给神经网络添加了一个非线性函数,从而减少或保持输入层中的通道数量不变,也可以增加通道数量
如用 32 个大小为 1×1×192 的滤波器进行卷积,就能使原先数据包含的 192 个通道压缩为 32 个。
6. Inception网络
- Inception 网络的作用即是代替人工来确定卷积层中的滤波器尺寸与类型,或者确定是否需要创建卷积层或池化层
- Inception 网络选用不同尺寸的滤波器进行 Same 卷积,并将卷积和池化得到的输出组合拼接起来,最终让网络自己去学习需要的参数和采用的滤波器组合
- Inception网络在单层网络上可以使用多个不同尺寸的filters,进行same convolutions,把各filter下得到的输出拼接起来。还可以将CONV layer与POOL layer混合,同时实现各种效果,但是要注意使用same pool。Inception Network不需要人为决定使用哪个过滤器或者是否需要池化,它使用不同尺寸的filters并将CONV和POOL混合起来,将所有功能输出组合拼接,再由神经网络本身去学习参数并选择最好的模块
- 如果在构建神经网络层的时候,不想决定池化层是使用1×1,3×3还是5×5的过滤器,Inception模块是最好的选择。可以应用各种类型的过滤器,只需要把输出连接起来
注意黑色椭圆圈出的隐藏层,这些分支都是 Softmax 的输出层,可以用来参与特征的计算及结果预测,起到调整并防止发生过拟合的效果。经过研究者们的不断发展,Inception 模型的 V2、V3、V4 以及引入残差网络的版本被提出,这些变体都基于 Inception V1 版本的基础思想上
7. 卷积神经网络训练
迁移学习
- 对于已训练好的卷积神经网络,可以将所有层都看作是冻结的,只需要训练与你的 Softmax 层有关的参数即可。大多数深度学习框架都允许用户指定是否训练特定层的权重。
- 而冻结的层由于不需要改变和训练,可以看作一个固定函数。可以将这个固定函数存入硬盘,以便后续使用,而不必每次再使用训练集进行训练了
- 上述的做法适用于你只有一个较小的数据集。如果你有一个更大的数据集,应该冻结更少的层,然后训练后面的层。越多的数据意味着冻结越少的层,训练更多的层。如果有一个极大的数据集,你可以将开源的网络和它的权重整个当作初始化(代替随机初始化),后训练整个网络
数据扩增
- 当数据不够时,数据扩增(Data Augmentation)就有帮助。常用的数据扩增包括镜像翻转、随机裁剪、色彩转换。
- 色彩转换是对图片的 RGB 通道数值进行随意增加或者减少,改变图片色调。另外,PCA 颜色增强指更有针对性地对图片的 RGB 通道进行主成分分析(Principles Components Analysis,PCA),对主要的通道颜色进行增加或减少,可以采用高斯扰动做法来增加有效的样本数量
- 在构建大型神经网络的时候,数据扩增和模型训练可以由两个或多个不同的线程并行来实现。
- 在数据扩充过程中也有一些超参数,比如说颜色变化了多少,以及随机裁剪的时候使用的参数
计算机视觉现状
- 通常学习的知识来源于被标记的数据和手工工程
- 手工工程(Hand-engineering,又称 hacks)指精心设计的特性、网络体系结构或是系统的其他组件。手工工程是一项非常重要也比较困难的工作。在数据量不多的情况下,手工工程是获得良好表现的最佳方式
- 另外,在模型研究或者竞赛方面,有一些方法能够有助于提升神经网络模型的性能:
- 集成(Ensembling):独立地训练几个神经网络,并平均输出它们的输出
- Multi-crop at test time:将数据扩增应用到测试集,对结果进行平均
- 但是由于这些方法计算和内存成本较大,一般不适用于构建实际的生产项目。