数据科学家——停止使用随机种子

或者为什么 random_state=42 是一种反模式——以下是我对在你的工作、模型开发和生产中使用随机种子的看法和推理。无论选择什么数字,在很多情况下都是众所周知的数字,例如 42。在某些用例中,您可以在以下情况下使用随机种子……

数据科学家——停止使用随机种子

或者为什么 random_state=42 是反模式

以下是我对在您的工作、模型开发和生产中使用随机种子的看法和推理。不管选择的数字是什么,在很多情况下都是众所周知的数字,例如 42。在某些用例中,如果您想保持一致性,可以使用随机种子,而在某些用例中,您应该完全避免使用其他用例,其中一致性是错误的选择。本文将对它们进行审查。[0]

要避免的用例

模型训练

我看到许多数据科学家使用随机种子进行训练,不这样做的主要原因有两个,让我们深入了解一下:

  1. 迁移到生产环境时,您可能会忘记随机种子,并且如果模型依赖于单个随机种子,它可能不够健壮,这可能会影响内部模型决策、层初始化和其他因素。
  2. 您将始终使用相同的种子进行训练,并根据会导致随机种子过拟合的值做出决定。另一方面,如果您在构建模型时没有随机种子,您将对模型建立更好的信任,因为它已经看到了各种随机化效果,并且对随机数的变化更加稳健。换句话说,稳健性来自多次运行,以及您从亲身体验模型中获得的信心,您不想依赖于意外过度拟合测试数据或幸运地获得某个随机种子的机会。

生产环境

我建议不要在生产中使用随机种子。一个重要的原因是,您肯定会将代码绑定到一个随机数字,该数字会影响您的模型或管道中的许多部分,这些部分可能对来自野外的数据表现不佳。话虽如此,我收到的反馈是,在某些情况下,各种随机值也会产生很大的影响,但根据经验,要么测量效果,要么不使用随机种子。

您可以但不一定应该的情况

验证流或管道

您可能想要端到端测试您的流程。例如,您已经建立了一个用于培训或生产的流程,用于培训、验证和输出一致的结果,并且您希望确保每次都收到相同的结果。但是,一旦您的流程是一致的,您应该完全移除随机种子,以便恢复流程的稳健性,而不是依赖单个随机化数字。

写作教程

这与上面的验证用例密切相关,但这个用例有点不同,这可能是唯一完全可以接受的随机种子用例。假设您正在编写一个 ML 教程,并且您希望您的听众在有人重新运行您的教程代码时在模型输出方面进行一致的实验。仅出于此目的,您应该使用随机种子。

机器学习竞赛

想象一下自己进入了 ML 比赛的前 10 名,并且你和竞争对手之间的差异是 epsilon,用不同的随机种子一次又一次地运行模型,可能会让你找到一个更好的局部最小值,它可以胜过所有其他 10 个竞争对手,这是否意味着您的模型是最好的?可能不是,但如果您关心赢得比赛,这是一个有效的用例。

下面的文章很好地解释了这一点。

Security

想象一下,您的所有代码都依赖于单个随机种子数字,例如 42。我可以推测,知道您正在使用该数字的攻击者在攻击您的模型时会更成功。我没有一个方便的例子,但随机生成器攻击是一个蓬勃发展的领域。[0]

Summary

我希望这篇简短的文章能够对随机种子的使用和相关用例提供足够的见解,IMO 有理由对此进行更多讨论。我要感谢 Yoav Talmi 多年前提出这个想法。[0]

Ori Cohen 博士拥有博士学位。计算机科学专业,专注于机器学习。他是 ML & DL Compendium 和 StateOfMLOps.com 的作者,对 AIOps & MLOps 领域很感兴趣。如今,他是 Justt.ai 的数据和数据科学高级总监。[0][1]

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2022年4月24日 下午4:20
下一篇 2022年4月24日 下午4:54

相关推荐