随着人工智能和机器学习应用范围越来越广泛,大量的企业会将各种机器学习模型部署到生产实践中。在技术驱动型的中小型企业中这是一件相对容易的事情,因为没有繁琐的流程、利益冲突和监管限制,通常能够很容易的推动新技术的应用。
然而在大型企业中,机器学习的实践远没有小企业那么简单快捷,涉及到数据、模型验证、商业价值、隐私、伦理、安全等等诸多因素,因此需要一套标准流程来统筹兼顾。这个流程通常包括这些内容:
- 立项阶段
- 商业价值分析:(分析模版:需要明确这个模型能够带来的利益,整个项目是否成功的标准能否量化,对现有方案的提升程度,给谁带来利益)
- 可行性分析:数据是否可以获取、质量是否足够
- 风险分析:
- 数据隐私分析:涉及到的数据是否敏感(如涉及个人隐私),是否有相应的措施降低数据泄漏风险,增强隐私保护
- 伦理分析:所使用的模型是否会带来歧视、不公平等道德问题
- 其他可能的政策风险
- 项目管理计划:明确交付成果、交付对象、完成时间、经费来源、团队人员分工,需要哪些外部团队合作
- 启动阶段
- 分配计算机资源(计算集群或者云计算服务器),并明确回收时间
- 准备数据:
- 授权数据权限(这里需要IT部门架设安全的隔离环境来处理敏感数据)
- 建立管道
- 检查数据质量:缺失值、数值单位、数据类型、定型变量检查、重复值、异常值、bias、
- 数据伦理:少数群体的数据量是否充足、是否存在敏感的个人信息(年龄、性别、种族、信仰、健康状况、国籍……)
- 开发阶段
- 数据探索性分析 (EDA)
- 模型选择与训练
- 特征管理
- 超参数优化
- 交叉验证:是否存在数据泄漏,overfit或者underfit,是否对于某些具有特殊属性的样本精度明显偏低
- 模型解释:各个特征对于输出结果的影响是否合理,是否包含敏感数据(性别、年龄等)
- 模型稳定性:模型性能是否会随着不同的样本或时间波动
- 模型的其他局限分析:例如伦理或偏见分析
- 监控日志模块:详细输出模型的训练与预测时重要参数
- 代码打包:各个功能模块化,遵守标准的目录和文件结构,发布artifactory
- 测试阶段
- 数据测试:
- 单元测试:
- 性能测试:训练时间、预测时间
- 精度测试:
- 稳定性测试:微小扰动是否带来预测的巨大变化、对抗攻击测试(例如Fast Gradient Sign Method)、对于相同输入能否产生稳定输出
- 伦理测试:模型输出是否有bias,合理特征重要性
- 用户测试 (UAT,User Acceptance TEST):业务端用户能够接受最终模型
- 审阅阶段
- 逻辑检查:是否存在 magic number,死循环,错误条件判断等
- 代码质量检查:代码规范、注释、文档等,没有冗余代码或者重复造轮子
- 日志检查:模型输出有意义、必要的日志信息
- 测试覆盖:100%单元测试、100%代码风格测试、单元测试覆盖尽可能多的场景
- 文档检查:文档是否详细到任何人都可以轻松接手,有清晰可用的使用手册(训练&预测、参数配置),故障诊断
- 伦理检查:模型预测结果是否给部分人带来不公平的劣势/优势
- 流程检查:所有流程是否严格遵守了并有完整的文档记录
- 部署阶段
- 生产数据管道搭建
- 模型训练管道搭建
- 模型部署管道搭建:考虑batch / real time API / streaming 等不同的模型部署场景
- 紧急联系人确认
- 监控阶段
- 数据特征监控:是否有data drift风险
- 模型性能监控:是否有model drift风险
- 商业价值监控:关联业务端的相关指标监控
- 阈值定义:如何触发重新训练
需要强调的是,以上流程的设立是为了服务并促进业务的优化,流程的执行本身不是目的。如果繁琐的流程成为了业务开展的阻碍,则需要停下来思考,这些流程是否有必要进行精简。