算法工程师的核心竞争力是什么?

William(腾讯 算法工程师)回答:

当了一年的鹅厂算法工程师,仅就我浅薄的经验来说一下自己的见解吧~

a73da4577eeb5d176990ac2d8fe4a56d.jpeg

本科及研究生所学的知识,比如高等数学、线性代数、传统机器学习方法及深度学习理论等这些,都只是作为算法学习的基础,并不能成为算法工程师的核心竞争力。

研究生的算法研究和公司里面的算法研究,两者最大的差别就在于:业务和数据

所以算法工程师的核心竞争力到底在哪呢?私认为主要有以下几点:

1. 对业务的见解

之前跟朋友谈起算法业务的时候,有朋友会有一个这样的观点:算法工程师就是一个做技术的,只要做好模型做出好的指标效果就是自己最大的产出。对业务的理解那是产品运营的事情,算法某种程度上就是产品的“外包”,把事情做好就可以了。

我当然是不赞同这样的观点啦。我认为:算法工程师不仅要顺利完成模型的特征产出,自己更要对业务有绝对的把控

63894ce57bd3218af307e2f8bd1b47fc.jpeg

举个例子,假设我是一个NLP(自然语言处理)的算法工程师,现在业务的主线是提升用户的文章阅读体验。如果直接将用户的阅读时长或者日均活跃度作为模型优化目标,想必是非常困难的,甚至是一个不可解的问题。

但是如果将“提升用户文章阅读体验”这个问题,转换成“提升文章的质量”,那就可以用模型建模一篇文章的优质度打分,甚至可以用模型识别低质无营养的文章,那么这里面就有很多方法可以来实现了。这其实就是对业务场景的理解。

所以啊,将业务场景建模成可行的算法问题, 直接奠定了你接下来算法工作的方向,如果一开始的方向就是错误的,又谈何成果呢?

2. 善用业务数据

确定了算法问题以及业务研究方向,接下来就要准备模型的训练数据了。不管是机器学习模型还是深度学习模型,都需要大量的数据来支撑模型的训练过程。

有一句话说得好:数据的质量决定了模型效果的天花板

研究生阶段我们都习惯了使用学术界公开的数据集来训练和验证模型,这些数据集是经过了大量的人力筛选和审核才得到的。而在公司里,大多数情况下,公开数据集和业务场景解决的目标不同,数据分布也不同,所以我们难以直接将在公开数据集上训练的模型直接应用到具体业务中。

因此,如何挖掘和构造优质的业务模型数据,便成为了你与别人打出差异化的关键所在

在公司里,模型的数据肯定不能完全依赖人工标注,这样的做法耗时耗财。而从业务场景下挖掘的数据,必然会存在标签错误的情况。

比如,还是以文章的优质度打分模型为例,那应该如何挖掘优质和低质的文章呢?有的人会说可以用点击和阅读时长数据来挖掘,那如何确保用户看完了这篇文章,这就一定是优质文章呢?又或者,如何能证明这篇文章不属于低俗、口水文、软文等这种类型呢(有的人就喜欢看这种类型的文章,但这种属于低质文章)?此时,我们发现仅仅靠这两个数据是无法满足挖掘数据的质量的,我们还需要引入更多的特征,甚至是数据清洗方法,来辅助我们构造出一份优质的训练数据。

3. 快速实现,快速验证

有了数据,有了模型训练标签,终于可以开始训练模型了,这部分的核心竞争力就和你的基础有关了,比如你积累了多少模型结构,最近看过多少创新性的论文,这些都能帮助你快速地搭建起一个你想要的模型,并迅速地验证模型的效果。

搭建和实现模型,讲究一个原则:奥卡姆剃刀原则。就是最简单的模型结构,往往是最有效的,且能最直接地反映问题。

aeab2f55a9f5220e63f35015dd76f0f4.jpeg

后续模型结构的优化,也应该是基于现有模型结构上,针对业务存在的特定问题来进行优化,优化的方法有很多,比如引入更多的基础特征甚至高级特征,或者额外加入一个简单有效的模型结构。

因为除了你自己,没有人真正关心模型的结构具体是怎么样的,他们只关心最终在业务场景下的效果,所以快速实现和快速验证模型也算是算法工程师的另一基本功。


可能大家日常对算法工程师的理解,主要是在做特征挖掘和模型建模设计,但实际上,对业务的理解和对业务数据的把控,才是决定算法工程师的天花板所在

哪里有理解不正确的地方,也欢迎各位大佬批评指正!

(来自一个虽然很菜,但依旧每天很努力成长的小企鹅 )

36fa45a1071bfb7edf4ea07edbf7c9b9.png

婷播播(腾讯  推荐算法工程师)回答:

业务抽象建模能力。这个是作为算法工程师最能体现其专业性的能力,只有这个能力具备了,后面说的这些能力才会锦上添花。

业务抽象建模能力,说白了就是把具体场景的问题抽象出来,认识到事物的本质,然后用业界常用的方法也好,自己独创的方法也好,去解决业务实际问题。技术问题通常都不是问题,因为没有太多壁垒,尤其是业界的技术,基本是成熟的方案。业界真正的壁垒,是数据而不是技术。

这项能力,是区分一个算法工程师是否真的有算法能力,而不是会几个模型会调些参数。会模型和调参,放之四海之内,只要看点论文看点代码,都不是问题。而真正有能力的算法工程师,是知道为什么会用这个模型,以及在这个模型里为什么要做这种改动,为什么在具体业务场景里,模型会有预期或者非预期的表现。

在业务抽象建模能力基础之上,再来谈谈放大这个能力的其他能力,核心就是沟通能力。

你自己有能力是一回事,让别人认识到你的能力是一回事。大多数人可能觉得做出效果自然别人就认识你的能力,但要顺利做出效果,一定要跟其他同事甚至跨团队沟通,这个时候,好的沟通能力,能让别人有效理解你的想法并觉得有道理。

尤其是和产品的沟通,让产品理解你的想法并认为有效,非常重要,不然他们会用他们的策略思维来不断教你做事情。这也不能怪产品,站在他们的角度,他们有他们的诉求,也要产出。

还有就是和老板的沟通。遇到开明一点的老板,会给你足够的空间,但大多数的老板都需要掌控感带去的安全感。如果他们没有理解你的想法,那你就会经常被challenge,被施压,在实施过程中一有点问题或者不如预期效果,就会被叫停,无法继续沿着自己的思路迭代,这个是非常头痛的,因为一个算法落地,往往要经过不断的迭代,才会有好的效果,这个过程要不断地运用上面说到的抽象建模能力。甚至有的老板控制欲更强,即使做出了效果,如果超出了他的认知范围,也不让你上线或者全量,他觉得你这是胡搞出的效果,就非常憋屈。所以一定要和老板沟通好,让老板理解你的想法并得到他的支持,这个时候你们的利益是一致的,一旦外界有声音质疑,老板还能帮你挡一挡,在没有资源的时候还能帮你去协调资源。

业务抽象能力是一个好的算法工程师的专业体现,而沟通能力是为了让专业能力更好落地的能力。沟通能力不管哪种行业,都是非常非常重要的,说白了,事情做到一定程度,就是人和人打交道,这时候事的比重反而小了,因为绝大多数情况,没有你,这个事也可以有若干的他她它来做,这个世界上没有几个人是缺了你不行的角色。

学习能力也是让业务抽象能力这个专业性能力更有效落地的能力之一。前沿算法更新很快,学术界各种顶会论文非常多,其中不乏一些仅供学术研究的。但也有一些在业界非常work。算法工程师需要不断学习新的知识,来紧跟最新进展,并保持这种敏感性。多看看论文和技术分享,多学习别人怎么做的,别人在相似的业务下采取什么做法,很多时候自己就会对当下场景的问题有新的思路。

学习能力还包括对具体实施过程遇到一些没有接触过或者接触不深的方面的学习。算法的落地涉及面很广,除了算法本身,往往还有数据侧工程侧多方面,而很多时候算法工程师不可能每个点都非常精通,一般是遇到了再去了解学习应用,这时候这项能力可以帮助算法快速落地。

学习能力其实也不限于算法工程师,只是这个岗位突出了这项能力的重要性。抛开岗位来说,作为一个人,理想状态是终身学习。

——The  End——

5272c3f153b14930ab01848800445e3a.gif

d84e2b8a2bd083db1b859517bc5df98c.jpeg

分享

收藏

点赞

在看

0ae40a2b4914bcd21eac8ce382077f98.gif

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值