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

机器学习&实践攻略

实践方法论

2.1  模型偏差

影响:模型偏差可能会影响模型训练。

例子:假设模型过于简单,一个有未知参数的函数代 θ1 得到一个函数 fθ1(x),同理可得到另一个函数 fθ2(x),把所有的函数集合起来得到一个函数的集合。但是该函数的集合太小了没有包含任何一个函数,可以让损失变低的函数不在模型可以描述的范围内。

所以就算找出来了一个θ*,虽然是蓝色函数里面最好的一个但是损失(loss)还是不够低,不好。

解决方法:1)重新设计一个模型,给模型更大的灵活性。

                  2)也可以用深度学习,加更多的灵活性。所以如果模型的灵活性不够大,可以增加更多特征。

(以之前的56为例)

但可能会遇到另外一个问题:优化做得不好。

2.2  优化问题

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

PS. 这里的问题是梯度下降这一个算法无法找出损失低的函数,梯度下降是解一个优化的问题,找到 θ * 就结束了。但 θ *的损失不够低

提问:到底是因为模型的灵活性不够,还是模型的灵活性已经够了,只是优化梯度下降不给力,模型已 经够大了,还是它不够大,如何去判断?

方法:通过比较不同的模型来判断模型现在到底够不够大

例如:残差网络的论文“Deep Residual Learning for Image Recognition

测试两个网络,一个网络有 20 层,一个网络有 56 层,以下为两种模型测试情况

第一个图的横轴指的是训练的过程,就是参数更新的过程,随着参数的更新,损失会越来越低,但是结果 20 层的损失比较低,56 层的损失比较高。

结论:代表 56 层的网络的优化没有做好。

(这里引用一下书里面的问题,我觉得说的不错)

2.3  过拟合

极端例子:

假设根据这些训练集,某一个很废的机器学习的方法找出了一个一无是处的函数。这个一无是处的函数,只要输入 x 有出现在训练集里面,就把它对应的 y 当做输出。如果 x 没有出现在训练集里面,就输出一个随机的值。

函数什么也没有做,但它在训练数据上的损失是0。把训练数据通通丢进这个函数里面,它的输出跟训练集的标签是一模一样的,所以在训练数据上面,这个函数的损失是0,可是在测试数据上面,它的损失会变得很大,因为它其实什么都没有预测,这是一个比较极端的例子,在一般的情况下,也有可能发生类似的事情。

解决方式:1)增加训练集。如果训练集,蓝色的点变多了,虽然模型它的灵活性可能很大,但是因为点非常多,它就可以限制住。

                  2)给模型一些限制,让模型不要有过大的灵活性。但也不能给太多的限制。

(这里再次引用一下书里面的问题,是我没有想到的方向)

2.4  交叉验证

提问:我们该比较合理选择模型???

方法:训练的数据分成两半,一部分称为训练集(training set,一部分是验证集(validation set)。

例子:90% 的数据作为训练集,有 10% 的数据作为验证集。在训练集上训练出来的模型会使用验证集来衡量它们的分数,根据验证集上面的分数去挑选结果,再把这个结果上传到 Kaggle 上面得到的公开分数。

在挑分数的时候,是用验证集来挑模型,所以公开测试集分数就可以反映私人测试集的分数。但假设这个循环做太多次,据公开测试集上的结果调整模型太多次,就又有可能在公开测试集上面过拟合,在私人测试集上面得到差的结果。

最好做法:用验证损失,最小的直接挑就好了,不要管公开测试集的结果。(但不太现实,因为公开数据集的结果对模型的选择,可能还是会有些影响的)

结论:理想上就用验证集挑就好,有过比较好的基线(baseline算法以后,就不要再去动它了,就可以避免在测试集上面过拟合。

但可能会出现新的问题,如果随机分验证集,可能会分得不好,分到很奇怪的验证集,会导致结果很差,我们又该怎么办?

方法:k 折交叉验证(k-fold cross validation

例子:训练集切成 k 等份,这里是3个。拿其中一份当作验证集,另外两份当训练集,这件事情要  重复 3 次。即第一份第 2 份当训练,第 3 份当验证;第一份第 3 份当训练,第 2 份当验证;第一份当验证,第 2 份第 3 份当训练。

把这 3 个模型,在这 3 个设置下,在这 3 训练跟验证的数据集上面,通通跑过一次,把这 3 个模型,在这 3 种情况的结果都平均起来,再看看谁的结果最好。

谁最好,就把谁用在全部的训练集上,训练出来的模型再用在测试集上面。

2.5  不匹配

例子:中横轴就是从 2021 年的11号开始一直往下,红色的线是真实的数字,蓝色的线是预测的结果。226日是 2021 年观看人数最高的一天了,机器的预测差距非常的大,差距有 2580,所以这一天是 2021 年观看人数最多的一天。

跑了一层2层跟四层的看看,所有的模型的结果都不好,两层跟3层的错误率都是 2000多,其实四层跟一层比较好,都是1800左右,但是这四个模型不约而同的,觉得226日应该是个低点,但实际上 226日是一个峰值,模型其实会觉得它是一个低点,也不能怪它,因为根据过去的数据,周五晚上大家都出去玩了。

但是226日出现了反常的情况。这种情况应该算是另外一种错误的形式,这种错误的形式称为不匹配(mismatch)。

原因:指训练集跟测试集的分布不同,训练集再增加其实也没有帮助了。(一般的过拟合可以用搜集更多的数据来克服,但不匹配就不行)

PS. 附加一下老师的图,很有用真的!!

END

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值