首页 > 其他分享 >机器学习详解-第二章-实践方法论-学习笔记-[DataWhale X 李宏毅苹果书 X AI夏令营]

机器学习详解-第二章-实践方法论-学习笔记-[DataWhale X 李宏毅苹果书 X AI夏令营]

时间:2024-08-25 13:24:11浏览次数:11  
标签:20 训练 AI 李宏毅 模型 损失 DataWhale 测试 拟合

在调整模型的过程中可能会遇到许多问题,这里为了处理这些问题(前期初学情况),从而给出了一个章节用于学习相关的技巧。

1.模型偏差

模型偏差可能会影响模型训练,我们在训练的时候,将所有的函数集合在一起得到一个函数的集合,但是这个函数的集合大小是我们不确定的,可能会因为太小,其中的所有函数都没有包含到一个能让损失变低的函数,这种情况下虽然可能找到一个θ*,可能这个函数确实是集合区域中最好的一个,但是损失还是不够低,因为集合区域找不到拥有较小损失的函数。

解决这个问题,我们就需要重新设计一个模型,给该模型更大的灵活性。

2.2优化问题

相比起上个模型问题,优化问题的情况下一般模型的灵活度是没有问题的,足够找到较小的损失函数了,但是优化方向不一定是朝着那个真正的最小的θ*,可能在其他地方就停止了。

距离,使用梯度下降的方法找,就有可能会卡在局部最小值,而无法找到一个真的让损失很低的函数。

一个可以用来判断到底是模型灵活度的问题还是优化问题的方法:这一个实验是从残差网络的论文“Deep Residual Learning for Image Recognition”里面节录出来的。这篇论文在测试集上测试两个网络,一个网络有20层,一个网络有56 层。

随着参数的更新,损失会越来越低,但是结果20层的损失比较低,56层的损失还比较高。看测试误差我们并不能得出结果到底如何,还需要看训练误差如何:

训练误差中我们会发现20层的 网络损失其实是比较低的,56层的网络损失是比较高的,因此我们能推断出56层的优化不够给力。

因为20层的损失都已经可以做到这样了,56层的灵活性一定比20层更大,它只要前20层的参数,跟这个20层的网络一样,剩下的36层应该只能更加优化,56层就应该比20层得到更低的损失才对。结果训练集上56层居然比20层的损失更高,肯定是优化的问题。

这里给出一种方法,可以先跑一些比较小的、比较浅的网络,或甚至用一些非深度学习的方法,比如线性模型、支持向量机SVM,这些模型因为相对来说比较简单,所以一般不会因为优化出现问题。

随后我们训练一个比较深的模型,如果相对于刚刚比较浅的模型来说,深度模型的灵活度更高,但是损失却比浅的模型高,就说明优化有问题。

比如:

这里是训练损失,从1层道4层损失一直在变小,结果到了5层损失就变大了,按照常理来说层数越高,损失就应该可以变的更低才对,显然这里就应该是优化的问题。

如果这是测试数据的损失,如果测试数据损失也小,比这个较强的基线模型还要小,就结束了。但如果训练数据上面的损失小,测试数据上的损失大,可能是真的过拟合。在测试上的结果不好,不一定是过拟合。要把训练数据损失记下来,先确定优化没有问题,模型够大了。接下来才看看是不是测试的问题,如果是训练损失小,测试损失大,这个有可能是过拟合。

2.3过拟合

过拟合是指训练误差和测试误差之间的差距太大。换句换说,就是模型复杂度高于实际问题,模型在训练集上表现很好,但在测试集上却表现很差,泛化能力差。

如下:

得到的函数可能确实在训练数据中表现得很好,但是一旦到了测试数据就会出现各种各样的错误,跟我们想象的虚线(真实数据)有着很大的出入,函数的弹性太大了。

解决过拟合的方法主要有两种,第一种:增加训练集

虽然模型它的灵活性可能很大,但是因为点非常多,它就可以限制住,它看起来的形状还是会很像,产生这些数据背后的二次曲线。

可以将这种方法扩展到数据增强,就是根据问题的理解创造出新的数据。举个例子,在做图像识别的时候,常做的一个招式是,假设训练集里面有某一张图片,把它左右翻转,或者是把它其中一块截出来放大等等。对图片进行左右翻转,数据就变成两倍。但是数据增强不能够随便乱做。在图像识别里面,很少看到有人把图像上下颠倒当作增强。因为这些图片都是合理的图片,左右翻转图片,并不会影响到里面的内容。但把图像上下颠倒,可能不是一个训练集或真实世界里面会出现的图像。如果给机器根据奇怪的图像学习,它可能就会学到奇怪的东西。所以数据增强,要根据对数据的特性以及要处理的问题的理解,来选择合适的数据增强的方式。

第二种方法是:限制模型,给模型一些限制,帮模型有过大的灵活性。

我们可以直接限制模型是什么样子的函数,也可以给模型比较少的参数,或者用比较少的特征,又或者是早停,正则化,丢弃法等。

但也不要给太多的限制。假设模型是线性的模型,要通过上面的三个点,显然不可能,这个时候限制太多了,不可能能找到好的结果。


这边产生了一个矛盾的情况,模型的复杂程度,或这样让模型的灵活性越来越大。但复杂的程度和灵活性都没有给明确的定义。比较复杂的模型包含的函数比较多,参数比较多。随着模型越来越复杂,训练损失可以越来越低,但测试时,当模型越来越复杂的时候,刚开始,测试损失会跟著下降,但是当复杂的程度,超过某一个程度以后,测试损失就会突然暴增了。这就是因为当模型越来越复杂的时候,复杂到某一个程度,过拟合的情况就会出现,所以在训练损失上面可以得到比较好的结果。在测试损失上面,会得到比较大的损失,可以选一个中庸的模型,不是太复杂的,也不是太简单的,刚刚好可以在训练集上损失最低,测试损失最低。

2.4交叉验证

考虑到我们在做深度学习的时候用训练集得到出来的模型可能在验证集上无法得到好的结果,我们可以考虑将训练集拆分开来,将其中的一部分作为验证集。

但是随机分验证集也会容易分的不好,这里我们使用一种方法:k折交叉验证,k折交叉验证就是先把训练集切成k等份。举一个例子,训练集被切成3等份,切完以后,拿其中一份当作验证集,另外两份当训练集,这件事情要重复 3 次。即第1份第2份当训练,第3份当验证;第1份第3份当训练,第2份当验证;第1份当验证,第2份第3份当训练。

随后我们会得到三个模型,将这三个训练的模型在验证的数据集上跑一变,将这三种情况的结果都平均起来,比如这里模型1的情况最好,就将模型1用在全部的训练集桑,训练出来的模型再用在测试集上面。

2.5不匹配

这里我们用一个已经跑过的结果来说明:

这里2.26日出现了反常的情况,觉得这一天应该是一个低点,因为根据过去的数据周五是都是低点,这里出现的反常不能怪AI,这种错误就被称作为不匹配。

不匹配跟过拟合其实不同,一般的过拟合可以用搜集更多的数据来克服,但是不匹配是指训练集跟测试集的分布不同,训练集再增加其实也没有帮助了。假设数据在分训练集跟测试集的时候,使用2020年的数据作为训练集,使用2021年的数据作为测试集,不匹配的问题可能就很严重

标签:20,训练,AI,李宏毅,模型,损失,DataWhale,测试,拟合
From: https://blog.csdn.net/MEIKONG1314/article/details/141528280

相关文章

  • 从多维度视角探讨“开源AI智能名片O2O商城小程序”的设计与管理
    摘要:在数字化转型的浪潮中,产品设计与管理已成为企业竞争力的核心要素。本文旨在从产品设计、产品管理及产品文化三个维度,深入探讨“开源AI智能名片O2O商城小程序”的设计理念与实践策略。通过强调设计即沟通的原则,本文分析了直接控制产品细节的人员如何与用户建立有效沟通渠道,......
  • 私域流量的落脚点与开源 AI 智能名片 2+1 链动商城小程序
    摘要:本文探讨了私域流量的重要性及其落脚点,分析了快钱收割思维在私域流量运作中的弊端。同时,引入开源AI智能名片2+1链动商城小程序,阐述其在成就人格化IP和打造品牌域、通过直播电商规模化变现方面的作用,为企业私域流量的有效运营提供参考。一、引言在当今数字化时代,私......
  • 基于开源 AI 智能名片链动 2+1 模式微信拓客小程序的会员推荐酬谢策略
    摘要:本文旨在探讨在当前数字化营销环境下,如何利用开源AI智能名片链动2+1模式微信拓客小程序,有效地酬谢老会员的推荐行为,以实现门店的业务增长和客户拓展。通过分析老会员推荐的重要性,结合积分酬谢方式以及与“三级分销”概念的区别,提出了一套切实可行的酬谢策略,为门店的经......
  • 使用HF Trainer微调小模型
    本文记录HugginngFace的Trainer各种常见用法。SFTTrainer的一个最简单例子HuggingFace的各种Trainer能大幅简化我们预训练和微调的工作量。能简化到什么程度?就拿我们个人用户最常会遇到的用监督学习微调语言模型任务为例,只需要定义一个SFTrainer,给定我们想要训练的模型和数据......
  • 【论文阅读】TBA Faster Large Language Model Training Using SSD Based Activation
    摘要GPU内存容量的增长速度跟不上大型语言模型(llm)的增长速度,阻碍了模型的训练过程。特别是,激活——在前向传播过程中产生的中间张量,并在后向传播中重用——主导着GPU内存的使用。为了应对这一挑战,我们建议TBA将激活有效地卸载到高容量NVMessd上。这种方法通过自适应地将数据传......
  • 上升 AI辅助编码:主流IDE中的智能代码补全和生成功能对比
    在软件开发领域,AI辅助编码已经成为提升开发效率和代码质量的重要手段。特别是在集成开发环境(IDE)中,智能代码补全和生成功能通过利用先进的算法和深度学习技术,为开发者提供了前所未有的编码体验。以下是对主流IDE中智能代码补全和生成功能的详细对比,旨在探讨这些功能如何助力......
  • 透明性和解释性AI:概念与应用
            随着人工智能(AI)技术的迅猛发展,AI系统在日常生活、工业生产、医疗健康等领域的应用日益广泛。然而,随着AI系统的复杂性和影响力不断增加,透明性(Transparency)和解释性(Explainability)成为了AI研究和应用中的两个重要问题。本文将详细探讨透明性和解释性AI的概念、其......
  • 250+ AI新创意!百度黑客马拉松大赛“专攻”智能体
    250+AI新创意!百度黑客马拉松大赛“专攻”智能体博主默语带您GotoNewWorld.✍个人主页——默语的博客......
  • 基于Android的安全知识学习APP的设计与实现(论文+源码)_kaic
    基于Android的安全知识学习APP的设计与实现摘  要随着科技的进步,智能手机已经成为人们工作、学习和生活的必需品。基于Android系统的强大功能,使用Java语言、Linux操作系统,搭配AndroidStudio,并配备Android开发插件,最终实现了一款安全知识学习APP的开发,以便让用户能够轻松......
  • 基于Java的C语言课程教学实践小程序的设计与实现(论文+源码)_kaic
    基于Java的C语言课程教学实践小程序的设计与实现摘 要在当前信息技术迅猛发展的大背景下,为了学生更好地利用信息技术学习C语言,急需开发一款C语言课程教学实践小程序。‎这个小程序可以让学生不再局限于课堂学习‎的教学模式,而是能够随时随地,不受时间、地点限制去学习‎。平......