Datawhale X 李宏毅苹果书 AI夏令营 task3 实践方法论

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

如果训练数据的损失很大,显然它在训练集上面也没有训练好,以下是一些训练集上面没有学好的原因:

一:模型偏差

模型偏差可能会影响模型训练,简单来说,就是设计的模型过于简单,就算是其中的最优解导致的损失也会过大 

这个时候我们就需要重新设计一个具有更大灵活性的模型,如

可以增加输入的特征,也可以用深度学习,但是并不是训练的时候,损失大就代表一定是模型偏差,可能会遇到另外一个问题:优化做得不好

二:优化问题

一般只会用到梯度下降进行优化,但这种优化的方法很多的问题,比如可能会卡在局部最小值的地方,无法找到一个真的可以让损失很低的参数

那训练数据的损失不够低的时候,到底是模型偏差,还是优化的问题呢,有个比较建议的办法:通过比较不同的模型来判断模型现在到底够不够大

当我们看到一个从来没有做过的问题,可以先跑一些比较小的、比较浅的网络,或甚至用一些非深度学习的方法,比如线性模型、支持向量机(Support Vector Machine,SVM),SVM 可能是比较容易做优化的,它们比较不会有优化失败的问题

也就是这些模型它会竭尽全力的,在它们的能力范围之内,找出一组最好的参数,它们比较不会有失败的问题。因此可以先训练一些比较浅的模型,或者是一些比较简单的模型,先知道这些简单的模型,到底可以得到什么样的损失

最后就是需要一个灵活性更大的深的模型,如果损失没有办法比浅的模型压得更低代表说优化有问题,梯度下降不给力,因此要有一些其它的方法来更好地进行优化。

但如果训练数据上面的损失小,测试数据上的损失大,可能是真的过拟合

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

三:过拟合 

举例来说,假设输入的特征为 x,输出为 y,x 和 y 都是一维的,x 和 y之间的关系是 2 次的曲线,曲线用虚线来表示

因为通常没有办法,直接观察到这条曲线,我们真正可以观察到的是训练集,训练集可以想像成从这条曲线上面,随机采样出来的几个点

模型的能力非常的强,其灵活性很大,只给它这 3 个点,在这 3 个点上面,要让损失低,所以模型的这个曲线会通过这 3 个点,但是其它没有训练集做为限制的地方,因为它的灵活性很大

模型它的自由度很大的话,它就可以产生非常奇怪的曲线,导致训练集上的结果好,但是测试集上的损失很大

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

第一个方向是往往是最有效的方向,即增加训练集。可以做数据增强(data augmentation,),这个方法并不算是使用了额外的数据

数据增强就是根据问题的理解创造出新的数据,数据增强,要根据对数据的特性以及要处理的问题的理解,来选择合适的数据增强的方式 

另外一个解法是给模型一些限制,让模型不要有过大的灵活性

给模型比较少的参数,如果是深度学习的话,就给它比较少的神经元的数量,本来每层一千个神经元,改成一百个神经元之类的,或者让模型共用参数,可以让一些参数有一样的数值

全连接网络(fully-connected network)其实是一个比较有灵活性的架构,而卷积神经网络(Convolutional Neural Network,CNN)是一个比较有限制的架构

还有就是可以用比较少的特征

更多别的方法,比如早停(early stopping)、正则化(regularization)和丢弃法(dropoutmethod)。

 

但也不要给太多的限制,因为给模型太大的限制,会有大到有了模型偏差的问题 

 

四:交叉验证

比较合理选择模型的方法是把训练的数据分成两半,一部分称为训练集(training set),一部分是验证集(validation set)

 

好的做法,就是用验证损失,最小的直接挑就好了,不要管公开测试集的结果

实现上,不太可能这么做,因为公开数据集的结果对模型的选择,可能还是会有些影响的

理想上就用验证集挑就好,有过比较好的基线(baseline)算法以后,就不要再去动它了,就可以避免在测试集上面过拟合。但是这边会有一个问题,如果随机分验证集,可能会分得不好,分到很奇怪的验证集,会导致结果很差,如果有这个担心的话,可以用 k 折交叉验证(k-foldcross validation) 

 

五:不匹配 

如图,模型预测觉得二月二十六是一个低点,但实际上却是一个峰值,这是由于这一天实际上出现的反常,像这种错误的形式称为不匹配 

 

不匹配不同于过拟合,它是指训练集和测试集的分布不同,训练集再增加其实也没有帮助 

增加数据也不能让模型做得更好,所以这种问题要怎么解决,匹不匹配要看对数据本身的理解了,我们可能要对训练集跟测试集的产生方式有一些理解,才能判断它是不是遇到了不匹配的情况

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值