查看: 2486| 回复: 1
跳转到指定楼层
上一主题 下一主题
收起左侧

training 和 test 的结果差距大怎么办?

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x



这个问题看似简单,有同学一看到题就说,哦这个我知道,这是model overfit了,我们要在模型中加regularization!的确,overfitting极其常见,regularization也很好用,但是面试中这样回答就ok了吗?

我们重新来审一下题,题目中给出的信息是训练和测试的结果差距大,但是没给出的信息却非常多。比如这是个什么model,数据怎么来的,metrics用的哪个…我们先抛开这些未知信息,釜底抽薪的分析一下会造成”training和test结果相差甚远”的原因。

理想情况下,Training 和 test效果应当都不错,且两者几乎无差异。这种理想情况需要满足若干个条件,只要任意一个没满足,都可能会出现“差距大”的现象。

1. 模型对训练集拟合度高。
如果对训练集的拟合度不高,模型必然不能很好的generalize,对于从未见过的测试数据,表现会比较迷。

2. 模型没有过拟合。
过拟合这个点大家都能想到,这里我们就不多说了。

3. 训练集数据足量。
训练数据太少也会造成模型很难generalize,自然在测试中表现更不好,这个和拟合度低的原理类似。

4. 训练集和测试数据集具有一致的分布。
很容易想象,如果训练集不能代表测试集,那么很有可能会出现两者的metrics表现相差甚远。

以上都有可能造成原题中的现象。今天留个思考题,面对这四个不同因素,我们分别要如何应对?

来解析对于差距大的各个cause,应该怎么应对。

1. 模型对训练集拟合度低。
模型underfit主要有这些因素:特征不够,regularization太多,模型太过简单,训练时间不够长。

这个大家答得都挺好,一个模型如果都不能很好的fit training data,那我们无需关注training和test的差异,第一要务是解决underfit和training的问题。

2. 过拟合
这个问题太经典了,评论里面同学回答的普遍不太全面,我在四月的一期公益课会讲。为了鼓励你来听现场版,在这里就先跳过了。

3. 训练数据集量太小
这个小标题貌似剧透了?数据量太小的对策不就是增加数据量嘛?恭喜你入坑了。

给同学一个提示:在实际工作中,收集高质量数据的时间、精力和经济成本往往是意想不到的高。如果人工收集和增加自动标注的模拟数据都无法实现,要怎么办呢?顺着这个思路,同学可以再做一次尝试

4. Data distribution 不一致
如果你把这个问题当作另一个剧透问题,用重新分配数据,确保training和test分布一致,那么恭喜你再次入坑。

提示一下:training, test, production 三种数据,真正需要保持一致的是什么呢?跟3中的数据量太小类似的是,data distribution不一致往往是很难在数据本身上解决的。

篇幅限制,训练集数据量和分布的问题,我们先看看Training和test的data distribution不一致的问题。

这个问题大家首先要避开的思维定式就是:training和test的数据分布“必须”是一致的,分数据环节出问题了。我们来看一个例子。

你是一家自动驾驶公司,你的系统要卖去新加坡,需要通过新加坡交通部门的测试。可是针对新加坡的自动驾驶相关数据(比如大街上的标志、建筑物图片)很有限,想要用它们来训练你的自动驾驶系统是远远不够的。于是你就想了个办法:用大量的其他国家的数据+少量的新加坡数据去训练你的系统。虽然其他国家的路标、路上的划线、路上汽车种类等等,都和新加坡不尽相同,但它们对最终的模型依然非常有价值。

因此,当被问到数据分布不一致的问题时,我们首先要澄清的是,这个不一致是怎么来的,是一个可避免的错误还是一个不可避免的条件限制。

回到你的自动驾驶系统,政府的测试是“闭卷”的,你不能一边训练一边用测试集来检验模型,必须每隔一段时间,在政府工作人员的配合和监督下,进行一次测试。就好像高考前我们要搞模拟考,你也必须模拟政府的测试,给自己摸摸底。

那你的模拟考用什么题呢?为了尽量准确的反映你的高考水平,从知识点的分布到题目的难度,模拟考题目都应该和高考试卷高度类似。所以,对于training和test数据分布一致性这个问题,我要给大家严肃更正一下,真正的rule是
- training和test的数据分布“尽量”是一致的
- validation/test和production的数据分布“必须”是一致的

为了不让数据成为模型的瓶颈,我们要动用一切可以动用的数据。这既是data distribution 问题的来源,也是训练集数据量太小的时候的常用技巧。

把这个大前提搞清楚以后,我们接下来的问题是:既然distribution不一样,那么我们是不是可以对“training和test差太多”这个问题高枕无忧了呢

已知 training 和 test的数据分布不同,如果两者的performance差的很多,我可以躺平了吗?

还是用新加坡自动驾驶举例子,假设你有100k的来自于其他国家的数据,有8k的新加坡本土数据。为了尽量模拟政府测试,你从8k中精心挑选了能代表测试难度的2k做了validation,把剩下的6k+100k用做训练。假设106k的F1 score高达95%,validation的2k只有75%,我这20%的差距都来自于data distribution?会不会有overfitting的问题?

对这个问题,理论上我们可以用数学的方式去验证,把数据按照distribution分块,再按照每块的score和数据量进行分析。但这种理论操作往往不容易实现,比如上面的例子中,你的2k也不是随机从8k中挑选的,而是按照政府要求去选的(比如白天黑夜各一半,大街和小巷各一半等等)。实践的时候,我们还有个很容易验证的方法:把106k的training数据再“随机”保留2k,用剩下的104k作真正的训练,再和随机保留的2k作对比。

假设104k的F1为95%,随机保留的2k的F1为80%,精心挑选的模拟2k为75%,那么这个问题就变得比较直观了。只有5%来自于data distribution ,剩下的15%的performance差异都来自于overfitting!overfitting的问题在我们4/13的经典实操问题带刷课会讲,这里咱继续说由 data distribution本身带来的差异。

这个问题最好的解决方式自然是增加target data distribution(也就是新加坡路况)的数据量,但是如果实在做不到的话,你的best bet就是error analysis了:对着validation的错误进行详尽的分析,这些错误有没有共性,能不能优化模型,比如修改loss的计算方式,或者用ensemble model,将几个模型搭在一块儿,甚至用rules打补丁…

对,你没看错,打补丁。我有一个做自动驾驶的朋友告诉我,他们的模型里有很多rule based,都是error analysis中发现了机器学习无法解决的问题,直接用rules补上了(所以大家开auto piloting的时候,真的不建议玩手机)


今天的话题是“数据量太少,导致training和test结果差距大怎么办”。数据量太少的时候,做出来的model是很难generalize的。最直接的办法是收集更多的有效数据,或者用机器合成新数据(比如cv中常见的image augmentation)。但是这两种方法有时候都是死胡同,实在无法用上更多数据的时候怎么办呢?

1. 如果当前模型复杂度高,那么可以把它当做一个overfitting的问题。
2. 如果模型复杂度已经很低,试了若干个比较简单的模型都有问题的话,可以试试下面几个方法。
3. Semi supervised
4. Ensemble learning
5. Transfer learning

Semi-supervised learning 是一个常见技巧,我给大家贴的第一个图很好的阐明了它的训练过程。直观上怎么理解它的原理呢?它就像是一本有例题有练习题的教科书,不过练习题没有答案。虽然有一部分题目没答案,但是你做从头到尾做几遍题,功力还是能有很大提升的。

学过decision tree的boosting和bagging技巧的话,Ensemble learning 比较好理解,参见第二张图。打个比方,如果不同模型是不同的人,我们把同一道选择题给不同的人做,昨晚以后把他们的答案集合在一块儿,选A的有1人,选B的有5人,选C的有0人,少数服从多数,这题我们选B。这就是ensemble learning。在ensemble learning中,每个模型都可以搭的比较简单,但是当若干个模型在一起投票之后,结果往往出乎意料的好。

Transfer learning本质上就是之前说过的新加坡自动驾驶系统,它的思想是先用大量相关数据训练一个reusable model,再在这个基础上用数量少但质量高的数据做微调。以自动驾驶系统中的object detection应用场景为例:先用大量的图片训练一个CNN 模型,在这个CNN的输出层基础上搭一个target task的小模型。学过神经网络的同学可以看图四,没学过神经网络的同学就用图三理解一下这个思想就可以了。

评分

参与人数 3大米 +4 收起 理由
Rosieqqan + 1 赞一个
righteous + 2 给你点个赞!
superzbh + 1 赞一个

查看全部评分


上一篇:现在做图片分类哪些模型比较好用?
下一篇:accuracy的陷阱
🔗
microsat 2022-5-5 23:12:14 | 只看该作者
全局:
请问,如何定义training和testing集合,他们的分布是一致的?假设,有1个target variables。和10个input variables.(age,sex,salary,city,education, etc.)

当定义完了分布一致后,下一个问题是,给定一个集合A,如何分割成两个集合B和C,确保B和C的分布是一致的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表