算法工程 从学校到工作

学校->工作
很早就想开始写这篇踏入工作后自我感受的文章,但是因为各种事情以及确实没有思考好自己要写些什么,所以耽搁了很久。已经进入公司工作了两个月,目前虽然对于当前业务的整体算法策略有了一定了解,但是依然属于小白阶段。学校中学到的那些知识逐渐开始在工作中使用,但也逐渐暴露了很多问题,这篇文章主要想谈谈学校与工作在算法开发方面有哪些差异,以及工作中的经验总结,我还是一个小白,欢迎大家一起讨论!

1.职场思维 vs 学生思维在学校学习时,一般我们总考虑将某个知识点学习完整,比如对于LR,不仅要了解它的使用方法,还要知道它的原理、推导、极大似然思想等等;对于Xgboost,除了会调用陈天奇大神的接口,还要学会树构造过程中的思想、损失函数等。学习这些能够让我们对于某个算法模型有完整的理解,而完整的理解对于我们调试参数、面试、问题应用等有不小的帮助。而在工作中,尤其对于业务算法工程师来说,大部分情况还是直接调接口,很少情况下会有自己造轮子的情况存在。如果遇到熟悉的模型,调试起来还会比较顺手,如果是不熟悉的模型,而任务又比较急,那么可能我们只能按照前人的做法照葫芦画瓢,没有办法用自己的理解解决问题。相对于工作,学校中的自己有大量的时间可供我们进行基础理论的完整学习,个人理解更加重要。而工作中,团队合作显得更加关键。只要能完成一项工作,除了违法乱纪,采用什么方法都可以,比如麻烦别人帮你开发某项功能,一起和同事查bug等,当然,合作共赢是关键。

2.业务能力技术是为业务服务的,如果没有好的业务,再好的技术也无法发挥它的价值。对于算法工程来说,理解业务对于问题定义来说是至关重要的。从我的感受来说,业务理解可能包含对整个业务的理解,整体业务下又可以分为哪几个小业务,小业务中又有哪些问题需要解决,解决这些问题是否能否采用算法策略的方式,而某个问题是用规则好还是模型好等等等等。老司机的业务Sense要比我这个小白高得多,mentor的意见和理解经常对我产生极大的帮助。可能对于广告/推荐/搜索等成熟业务来说,理解起来可能只需要结合部门的目标就可以了(不是很懂,一起讨论),像我们这种业务业界没有一个成熟稳定的方案,各家公司采用的均不相同,如何让算法在业务中发挥更大的价值显得更加关键。对于我来说,现阶段还是要积累经验,因为业务sense不是一朝一夕能达到的,跟着mentor和同事们学习才是最快的提升方式。

3.工程能力大部分时候,我们并非是“研究员”,而是“工程师”,这就对我们的代码能力提出了挑战。一般来讲,算法策略分为两个步骤:离线调研和在线实验。在离线调研阶段,涉及到问题定义、样本选择、特征工程、模型训练等,每一个步骤基本都需要一定的代码能力,比如样本选择我们需要学会写复杂的HiveSql/Scala/Python来跑Hive/Spark/MapReduce等。由于我所处的业务不像广告、推荐等现成的方案比较多,有时会发现给样本标记Label都比较有讲究,而并非仅仅是二分类标记0/1或者回归问题把某个列当作label就可以了。这时候询问一位老司机远远比自己琢磨更加有效(特别有体会,工作中一定要多问,这里特别感谢帮助我的同事)。以前觉得sql就是简单的select,工作中才发现原来还有开窗函数、正则表达、json解析等。尤其在了解了开窗函数之后,发现以前好多自认为只能用MapReduce解决的问题直接用hive就能解决了(可能还是我太菜了…)。在线实验阶段,更加需要代码功底,因为“线上无小事”,一个不小心就会导致服务瘫痪,给公司造成的利益损失是相当大的。线上一般都会采用C++/Java等语言来编写,需要能很好地理解和阅读前人的代码才能够写出一手自己的好代码。在大公司中,可能有自己的工程框架,也需要去理解和学习。在工业界,实践永远比理论来得重要。学校中,如果我们没有好的项目,可能只能在离线阶段进行提高,比如Kaggle/天池、Github等,这时候的数据处理能力、分析能力和可视化能力对于今后的工作是至关重要的。比如,熟练掌握pandas、numpy等工具能够较快地提高你的工作效率。想完成目标时,如果必须Google一些常用的Api,势必延长工作时间,交付能力大大降低。工作后,“上线”意味着观察一个算法策略在具体业务上的表现,也是我们发挥算法作用的时刻,如果效果很好,意味着你直接给公司带来了巨大的利益;但效果较差的话,也需要非常谨慎地思考究竟为什么变差,思考背后的逻辑,从业务角度出发总结原因,而不是仅仅从技术角度出发。比如首先要考虑我的问题定义的是否与实际业务有偏差,为什么与预期不符,而后再去考虑我的这次调参是否有问题、模型是否有问题等等。当然,我还没有涉及到具体的上线,所以这部分的感受比较浅,欢迎大家一起讨论。

4.算法能力既然是算法工程师,算法当然是很关键的,校招面试时大部分的准备也在于此,但在工作中使用的算法与在学校中学习的算法还是有一些区别的。学校中,特别是发论文的时候,为了零点几个pp可能都要花上不少的时间在神经网络结构/参数上下功夫,但工业界大部分时候并不是这样。工作中其实需要的是产出能力,那么在为一个新问题建模的时候,不可能选择一些需要自己编写的比较复杂的模型,大多数时候还是要用到公司平台或复用之前的模型策略等。特征工程可能也不能做的比较细,大部分时候都是快产出快实验的方式,比如LR/XgBoost等好部署、可解释性强的算法。如果有效果,再去不断迭代提高模型的效果。当然,不排除像旷视、商汤等视觉公司为了提高效果不断优化的情况,但“研究员”的岗位还是比较少的而且产出无法衡量。同时,还要注意的是也要积累非机器学习算法的能力,比如图、树等,这些算法并非空泛地存在,总有它存在的场景。其次,工作中能发挥好的效果的算法相对于学术界是少之又少 ,甚至让你少到感觉一个Java程序员学两天也能会用而且人家工程能力还比你强的地步,然后开始怀疑这一行是不是以后要被淘汰了。我也才刚步入职场,不能说这种想法的对错,但是从我的短短两个月工作时间来看,想要让算法达到一个好的效果,经验也是很关键的。算法不光是模型训练,如何为某个业务建立算法模型才是最关键的。这就好比架构师对于普通程序员,架构师有时不需要写代码,但是他们高屋建瓴,能一眼看破问题的所在。而且随着学术界的人才不断往工业界进发,不断会有学术界新的模型进入到工业界中,比如强化学习不再仅仅是玩游戏,而是切实应用到业务中;Kaggle中也不断有深度学习方法应用到tabular data上等等。如果在算法上就此止步,那么算法工程师的未来也会模糊。最后,即便我们是工程师,但也要不断去阅读新的论文来丰富自己的算法sense。算法路漫漫,入行深似海。终身学习,才是王道。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值