算法工程师到底是调包侠还是魔法师?五年从业者说点得罪人的实话

🔑 关键词:算法工程师,模型训练,机器学习实战,算法工程师转型,推荐系统

📖 摘要:一个干了五年算法工程师的碎碎念:从离线指标涨到怀疑人生到线上A/B测试翻车,从大厂螺丝钉到创业公司打杂,聊聊算法岗真实的生存现状和那些没写在JD里的能力要求。

经常有人私信我,说想转行做算法工程师,觉得这个岗位听起来比后端工程师高级,工资也高。我一般会回一句:你先想清楚是喜欢写代码,还是喜欢让代码有脑子。因为算法工程师这个头衔,说白了有点像个框,什么都能往里塞——有的人天天调参,有的人天天开会,还有的人其实就是个会画PPT的数据分析师。我当年入行是冲着“研究”二字去的,结果第一份工作前三个月干得最多的活是写SQL清洗脏数据,清洗到怀疑自己是不是投错了简历。

图片

后来慢慢上手,才开始碰模型。但那会儿也没啥高大上的深度学习,业务场景就是个几百万日活的资讯类App,做的是个性化推荐排序。带我的leader是个有十年经验的老后端转过来的,他跟我说了一句我到现在都记得的话:在咱们这种资源不够的团队,你先别总想上什么Transformer,你要先搞清楚为什么用户点完不喜欢。我当时还不服气,觉得用个FM或者Wide&Deep不香吗?结果第一个版本上线,我用的是xDeepFM,离线AUC比那边的基准高了0.7个百分点。领导也挺开心,让我直接推全量。结果跑了两天线上CTR反而掉了3%多点,人均时长也跌了。那阵子我天天看数据看凌晨,差点把服务器盯出个洞来。

图片

最后查出来的原因特别傻,是特征工程里的时间戳没归一化,模型学到了一天之内不同时段的那种虚假强相关性,过了午夜整个预测概率乱崩。那个问题后来怎么解决的呢?不是换模型,而是把样本里时间相关的几个特征做了差分,再加上用户的历史行为序列按照实际发生时间重新排序,折腾了足足两天。后来我把这个经历发在部门群里,有个算法大佬评论说:模型是枪,特征工程是子弹,但你以为你是狙击手,其实你就是个后勤保障兵。这句话特别扎心,但也很真实。也就是从那时候开始,我意识到很多算法工程师引以为傲的模型创新能力,在真实的工业界里,往往还不如一个能解释清楚业务异常的特征工程方案值钱。

图片

我在现在这家公司做过一次内部小实验,同一个推荐场景,我用了三套方案:第一套是业界最新的一篇SOTA论文里的序列模型,参数量大概有两千多万,训练一个epoch要四十分钟;第二套是我用XGBoost加上十几个人工设计的交叉特征,特征总数没超过两千;第三套是直接拿上一任同事留的LR模型,加了几个用户瞬时点击率的窗口统计特征。训练完以后,都放到同一个流程里去测,SOTA模型离线AUC最高,但线上小流量A/B测试结果是——XGBoost那套的用户次日留存比SOTA模型高了0.9个百分点,LR那套居然也没差太多,只在人均时长上略微输了一点。你说这个结果讽刺不讽刺?当然,我讲这个不是让你别用深度模型,而是说在大多数中小公司里,业务数据的质量、特征的一致性、以及样本的分布变化,才是真正决定模型线上效果的那些权重。你在Notebook上调出来的完美分数,放到生产环境里就像温室里的花朵,稍微刮点风就蔫了。

图片

做算法工程师这几年,我换过三家公司,其中也在字节某个组里待了不到一年。那个经历也让我对大厂算法岗祛魅了。怎么说呢,大厂的基建是真的好,GPU管够,训练平台点几下就能跑几百个实验,但算法的价值被极大分工给稀释了。你有专门负责洗数据的人,有专门负责上线部署的人,有专门负责调广告策略的人,你自己只管把模型的离线指标刷上去,然后写个文档移交。至于这玩意儿到底给公司赚了多少钱,没人说得清,因为最后归因都归到“大盘团队”身上。反倒是在创业公司做算法,那真是一根针捅破天。你得自己从埋点开始推,日志缺字段了你去找客户端开发扯皮,模型训练完你还要自己写个简单的flask服务去接线上请求,半夜报警了你得爬起来看是因为特征延迟还是因为某个ID落到脏节点上。我一开始很反感这种“全栈”式的算法岗,后来慢慢发现在这种环境里长出来的东西,才是真正值钱的本事。

图片

如果你非要问我,现在入行算法工程师需要什么核心能力,我可能不会像培训机构那样跟你说要会leetcode、会推公式、会发论文。我觉得最重要的是两个有点虚的词:一个是问题嗅觉,另一个是工程敬畏心。问题嗅觉是你在面对一个业务指标下降的时候,能快速判断出这到底是算法问题、数据问题、还是外部环境问题。我给你说个真实案例,去年我们有个老模型周一早上的点击率暴跌,我开始以为是周末数据周期波动,后来查了半天发现是头一天晚上运维更新了用户画像的字段枚举值,把性别里“未知”和“保密”两种取值合并了,导致一批用户的特征分布被整体平移。这跟模型有个毛关系?但你如果没这个嗅觉,直接上去重新训练模型,浪费三个小时下单,你会发现线上指标还是掉着。工程敬畏心更是如此,很多刚毕业的算法工程师对线上服务的稳定性没有概念,我自己犯过一个大错,有一次直接用训练时的特征脚本跑线上预测,没有检查特征对齐,结果线上那边缓存了一个旧版本的pipeline,两边计算出的用户活跃度含义不一样,模型输出像个疯子一样来回跳,最后还是运营同学跑来问我说你们推荐是不是抽风了。那次事故直接让我明白了,算法工程师首先是个工程师,然后才是个算法研究的人。

图片

所以你要问我,算法工程师会被AI替代吗?我觉得大概率会被替代的不是这个岗位,而是那些只会在别人的框架里调参、连数据质量都懒得验证的人。我在上一家公司带过一个小实习生,他写代码不算特别强,模型原理也聊得磕磕绊绊,但他有一个特别好的习惯:每次训练前都会单独统计一遍特征的缺失率和分布,然后拿着样本里的几个case去跟业务方确认这是不是真实用户行为。结果他做出来的模型,虽然结构很简单,但线上效果就是比周围几个整天刷论文的人稳。现在他已经转正了,薪资比同批进来的人高了百分之二十。我跟他说,你这不是调参调得好,你是懂得尊重数据的脾气。算法这个行当,越往后越会发现,真正的壁垒不在模型结构有多新,而在你能不能把一个模糊的业务问题翻译成一个精确的优化目标,再把这个目标用一架不那么容易塌的工程小推车给送到生产线上。说句要得罪人的话,现在市面上那么多AI培训课教的各种花哨模型,等你真正上了班用到的概率可能不到一成,你大部分时间都在处理脏数据、排查特征血缘、盯着监控面板祈祷这周不用回滚模型。至于那些还在纠结TensorFlow和PyTorch谁更牛的同学,我只能说,在老板眼里,你俩约等于一个能用就行。