机器学习从业者们的那些事儿

明确工作问题、收集并清洗数据、搭建模型、得出结果并监测变化,这些过程通常会以不同形式相互连接,很难单独拿出来作为研究对象。

当机器学习项目失败时

机器学习项目失败的情况有以下这么几种:

  • 当数据科学团队搭建了一个从未用过的工具。但是公司的其他部门并不知道他们做了什么,有些数据科学家也并不清楚这些成果能否用于实际生产中。
  • 当数据科学家们创造模型的速度快于将其投入生产的速度,就会产生积压。
  • 数据基础架构工程师和数据科学家是分开的。通道中没有数据时,数据科学家会要求数据基础架构工程师获取。
  • 当公司最终确定产品X的功能后,他们需要数据科学家收集支持这项决策的数据。数据科学家认为产品经理会忽略那些与决定相反的数据,而产品经理会认为数据科学家忽略商业逻辑。
  • 数据科学团队面试了一位数学建模、工程技术能力都很好的候选人。确定录用后加入到垂直应用产品团队,并需要简单的商业分析。数据科学家感到很无聊,所学技能根本用不上。

问题在于数据产品之间缺少沟通并且没有目标。单独割裂的职位划分与工作协同,将影响目标的推进。

将来会不会诞生一个职业:数据全栈工程师 => 数据产品思维 + 机器学习技能 + 大数据工程化技能 + 数据前端可视化技能

要做些什么

理解语境

  • 找准能从机器学习中受益的区域
  • 与其他相关人员讨论机器学习能做什么、不能做什么
  • 让每个人都了解商业策略、风险和目标
  • 明确目前公司有什么类型的数据
  • 对任务制定合适的框架
  • 了解操作限制
  • 提前确定可能的道德风险,例如你的成果有可能被滥用、或被用于宣传
  • 确定潜在的偏见和潜在的负面反馈

数据

  • 制作能收集更多不同数据的计划
  • 将不同来源的数据汇总
  • 处理缺失的或被污染的数据
  • 数据可视化
  • 建立合适的训练集、验证集和测试集

建模

  • 选择使用哪个模型
  • 将资源模型纳入约束条件(即最终模型需要在顶尖设备运行,内存少、延长时间长等等)
  • 选择超参数(包括架构、损失函数、优化器)
  • 训练模型,并进行debug。其中包括调参、查看损失函数、训练错误、验证错误是否有改变、监测模型数据、确定错误来源、改变数据清洗和处理的方式、改变数据增强方式、添加更多数据、尝试不同模型、是否过度拟合。

模型生成

  • 创建一个API或网页app
  • 将模型输出成想要的格式
  • 计划模型多久需要重新训练一次并更新数据

监测

  • 追踪模型性能
  • 监测输入数据,确定数据是否会随时间使得模型失效
  • 与其他人员交流结果
  • 制定计划,如何监测和应对意外结果

难点

处理数据格式、不兼容和报错

处理数据的不一致和报错经常是混乱费力的过程。人们有时会将机器学习和数据科学分开,因为对机器学习来说,有时会直接用清洗过的数据进行训练。然而在我的经验中,数据集清洗和训练模型是相关的:我经常会在训练模型的时候发现问题,只能改变输入数据的预处理方法。