当前位置: 首页 > article >正文

Datawhale X 李宏毅苹果书 AI夏令营 Task3打卡

实践方法论

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):一种在机器学习训练过程中用来防止过拟合的技术。它的核心思想是在模型训练过程中,当模型在验证集上的性能不再提升时,提前终止训练。这样可以避免模型在训练集上过度学习,从而提高模型在未知数据上的泛化能力。

早停的工作原理通常包括以下几个步骤:

  1. 定义性能指标:首先需要确定一个性能指标,比如准确率、损失函数值等,用于评估模型在验证集上的表现。

  2. 设置监控间隔:在训练过程中,每隔一定的迭代次数或周期,评估模型在验证集上的性能。

  3. 记录最佳模型:在每次评估时,如果当前模型的性能比之前记录的最佳性能要好,就更新最佳模型,并记录当前的迭代次数。

  4. 设置容忍度:定义一个容忍度(patience),即在一定次数的迭代后,如果模型性能没有进一步提升,就停止训练。

  5. 终止训练:当模型在验证集上的性能在连续多个监控周期内没有提升,并且达到设定的容忍度时,训练过程会被终止。

早停不仅可以防止过拟合,还可以节省训练时间,特别是在训练大型模型或数据集时非常有用。此外,早停还可以与正则化技术(如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)


http://www.kler.cn/a/287612.html

相关文章:

  • 使用 Python 和 Py2Neo 构建 Neo4j 管理脚本
  • JsonCpp
  • Docker:查看镜像里的文件
  • uniapp微信小程序接入airkiss插件进行WIFI配网
  • 【MySQL】MySQL的笛卡尔积现象是什么?简单说说
  • 活着就好20241118
  • 后端开发刷题 | 面试篇3
  • DASK==延迟对象delayed
  • QT QGraphicsView实现预览图片显示缩略图功能
  • Protocol Buffers
  • java打包jar后读取依赖jar包中的文件资源,支持读取jlink打包的模块镜像中读取
  • axure9树形元件节点的添加
  • SQL-多表查询
  • 深入理解Java集合:如何使用for增强循环和泛型类型转换
  • 笔记整理—uboot番外(1)命令体系
  • 大佬借助ChatGPT写论文发刊到手软,四个步骤20个顶级学术提示词指令
  • MyBatis-SQL-语句执行流程
  • UE5 UMG UI编辑器工作流
  • mybatis if标签判断字符串是否相等
  • 面试基本内容
  • 【GD32】RT-Thread实时操作系统移植(GD32F470ZGT6)
  • 中介者模式详解
  • Pytorch实现多层LSTM模型,并增加emdedding、Dropout、权重共享等优化
  • Python 爬虫爬取京东商品信息
  • 会赢的!(牛客)
  • 买电脑如何选择显卡?