自2012年AlexNet提出以后涌现了大量的深度神经网络结构,例如VGG、Inception 及ResNet等等,这些不同网络结构之间的性能差异不仅仅是由网络结构的差异造成的,其它很多小的trick,比如stride size、学习率等等都会对结果带来很大的影响。为了综合评估各种手段对于训练结果的影响程度,本文对多种训练技巧进行了评估,并提出了一系列可以提升深度神经网络训练效果的trick。
论文涉及到以下几个方面:
在baseline中采用的数据处理方式及优化手段等:
在epoch一定的情况下,大的batch可能会降低模型的训练精度。这一问题的解决方案有:
当前主流的计算框架,参数的运算都是32位浮点数的,而一些新的计算设备,如Nvidia V100 提供了在16位浮点数情况下更高的计算效率。相比与32位浮点数,利用16位浮点数进行计算可以使训练速度增大2-3倍。但由此也会带来对训练效果的负面影响,Micikevicius 等人提出可以通过同时保留16位参数和32位参数,在计算梯度时采用16位数据,而在更新参数时采用32位参数的形式避免该问题。另外,对loss乘上一个系数也可以在一定程度上避免该问题。【实验发现从32位转到16位对训练结果并无显著影响】
对网络结构的细微调整,比如更改特定卷基层的的stride,可能会对模型的精度带了不可忽略的影响,在本文中以ResNet为例探究了微调网络结构对模型的影响。
%
ResNet 的几种变形:
ResNet-B: 最初来自与Torch中的ResNet. 在原始的ResNet的blocks中,Path A的第一次层卷积采用的是1×1,stride=2的卷积操作,因此会遗漏3/4的输入feature map, 在ResNet-B更改了Path A的前两层卷积参数。
ResNet-C: 最初来自于Inception-v2. 研究发现卷积的计算量与卷积核的长或者宽呈现二次关系。比如一个7×7的卷积核的计算量是3×3卷积核计算量的5.4倍。因此在该结构中,input stem的7×7卷积核被换成了3×3卷积核。
ResNet-D: 该结构由本文提出。受ResNet-B的启发,在ResNet blocks的path B上同样存在feature map 被遗漏的问题,因此文中提出了如上图C新ResNet结构。
上述几中不同模型的表现如下:
ResNet-D得到的精度最好,相比于ResNet, ResNet-D训练速度降低3%
文中对比了两种学习率衰减策略:
两种衰减策略的表现:
在分类训练中,通过softmax获得标签的概率分布qi, 然后利用通过真实标签概率pi, 计算交叉损失熵:
当i=真实标签时,pi = 1, 否则为0
如果直接采用softmax获取的概率分布容易造成过拟合,因此在Inception-v2中首次提出了label smoothing策略,对qi进行了如下调整:
利用一个pre-train的高精度网络充当teacher, 对待训练的student网络添加监督信息:
其中第一项为普通的分类交叉损失,第二项是待训练网络与teacher网络输出的交叉损失熵。
一种数据增强的手段。每次随机选取两个样例(xi,yi)和(xj,yj),通过线性操作获得新的样例:
在mixup training中仅采用新生成的样例。
实验发现cosine decay, label smoothing and mixup 对ResNet, Inception V3 and MobileNet 都有稳定的提升,而Distillation只对于ResNet有效,而对于Inception-V3和MobileNet无效,这可能与采用的teacher net的类型有关,文中采用的是ResNet-152.
随后作者将提升的训练结果用到了目标检测和语义分割两个任务中,证明了这些提升手段有很好的迁移能力。