对深度学习模型进行调优

       对许多模型来说,除了准确率不够高,最核心的问题就是测试集上的结果不太稳定。如果能让测试集的结果更稳定,说不定模型还有继续增加迭代次数的可能。模型不稳定的理由通常为:

1)数据增强随机性太大、或batch_size太小

解决方法:取消数据增强,或削弱数据增强中随机的程度;增加batch_size

2)初始学习率太大,或迭代不稳定

解决方法:降低学习率lr或增加动量参数gamma,来帮助模型稳住迭代方向。如果使用的是Adam,则可以考虑增加\beta

3)模型的置信度低

解决方法:这种情况下,说明模型或架构的学习能力不足,需要更换架构、或通过特征工程降低数据的学习难度、或通过特征工程降低数据的学习难度、或增强架构的学习能力。

       一般来说,我们先通过1)和2)进行调节,当实在无法改善时再考虑3)方法。

       当模型经过调节已经非常平稳时,若模型表现为过拟合,可以尝试尝试一些对抗过拟合的方法,说不定能够再一次提升测试集上的准确率。

       如果模型出现过拟合的情况,说明至少模型在训练集的学习并不存在问题,因此我们可以尝试各种过拟合的方法来视图消减训练集上的准确率、并提升测试集上的准确性,通常控制过拟合的方式有以下几种:

1)L1\L2正则化,或权重衰减

       也就是在损失函数后加上权重的L1或L2范数表达式,让迭代的时候损失函数因正则项的存在而偏移,从 而阻止架构“精确”地学习数据。在优化算法中,我们可以通过参数weight_decay调整权重衰减值。这个 值非常敏感,因此调节难度极大,但我们还是可以尝试这么做。

2)Dropout/BN可以控制正则化

3)降低batch_size/数据增强,增加数据与数据之间的不相似性

       这一点正好与迭代不稳定的情况相反。

4)降低模型的复杂度

       我们可以消减模型的层、让卷积网络输出的特征图数量变少、让全连接层上输出的值变少,依次降低模型的参数量和复杂度。这个方法需要修改架构,因此当训练流程非常深入时,一般不考虑这个方法。

5)使用提前停止Early Stopping

       如果上面5种手段都已经尝试过,但模型还是处于过拟合的状态,那可能需要剑走偏锋了:

6)检查是否使用了不恰当的数据处理过程方式、或参数初始化过程、或预训练过程

       比如说,你训练集和测试集上使用的归一化参数不同,或者在过拟合的情况下使用了加速迭代的Xavier 初始化、或者使用完全与训练数据不相关的预训练流程等,这些都可能导致模型从训练集上学到的内容和测试集完全不同。同时,还有可能是我们忽视了测试集中的一些奇特的样本,导致模型缺乏足够的“不变性”,这种情况下我们可以再次探索数据,更换数据增强的方式

       如果我们希望继续提升模型的效果,可以采用以下的几种手段,操作难度逐渐递增:

1 尝试使用预处理、各类初始化等手段,看看能否继续优化网络

2 深入研究标签类别,究竟哪些数字不容易被判断正确,针对这些数字或图像做特定的数据增强

3 学习论文中提到的各种手段和新兴模型,在新兴模型上尝试数据集的结果

4 获取最原始的数据集,重新创造图像尺寸更大的数据集,帮助我们加深网络

你可能感兴趣的:(深度学习,cnn,神经网络)