现实世界的机器学习生产系统如何运行?

时间:2018-06-22 05:53:54

标签: python machine-learning deployment data-science production-environment

亲爱的机器学习/人工智能社区

我只是一个崭露头角和有抱负的机器学习者,他致力于开放的在线数据集以及一些为我的项目在本地构建的POC。我已经建立了一些模型并转换为泡菜对象,以避免重新训练。

这个问题总是让我感到困惑。实际生产系统如何用于ML算法?

说,我已经用数百万的数据训练了我的ML算法,我想将其移至生产系统或托管在服务器上。在现实世界中,它们会转换为泡菜对象吗?如果是这样,那将是一个巨大的腌制文件,不是。我在本地训练并转换为50000行数据的磁盘本身为该腌制对象占用了300 Mb磁盘空间。我不认为这是正确的方法。

那么,如何避免我的ML算法重新训练并开始对传入数据进行预测?以及我们如何真正使ML算法成为一个连续的在线学习者。例如,我建立了一个图像分类器,并开始预测传入的图像。但是我想通过将传入的在线图像添加到我以前训练过的数据集中来再次训练算法。可能不是每个数据,而是每天一次,我想将当天收到的所有数据合并起来,并用我以前训练过的分类器预测的具有实际价值的新100张图像进行重新训练。而且这种方法不应影响我以前训练的算法来停止预测输入数据,因为这种重新训练可能会基于计算资源和数据花费时间。

我已经Google搜索并阅读了许多文章,但找不到或无法理解我的上述问题。这每天困扰着我。生产系统也需要人工干预吗?或有任何自动化的方法吗?

对以上问题的任何线索或答案将非常有帮助并受到赞赏。如果我的问题没有道理或无法理解,请告诉我。

这不是我正在寻找的以项目为中心的内容。只是现实世界中生产ML系统示例的一般情况。

提前谢谢!

1 个答案:

答案 0 :(得分:3)

请注意,这是一个很宽泛的表述,您的问题可能应该搁置,但我尝试简要概述您要问的问题:

  1. “真实的生产系统如何工作?”
    嗯,这始终取决于产品的规模以及您在系统中使用ML / AI的方式。在大多数情况下,您可以在服务器或应用程序上deploy a model
    请注意,部署并不会根据您拥有的培训数据量线性地扩展。而是,网络的大小完全取决于网络中激活的次数。请注意,在训练之后,您甚至可能不需要那么多的存储空间,因为例如CNN的连接数量非常有限,而在训练过程中却保留了很多连接。我强烈推荐size of a network上的Roger Grosse的幻灯片。这也与第二点直接相关。
  2. “如何避免重新训练?”
    据我了解,大多数系统都不会定期进行培训,至少对于较小规模的系统而言。这意味着网络将仅在推理模式下运行,这具有我提到的有关网络规模(以及计算结果所花费的时间)的上述好处。再者,这也高度取决于您要为其部署ML模型的特定任务。在“标准类别”上进行图像分类的好处是已经提供了相当丰富的模型(AlexNet,Inception,ResNet等),而机器翻译模型则主要取决于您的特定领域和词汇。
  3. “我该如何进行再培训?”
    这实际上是棘手的部分,其背后有一个重要的领域,称为“强盗学习”。问题在于,大多数传入的“新”数据将没有标签,即无法用于直接集成到新的培训阶段。相反,您依靠用户的反馈来了解错误或正确的地方。再说一次,例如,并非每个用户对相同的机器翻译都具有相同的评级(或对Amazon的相同建议等),因此很难判断您的系统是“对”还是“错”。
    显然有很多方法可以自动进行标记(例如,图像的最近邻居或其他基于相似度的搜索)。因此,在线学习仅在您具有不断反馈/再培训的循环时才有效。

对于较大规模的系统,缩放模型,执行每秒所需的预测/分类数量也很重要。我提供的TensorFlow部署页面的链接中也提到了这一点,该页面主要基于云/分布式架构(例如Hadoop或(最近)Kubernetes)构建。再说一次,对于较小的产品,这通常是过大的了,但目的是以任意规模(并可能按需)提供足够的资源。

关于机器学习模型的集成周期,this article中有一个很好的概述。我想通过强调这是一个很自以为是的问题来总结一下,因此每个答案都可能不同!