300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 训练集 验证集_训练与验证 测试集数据分布不同的情况

训练集 验证集_训练与验证 测试集数据分布不同的情况

时间:2023-01-07 18:07:16

相关推荐

训练集 验证集_训练与验证 测试集数据分布不同的情况

在不同分布的数据集上进行训练与验证、测试

深度学习需要大量的数据,但是有时我们可获得的满足我们真实需求分布的数据并不是那么多,不足以对我们的模型进行训练。这时我们就会收集大量相关的数据加入到训练集中,即使有些数据,甚至是大部分数据的分布都与验证集、测试集的数据分布不同。我们以一个例子理解一下为什么我们会这么做:依旧假设我们在建设一个猫分类网站,我们有两种,一种是我们目标分布,也就是我们用户上传的,不是那么专业的,甚至还有些比较模糊的猫图片;一种是我们网络上爬取的清晰的,专业的猫图片。这两种数据分布明显不同,但是问题是,我们从用户那里获取到的训练数据是有限的,只有10000个左右,而这并不足以对我们的模型进行足够好的训练,训练集较少还容易发生过拟合;我们能从网络中爬取到的图片有200000份,这个数量足以对我们的模型进行训练。那么我们该如何做,使用我们从用户中仅能获取的10000个数据,将我们的模型训练得足够好呢?我们可以使用200000张从网页爬取的图片加上我们从用户那里收集到的5000张图片作为训练集,剩余的5000张从用户那里获取的图片分为验证集与测试集。这样划分我们数据集的好处就在于,现在我们验证与测试的目标就是我们实际想要处理的目标;缺点当然就在于我们的训练集与验证集、测试集分布不同。但事实证明,这样的划分在长期能给我们带来更好的系统性能。

数据分布不匹配时的偏差与方差

我们在之前了解到,分析偏差与方差,可以帮助我们确定下一步模型改进的方向。但是,当我们的训练集与验证集、测试集数据分布不同时,分析偏差和方差的方式可能与之前有所不同。我们还是以猫分类器为例:人类在分类图片时的准确率很高,所以我们可以假设人类错误率近似为0,也就是贝叶斯错误率近似为0。假设我们的训练集错误率为1%,验证集错误率为10%,如果我们的训练集和验证集分布相同的话,我们就可以认为模型的泛化性能不是很好,存在方差问题。但是两者分布不同的时候,我们就不能轻易下这个结论,因为可能这时我们的训练集数据非常清晰,很容易识别,但是我们的验证集因为用的是用户来源的图片,较为模糊,相比训练集要难识别得多。所以这时也许我们的模型并没有方差问题,只是由于数据变得更加难以准确分类导致的。为了解决这个问题,我们会从训练集中分出一部分,称为训练-验证集(training-devset)这一部分数据并不参与训练,也不用于调整模型代价函数,而是用于确定是否存在方差问题。由于是从训练集中随机抽取出来的,所以训练-验证集与训练集数据分布相同。同理,此时我们的验证集和测试集数据分布也相同,这样一来,我们就可以比较模型在这几个数据集中运行的结果,从而确定我们的模型是否存在问题了。如果我们的训练集错误是1%,而训练-验证集错误率是9%,验证集错误率是10%,我们就可以确定,我们的模型真的存在方差问题,也就是泛化性能不够好。但如果我们的训练-验证集错误率只有1.5%,则说明我们的模型不存在方差问题,错误率上升的原因是数据不匹配(data mismatch)的问题。如果我们的训练集错误率为10%,而人类错误率为0%,我们就可以知道模型存在很大的偏差问题,或者说是还有很大的可避免偏差。此时如果验证集错误率为20%,训练-验证集错误率为11%,我们就知道这个模型还存在数据不匹配的问题。而我们验证集错误率与测试集错误率之间的差异则说明我们的模型对验证集过拟合的程度,差异越大,越有可能过拟合。

数据不匹配问题的处理

如果我们的错误率显示出我们的模型存在数据不匹配的问题,我们该如何处理?这个问题没有系统的解决方案,但我们可以进行如下尝试:人工对数据进行检测,尝试了解训练集与验证/测试集的具体差异,为了防止对验证集过拟合,我们需要去看验证集而不是测试集,避免过拟合时无法被测试集检测出。比如我们做一个语音检测的模型,我们人工检测一下验证集和训练集的差异,发现验证集样本噪音很多,加入了一些环境噪音。这时我们就可以收集更多的有这些噪音的数据加入训练集,也就是收集与验证集类似的数据。我们也可以模拟验证集中的噪音加入训练集。当我们发现语音检测更难检测到数字时,我们就可以增加训练集中人们读出数字的数据。总之,我们首先人工找出训练集与验证集的数据差异,并且针对我们找出的差异,通过对训练集增加相似数据或者人为添加噪音的方式来模拟验证集。

Reference

深度学习课程 --吴恩达

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。