DatawhaleX李宏毅苹果书 AI夏令营—深度学习入门(Task3)

这次笔记是对实践方法论学习的总结

在应用机器学习算法时,实践方法论能够帮助我们更好地训练模型。

之前没有接触过Kaggle,所以关于Kaggle的地方就没有过多解释,看网友评论“可以直接在网上搜一个文章或者视频,也可以看看🎑从零入门CV图像竞赛(Deepfake攻防) 里面关于Kaggle的简单介绍”

相比较上一章节来说少了一些公式推理,多了许多理解概念,学的时候在脑中过了一下大概的情况,学的就简单些了

目录

续接上级机器学习框架

​编辑 

第 2 章 实践方法论

2.1模型偏差

2.2 优化问题

2.3 过拟合

2.4 交叉验证

2.5 不匹配 


续接上级机器学习框架

        在应用机器学习算法时,实践方法论能够帮助我们更好地训练模型。如果在 Kaggle 上的结果不太好,虽然 Kaggle 上呈现的是测试数据的结果,但要先检查训练数据的损失。看看模型在训练数据上面,有没有学起来,再去看测试的结果,如果训练数据的损失很大,显然它在训练集上面也没有训练好。接下来再分析一下在训练集上面没有学好的原因。 

第 2 章 实践方法论

接下来分析一下在训练集上面没有学好的原因

2.1模型偏差

模型偏差可能会影响模型训练,举个例子

一个有未知参数的函数代θ1 得到一个函数 fθfθ1(x),同理可得到另一个函数 fθfθ2(x),把所有的函数集合起来得到一个函数的集合。

        但是该函数的集合太小了,如上图,可以找到较小损失的函数,但损失还是不够低。

        这个时候重新设计一个模型,给模型更大的灵活性。像上一章笔记说的增加前n天的加权人数和来增加模型的复杂性,从还使函数变得更加灵活。所以如果模型的灵活性不够大,可以增加更多特征,可以设一个更大的模型,可以用深度学习来增加模型的灵活性,这是第一个可以的解法。但是并不是训练的时候,损失大就代表一定是模型偏差,可能会遇到另外一个问题:优化做得不好

2.2 优化问题

        用梯度下降进行优化,这种优化的方法很多的问题。但是可能会陷入局部最优的情况,可能得不到全局最优。

        蓝色部分是模型可以表示的函数所形成的集合,但是想得到最小损失无异于大海捞针,而且还可能得不到最小值,如下图:

        找不到一个损失低的函数,到底是因为模型的灵活性不够,海里面没有针。还是模型的灵活性已经够了,只是优化梯度下降不给力,它没办法把针捞出来 到底是哪一个。到底模型已经够大了,还是它不够大,怎么判断这件事呢? 

        一个建议判断的方法,通过比较不同的模型来判断模型现在到底够不够大。举个例子,这一个实验是从残差网络的论文“Deep Residual Learning for Image Recognition”[1] 里面节录出来的。这篇论文在测试集上测试两个网络,一个网络有 20 层,一个网络有 56 层。图 2.4(a)横轴指的是训练的过程,就是参数更新的过程,随着参数的更新,损失会越来越低,但是结果20 层的损失比较低,56 层的损失还比较高。残差网络是比较早期的论文,2015 年的论文。很多人看到这张图认为这个代表过拟合,深度学习不奏效,56 层太深了不奏效,根本就不需要这么深。但这个不是过拟合,并不是所有的结果不好,都叫做过拟合。在训练集上,20 层的网络损失其实是比较低的,56 层的网络损失是比较高的,如图 2.4(b) 所示,这代表 56 层的网络的优化没有做好,它的优化不给力。

        这边给大家的建议是看到一个从来没有做过的问题,可以先跑一些比较小的、比较浅的网络,或甚至用一些非深度学习的方法,比如线性模型、支持向量机(Support Vector Machine,SVM)可以先训练一些比较浅的模型,或者是一些比较简单的模型,先知道这些简单的模型,到底可以得到什么样的损失。

        接下来还缺一个深的模型,如果深的模型跟浅的模型比起来,深的模型明明灵活性比较大,但损失却没有办法比浅的模型压得更低代表说优化有问题,梯度下降不给力,因此要有一些其它的方法来更好地进行优化。

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

2.3 过拟合

        过拟合是指一个机器学习模型在训练数据上表现得很好,但在测试数据上表现不佳的现象。过拟合可能是因为模型过于复杂或者数据量太小。如果一个模型过于复杂,它可能会在训练数据中学习到噪声,而这些噪声可能并不普遍存在于测试数据中,这样就会导致过拟合。

        比如,假设输入的特征为 x,输出为 y,x 和 y 都是一维的。x 和 y之间的关系是 2 次的曲线,曲线用虚线来表示,因为通常没有办法,直接观察到这条曲线。我们真正可以观察到的是训练集,训练集可以想像成从这条曲线上面,随机采样出来的几个点。当模型灵活性过高时可能会让模型变成各种各样的公式,如下图

        用蓝色的点,找出一个函数以后,测试在橘色的点上,不一定会好。如果模型它的自由度很大的话,它可以产生非常奇怪的曲线,导致训练集上的结果好,但是测试集上的损失很大。

解决过拟合的问题,有两个可能的方向:

        第一个方向是往往是最有效的方向,即增加训练集。虽然模型它的灵活性可能很大,但是因为点非常多,它就可以限制住,它看起来的形状还是会很像,产生这些数据背后的 2 次曲线,如图所示。可以做数据增强(data augmentation,),这个方法并不算是使用了额外的数据。

        数据增强就是根据问题的理解创造出新的数据,如果给机器根据奇怪的图像学习,它可能就会学到奇怪的东西。所以数据增强,要根据对数据的特性以及要处理的问题的理解,来选择合适的数据增强的方式。 

        另外一个解法是给模型一些限制,让模型不要有过大的灵活性。解决过拟合的问题,要给模型一些限制,最好模型正好跟背后产生数据的过程,过程是一样的就有机会得到好的结果。给模型制造限制可以有如下方法:

  • 给模型比较少的参数。如果是深度学习的话,就给它比较少的神经元的数量,本来每层一千个神经元,改成一百个神经元之类的,或者让模型共用参数,可以让一些参数有一样的数值。
  • 用比较少的特征,本来给 3 天的数据,改成用给两天的数据,其实结果就好了一些。
  • 还有别的方法,比如早停(early stopping)、正则化(regularization)和丢弃法(dropoutmethod)。

                但也不要给太多的限制。假设模型是线性的模型,要求要经过下面三个点

        这个时候模型的限制就太大了,在测试集上就不会得到好的结果。这种情况下的结果不好,并不是因为过拟合了,而是因为给模型太大的限制,大到有了模型偏差的问题。

        比较复杂的模型包含的函数比较多,参数比较多。如图 2.10 所示,随着模型越来越复杂,训练损失可以越来越低,但测试时,当模型越来越复杂的时候,刚开始,测试损失会跟著下降,但是当复杂的程度,超过某一个程度以后,测试损失就会突然暴增了。这就是因为当模型越来越复杂的时候,复杂到某一个程度,过拟合的情况就会出现,所以在训练损失上面可以得到比较好的结果。在测试损失上面,会得到比较大的损失,可以选一个中庸的模型,不是太复杂的,也不是太简单的,刚刚好可以在训练集上损失最低,测试损失最低。

2.4 交叉验证

        比较合理选择模型的方法是把训练的数据分成两半,一部分称为训练集(training set),一部分是验证集(validation set)。比如 90% 的数据作为训练集,有 10% 的数据作为验证集。在训练集上训练出来的模型会使用验证集来衡量它们的分数,根据验证集上面的分数去挑选结果,再把这个结果上传到 Kaggle 上面得到的公开分数。

        接下来有 3 个模型,不知道哪一个是好的。把这 3 个模型,在这 3 个设置下,在这 3 个训练跟验证的数据集上面,通通跑过一次,把这 3 个模型,在这 3 种情况的结果都平均起来,把每一个模型在这 3 种情况的结果,都平均起来,再看看谁的结果最好假设现在模型 1 的结 果最好,3 折交叉验证得出来的结果是,模型 1 最好。再把模型 1 用在全部的训练集上,训 练出来的模型再用在测试集上面。接下来也许我们要问的一个问题是,讲到预测 2 月 26 日, 也就是上周五的观看人数的结果如图 2.12 所示。所以把 3 层的网络,拿来测试一下是测试的结果。

2.5 不匹配 

        图 2.13 中横轴就是从 2021 年的 1 月 1 号开始一直往下,红色的线是真实的数字,蓝色 的线是预测的结果。2 月 26 日是 2021 年观看人数最高的一天了,机器的预测差距非常的大, 差距有 2580,所以这一天是 2021 年观看人数最多的一天。跑了一层 2 层跟四层的看看,所有 的模型的结果都不好,两层跟 3 层的错误率都是 2 千多,其实四层跟一层比较好,都是 1800 左右,但是这四个模型不约而同的,觉得 2 月 26 日应该是个低点,但实际上 2 月 26 日是一 个峰值,模型其实会觉得它是一个低点,也不能怪它,因为根据过去的数据,周五晚上大家都 出去玩了。但是 2 月 26 日出现了反常的情况。这种情况应该算是另外一种错误的形式,这种 错误的形式称为不匹配(mismatch)。

        不匹配跟过拟合其实不同,一般的过拟合可以用搜集更多的数据来克服,但是不匹配是 指训练集跟测试集的分布不同,训练集再增加其实也没有帮助了。假设数据在分训练集跟测 试集的时候,使用 2020 年的数据作为训练集,使用 2021 年的数据作为测试集,不匹配的问 题可能就很严重。如果今天用 2020 年当训练集,2021 年当测试集,根本预测不准。因为 2020年的数据跟 2021 年的数据背后的分布不同。图 2.14 是图像分类中的不匹配问题。增加数据 也不能让模型做得更好,所以这种问题要怎么解决,匹不匹配要看对数据本身的理解了,我们 可能要对训练集跟测试集的产生方式有一些理解,才能判断它是不是遇到了不匹配的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值