关于AI算法工程师的自我修养?
来源:知乎
本文仅作学术分享,著作权归属作者,侵删
原文地址:https://www.zhihu.com/question/425088404
AI热潮到来差不多4~5个年头,产业界关于AI算法工程师要求和预期与热潮初期相比应已大为不同,对于刚入职和即将入职的算法工程师 or AI从业者你有什么样的建议?
针对的对象包括:学生,职场(准)新人等
包括但不限于的讨论:炼丹、工程和业务沟通平衡,公司部门方向选择,克服新人焦虑,学生思维转变,技能补充,研究课题(影响面大、痛点需求),工作方法论,职场规则,工作学习生活平衡,保持自律性技巧...
Naiyan Wang(CS PhD, 机器学习话题优秀答主)回答:
目录
合格的职场人
合格的工程师
合格的算法工程师
这样一个好问题居然只有一个抖机灵的回答,我来快速抛砖引玉一下。这个问题我觉得可以从三个层面上来说:一位合格的AI算法工程师,首先要是一位合格的职场人,其次要是一位合格的工程师,最后才到AI算法工程师。很多新迈入职场的同学问题并不出在最后一环,而是在于前两部分。
所以下面从这个三个方面展开聊聊。
合格的职场人
这点看上去显然,但恰恰是很多初入职场的同学最为欠缺的。从学生思维转变成工作思维,这是很多新入职的同学迈不过去的一个坎。具体来说,合作能力,沟通能力,展示能力,这些软性素质是在职场顺利工作的根基。
合作能力
很多同学在学校的研究工作基本上是和导师单线联系的模式,虽和实验室同学有沟通合作,但一般不会超过三五个人的范畴,鲜有同学能真正接触并参与到大规模的产品,并了解到最终deliver一个产品背后不同职位的分工合作。工程师在这过程中是重要的一环,但不是唯一的一环。甚至在复杂的系统中,工程师负责工作内部也是有诸多的上下游合作。能够站在上下游的立场和需求上思考问题,能理解不同角色的苦衷,这合作就已经成功了一大半了。
沟通能力
接上一点,为了实现高效的合作,在公司中每一位同学必须保持高效的沟通。大家有一个常见的误解便是沟通能力强弱更多是由每个人的性格决定,而我认为有效的沟通是可以通过后天的刻意训练来习得。沟通的本质是在正确的时间点以正确的方式传达正确的信息。这其中的每一点都不是玄学,而是可以通过具体示例和训练来说明的,这里就不展开了。
展示能力
这一点如果是博士或者科研做的比较多的同学应该深有体会。在工作中,对展示能力的要求其实并不比科研要弱。良好的展示能力是前两点的基础,这既包括讲也包括写。工程师需要良好的展示能力来讲清你的想法和工作。小到组内的工作汇报,大到参加大型公开会议做报告其实本质都是一样的。展示能力并不是堆砌复杂的辞藻,华丽的图表,而是清晰的逻辑与准确的措辞。其实严格来说展示能力的培养不一定要到工作之后才可以开始,抓住每一次做presentation的机会,甚至每一次组会的机会,不要害羞不要害怕,相信在入职的时候你就已经比同期的同学强一截了。
合格的工程师
工程师在一个团队中的角色是problem solver,也就是为了达到产品或者系统设定的目标,去把设想变成现实的人。除了扎实的专业能力之外,要进阶还有以下几个我觉得重要的方面:
项目中的全局观
前面提到工程师在一个大的项目和产品中往往需要和不同角色配合,那么主动思考技术怎么能贡献于整体项目目标就尤为重要。以项目目标为指挥棒,而不是自顾自地考虑所谓高大上的技术方案。用最简洁的技术解决问题这恰恰是内功的体现。甚至很多时候,由于各种客观条件限制,没法去选择技术上最合理的方案来执行。在此时如何取舍来达成目标,就更考验工程师的智慧和全局观了。
定义问题的能力
在工作中,我们遇到的问题会是多种多样的。不像在学校,往往解决的是一个定义得非常清晰的通用问题。在工作中,由于产品和项目需求多样,我们要解决的是一个特定场景中的细分问题或者是一个可能不复杂但是全新的应用。虽有各种公开的论文或者代码可以参考,但生搬硬套往往都不会是最优方案。在解决问题之前,我们要先考虑清楚这个问题的输入输出是什么?和已有的通用问题区别是什么?有什么样的先验知识可以利用优化问题或者简化问题?来自产品的问题是怎样抽象成一个严谨的描述?准确地想清楚要做什么事情项目就已经成功了大半。
独立解决问题的能力
在解决问题的基础之上,还有重要二字:独立。学生时代以上课学习为主,非博士的同学可能很少能有独当一面来解决问题的机会,过程中往往也多有指导。工作中,要解决的问题可大可小,但切记做一个让同事和领导放心的靠谱的人。我们经常会谈到一个词,管理成本。这并不是指一位同学具体解决问题的技术能力如何,而是在解决问题的过程中,你的leader和同事需要花费多少精力。管理成本越低的同学,在解决问题过程中需要的指导精力越少。理想状况下只需要leader交代清楚要解决的问题,便可在解决问题的过程中独立规划,自主沟通。如有困难,也可以整理好并及时主动提出需求。要达到这一点,其实是需要综合以上所有的能力。
合格的算法工程师
最后的最后才会到算法工程师,这毕竟是最细分的环节。每个公司对算法工程师的定义不尽相同,所以就不谈具体的技术细节了,只能从个人角度谈谈。有以下觉得比较重要的三个点:
优秀的实现能力
这一点其实已经老生常谈了,算法工程师哪怕是算法科学家都需要有能力把想法变成runnable code。根据团队分工和项目不同,有的需求是只需要证明想法可行,有的是需要一个prototype,有的也可能需要直接推到产品或者上线系统中去。无论是哪种情形,有优秀动手实现能力的同学都会占有巨大的优势,哪怕就算是算法不可行,实现能力强的同学也可以快速试错快速迭代。这样的能力无论何时在何团队都会是宝贵的。
除此之外,实现能力不仅仅局限于写出来,写的快,还应该包括写得好,写得美。把代码写得简洁易于维护,可能并不会直接帮助到算法研发,但是从长期来说,这是在一个周期较长的项目中保持效率很重要的一点。
对前沿进展保持追踪
算法工程师不同于其他职位的工程师,最起码在现在这个阶段技术迭代的速度是以月为单位的。所以保持前沿的追踪是非常有必要的。但不同于做科研,算法工程师了解前沿的目的不一定是要在此基础上继续开拓创新,而是能对已有的技术深入理解,去伪存真,以便更好地在业务中为我所用。当然对待新技术也不应该盲从,而应该看清想清之后再动手。最好能有同事朋友针对paper进行讨论和critique。
扎实的计算机原理基础
不了解算法部署的平台谈研发高效的算法就像是空中楼阁。虽然这可能在初级算法的研发中并不明显,但是会成为很多同学进阶中的一道坎。这一点对于非科班转行来做算法的同学尤甚。相比于应试教育式的学习,更重要的是理解系统为什么被设计成了现在这个样子,在这样的过程中做了什么样的取舍,以及作为上层用户这样的取舍对算法设计意味着什么。所以不用担心,补习工作中所需要的知识,这个工作量是远比学习一遍本科计算机专业课要小很多的。
以上是我在这几年的工作中总结出的部分想法,希望能够帮助新入职场的算法同学们少走弯路,也祝愿大家能够在产品和项目中发挥更大的价值。
武侠超人(腾讯高级算法研究员)回答:
从以下几个方面谈一下自己的建议:
公司选择:这个问题其实挺难回答的,要综合看你的水平、出身、眼界、胆量等等。前提是你收割了各家公司的顶尖offer。以自己身边的师兄和同学为例,每一届最优秀的那拨人除了去阿里星之外,其实去BAT大厂的同学并没有很多,他们最终还是选了当年看上去刚刚起步的抖音、快手、拼多多这种,还在最高的总包里面选了最大比例的期权,本身超强的实力再加上超出常人的眼光和胆识,他们大多数人在工作之后也是一路火箭式高升,现在拥有的财富已经证明了他们当初的选择。但对于绝大多数的我们来说,在offer差距不大的情况下,毕业进大厂还是当前来看综合风险与收益之后的最优解。
方向选择:这个纯粹看个人了,之前在百度的时候,最喜欢公司里面的一句话是"做自己喜欢并且擅长的事情",所以选择哪个方向,一方面要看自己的兴趣,另一方面还看自己的优势。目前算法的方向常见的主要是CV、NLP、搜索、推荐、广告这些,前两个方向比较垂直,后面三个方向有很大的相通性
职业规划:借用百度的某位高级总监曾经说过的一句话,自己感觉很认同,"毕业1-2年的时间要多接触各种知识,找到自己今后的职业方向,在毕业3-5年的时间要深耕自己选择的领域,努力成为这个方向的专家,在毕业5年之后的时间要尝试扩宽自己的方向,负责更大的领域"。
新人焦虑与思维转变:这个确实是非常普遍的现象,感觉很多人都会经历一次,这种焦虑有可能体现在你后悔没有选另一个更好的offer,有可能体现在无法快速融入到团队中去,还有可能体现在未来职业规划的迷茫等等,自己当初刚毕业的时候因为offer的选择曾经非常郁闷,花了很长时间才缓过来,但工作几年之后的现在已经完全是另一种心态了,"得之我幸,失之我命",努力把握现在做到最好吧!
危机感与核心竞争力:作为互联网从业者应该时刻保持一种危机感,不断提升自己的核心竞争力,才能确保不被淘汰的基础上持续进步,至于AI算法工程师的核心竞争力是什么,在之前的回答里面也有提到:
一名合格的算法工程师需要对数据有足够的敏感,需要对业务有深入的理解,需要掌握扎实的机器学习基础,需要紧跟前沿的深度学习技术,还需要很强的工程实践能力
学习工作生活的平衡:参考四象限的理论,应该把更多的时间放到"重要但不紧急"的事情上,无论多忙总要抽出时间来多思考,多总结,多健身,多学习
推荐阅读
CVPR 2021 论文和开源项目合集(Papers with Code)