实验可以推动项目取得可行性。这些假设是可验证且可重现的。运行实验的目标是通过评估各种模型架构和功能,持续进行增量改进。在进行实验时,您需要执行以下操作:
确定基准性能。首先,建立基准指标。基准就是用来比较实验的评测棒。
在某些情况下,当前的非机器学习解决方案可以提供第一个基准指标。如果目前不存在解决方案,请创建一个具有简单架构和几个特征的机器学习模型,并将其指标作为基准。
进行单次细微更改。一次只做出一项细微的更改,例如对超参数、架构或特征进行更改。如果更改可以改进模型,则该模型的指标将成为新的基准,用于比较未来的实验。
以下是可做出一项细微更改的实验示例:
- 包含功能 X。
- 在第一个隐藏层上使用 0.5 丢弃。
- 计算特征 Y 的对数转换。
- 将学习速率更改为 0.001。
记录实验的进度。您很可能需要进行大量实验与基准相比,预测质量较差(或中性)的实验仍然有助于跟踪。它们可以表明哪种方法无效。由于进度通常是非线性的,因此除了提高基准质量的进度外,请务必突出显示您发现的所有行不通的方式,以表明您正在解决问题。
由于对真实数据集进行每次完整训练可能需要数小时(或数天),因此请考虑同时运行多个独立实验以快速探索空间。随着迭代的进行,您有望更接近生产所需的质量级别。
实验结果中的噪声
请注意,您在实验结果中可能会遇到并非由于模型或数据更改而产生的噪声,因此很难确定您所做的更改是否真正改善了模型。下面列举了一些示例来说明可能会在实验结果中产生噪声的因素:
数据重排:数据呈现给模型的顺序可能会影响模型的性能。
变量初始化:模型变量的初始化方式也会影响其性能。
异步并行:如果使用异步并行方式训练模型,则模型不同部分的更新顺序也会影响其性能。
评估集过小:如果评估集过小,则可能无法代表模型的整体性能,从而导致模型质量出现不均匀的变化。
多次运行实验有助于确认实验结果。
在实验实践方面达成一致
借助一组既定的做法和工件,您的团队应该能够清楚地了解什么是“实验”。您需要提供包含以下内容的文档:
工件 -实验的工件有哪些?在大多数情况下,实验是可以重现的经过测试的假设,通常通过记录元数据(如特征和超参数)来重现实验之间的变化以及这些变化对模型质量的影响。
编码实践。每个人都会使用自己的实验环境吗? 将所有人的工作统一到共享库中的可能(或简单)吗?
可重现性和跟踪。可重现性的标准是什么?例如,团队应该使用相同的数据流水线和版本控制做法,还是可以仅显示图表?如何将实验性数据保存为 SQL 查询或模型快照?各项实验的日志将记录在何处:在文档、电子表格还是用于管理实验的 CMS 中?
预测有误
现实世界中的模型并不完美。您的系统会如何处理错误的预测? 尽早开始思考如何处理它们。
最佳实践策略鼓励用户正确标记错误的预测。 例如,邮件应用会将用户移至“垃圾邮件”文件夹的邮件记录下来,从而捕获被错误分类的电子邮件,反之亦然。通过捕获用户的标准答案标签,您可以设计用于数据收集和模型再训练的自动反馈环。
请注意,虽然嵌入式界面的调查问卷会捕获用户反馈,但数据通常是定性的,并且无法纳入重新训练数据中。
实现端到端解决方案
当您的团队对模型进行实验时,最好开始构建最终流水线的某些部分(如果您有相关资源的话)。
建立流水线的不同部分(如数据接收和模型重新训练)可以更轻松地将最终模型投入生产。例如,获得用于提取数据和提供预测的端到端流水线有助于团队开始将模型集成到产品中并开始进行早期阶段的用户测试。
排查项目停滞的问题
您可能会遇到项目进度停滞不前的情况。也许您的团队一直在做一个有前景的实验,但几周都没有成功改进模型。您应该怎么做?以下是一些可能的方法:
战略。您可能需要换个角度来解读这个问题。在实验阶段花费时间后,您可能会更好地了解问题、数据和可能的解决方案。深入了解相关领域后,您就可以更精确地构建问题框架。
例如,您可能最初想使用线性回归来预测数值。遗憾的是,数据不足以训练出可行的线性回归模型。也许进一步的分析可以通过预测样本是高于还是低于特定值来解决问题。这样,您就可以将问题重新解读为二元分类问题。
如果进度比预期慢,不要放弃。随着时间的推移,增量改进可能是解决该问题的唯一方法。如前所述,每周的进度可能不会相同。通常,获取可用于生产环境的模型版本需要大量时间。模型改进可能是不规律的,并且无法预测。在进度缓慢的时期之后可能会出现提升高峰,反之亦然。
技术。花时间诊断和分析错误的预测。在某些情况下,您可以通过隔离一些错误的预测并诊断模型在这些实例中的行为来找出问题。例如,您可能会发现架构或数据存在的问题。在其他情况下,获取更多数据会有所帮助。您可能会收到一个更清晰的信号,表明您在正确的方向上,或者可能会产生更多的噪声,表明该方法中存在其他问题。
如果您正在处理需要人工添加标签的数据集的问题,则可能很难获取加标签的数据集以进行模型评估。查找相关资源,获取评估所需的数据集。
或许没有可行的解决方案。为您的方法设置时间框,如果您在该时间范围内没有取得进展,则停止。但是,如果您的问题陈述很强,那么可能有必要给出解决方案。