CIFAR-100 上的卷积神经网络模型探索

报告 ? 次阅读
归档
本文原已在其他场合、更早之前发表,已无时效。
ABC
本文属初学作品,其时仍在学习、探索;高人不必读。

本篇中,采用 LeNet-5、AlexNet、VGG-16、VGG-19、GoogLeNet、ResNet-18、ResNet-34 等几个小尺度的 CNN 模型,在 CIFAR-100 数据集上进行图像分类探索。

问题重述

CIFAR-100 数据集与 CIFAR-10 数据集同出一门,但在相同样本数目下将分类拓宽为 20 大类 5 小类,计 100 种,此即其名由来。每种类别的样本数也从原来的 5000 + 1000 减少到 500 + 100,进一步提高了训练难度。

在本篇中,作者尝试构建了一个比之前几次练习更通用的训练框架,并以同样的学习率下降策略和数据增强方式对七种经典的 CNN 模型在 CIFAR-100 上进行了训练,并检查了各个模型在同一套训练策略下的表现。事实证明,复杂度较低的模型(如 LeNet-5、AlexNet)在 CIFAR-100 上的表现「捉襟见肘」,而复杂度较高的模型也未必能在同一种策略下发挥的最好(如 ResNet-34)。

训练策略简述

学习率衰减策略

经过之前几次的探索发现,在复杂问题中采用衰减的学习率是必要的。若始终采用初始学习率,则模型的训练误差将很快的停滞于某一固定水平;在此情形下,模型与状态空间中的最优点已「近在咫尺」,但过高的学习率已使其无法进一步逼近这个最优点。

理想情形下,学习率的衰减应通过对模型训练误差(或准确度)的检查自动实现:一旦检测到模型的训练状况停滞不前,就将学习率除以 5 或 10。这是针对实际问题而言;在此次探索之中,则采用论文《Improved Regularization of Convolutional Neural Networks with Cutout》中的策略,将训练的 epoch 统一为 200,初始学习率设定为 0.1,并在 60、120、160 轮时将模型的学习率下降 5 倍。

数据增强策略

在上一次对 CIFAR-10 的探索中,采用的「色彩调整 + 水平翻转」数据增强没有实现预定效果;此次吸取教训,将数据增强策略调整为「随机裁剪 + 水平翻转」,在 32x32 的图片中最少裁剪出 26x26 的切片,大大提高了数据的丰富程度。

尽管在此次的训练过程中没有设置对照组,但可以预见这种策略将有利于提高模型的最终准确度。

Dropout 策略

Dropout 是防止过拟合的重要策略。在本次训练中,除了 LeNet-5 以外的模型均设置了 dropout 层,其启闭概率则并不相等,有的选择为 0.4,有的选择为 0.5. 事实证明,这一概率不至于对最终的训练结果产生过大影响,因此不必担心此参数造成任何的「不一致」。

检查测试集上准确率

之前几次训练过程中,只检查了模型的训练误差和训练集上的准确率,而将测试集完全搁置在一侧。本次训练中,尝试着在每一个 log_rate(即检查误差的数据节点)上抽样检查测试集上的模型准确率,以资参考1

当然,在这次的训练中,并没有将测试集上的准确率作为模型训练的依据;在实际的应用过程中,可以将测试集上的准确率作为终止训练的依据:一旦发现测试集上的误差开始明显下降,就停止训练,并取之前在测试集上表现最佳的模型作为最终的成品。

此外,对测试集的检测势必耗费一定的时间;在这次训练中,采用抽样测试的方法,每次仅在测试集上取 10 个 batch 进行检查。由此获得的准确率存在一定波动,但能够反映总体的趋势。

模型简述

本次训练中,尝试了 LeNet-5、AlexNet、VGG-16/19、GoogLeNet、ResNet-18/34 共七个经典的 CNN 模型。LeNet-5 与 AlexNet 在之前2都已有所涉及,是很基本的 CNN 模型,不再说明;后面几种则属于「深度不断加深」时代的产物,各有特点:

  • VGG:加深,再加深;反复采用 3x3 卷积核,减小参数量;预训练(此次没有实现这一机制)。
  • GoogLeNet:采用 Inception 模块,在保证模型精度的同时减小参数量(但似乎加大了训练的计算量?),并从多个维度提取特征,提高模型的训练效率。
  • ResNet:利用恒等层控制模型误差,避免梯度爆炸或消失,在层数不断增高的情况下保证模型能够正常训练。

在网络结构之外,此次训练时对各种模型采用相同的学习率衰减策略与数据增强策略,因此仅需要对这些网络构建其结构,而无需为其训练额外设置任何参数。训练时,统一设定 batch_size 为 128,以加快训练速度。

由于 CIFAR-100 的图片尺寸仅为 32x32,与 ImageNet 的尺寸相差悬殊,因此在实际训练时对除了 LeNet-5 以外的所有网络都进行了「精简操作」,一般是将大的卷积核改小、去除过多的池化层、减小卷积或池化运算时的 stride(步长)等。因此,本文中所言的各类模型,均非其原来的形貌了,都属于「精简版」网络(LeNet-5 则是「加强版」)。

训练结果

误差曲线比较

首先展示各个模型的训练误差曲线。这里,将 LeNet-5、AlexNet、VGG-19 列为一组,剩余四个模型列为一组。同时,对两种 VGG 和两种 ResNet 单独进行比较。

训练误差曲线的普遍特征是:在第 60、120 和 160 三个 epoch 的结束点处,因学习率的衰减而发生「跳水」,此后则逐渐趋于平缓。

第一组:LeNet-5、AlexNet、VGG-19

group 1

此三者的复杂度依次上升。在上一次训练 AlexNet 的过程中,AlexNet 在 CIFAR-10 上的表现差点不及 LeNet-5,我在当时的判断是「CIFAR-10 比较简单,不足以体现出 AlexNet 的潜力」。在 CIFAR-100 上的训练表明:

  • LeNet-5 初始时的误差下降最快,但随后就趋于平缓,且最终的训练误差也最高。这说明,复杂度过低的网络无法胜任难度较大的问题。
  • AlexNet 在第二次学习率(batch num: $6\times10^7$)衰减前的表现始终不及 LeNet-5,而在此之后则超过了 LeNet-5,并与 VGG-16 的水平接近。这证实了上一次训练结束时的推测。
  • VGG-19 开始时的误差下降最慢,但随后一直保持着稳定下降的趋势,在第一次学习率衰减前超过了 AlexNet 与 LeNet-5;从最终的情况来看,VGG-19 的表现似乎与 AlexNet 接近。也许在此种学习率衰减的策略下,还不足以使 VGG-19 发挥其最优水平。

第二组:VGG-16、GoogLeNet、ResNet-18/34

group 2

从曲线中可以看出,VGG-16 的误差下降状态「自成一派」,其余三者的表现则大体相近(从最初的状态来看,GoogLeNet 最优,ResNet-34 下降最慢)。由于最终各个模型的误差都相对较为接近,故可以判断:与后来的模型相较,VGG-16 难于训练,误差下降较慢。

VGG 网络的比较

loss of vgg

易见,VGG-16 的表现始终优于 VGG-19;这并不令人感到奇怪,也不能说明 VGG-19 的性能劣于 VGG-16。VGG 的主要特征即是参数较多(同等深度下);因此,这可能给训练造成了一些困难。在提出 VGG 的论文《Very Deep Convolutional Networks for Large-Scale Image Recognition》中可以发现,VGG-16 在一些情境下的表现确实优于 VGG-19;但反过来也可以理解,在不固定学习率下降策略时,或在更复杂的问题中,VGG-19 可以做得更好。

ResNet 的比较

loss of resnet

与两种 VGG 泾渭分明的曲线相比,两种 ResNet 的误差曲线则相对重合,在不同的阶段各有高低。在训练之初,ResNet-18 的复杂度较低,误差下降较快;而随着训练的深入,ResNet-34 开始逐渐发挥复杂度更高的优势,获得了更低的训练误差。在最后一个阶段,可以将误差曲线进一步放大:

loss of resnet

可以证实,ResNet-34 的最终表现稍稍优于 ResNet-18。除此以外,还可以发现,至 160 个 epoch 处(batch num. 约为 $8\times10^8$)时实施的学习率下降没有产生明显效果,因此时模型的训练误差已经很低了。

实时准确度比较

接下来,选取 AlexNet、VGG-16、GoogLeNet、ResNet-18 四个网络,检查它们在训练期间的实时准确度变动情况。

实时训练准确度

train accuracy

从整体表现来看,GoogLeNet 的表现最优,AlexNet 则表现较差。训练准确度的变化规律与训练误差的下降规律基本一致,没有什么值得一提的信息;在训练接近结束时,各个模型都能够实现接近于 100% 的训练准确度,但这并不足以使得它们在测试集上表现良好,只能说明训练数据已经显得匮乏,不足以使模型提取到新的特征,模型开始有了过拟合的倾向。

实时测试准确度

由于测试时是抽样检测,因此曲线难免存在着波动。为了消除波动造成的影响,作图时仅等间隔地取了三分之一的数据点。

train accuracy

令人惊奇的是,训练准确度与 GoogLeNet 接近的 ResNet-18,在测试集上的表现却不如落后其的 VGG-16。分析起来,可能是 ResNet-18 出现了过拟合的问题,也有可能是学习率的下降策略不甚合适,使其没能在第一次学习率下降时提取到足够的新特征。

最终准确度比较

在 CIFAR-100 的测试集上完整地测试各个模型之准确率(关闭 dropout 层),结果如下。

模型 Top-1 准确率 Top-5 准确率
LeNet-5 53.12% 78.21%
AlexNet 55.41% 79.07%
VGG-16 71.18% 89.03%
VGG-19 70.13% 87.71%
GoogLeNet 72.65% 91.52%
ResNet-18 64.23% 86.62%
ResNet-34 62.91% 85.51%

从结果来看,GoogLeNet 在当前的训练方式下取得了最高的准确率(top-1 与 top-5 皆然),VGG-16 则紧随其后。在训练集上表现较好的两种 ResNet 在测试集上表现不佳(且 ResNet-34 还劣于 ResNet-18),很有可能是出现了过拟合的问题。

以上的结果,并不足以反映各个网络的「终极实力」。例如,从训练误差曲线的比较中就可以看出,VGG-16 的训练误差在第一次学习率衰减时仍处于明显的下降期,这说明其第一次的学习率衰减应当延后;又如,ResNet 在最后一次学习率衰减时的误差已经接近于 0 了,而测试集上的误差却不高,这说明其学习率可能偏高,应当适当调低以避免过拟合。不同的模型应当采用不同的策略,这是事实;在这里用同一套策略进行训练,主要是为了方便观察同等条件下不同模型的特性(而非优劣)。

  1. 本次训练没有划分验证集。 

  2. 作者对这两个模型的训练笔记尚未公开发布。