不要用简单的例子淹没你的算法——这会花费金钱

原文:towardsdatascience.com/dont-flood-your-algorithms-with-easy-examples-it-costs-money-01513a5930bf

管理者和工程师的机器学习课程

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/1f892647b99dc7dc3eee3cc69a5fd85e.png

作者使用 ideogram 2.0 创建的图像

欢迎回到一个新的管理者和工程师的机器学习课程,在这里我分享了我公司在 NextML 运营过程中在各个行业遇到的错误和误解中吸取的机器学习课程!🔥

今天,我们来看一个即使在经验最丰富的机器学习工程师和数据科学家中也普遍存在的错误。我在各个行业、大公司和小型公司以及各种用例中都见过这个错误。

这个错误是在训练过程中用简单的例子淹没算法,导致学习速度变慢、泛化能力变差,以及对异常值的敏感性增加。

对于大多数企业来说,机器学习算法的缓慢训练比必要的更快地消耗你的财务资源!

**注意:**根据我的经验,管理者在机器学习和人工智能策略上做出糟糕的决定,因为他们不了解这项技术。我想通过提供具有良好技术理解和潜在推理平衡的课程来改变这一点。

让我们探讨这个问题。

1 从一个寓言开始

如果你为数学考试做准备,你必须学习几种方法和公式才能取得好成绩。最初,你练习所有相关领域的问题,尽可能多地覆盖范围,但过了一段时间,一些问题变得容易,而另一些问题仍然困难。

到那时,你改变策略,花更多的时间在问题区域,而花较少的时间在你已经掌握的区域。你更快地学习下一个主题,并节省宝贵的时间,你可以用这些时间与朋友或家人聚会。

也许有些人一开始就专注于一个主题,但为了课程的连贯性,让我们坚持这个策略。👍

找到并调整学习新事物和实践已知知识之间的平衡对于高效学习至关重要。你越专注于尚未掌握的事物,学习速度就越快,但你不想忽视和忘记你已经辛苦学到的技能。

2 教育机器学习模型

当你训练一个机器学习算法时,你会在训练数据上迭代,使用损失函数来衡量其性能,计算梯度,并更新权重。

最常见的方法是向算法展示每个独特的数据点一次,并重复此过程,直到你的指标表明没有更多东西可以学习。这相当于通过反复做每张考试试卷上的每个问题来准备你的数学考试。不需要经验丰富的教授告诉你你疯了。

到现在为止,你已经对当前的错误有了很好的了解。让我们探讨为什么用简单示例淹没你的算法会导致问题。

3 你的算法学习速度较慢且成本更高

当你连续对训练数据中的每个独特示例进行训练时,一些会比其他更容易。从技术角度来说,某些数据点的梯度对更新算法权重的影响可以忽略不计。

一方面,这正是我们想要的,因为我们不需要调整已经起作用的权重。然而,这些例子现在为训练过程提供的信息价值较低,可能会显著减慢训练速度。

这就像在每张考试试卷上做每个数学问题一样。你可以学会所有问题并通过考试,但你可以用更智能的方法选择关注的问题来更快地完成。

别忘了金钱💰

训练机器学习算法需要计算资源,而这并不是免费的。在某些情况下,加快训练速度可以为企业节省数百万美元。即使是在常规 GPU 上训练较小的算法,实验的累积节省也可能变得相当可观。

4 它们对未见数据的泛化能力较差

泛化描述了你的算法在未见数据上的表现如何,这是机器学习中最基本的概念之一。我们使用验证集和测试集,这些数据在训练过程中被隐藏起来,以衡量泛化能力。

当你遍历每个数据点而不考虑它们对训练贡献的信息量时,许多批次将无法代表所有验证数据。例如,如果特定模式在训练批次中代表性不足,你的模型将难以泛化到验证集或测试集中的类似模式。

评估训练数据和验证数据如何相互代表或代表未来并不总是那么简单。我的公司使用安装在火车上的摄像头进行异常检测,我们的图像因为季节和天气而有所不同。我们不断遇到以前数据无法代表的新情况。

在未来的故事中,我将讨论的一个常见错误是许多机器学习工程师并不完全理解如何创建真正代表未见数据的验证和测试数据。这听起来像是一个新手错误,但实际上有时很难预防。

回到数学考试,泛化能力差意味着你可以解决所有考试试卷上的问题,但新任务上的微小偏差可能会让你失去平衡。

5 它们对异常值更敏感

有时,你的算法会遇到与之前所见完全不同的例子。当这种情况发生时,你仍然希望算法表现出合理的行怍,例如以可接受的程度的确定性对数据点进行分类。

如果你在一个大量简单且类似的例子上训练你的算法,它将越来越忽视所有看起来不同的事物。这是因为它通过关注最常见的模式来最小化整体损失。

异常值,按照定义,在训练数据中不被表示,你应该预期它们将来会以新的装扮出现。一个敏感的算法可能会完全失败,产生无意义的输出,而一个更鲁棒的算法可以优雅地处理这种情况。

那么,更好的方法是什么呢❓️️

6 设计信息丰富的批次

在学习新事物和实践已知内容之间找到和调整平衡,对于机器学习来说,与学习一样重要。

作为一名机器学习工程师或数据科学家,你应该设计批次,让你的算法能够学习新的关键模式,同时不会忘记之前学到的内容。

我们公司在的方法受到了论文"可减少的保留损失选择"的启发,该论文介绍了选择有影响训练数据的方法,通过这样做,可以加快训练速度,同时提高模型的准确性和鲁棒性。

这就是它所做的事情:

  1. 它优先考虑可学习的数据点,提供有意义的信号,可以改善其对该例子的预测。

  2. 它优先考虑值得学习的数据点——如果模型已经在许多类似例子上表现良好,那么就不值得付出努力。

  3. 它优先考虑尚未学习的数据点,意味着那些你尚未掌握的测试考试问题。

技术细节不在此故事的范围内。不过,如果你想了解更多,我们创建了 [pytorch-datastream](https://github.com/nextml-code/pytorch-datastream) 来在我们的工作流程中实现这种动态数据选择,为更智能、更快、更便宜的训练铺平道路。

7 训练一个额外的模型

另一种改进我们许多解决方案的创新方法是在主模型旁边训练第二个模型,并使用该模型动态分配权重给训练样本。目标仍然是优先考虑对训练过程贡献最大的数据点。

8 使用复杂的验证数据

每个人都喜欢看到他们的验证和测试损失下降,并且创建一个完美代表训练数据的干净数据集很有吸引力。然而,存在一个风险,即你未能为复杂的现实世界场景准备模型。以下是一些创建验证和测试数据的关键提示。

  1. 保持你的分割一致。如果你每次训练新的算法时都一致地创建新的分割,你的验证损失可能会降低,因为所有有问题的例子都被分配到了训练数据中。

  2. 将最残酷的例子放在验证集中,而不是训练集中。

  3. 确保你有足够大的验证集和测试集,并且不要被诱惑将其中一些数据后来转移到训练集中。

  4. 记住,目标是创建一个在生产环境中能够工作的解决方案,而不是获得尽可能低的验证损失。

如果你只在验证数据中放入简单的例子,这很容易不小心做到,那么当你的算法投入生产时,你最好运气好。

这是一大堆内容,让我们通过回顾我们学到的内容来结束。

9 结论

这节课的目的是向你展示,在训练数据中的所有示例上持续训练你的算法的默认方法可能是昂贵的,并且会产生一个较差的模型。

我通过将算法的训练与为数学考试做准备进行比较来解释了背后的推理。这是一个清楚地展示了常识在机器学习中的价值的寓言。

我们探讨了将所有数据同等对待的负面影响,并在讨论了合理的数据点选择步骤后结束,同时谈到了创建复杂验证数据的重要性。

我希望你们喜欢这节课。

如果是这样,请在评论中告诉我! 📣

10 更多

如果你想了解更多我的内容,请查看我的通讯录 | 管理者与工程师的机器学习课程

管理者与工程师的机器学习课程 | 奥斯卡·李奥 | Substack

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值