算法工程师

算法工程师所处理的算法,并不是计算机系本科课程《算法与数据结构》里那个算法。那门课里讲的,是排序、查找这类“确定性算法”;而算法工程师是用统计方法对数据进行建模的工作,称为“概率性算法”。

算法工程师的水平等级

第一级:“Operating”:会使用工具

这个层次的工程师,对常用的模型比较熟悉,能够找到合适的模型把数据跑起来。

达到这个层次门槛不高。看两本入门教程基本就达到,但是只是掌握了机器学习的应用步骤,找到合适的模型并没有实用价值。如果有两个模型搞一次多回合的比武,每个回合用的数据集不同,而且数据集没什么偏向性,那么最后的结果,十有八九是双方打平。

当然,实际问题的数据分布,总是有一定特点的,比如说人脸识别,图中间怎么说都得有个大圆饼。因此,问“人脸识别用什么模型好”这样的问题,就有意义了。而算法工程师的真正价值,就是洞察问题的数据先验特点,把他们表达在模型中,而这个,就需要下一级的能力了。

会使用工具,在算法工程师中仅仅是入门水平,在解决实际问题时不靠谱儿程度相当高。

第二级:“Optimization”:能改造模型

这个级别的工程师,能够根据具体问题的数据特点对模型进行改造,并采用相应合适的最优化算法,以追求最好的效果。

不论前人的模型怎么美妙,都是基于当时观察到的数据先验特点设计的。比如说LDA,就是在语料质量不高的情况下,在 PLSA 基础上引入贝叶斯估计,以获得更加稳健的主题。虽说用 LDA不会大错,但是要在你的具体问题上跑出最好的效果,根据数据特点做模型上的精准改造,是不可避免的。

互联网数据这一现象更加明显,因为没有哪两家公司拥有的数据是相似的。百度的点击率模型,有数十亿的特征,大规模的定制计算集群,独特的深度神经网络结构,你能抄么?抄过来也没用。用教科书上的模型不变应万变,结果只能是刻舟求剑。

改造模型的能力,就不是用几个开源工具那么简单了,这需要有两方面的素养:

  • 深入了解机器学习的原理和组件。

机器学习领域,有很多看似不那么直接有用的基础原理和组件。比方说,正则化怎么做?什么时候应该选择什么样的基本分布?贝叶斯先验该怎么设?两个概率分布的距离怎么算?要想用这些基础组件自己组合出合适的模型,对他们有深入的了解才有可能做得到。

  • 熟练掌握最优化方法。

机器学习从业者不懂最优化,相当于武术家只会耍套路。这就跟雷公太极和闫芳大师一样,实战起来一定是鼻青脸肿。管你设计了一个多牛逼的模型,如果无法在有限的计算资源下找出最优解,那么不过是个花瓶罢了。

最优化,是机器学习最、最、最重要的基础。你要知道,在目标函数及其导数的各种情形下,应该如何选择优化方法;各种方法的时间空间复杂度、收敛性如何;还要知道怎样构造目标函数,才便于用凸优化或其他框架来求解。而这些方面的训练,要比机器学习的模型还要扎实才行。

根据问题特点调整模型,并解决优化上的障碍,是一名合格的算法工程师应该追求的能力,这一级的工程师具备解决问题的能力了,也是大多数算法工程师能够达到的水平。

第三级:“Objective”:擅定义问题

这个层次的工程师已经成为解决问题的专家,可以快速定义一个实际问题的可量化的目标函数。

当年,福特公司请人检修电机,斯泰因梅茨在电机外壳画了一条线,让工作人员在此处打开电机迅速排除了故障。结账时,斯坦门茨要 1 万美元,还开了个清单:画一条线,1 美元;知道在哪儿画线,9999 美元。

同样的道理,在算法领域,最难的也是知道在哪里画线,这就是对一个新问题构建目标函数的过程。而有明确的量化目标函数,正是科学方法区别于玄学方法、神学方法的重要标志。

目标函数,有时能用一个解析形式(Analytical form)写出来,有时则不能。比方说网页搜索这个问题,有两种目标函数:一种是nDCG,这是一个在标注好的数据集上可以明确计算出来的指标;另一种则是人工看 badcase 的比例,显然这个没法用公式计算,但是其结果也是定量的,也可以作为目标函数。

定义目标函数,初听起来并没有那么困难,其实不然,要做好这件事,在意识和技术上都有很高的门槛。

  • 一、要建立“万般皆下品、唯有目标高”的意识。

一个团队也好、一个项目也好,只要确立了正确的、可衡量的目标,那么达到这个目标就只是时间和成本的问题。

一个项目开始时,总是应该先做两件事:一是讨论定义清楚量化的目标函数;二是搭建一个能够对目标函数做线上 A/B 测试的实验框架。而收集什么数据、采用什么模型,倒都在其次了。

  • 二、能够构造准确可解的目标函数。

目标函数要尽可能反应实际业务目标,同时又有可行的优化方法。一般来说,优化目标与评测目标是有所不同的。比如说在语音识别中,评测目标是“词错误率”,但这个不可导所以没法直接优化;因此,我们还要找一个“代理目标”,比如似然值或者后验概率,用于求解模型参数。评测目标的定义往往比较直觉,但是要把它转化成一个高度相关,又便于求解的优化目标,是需要相当的经验与功力的。在语音建模里,即便是计算似然值,也需要涉及 Baum-Welch 等比较复杂的算法,要定义清楚不是简单的事儿。

一个团队的灵魂人物,就是能够把问题转化成目标函数的那个人。在机器学习领域,算法工程师脚下的进阶之路是清晰的:掌握工具–>会改造模型–>驾驭新问题的建模.一步步脚踏实地地走下去,你一定能够成为合格的算法工程师和解决问题的专家。

版权声明:本文为博主原创文章,转载请注明出处。 旭日酒馆