我的机器学习项目需要多少训练数据?

作者:景略集智
链接:https://www.zhihu.com/question/63304628/answer/538598523
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

高性能模型与低性能模型之间区别的一个重要原因就是训练数据的质量。因此,为了确保你的 AI 应用能够具有最大性能,必须弄明白你需要多少训练数据。

然而,这个问题经常让不少开发者非常苦恼。实际上,这个问题回答起来比看上去要复杂的多,因为其中要涉及到很多因素,比如你使用的模型类型,模型在实际业务中的用途等等。下面我们看看围绕需要多少训练数据出现的痛点,然后探讨针对自己的项目需要多少训练数据。

为何很难预估你的数据集大小?

确定目标数据量的许多困难源于训练过程的目标。有很多文章都讲到了模型训练过程的工作原理,但要记住,我们训练的目的是构建一个能理解数据背后模式和关系的模型,而不仅仅是理解数据本身。收集数据时,我们需要确保所拥有的数据数量能教会算法数据中的关系,以及数据和结果之间的关系。

这看起来很容易预测。但实际上机器学习项目的目标多种多样,可以产生大量的训练数据类型。因此,每个项目都有各自独特的多种因素,这使得提前计算数据需求变得非常困难,可能包括以下部分或全部内容:

  • 模型的复杂度:模型为完成任务而必须考虑的每个参数都会增加训练所需的数据量。例如,用于识别特定汽车品牌的模型具有少量的参数,主要与车辆的形状相关。而如果是一个必须从长远考虑汽车成本的模型,不仅要顾及到包括汽车品牌和状况的因素,还有经济和社会因素。由于这种复杂程度更高,第二个模型需要比第一个模型更多的数据。
  • 训练方法:由于模型必须理解更多的互连参数,由此导致的复杂性使得训练模型的方式也被迫发生改变。传统的机器学习算法使用结构化学习,这意味着它们很快就会出现附加数据投入产出比很低的情况。相反,深度学习模型可以找出自己的参数,并学习如何在没有结构的情况下进行改进。这意味着它们不仅需要更多的数据,而且还有更长的学习曲线,其中进一步增加数据具有积极的影响。因此,你使用的训练方法会导致对你的模型有用的训练数据量发生显著变化。
  • 标签需求:根据实际任务,我们会以不同方式注释数据点。这可能会导致数据生成的标签数量,以及创建这些标签所需的工作量发生明显变化。例如,如果我们有1000个输入数据句子用于情感分析,我们可能只需要将它们标记为正面情感或负面情感,因此每个句子产生一个标签。但是,如果对同样1000个句子进行注释用于实体提取,则可能需要为每个句子标记5个单词。尽管具有相同的原始输入数据,但是一个任务产生的标签比另一个任务多五倍。因此,我们准备数据的方式可能会影响项目所需的工作量和花费的成本。
  • 误差容忍度:模型在你的实际业务中的预期作用也会影响数据量。对于预测天气的模型,20%的误差率是可接受的,但如果用于检测有心脏病发作风险的患者,这个误差率万万不可。在边界案例方面的改进可以降低这种风险。如果你的算法具有高度风险规避或者对于项目能否成功至关重要,那么你需要的数据量会大幅增加,才能追求完美性能。
  • 输入的多样性:我们生活在一个复杂的世界中,可以向模型输入各种类型的输入数据。例如,聊天机器人必须能够理解各种语言,哪怕它们是用一系列正式,非正式甚至语法不正确的风格写就的。如果无法高度控制模型的输入,就需要更多数据来帮助你的模型在不可预测的环境中运行。

从上面这些因素可以清楚地看到,我们需要的数据量取决于项目的独特需求和预期目标。最后,项目负责人必须自己平衡这些因素,并提出自己的目标。那么有没有什么方法呢?

有,接下来就看看有哪些方法可以帮我们在刚开始时确定所需的数据量。

我们该如何计算数据需求?

确定任何给定算法所需的确切数据数量可能无法做到。幸好,基于整体预估的方法能帮你分析项目的训练数据需求量,以下两种方法均可:

  • 10 倍法则:一个常见的经验法则是模型通常需要超出其自由度 10 倍的数据量。这里的自由度可以是影响模型输出的参数,是数据点的一个属性,或者更简单地说,是数据集中的列。10 倍法则的目标就是是抵消这些组合参数为模型输入带来的变化。对于复杂模型而言,这可能没有帮助。但是,这条法则能让我们快速估算数据集的数量,保证项目保持运行。
  • 学习曲线:如果你已经有一些数据并希望根据更多事实情况做出决策,可以考虑创建一个研究示例,根据数据集的大小来评估模型的能力。通过把结果绘制在图表上,你应该能够找出数据集大小与模型能力之间的关系,同时还要确定什么时候添加更多数据的收益会不断递减。这种方法需要更多人力工作,包括创建一些逻辑回归问题,但至少比简单一猜要靠谱得多。

通常,最好在刚开始时用手头已有的数据训练模型,在你认为有必要时再添加更多数据。一旦项目取得一些结果,你对数据的需求会越来越明显。不过,有些朋友还是希望能在项目开水前有个确切的数字,下面是我们在网上找到的项目数据集大小的一些估计。也许这些例子能让你对自己项目所需的数据集大小心里有个数。

数量 VS 质量

数据的局限性也会是模型的局限性。但是,在所有关于你需要多少数据的讨论中,不要忘记这条也适用于数据质量和数量。对于模型来说,一百万个混乱的数据反而不如 100 个干净数据,后者实际上更有助于算法达成目标。无论你正在搭建什么样的模型,都要确保正在使用的数据能为你提供坚实的基础和最佳的成功机会。

此前知名机器学习博主 Jason BrownLee 曾发过一篇文章探究机器学习究竟需要多少训练数据:https://machinelearningmastery.com/much-training-data-required-machine-learning/

在文中,Jason Brownlee 也认为训练机器学习模型需要多少数据要根据很多因素,比如:

  • 问题的复杂程度
  • 机器学习算法的复杂程度

Jason BrownLee 也根据自己从事机器学习研究的经历,分享出了一些估算训练数据数量的经验:

  • 使用统计学启发式搜索来计算样本数量,其中要考虑到类的数量、输入特征的数量以及模型参数的数量。
  • 非线性算法往往需要更多数据。一般把复杂的机器学习算法称为非线性算法,它们可以学习输入和输出特征之间复杂的非线性关系,但也需要更多的训练数据。Jason认为,对于简单的线性算法,每个类需要几百个训练样本,对于复杂的非线性算法,每个类需要几千个训练样本。

希望以上提及的这些方法对大家在确定训练数据数量时有所帮助。

发布了241 篇原创文章 · 获赞 54 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/txpp520/article/details/105494776