当前位置: 首页 > 科技观察

算法工程师也会遇到35岁这道坎吗?

时间:2023-03-22 14:36:20 科技观察

简介:这道题其实适用于大部分程序员。在国内的互联网公司,总在苦苦写代码、跑算法模型的工程师太少了。每年都有高校毕业生不断为这个行业注入更年轻、更新鲜的血液。与25岁刚入职的人相比,他们更能加班、吃苦。关键是工资便宜的年轻人。资历越长、年龄越大,各方面都会处于劣势。  想要跨过这道坎,你要做的就是努力提升自己的相对不可替代性。从初级到高级,我觉得大致可以分为3个阶段:  01初级算法工程师  ——关键词:高效执行机——  算法进入行业的必由之路。所谓SQLBoy、TuningHero、DataPorter、Alchemist,都是在这个阶段发生的。  这个阶段的算法工程师,经常要和数据打交道。数据缺失上报、数据重复上报、埋点不正确、多方数据统计口径无法对齐、反作弊口径定义与对齐、数据异常检测与排查、数据缺失处理、样本清洗、特征统计处理、在线索引丢弃故障排除、不良案例归因分析、数据注释……听起来是不是很花哨?对于负责业务实施的一线算法工程师来说,这些数据任务可能会占据他日常工作的很大一部分。  但这些你一开始看不起的所谓脏活,这些你在实验室和学校接触不到的工业数据实践,这些在论文、书本和网络上永远不会教你的工作,是正是你所积累的技术经验和宝贵财富,才是你转型更上一层楼的主要动力。作为算法工程师,如果从来没有在底层有过基本的开发和数据分析经验,以后站在更高的层次上,就很难做出有利于团队方向的决策。数据决定了模型的上限,而特征和算法只是在逼近这个上限。  如果不了解你的业务数据的特点,很难成为一名优秀的算法工程师。在业务实践中培养和锻炼数据感是初级算法工程师的必修课之一。  这个阶段的算法工程师普遍面临比较明确的业务问题,比如提升召回效果,提升在线ctr/cvr/gmv/duration,提升搜索相关性,降低badcase率等等。在这些明确的业务问题背后,行业包括团队一般都有比较明确的技术方向,对应一些比较明确的算法问题,比如信息流的CTR预估、用户兴趣建模、广告竞价预估、Relevance模型、itemrecall,图形标签生成等。  这些不同的算法方向往往根据不同的团队形式划分得更细。例如召回方向可能有专门的团队,每个人负责其中一种召回策略:用户标签召回、行为序列召回、主题召回、双塔模型召回等。排序模型。可能每个场景都有专人负责,比如首页/频道页/分类页/热门页/子频道页等;也可能是每个方向的模型都有专人负责,比如ctr模型,gmv模型,duration模型等。Mechanical策略也可能有专门的团队,每个人负责不同的策略方向。  具体业务和技术形态如何划分,不需要初级算法工程师去操心,那是更高级的算法工程师需要规划和操心的事情。这个阶段算法工程师的主要目标是让自己具备高效执行特定任务的能力,其中对动手能力的要求最高。  行业XX大会又发表影响力大的论文,实验结果宣告(chuiniu)行业最佳;隔壁XX公司的XX团队发布(PR)最新算法,声称效果提升巨大(可能是因为baseline很低);某大型知名程序员婚恋交友中心开源了最新模型代码,号称在多项任务中打败了目前所有主流模型。于是老板说,你去调查他们是怎么做的,回来实施。  下一步就是充分发挥初级算法工程师的能力。看论文,复现模型,跑实验,调参数,神奇地修改网络,效果不好再调。其实这个过程也是初级算法工程师能力被打开的时候。有的人就是会用工具,调api调参数修改网络,或者直接gitclone下载源码修改直接运行。至于会不会有效果,全看天意,真是“炼丹术”。最后,它没有工作。我不得不补充一点,论文的作者们真的很吹牛。这个算法在这里完全没有作用。然后换个模型,重新开始炼金。  有些人在这个过程中不断积累经验,试图尽可能地找到这些方法的共性。以ctr模型为例,embedding参数是否对自身业务数据的效果敏感,网络层深度对效果的影响,不同正则化方法是否起作用,bn/ln/dropout等方法是否有效,目前的特征系统是否适合高层特征交叉是否描述得足够多,注意力有多少收益等等。如果能从更本质、更普遍的角度对这些进行分析和归纳,以后大概率可以作为对同一数据分布的先验判断。试试看  现阶段评判工程师的标准是是否有足够强的执行能力去实现一个明确的算法目标。初级的落地能力只是快速实现,更高级更扎实的落地能力才能知道怎么落地,才能扎扎实实分析有效与否,为以后的迭代优化提供经验。  02中级算法工程师  ——关键词:算法选择和转化能力——  第一阶段结束后,你对清晰的算法问题有了足够的经验。这个阶段需要根据本领域的技术积累,对已有的算法问题进行适当的修改和优化。  以用户画像为例。如果是新成立的团队,可能更需要在前期搭建好整个模型框架,并与上下游团队沟通,以最小的成本快速搭建上线可用的基础基线。例如,最简单的基于统计的方法是使用基于用户活跃行为的物品标签作为用户的统计画像标签,比如短期兴趣是24小时统计标签,长期是时间衰减的30天统计标签-长期利益。这个阶段的算法工程师,不顾团队现状,想做出各种能够体现技术深度的模型,其实对团队的进步是不利的。主要目的是保证算法能够快速实现并获得收益。  当团队发展到一定阶段,有了一定的基础属性画像和统计画像后,我们就可以根据团队的人手做一些深层次的开发。从基础统计,我们可以做无监督的隐式语义理解(lda,w2c等),有监督的双塔建模,加特征的用户兴趣建模,到用户序列建模,甚至各种图方法的知识图谱手段。至于选择尝试哪些方法,需要中级算法工程师根据初级阶段积累的经验进行预判。比如,如果没有userembeddingrepresentation,用用户的行为序列作为句子来try,已经让很多公司的业务受益。Word2vec可以作为基线;引入具有更多特征的双塔模型来获取用户行为嵌入,大概率进一步提升效果。而如果用户有一些社会属性关联,可以考虑图的方法进行进一步的挖掘等等。  作为该方向的负责人,需要根据团队的发展阶段进行合理的技术选择和适当的改造。比如我们是否应该使用序列模型,如何选择lstm、rnn、transformer、bert等序列模型,如何设计和整合locationfeatures等等。具体的调参需要初级算法工程师来实施实验,而技术选择和改造方向的大方向需要中级算法工程师的把握和指导。  技术深度绝对不是考察中级算法工程师的主要手段。现阶段评判算法工程师的标准主要是是否有能力独立承担整个算法从选择、改造、应用到实现的整个过程,并在某个算法方向取得成果。.  03高级算法工程师  ——关键词:业务抽象能力——  前两个阶段的工程师做什么,严格来说,是由这个阶段的算法工程师决定的算法指标。这个阶段的算法工程师需要对整个业务有更多的理解,才能对业务问题进行抽象和定义。比如现阶段业务是否需要专门的团队做用户画像,素材理解需要多少人力,rank模型是否有空间,持续优化需要投入多少人力等战略目标制定不明确,会影响整个团队的努力。  对于上层管理来说,算法团队的存在并不一定意味着一定要有ctr预估团队,而是用户画像团队和视频理解团队,有人要做nlp,有人做feature,等等。整个算法团队存在的意义在于能够最终从算法层面解决实际业务问题。某个阶段需要做的是提高用户的点击率,这可能需要一个ctr模型导向的团队和一个用户画像导向的团队;在某个阶段,更多的多媒体资料的引入可能需要一个团队来做视频理解和图像理解;第一阶段需要用户增长和留存。可能需要一个团队专门做影响用户留存的因素的数据分析,一个团队做一个留存模型,一个团队做一个增长模型等等。  这也决定了在不同的时期,算法团队的目标是不同的,需要的人员配置也是不同的,而这些都需要高级算法工程师站在整个业务的角度去理解和拆解,然后再定将目标传递给整个团队。现阶段评判算法工程师的标准主要是能否针对所负责的业务制定合理的算法实现目标,并带领团队实现目标。  04结语  ——关键词:深耕岗位——  我个人觉得,如果你35岁了,还处于第一阶段,也就是只能实现一个清晰的算法模型,并且刚毕业的年轻人可以说完全没有竞争力,个人事业的进一步发展会很有限。  如果已经进入第二阶段,不可替代性还是很强的。毕竟现阶段算法技术的合理选择和推动落地的能力,对于很多刚毕业、工作在即的年轻算法工程师来说是比较困难的。  如果你到了第三阶段,至少你已经是业务方向的算法负责人了,有这样的头衔,你在思考如何往中上层发展公司,你根本不会担心年龄。  35对我个人来说还有几年,而且只有几年。不管是算法工程师还是其他岗位,深耕这个岗位可能还是目前最好的选择,也可以说是别无选择。不断提高自己在技术、技能、经验、资源等方面的积累,努力提高自己的相对不可替代性。  至于年龄,只是一个数字而已。哪怕是一道坎,也离终点还很远。  今天的分享就到这里,谢谢大家。