模型调优-提升分数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaomifanhxx/article/details/82856241

超参数调优

神经网络最常用的设置有:1)初始学习率;2)学习率衰减方式(例如一个衰减常量);3)正则化强度(L2惩罚,随机失活强度)

除了这三种常用设置:还有很多相对不那么敏感的超参数,在AdaGrad中,对于动力及其时间表的设置等,也需要去设置。

实现:训练过程是很长的,我们在训练过程中,要对每个epoch后的验证集进行监控,然后在文档中记录验证集的损失以及acc,来判断问题,进而,我们可以分析出比较好的模型网络。

比起交叉验证最好使用一个验证集:在大多数情况下,一个尺寸合理的验证集可以使代码更简单,不需要用几个数据集来交叉验证,在交叉验证一个参数的时候,实际上是使用了一个验证集。

超参数范围:在对数尺度上进行超参数搜索。例如,一个典型的学习率应该看起来是这样:learning_rate = 10 ** uniform(-6, 1)。也就是说,我们从标准分布中随机生成了一个数字,然后让它成为10的阶数。对于正则化强度,可以采用同样的策略。直观地说,这是因为学习率和正则化强度都对于训练的动态进程有乘的效果。

随机搜索优于网格搜索:随机选择比网格化的选择更加有效”,而且在实践中也更容易实现。

从粗到细地分阶段搜索: 在实践中,先进行初略范围(比如10 ** [-6, 1])搜索,然后根据好的结果出现的地方,缩小范围进行搜索。进行粗搜索的时候,让模型训练一个周期就可以了,因为很多超参数的设定会让模型没法学习,或者突然就爆出很大的损失值。第二个阶段就是对一个更小的范围进行搜索,这时可以让模型运行5个周期,而最后一个阶段就在最终的范围内进行仔细搜索,运行很多次周期。

评价

模型集成:在实践的时候,有一个总是能提升神经网络几个百分点准确率的办法,就是在训练的时候训练几个独立的模型,然后在测试的时候平均它们预测结果。集成的模型数量增加,算法的结果也单调提升(但提升效果越来越少)。还有模型之间的差异度越大,提升效果可能越好。进行集成有以下几种方法:

1)同一个模型,不同的初始化:使用交叉验证来得到最好的超参数,然后用最好的参数来训练不同初始化条件的模型。这种方法的风险在于多样性只来自于不同的初始化条件。

2)在交叉验证中发现最好的模型:使用交叉验证来得到最好的超参数,然后取其中最好的几个(比如10个)模型来进行集成。这样就提高了集成的多样性,但风险在于可能会包含不够理想的模型。在实际操作中,这样操作起来比较简单,在交叉验证后就不需要额外的训练了。

3)一个模型设置多个记录点:如果训练非常耗时,那就在不同的训练时间对网络留下记录点(比如每个周期结束),然后用它们来进行模型集成。很显然,这样做多样性不足,但是在实践中效果还是不错的,这种方法的优势是代价比较小。

4)在训练的时候跑参数的平均值:和上面一点相关的,还有一个也能得到1-2个百分点的提升的小代价方法,这个方法就是在训练过程中,如果损失值相较于前一次权重出现指数下降时,就在内存中对网络的权重进行一个备份。这样你就对前几次循环中的网络状态进行了平均。你会发现这个“平滑”过的版本的权重总是能得到更少的误差。直观的理解就是目标函数是一个碗状的,你的网络在这个周围跳跃,所以对它们平均一下,就更可能跳到中心去。

模型集成的一个劣势就是在测试数据的时候会花费更多时间。最近Geoff Hinton在“Dark Knowledge”上的工作很有启发:其思路是通过将集成似然估计纳入到修改的目标函数中,从一个好的集成中抽出一个单独模型。

总结

训练一个神经网络需要:

1)利用小批量数据对实现进行梯度检查,还要注意各种错误。

2)进行合理性检查,确认初始损失值是合理的,在小数据上能达到100%的准确率

3)在训练中,跟踪损失函数值/训练集和验证集的准确率,如果愿意还可以跟踪更新的参数量相对于总参数量的比例(一般是在1e-3左右),如果是对卷积神经网络,可以将第一层的权重可视化。

4)推荐的两个更新方法是SGD+Nesterov动量方法,或者Adam方法。

5)随着训练进行学习率衰减,在固定多少个周期的后让学习率减半,或者通过验证集准确率下降的时候进行学习率更改。

6)使用随机搜索(不要用网格搜索)来搜索最优的超参数分阶段从粗(比较宽的超参数范围训练1-5个周期)到细(窄范围训练很多个周期)地来搜索。

7)进行模型集成来获得额外的性能提高。

判断

通过验证集来判断数据集的问题:

出现loss震荡不平滑的原因:1)学习率可能太大;2)batch size 太小 3)样本分布不均匀 4)加入正则化

参考文章:https://zhuanlan.zhihu.com/p/21798784?refer=intelligentunit

猜你喜欢

转载自blog.csdn.net/xiaomifanhxx/article/details/82856241