对算法工程师的一些理解

在百度实习大概有半年了,相比于在校的时候,半年的时间让我对算法工程师这个岗位有了很多不一样的理解。
离职前夕,特此记录。

关于模型设计

在学校的时候,大家做模型一般都是通过参加算法比赛、课程大作业或者实验室的项目,一般是一个从零到一纯粹做模型的过程。
而在工业界很少能接触到一个从零到一搭建模型的过程,大概率的情况是基于现有的模型去提升效果。
我们几乎不需要修改现有的经典算法,我们只需要把它们用在适合他们的地方就好了。
在这种时候,我们不能去推翻原有模型的基本框架,只能在框架的基础上去延伸、拓展,从而提高模型的效果。
所以,我个人的理解,在第一版模型设计的过程中,需要作者对模型效果和可扩展性的考量非常的多,如果设计一个牛逼的模型架构是一门学问。(毕竟在公司里是不能推倒重来的)

关于工程能力

在学校的时候,同学们比较关注的事情主要集中在刷题、推导算法原理、参加算法比赛,因为这些事情做好总是会有几个好公司的Offer,同时大部分同学也会觉得,工程化这种能力应该是研发同学的事情。
在工业界,其实对算法工程师的工程能力要求还是蛮高的。我的理解是AI目前处于一个落地的过程,对于高置信度的事情,大家的工作很大一部分集中在了工程化这类事情上。

关于策略

在学校的时候是很少听说做策略解决问题,大家会直接把数据扔到模型里,然后特征工程、挑参、看效果的循环。
在工业界大家做策略还是蛮多的,做策略就相当于画格子,非常适合快速去解决case驱动的业务中的问题。
至于为什么大家还是很喜欢做规则,我的理解是,一方面,业务方会经常遇到突然冒出来的一类case,调整原有模型的参数可能会影响原有的效果,风险很大,这时候就很适合做一条策略,把它们搞定。另一个方面,规则的可解释性比较强,出现问题的时候可以快速定位,这也是工业界喜欢用LR的一个原因。
据说凤巢在很久以前在解决CTR预估问题的时候,就是人工迭代了几千条策略,不过现在早已成了历史。

关于数据

在学校的时候总听网上说,现在是大数据时代,数据里有黄金,然而自己处理问题的时候,能拿到的数据最多也只有几万条,少的时候只有一千多条,这就导致了大家在做比赛的时候,经常需要对线上验证集的数据分布进行拟合,同时也很难培养出同学对数据的感觉。
在工业界,数据是解决所有问题的源头。拥有越多的数据,说明我们可以挖掘出的与结果相关的信息就越多,我们的模型就会越精准。
比如说query分类这个简单的NLP任务,我们如果只知道query,我们可以把分类器准确率做到85%,但是如果我们知道用户搜索这个query后点击了哪些url,我们是一定可以更好的理解用户的意图,提高准确率的。
工业界遇到的另一个问题就是数据dirty,因为数据量太大了,而且大部分任务并不像CTR预估这样的任务,用户点了就是点了,没点就是没点。大部分任务的label本身就是模糊的,例如,这个用户的行为有没有恶意点击,此时此刻用户搜索某个query的意图是什么。
如果能拿到一份100%clean的数据,那么我们用一个非常简单的模型,就可以达到非常高的准确率。
所以,如何在有限的条件下,获得更多更高置信度的训练集是一个非常有价值的问题。

关于资源

在学校是很少会考虑资源问题的,比赛给的数据集一般单机都可以跑得动,顶多需要加一个内存,深度学习的同学需要加一个1080。如果没有的话,那就慢慢跑,反正时间上是没有那么迫切的需求。
在工业界资源非常的重要,但是大部分团队的资源都不是非常充足的,所以优化代码效率就成为了保证例行任务正常产出的keyPoint。
一般来讲,模型的复杂度只会提升,不会下降;任务需要产出的deadline只会提前,不会后移。
所以资源的紧迫,让我们在工程化的时候需要有多方考量。

最后

以上是一个水硕的一些感悟,受限于我的个人能力、人生阅历以及个人学历。
算法工程师跟我在学校里想的一点都不一样,我以为我会每天忙着想新的idea,加入新的特征,就像打比赛那样去迭代。然而我只是偶尔试试自己的idea,在偶尔效果好的时候,仔细的考虑资源问题,然后写一份工程化加到大模型里面。
公司也跟我在学校里想的不太一样,我以为我们会日常穿着大拖鞋、大裤衩子讨论技术,一直保持那份对技术的热情。然而大家总是更热衷于讨论装修、讨论一件事情做于不做的收益以及写ppt。

猜你喜欢

转载自blog.csdn.net/Daverain/article/details/83451054