实践方法论
1 模型偏差
1.1 基本概念
模型偏差(Model Bias),也称为“偏差误差”或“系统误差”,是指模型预测值与真实值之间的差异,这种差异并不是由随机误差引起的,而是由模型本身的结构或假设导致的。模型偏差通常反映了模型对数据的拟合程度不足。
高偏差模型的特征
- 在训练集和验证集上都有较高的误差。
- 模型的预测结果与真实数据相差较大。
- 模型对新数据的泛化能力差。
1.2 常见类型
欠拟合(Underfitting):
- 欠拟合是指模型过于简单,无法捕捉到数据中的复杂关系和模式。
- 特征选择不足:模型没有使用足够的特征或正确的特征来描述数据。
- 模型复杂度不够:模型的结构过于简单,例如线性模型用于非线性问题。
- 训练不充分:模型没有足够的训练数据或训练次数不足。
若模型过于简单,可能无法找到可以降低损失的函数。需重新设计模型,给予模型更大的灵活性,(如增加输入数据的多样性/增加更多特征等等)
增加模型复杂度可以减少偏差,但可能会增加方差(过拟合);减少模型复杂度可以减少方差,但可能会增加偏差(欠拟合)。
2 优化问题
2.1 使用梯度下降算法进行优化的缺陷
可能会卡在局部最小值,无法找到真正使损失很低的参数
3 判断造成训练数据损失不够低的原因
3.1 可能原因
可能是因为模型偏差,也可能是因为优化问题
3.2 判断方法
通过不同的模型来判断现有模型是否足够大
对于从来没做过的问题,可以先跑一些比较小、浅的网络/用一些非深度学习的方法,比如线性模型、支持向量机(Support Vector Machine,SVM),这类比较容易做优化的,比较不会有优化失败问题的模型来测试,看其会是怎样一个损失情况。
3.3 问题解决
如果训练损失大,可以先判断是模型偏差还是优化。如果是模型偏差,就把模型变大。假设经过努力可以让训练数据的损失变小,接下来可以来看测试数据损失;如果测试数据损失也小,比这个较强的基线模型还要小,说明一定程度解决问题了。
但如果训练数据上面的损失小,测试数据上的损失大,可能是过拟合。在测试上的结果不好,不一定是过拟合。要把训练数据损失记下来,先确定优化没有问题,模型够大了。接下来才看看是不是测试的问题,如果是训练损失小,测试损失大,这个有可能是过拟合。
4 过拟合
4.1 基本概念
过拟合是指模型在训练数据上表现得很好,但在新的、未见过的数据上表现不佳。
我们真正可以观察到的是训练集,训练集可以想像成从这条曲线上面,随机采样出来的几个点。模型的能力非常的强,其灵活性很大,只给它这 3 个点。在这 3 个点上面,要让损失低,模型的曲线会通过这 3 个点,但其它没有训练集作为限制的地方,因为它的灵活性很大,模型可以变成各式各样的函数,没有给它数据作为训练,可以产生各式各样的结果。
4.2 解决方法
4.2.1 增加数据集
虽然模型它的灵活性可能很大,但是因为点非常多,它就可以限制住,它看起来的形状还是会很像产生这些数据背后的 2 次曲线,如图 2.7 所示。可以做数据增强(data augmentation),这个方法并不算是使用了额外的数据。
数据增强是根据问题的理解创造出新的数据。
举个例子,在做图像识别的时候,常做的一个招式是,假设训练集里面有某一张图片,把它左右翻转,或者是把它其中一块截出来放大等等。对图片进行左右翻转,数据就变成两倍。但是数据增强不能够随便乱做。在图像识别里面,很少看到有人把图像上下颠倒当作增强。因为这些图片都是合理的图片,左右翻转图片,并不会影响到里面的内容。
但把图像上下颠倒,可能不是一个训练集或真实世界里面会出现的图像。如果给机器根据奇怪的图像学习,它可能就会学到奇怪的东西。
所以数据增强,要根据对数据的特性以及要处理的问题的理解,来选择合适的数据增强的方式。
4.2.2 增加模型限制
1.给模型比较少的参数。如果是深度学习的话,就给它比较少的神经元的数量,本来每层一千个神经元,改成一百个神经元之类的,或者让模型共用参数,可以让一些参数有一样的数值。
全连接网络(fully-connected network):是一个比较有灵活性的架构
卷积神经网络(Convolutional Neural Network,CNN):是一个比较有限制的架构
CNN 是一种比较没有灵活性的模型,其是针对图像的特性来限制模型的灵活性。
对于全连接神经网络,可以找出来的函数所形成的集合是比较大的,CNN 所找出来的函数,它形成的集合比较小,其实包含在全连接网络里面的,但是因为CNN 给了比较大的限制,所以 CNN 在图像上反而可以做得更好。
2.用比较少的特征。比如,本来给 3 天的数据,改成用给两天的数据。
3.早停(early stopping):一种在机器学习训练过程中用来防止过拟合的技术。它的核心思想是在模型训练过程中,当模型在验证集上的性能不再提升时,提前终止训练。这样可以避免模型在训练集上过度学习,从而提高模型在未知数据上的泛化能力。
早停的工作原理通常包括以下几个步骤:
定义性能指标:首先需要确定一个性能指标,比如准确率、损失函数值等,用于评估模型在验证集上的表现。
设置监控间隔:在训练过程中,每隔一定的迭代次数或周期,评估模型在验证集上的性能。
记录最佳模型:在每次评估时,如果当前模型的性能比之前记录的最佳性能要好,就更新最佳模型,并记录当前的迭代次数。
设置容忍度:定义一个容忍度(patience),即在一定次数的迭代后,如果模型性能没有进一步提升,就停止训练。
终止训练:当模型在验证集上的性能在连续多个监控周期内没有提升,并且达到设定的容忍度时,训练过程会被终止。
早停不仅可以防止过拟合,还可以节省训练时间,特别是在训练大型模型或数据集时非常有用。此外,早停还可以与正则化技术(如L1、L2正则化)结合使用,以进一步提高模型的泛化能力。
4.正则化(regularization):通过在模型的损失函数中添加一个额外的项来实现,这个额外的项通常与模型的复杂度相关,目的是惩罚模型的复杂度。
5.丢弃法(dropout method):是一种在训练过程中随机“丢弃”(即暂时移除)网络中一部分神经元(包括它们连接的权重)的技术。这可以防止模型对特定的数据样本过度敏感,从而提高模型的泛化能力。
注:但也不要给太多的限制,模型的限制太大在测试集上不会得到好的结果。这种情况下的结果不好,并不是因为过拟合了,而是因为给模型太大的限制,大到有了模型偏差的问题。
4.2.3 模型复杂程度与损失的关系
比较复杂的模型包含的函数比较多,参数比较多。如图 2.10 所示,随着模型越来越复杂,训练损失可以越来越低,但测试时,当模型越来越复杂的时候,刚开始,测试损失会显著下降,但是当复杂的程度,超过某一个程度以后,测试损失就会突然暴增了。这就是因为当模型越来越复杂的时候,复杂到某一个程度,过拟合的情况就会出现,所以在训练损失上面可以得到比较好的结果。在测试损失上面,会得到比较大的损失,可以选一个中庸的模型,不是太复杂的,也不是太简单的,刚刚好可以在训练集上损失最低,测试损失最低。
5 交叉验证
比较合理选择模型的方法是把训练的数据分成两半,一部分称为训练集(training set),一部分是验证集(validation set)。比如 90% 的数据作为训练集,有 10% 的数据作为验证集。在训练集上训练出来的模型会使用验证集来衡量它们的分数,根据验证集上面的分数去挑选结果,再把这个结果上传到 Kaggle 上面得到的公开分数。在挑分数的时候,是用验证集来挑模型,所以公开测试集分数就可以反映私人测试集的分数。但假设这个循环做太多次,根据公开测试集上的结果调整模型太多次,就又有可能在公开测试集上面过拟合,在私人测试集上面得到差的结果。
k 折交叉验证是先把训练集切成 k 等份。在这个例子,训练集被切成 3 等份,切完以后,拿其中一份当作验证集,另外两份当训练集,这件事情要重复 3 次。即第一份第 2 份当训练,第 3 份当验证;第一份第 3 份当训练,第 2 份当验证;第一份当验证,第 2 份第 3 份当训练。
6 不匹配
6.1 基本概念
"不匹配问题"(Mismatch Problem)通常指的是模型训练和测试阶段的数据分布不一致的情况。这种不一致性可能导致模型在实际应用中的表现不佳,即使它在训练数据上表现得很好。
6.2 基本类型
①数据分布不匹配:
- 训练集和测试集分布不一致:如果训练数据和测试数据来自不同的分布,模型可能无法很好地泛化到新的数据上。
- 时间不匹配:随着时间的推移,数据分布可能会发生变化(例如,季节性变化或长期趋势),导致模型过时。
②特征不匹配:
- 特征空间不一致:如果训练数据和测试数据使用的特征集不同,模型可能无法正确地识别和预测测试数据。
- 特征缩放不一致:如果训练和测试数据的特征没有以相同的方式进行缩放或标准化,模型的性能可能会受到影响。
③标签不匹配:如果训练数据中的标签错误或与测试数据的标签定义不一致,模型的预测准确性会受到影响。
④概念不匹配:在现实世界中,数据的底层概念可能会随时间变化,导致模型无法适应新的概念。
⑤采样不匹配:如果训练数据和测试数据的采样方法不同,可能会导致模型在某些类别或特征上表现不佳。
⑥数据质量不匹配:如果训练数据和测试数据的噪声水平不同,模型可能无法正确地学习数据中的模式。
对于不匹配问题,单纯增加数据也不能让模型做得更好,而匹不匹配依靠对数据本身的理解。
- 数据增强:通过生成新的数据点或变换现有数据来增加数据的多样性。
- 数据清洗:确保训练和测试数据的质量一致。
- 特征工程:确保训练和测试数据使用相同的特征集和特征处理方法。
- 域适应:在迁移学习中,使用特定的技术来减少源域和目标域之间的差异。
- 重新采样:通过过采样或欠采样来平衡类别分布,减少采样偏差。
- 集成学习:使用多个模型的集成来提高模型对不同数据分布的适应性。
参考资料
Datawhale (linklearner.com)