机器学习不只是模型!
传统的软件开发流程大致如下:
相比较于机器学习的对学科性质,传统的软件开发流程并不能解决机器学习开发过程中的问题。
本篇基于前文 机器学习项目周期进行进一步拓展。
一切从数据开始。
对于要实现的项目目标,我们是否能获取到有效数据来支持项目开发?
数据的质量比模型本身更重要,高质量的数据是机器学习开发的关键。
一些可扩展的数据储存方案,包括 Azure Blob、Amazon S3、DynamoDB、Cassandra 和 Hadoop。
但通常我们很难找到符合要求的数据,这种情况下,可以通过第三方服务获取数据,并建立自己的数据管理通道。
当我们拥有有效的数据,就可以对数据进一步进行矢量化和特征化处理,以用作模型训练。
面对业务问题时,选择要使用的模型类型通常是一个艰巨的任务。
开发人员倾向于根据现有文献和以往经验做出第一选择。
一些通用的模型选择法则可以帮助开发人员做出选择。
例如,
选好模型后,开发人员要决定使用哪个框架来实现所需的模型。
近年来,由于出现了通用模型文件格式 ONNX,不同框架之间的交互性有了很大提升。
模型训练是时间成本最高的阶段。
如何选择训练模型的硬件和基础设施,很大程度取决于模型中参数的数量以及数据集的大小。
调参也是模型训练重要的一部分,常用的寻找超参数的方法有「网格搜索」和「超参数搜索」。
更先进的方法,可以使用「贝叶斯优化」和「强化学习」来调整超参数,当然这里存在一些自动调参的工具,像 AutoML。
模型训练完成后,应根据交叉验证准确率、精度、召回率、F1 分数和 AUC 等性能指标对其进行评估。
这些指标应记录在数据库中以备将来使用。
模型经过训练后,利用训练数据集的测试集,应对模型进行全面的测试,这个过程通过 CI/CD 来完成(CI/CD 是一种自动化的系统,可以简化软件交付过程)。
每个模型都应该接受定量的 「单元测试」(链接是关于测试的一些内容)。
模型经过训练和测试后,需要在生产中部署。
当前的实践通常推动将模型部署为「微服务」,或者可以通过 API 调用进行查询和交互的代码包。
成功的部署通常需要构建实用程序和软件,开发人员可以使用这些实用程序和软件来打包他们的代码,并以稳健的方式快速迭代模型。
最后,后端和数据工程师可以有效地将结果转化为大规模部署的适当架构模型。
以上的每个阶段都存在挑战,无论我们处在机器学习开发的哪个阶段,从一开始做好每个阶段的规划,都将帮助我们取得好的结果。
引用
https://algorithmia.com/blog/best-practices-in-machine-learning-infrastructure