有商业洞察力,抓住产品方向,了解行业发展前景。

算法不是万能的,机器学习模型不总奏效,有一定的概率失败。任何数据导向的项目都有可能会失败,原因有很多:

  • 数据量和数据质量有问题
  • 缺乏合适的算法
  • 模型训练需要过高的代价,计算力不够
  • 因为各种bug而导致的无法收敛

很难量化模型为公司带来的直接收益。换句话说,对于算法工程师制定KPI是比较难的一件事,而算法工程师很难因此获得公司老板的嘉奖。

从数据收集、清理、建模、调整、到部署上线。

作为一个智力密集的岗位,从业者的质量比数量重要,一个厉害的算法大牛比一百个新手工程师更有意义。

给出一个简单例子以供参考,比如你在一家互联网公司想做一个信用卡欺诈预测模型,希望可以实时检测信用卡盗刷。基本的流程:

  • 了解可使用的数据范围。比如你们有客户的基本信息,消费的信息(地点、时间、金额),消费场所的信息(是否是欺诈高发行业)。
  • 收集和整合一切可用的历史信息,对数据进行必要的清洗。
  • 使用可视化技术对数据进行初步分析。可视化可以在建模前帮助你节省大量的时间。
  • 考虑要使用的模型和建模。以这个问题为例,如果我们把盗刷考虑为独立事件,那么可以简单的用普通分类器,如逻辑回归先建个模型试试。我们也可以把盗刷考虑为在时间轴上的事件,即你的消费历史会影响盗刷的可能性,那么就要考虑时间序列的上的相关性,可以使用循环网络或者把时间作为一个输入用于建模。
  • 对模型进行回测和验证。在正式交付上线之前还需要进行大量的验证、微调、和性能优化。如果模型A需要3分钟做出预测准确率为99%,而B模型只需要3秒但准确率是98%,可能我们会选择模型B。
  • 将预测模型部署上线,并进行后期维护。随着收集到了新的数据,对模型进行线下更新训练并替换线上的模型。

不难看出,这一套流程中处处都要求极好的工程能力。一个人很容易可以拥有其中一部分技能,但很难同时掌握所有的技能。这解释了为什么高端的机器学习工程师“洛阳纸贵”,这也是检测你是否合格的一个标准。

我描述下自己的工作流程,中间顺带说明要掌握的技能,这样直观些。

  1. 了解需求,考察数据。和产品和运营开会,了解她们的需求,自己去数据仓库中考察各种数据(写HiveQL,类SQL语言)。
  2. 生成原始特征表。考察完之后将要用的数据汇总到一张Hive表中,作为原始特征表,这张表为后面的特征工程提供原始数据(写ETL)。
  3. 模型选择。将问题抽象成分类、聚类或者是标注问题,然后选择一个模型(熟悉机器学习算法)。
  4. 实现模型,或者用开源工具包。用开源工具包需要先熟悉接口(熟悉机器学习算法或是开源工具包,自己实现的话用CPP或是Python,Java写矩阵运算有点尴尬)。
  5. 特征工程。根据2中的原始特征表生成4中模型需要的数据,特征的增删改都需要在特征工程中完成。特征工程是整个过程中用时最长,影响最大的环节,需要工程师对业务深刻了解。(一般是计算密集型程序,单机跑太慢,用分布式集群跑,就得用MR程序或者Spark程序,现在比较流行Spark)。
  6. 将结果数据写回Hive,然后生成抽查数据,让运营检验(写HiveQL)。 总结起来,一个数据挖掘工程师工作中用到的技能包括HiveQL、ETL、机器学习算法、一种强类型语言(CPP/Python/Java也行吧)、Spark/Hadoop。

算法工程师所面临的挑战与机遇都来自于如何更好的对模型进行解释与包装。算法的目的是为企业创造价值,而不是单纯实现高精度。从职业角度出发,要在干活的同时学习如何“推销自己的工作”,防止受到不公平的对待与职业天花板。

好的机器学习算法工程师:

  1. 好的编程(工程)能力
  2. 经典算法能力
  3. 学习能力(紧跟技术发展)

好的算法工程师必须先是一个好的软件工程师,因为没有什么好的算法是可以脱离工程实践而成立的。

研究员,算法工程师,软件工程师,这三者中,算法工程师相当于研究员到软件工程师的桥梁。

对于一个算法工程化的问题:

  • 研究员更关注的是理想环境下算法的理论创新,保证算法模型的正确性和创新性;
  • 软件工程师更关注的是支持算法运行的工具的稳定和高效,比如tensorflow这个平台能否稳定的运行,spark平台能否做到灵活扩展,算法所需要的数据能否正确准时的存储到redis、hdfs这些数据库或文件系统中。
  • 而算法工程师就像一个安装和组装的师傅,把“算法模型”这个复杂的部件“基本正确”的安装到大数据平台这样一个底座中去。

相关性计算

面试考察方面:知识、工具、逻辑、业务。

很多研究者认为,深度学习的本质就是做两件事情:Representation Learning(表示学习)和 Inductive Bias Learning(归纳偏好学习)。

流程:

  1. 公司制定一个项目
  2. 产品经理开始策划该项目,提出业务需求
  3. 将产品经理需求转化为数据需求
  4. 拉取服务器日志文件
  5. 根据需求,开始提取数据
  6. 数据处理,特征研究(无限循环特征研究,这是最耗时间的阶段)
  7. 寻找合适的模型
  8. 评估模型
  9. 返回第6步,不断重复此过程

References

  1. What is the career growth path for a machine learning engineer (not ML/data scientist)?
  2. 做机器学习算法工程师是什么样的工作体验?
  3. 机器学习数据挖掘类工程师平时主要的工作内容是怎样的?