针对模型训练的相关问题进行分析:
当模型训练数据的损失值较大时,是因为模型训练本身的问题,那究竟是因为模型偏差,还是优化问题呢?
首先,我们需要考虑一个问题,就是模型的设计问题,模型设计过于简单,却用来处理复杂问题,导致模型的效果不佳,则这是模型的偏差导致的;如果模型设计较为复杂,但是模型的测试集结果不如简单模型的效果,我们需要对两个模型的训练集加以分析,如果复杂模型的训练集效果比简单模型的训练集效果差,那原因只有一个,就是复杂模型的优化做的不好。理由如下:如果复杂模型的前面神经网络层设置与普通模型一致,其后面层仅仅只是映射,那么效果至少与简单模型一致,甚至更好,不会出现训练集效果不好的情况。
当模型训练数据集的损失值较小时,需要考虑什么?
这种情况,我们需要先看测试集损失值,如果测试集损失值很小,那么我们的模型训练很成功,如果测试集训练的结果不好,其损失值比较大,我们需要考虑是过拟合 或者 测试集与训练集不匹配的问题。不匹配很容易看出来,训练集和测试集的数据类型是否一致,即可以判断;过拟合是因为欸模型的灵活性太大导致的,可以增加限制或者增加训练集。
过拟合如何解决?
1.给模型比较少的参数
2.提供较少的特征
3.早停
4.正则化
5.丢弃法
6.增加训练集(数据增强)
为什么用交叉验证?
在训练集上训练出来的模型会使用验证集来衡量它们的分数,根据验证集上面的分数去 挑选结果,再把这个结果上传到 Kaggle 上面得到的公开分数。在挑分数的时候,是用验证集 来挑模型,所以公开测试集分数就可以反映私人测试集的分数。但假设这个循环做太多次,根 据公开测试集上的结果调整模型太多次,就又有可能在公开测试集上面过拟合,在私人测试 集上面得到差的结果。
k 折交叉验证就是先把训练集切成 k 等份。在这个例子, 训练集被切成 3 等份,切完以后,拿其中一份当作验证集,另外两份当训练集,这件事情要 重复 3 次。即第一份第 2 份当训练,第 3 份当验证;第一份第 3 份当训练,第 2 份当验证; 第一份当验证,第 2 份第 3 份当训练。
什么是不匹配?
不匹配是 指训练集跟测试集的分布不同。假设数据在分训练集跟测 试集的时候,使用 2020 年的数据作为训练集,使用 2021 年的数据作为测试集,不匹配的问 题可能就很严重。图 2.14 是图像分类中的不匹配问题。