如果有新的观察结果,是否应该对模型进行重新训练?


28

因此,我尚未找到有关此主题的任何文献,但似乎值得深思:

  • 如果有新的观察结果,那么模型训练和优化的最佳实践是什么?

  • 在预测开始下降之前,有什么方法可以确定重新训练模型的周期/频率吗?

  • 如果针对聚合数据重新优化参数,是否过度拟合?

注意,学习不一定是在线的。在最近的预测中观察到重大差异后,不妨升级现有模型。


答案高度依赖于业务领域和特定的模型应用程序。
皮特

Answers:


16
  1. 训练完模型并获得可用于训练的新数据后,您可以加载先前的模型并在其上进行训练。例如,您可以将模型另存为.pickle文件,并在有新数据可用时将其加载并进一步训练。请注意,为了使模型正确预测,the new training data should have a similar distribution as the past data
  2. 根据您使用的数据集,预测往往会降低。例如,如果您尝试使用推特数据进行训练,并且已经收集了有关当天广泛发布推特产品的数据。但是,如果您在几天甚至没有讨论过该产品之后使用了tweet,则可能会有偏差。The frequency will be dependent on dataset而且没有具体的时间陈述。If you observe that your new incoming data is deviating vastly, then it is a good practise to retrain the model
  3. 在聚合数据上优化参数不会过拟合。大数据并不意味着过度拟合。使用交叉验证检查过度拟合。

因此,如果传入的数据集的性质始终保持一致,那么该模型有什么新知识可学习?
user140323 '16

如果数据没有变化,并且您对当前模型的准确性感到满意,那么我认为再培训没有任何意义。
Hima Varsha

@Aayush,也许您可​​以使用传入数据作为验证集并检查当前模型。
Hima Varsha

接受还为时尚早,但是我会的。谢谢!
user140323 '16

您好@ tktktk0711,我目前没有代码向您显示。但是,只需遍历所有指向代码的链接即可。github.com/tflearn/tflearn/issues/39
Hima Varsha

20

当有新的观测值可用时,有三种方法可以重新训练模型:

  1. 在线:每次有新观测值可用时,您都将使用该单个数据点进一步训练模型(例如,加载当前模型并通过对该单个观测值进行反向传播进行进一步训练)。使用这种方法,您的模型可以按顺序学习,并且可以对本地数据进行某种程度的适应,因为与最近的观察结果相比,与最近的观察结果相比,它受到的影响更大。在模型需要动态适应数据中的新模式的情况下,这可能会很有用。当您处理无法立即对其进行全部训练的超大型数据集时,它也很有用。
  2. 离线:将新的观测值添加到您已经存在的数据集中,并在此新的更大数据集上完全重新训练模型。通常,这可以更好地实现目标函数的全局逼近,如果您有固定的数据集或没有新的观察结果,这将非常受欢迎。但是,对于大型数据集,这是不切实际的。
  3. 批次/小批量:这是一种中间立场的方法。使用批处理,您要等到拥有新观测值的批处理,然后再在整个批处理中训练您已经存在的模型。它不是离线的,因为您没有将此批次添加到预先存在的数据集中,然后在其上重新训练您的模型,并且它不是在线的,因为您正在一次对观测值进行训练,而不仅仅是对一个观测值进行训练。因此,两者都有一点:) 迷你批处理完全相同,只是批处理大小较小,因此倾向于在​​线学习。实际上,在线学习只是批处理大小为1的批处理,而离线学习是批处理大小为整个数据集大小的批处理。ñnn

当今大多数模型将使用批处理/小批处理,并且批处理大小的选择取决于您的应用程序和模型。选择正确的批量大小等效于选择正确的频率来重新训练模型。如果您的新观察值与现有数据之间的差异较小,我建议您使用较大的批次(可能为256-512),相反,如果新的观察值与现有数据的差异较大,则应使用较小的批次(8-256)。归根结底,批处理大小有点像另一个您需要调整的超参数,它是特定于您的数据的


嗨,我想在线问您:在线获取新数据。这种方法是否限制了某些ML模型,我的意思不是整个机器学习。
tktktk0711

您知道使用批处理的任何Tensorflow示例吗?
maxisme

1

您的问题属于在线学习方法的范畴。假设有数据流到来,您可以使用随机示例使用随机梯度下降法来更新模型参数。

如果您的成本函数是:

minθJ(x,y,θ)

其中是参数向量,然后假设流数据的格式为(),则可以使用SGD通过以下更新公式来更新参数向量:θxi,yi

θt=θt1θJ(xi,yi)

这基本上是批处理大小为1的SGD。

还有另一个技巧,您可以采用基于窗口/缓冲区的方法,在该方法中,您可以从流中缓冲一些示例,并将其视为批处理,然后使用批处理SGD。在这种情况下,更新公式将变为:

θt=θt1iθJ(xi,yi)

这实际上是小批量SGD。


0

问题:您应该重新培训吗?

答案取决于您的模型尝试执行的操作以及在何种环境中应用该模型。

让我通过几个示例进行解释:

假设您的模型试图预测客户的行为,例如,在给客户量身定制的报价下,客户购买您产品的可能性如何。显然,市场随着时间而变化,客户的偏好也会发生变化,而竞争对手也会随之调整。您也应该进行调整,因此需要定期进行再培训。在这种情况下,我建议添加新数据,但也忽略不再相关的旧数据。如果市场瞬息万变,您甚至应该考虑仅根据新数据定期进行再培训。

另一方面,如果您的模型将某些成像(例如X射线或MRI)分类为医疗状况,并且模型运行良好,那么如果技术或医疗专业知识没有变化,则无需重新培训。添加更多数据不会有太大改善。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.