模型优化方法

转载链接:https://zhuanlan.zhihu.com/p/29534841


第一步:先进行训练,得到一个初始的结果



结果分析:首先我们观察训练 loss(目标函数值)变化,刚开始 loss 从 200 不断减小到接近 0,但是在 100 轮左右开始出现震荡,并且随着训练幅度越来越大,说明模型不稳定。然后观察训练集和验证集的准确率,发现训练集准确率接近于 1,验证集准确率稳定在 70% 左右,说明模型的泛化能力不强并且出现了过拟合情况。最后评估测试集,发现准确率为 69.36%,也没有达到很满意的程度,说明我们对模型需要进行很大的改进,接下来进行漫长的调参之旅吧!


第二步:进行数据增强


使用数据增强技术(data augmentation),主要是在训练数据上增加微小的扰动或者变化,一方面可以增加训练数据,从而提升模型的泛化能力,另一方面可以增加噪声数据,从而增强模型的鲁棒性。主要的数据增强方法有:翻转变换 flip、随机修剪(random crop)、色彩抖动(color jittering)、平移变换(shift)、尺度变换(scale)、对比度变换(contrast)、噪声扰动(noise)、旋转变换 / 反射变换 (rotation/reflection)等,可以参考 Keras 的官方文档 [2] 。获取一个 batch 的训练数据,进行数据增强步骤之后再送入网络进行训练。

---------------------------------------------------------------------------------------------------------

数据增强具体做的方面:一共从如下三个方面:

我主要做的数据增强操作有如下方面:

  1. 图像切割:生成比图像尺寸小一些的矩形框,对图像进行随机的切割,最终以矩形框内的图像作为训练数据。

  2. 图像翻转:对图像进行左右翻转。

  3. 图像白化:对图像进行白化操作,即将图像本身归一化成 Gaussian(0,1) 分布。


结果分析:我们观察训练曲线和验证曲线,很明显地发现图像白化的效果好,其次是图像切割,再次是图像翻转,而如果同时使用这三种数据增强技术,不仅能使训练过程的 loss 更稳定,而且能使验证集的准确率提升至 82% 左右,提升效果十分明显。而对于测试集,准确率也提升至 80.42%。说明图像增强确实通过增加训练集数据量达到了提升模型泛化能力以及鲁棒性的效果,从准确率上看也带来了将近 10% 左右的提升,因此,数据增强确实有很大的作用。但是对于 80% 左右的识别准确率我们还是不够满意,接下来继续调参。

---------------------------------------------------------------------------------------------------------


第三步:从模型入手,使用一些改进方法


接下来的步骤是从模型角度进行一些改进,这方面的改进是诞生论文的重要区域,由于某一个特定问题对某一个模型的改进千变万化,没有办法全部去尝试,因此一般会实验一些 general 的方法,比如批正则化(batch normalization)、权重衰减(weight decay)。我这里实验了 4 种改进方法,接下来依次介绍。

  1. 权重衰减(weight decay):对于目标函数加入正则化项,限制权重参数的个数,这是一种防止过拟合的方法,这个方法其实就是机器学习中的 l2 正则化方法,只不过在神经网络中旧瓶装新酒改名为 weight decay [3]。

  2. dropout:在每次训练的时候,让某些的特征检测器停过工作,即让神经元以一定的概率不被激活,这样可以防止过拟合,提高泛化能力 [4]。

  3. 批正则化(batch normalization):batch normalization 对神经网络的每一层的输入数据都进行正则化处理,这样有利于让数据的分布更加均匀,不会出现所有数据都会导致神经元的激活,或者所有数据都不会导致神经元的激活,这是一种数据标准化方法,能够提升模型的拟合能力 [5]。

  4. LRN:LRN 层模仿生物神经系统的侧抑制机制,对局部神经元的活动创建竞争机制,使得响应比较大的值相对更大,提高模型泛化能力。


结果分析:我们观察训练曲线和验证曲线,随着每一个模型提升的方法,都会使训练集误差和验证集准确率有所提升,其中,批正则化技术和 dropout 技术带来的提升非常明显,而如果同时使用这些模型提升技术,会使验证集的准确率从 82% 左右提升至 88% 左右,提升效果十分明显。而对于测试集,准确率也提升至 85.72%。我们再注意看左图,使用 batch normalization 之后,loss 曲线不再像之前会出现先下降后上升的情况,而是一直下降,这说明 batch normalization 技术可以加强模型训练的稳定性,并且能够很大程度地提升模型泛化能力。所以,如果能提出一种模型改进技术并且从原理上解释同时也使其适用于各种模型,那么就是非常好的创新点,也是我想挑战的方向。现在测试集准确率提升至 85% 左右,接下来我们从其他的角度进行调参。


第四步:变化的学习率,进一步提升模型性能


在很多关于神经网络的论文中,都采用了变化学习率的技术来提升模型性能,大致的想法是这样的:

  1. 首先使用较大的学习率进行训练,观察目标函数值和验证集准确率的收敛曲线。

  2. 如果目标函数值下降速度和验证集准确率上升速度出现减缓时,减小学习率。

  3. 循环步骤 2,直到减小学习率也不会影响目标函数下降或验证集准确率上升为止。



结果分析:我们观察到,当 10000 个 batch 时,学习率从 0.01 降到 0.001 时,目标函数值有明显的下降,验证集准确率有明显的提升,而当 20000 个 batch 时,学习率从 0.001 降到 0.0005 时,目标函数值没有明显的下降,但是验证集准确率有一定的提升,而对于测试集,准确率也提升至 86.24%。这说明,学习率的变化确实能够提升模型的拟合能力,从而提升准确率。学习率在什么时候进行衰减、率减多少也需要进行多次尝试。一般在模型基本成型之后,使用这种变化的学习率的方法,以获取一定的改进,精益求精。



第五步:加深网络层数,会发生什么事情?

并不是网络层数越深,准确率越高,训练效果越好


结果分析:我们惊讶的发现,加深了网络层数之后,性能反而下降了,达不到原来的验证集准确率,网络层数从 8 层增加到 14 层,准确率有所上升,但从 14 层增加到 20 层再增加到 32 层,准确率不升反降,这说明如果网络层数过大,由于梯度衰减的原因,导致网络性能下降,因此,需要使用其他方法解决梯度衰减问题,使得深度神经网络能够正常 work。



第六步:利用参差网络,当做终极武器

这个残差网络就很好地解决了梯度衰减的问题,使得深度神经网络能够正常 work。由于网络层数加深,误差反传的过程中会使梯度不断地衰减,而通过跨层的直连边,可以使误差在反传的过程中减少衰减,使得深层次的网络可以成功训练。


结果分析:我们观察到,网络从 20 层增加到 56 层,训练 loss 在稳步降低,验证集准确率在稳步提升,并且当网络层数是 56 层时能够在验证集上达到 91.55% 的准确率。这说明,使用了残差网络的技术,可以解决梯度衰减问题,发挥深层网络的特征提取能力,使模型获得很强的拟合能力和泛化能力。当我们训练深度网络的时候,残差网络很有可能作为终极武器发挥至关重要的作用。


--------------------------------------------------------------------------------------------------------------

总结:

对于 CIFAR-10 图像分类问题,我们从最简单的卷积神经网络开始,分类准确率只能达到 70% 左右,通过不断地增加提升模型性能的方法,最终将分类准确里提升到了 90% 左右,这 20% 的准确率的提升来自于对数据的改进、对模型的改进、对训练过程的改进等,具体每一项提升如下表所示。

  • 改进方法                           获得准确率                          提升

  • 基本神经网络                    69.36%                                -

  • + 数据增强                         80.42%                                11.06%

  • + 模型改进                         85.72%                                16.36%

  • + 变化学习率                     86.24%                                 16.88%  

  • + 深度残差网络                  91.55%                                 22.19%

其中,数据增强技术使用翻转图像、切割图像、白化图像等方法增加数据量,增加模型的拟合能力。模型改进技术包括 batch normalization、weight decay、dropout 等防止过拟合,增加模型的泛化能力。变化学习率通过在训练过程中递减学习率,使得模型能够更好的收敛,增加模型的拟合能力。加深网络层数和残差网络技术通过加深模型层数和解决梯度衰减问题,增加模型的拟合能力。这些改进方法的一步步堆叠,一步步递进,使得网络的拟合能力和泛化能力越来越强,最终获得更高的分类准确率。

猜你喜欢

转载自blog.csdn.net/charlotte_android/article/details/81013561
今日推荐