提升模型性能的几个方法以及训练集测试集验证集的划分与作用

一、提升模型性能的方法一般在四个方向:

1.Data Augmentation

2.Weight Initialization

3.Transfer learning + Fine-tune

4.Ensemble/Model Fusion

数据增强、迁移学习与微调这些之前已经学过了。关于权重的正则化约束。因为单纯的不断增强数据量,还是不够的。因为提升过的数据是高度相关的。对抗过拟合应该主要关注模型的“熵容量”也就是模型允许存储的信息量。1.存储量大,能利用更多的特征,取得更好的性能。2.存储量小,我们这时要将存储的特征主要集中在真正相关的特征上,并有更好的泛化性能。

此时需要正确的调整“熵容量”:a.选择调整模型的参数数目,包括每层的规模、模型的层数。b.对权重进行正则化的约束,如L1或L2这种约束会使模型的权重偏向较小的值。c.数据提升+dropout都是在随机扰乱数据的相关性。在迁移学习中,权重的初始化是加载已经训练好的权重的参数来作为此时的初始化权重。

模型的融合,这个基本上是有利无弊的,基本都能提高1%-2%的性能。

a.从提交结果的文件中进行融合,如果几个模型差异较大的话,最终的模型会得到一个较大的提升。

b.加权表决融合。即会更重视表现好的模型,需要赋予更大的权值。

c.对结果取平均:取平均的做法常常可以减少过拟合的现象。

二、训练集、验证集、测试集的划分与作用

我个人的理解是:

训练集:用来训练模型的,主要是更新权重参数,来使模型在经过每个batch的训练集之后,得到进一步优化,性能更好。

验证集:一般而言验证集是从训练集中提取出来的,具有代表性的数据,来验证训练的模型的好坏。其主要作用,通过验证的记过,进行超参数的更新,比如说使用降低学习速率,增加迭代次数等等,还可以观察是否出现过拟合的现象。

测试集:是最后用来测试模型的好坏的。

总之:训练集、验证集、测试集都是相互独立的,没有交集。验证集一般是从最开始的训练集中划分出来的。

三、关于batch_size的概念

Batch的选择,首先决定的是下降的方向,如果数据集比较小,完全可以采用全数据集的形式。至少有两个好处:1.由全数据集确定的方向能更好的代表样本总体,从而准确的朝向极值所在的方向。2.由于不同的权重的梯度值差别较大,因此选择一个全局的学习速率很困难。

在一定范围内,一般来说Batch_size越大,其确定的下降方向越准,引起的训练震荡越小。此时,可以增加epochs的方法来提高准确率。
————————————————

原文链接:https://blog.csdn.net/weixin_37203756/article/details/80185742

posted @ 2019-10-30 15:43  Suppperfly  阅读(1664)  评论(0编辑  收藏  举报