算法工程师的「天地之间」

Datawhale Datawhale     2022-12-15     309

关键词:

 Datawhale干货 

作者:王喆,字节跳动

作者简介

王喆老师目前是字节跳动的技术经理,Ads Ranking方向负责人。

  • 毕业于清华大学计算机系,清华KEG实验室 学术搜索引擎AMiner 早期贡献者。

  • 曾任Roku Tech Lead,推荐系统架构负责人,Hulu 高级研究员,品友互动 广告效果算法组负责人。

  • 主要研究方向为推荐系统、计算广告,发表相关领域学术论文和专利20余项,曾担任DLP-KDD联合主席,KDD、CIKM等国际会议审稿人。

  • SparrowRecSys,SparkCTR等开源项目发起人和主要贡献者,6k stars+。

  • 著有《深度学习推荐系统》,《百面机器学习》等技术书籍,读者6万+。

正文

工作太忙,已经半年不写文章啦,这周末得空写一篇,也算是最近一段时间的工作总结。

四五年前开始写专栏的时候,技术文章还不是很多,现在不管是各大顶会的搜广推paper,还是知乎上的解读文章,都如汗牛充栋。到了这个时候,死扣模型的细节反而不那么重要了。在整个行业的low hanging fruit都快被摘完的时候,再去纠结能不能通过加一个新提出的结构提升0.1%的AUC,去遍历业界可搜寻到的所有新idea去提升0.1%的CTR,逐渐变成了一件非常boring,也非常容易让人产生挫败感的事情。

所以,越到这个时候,我们反而应该放下你手里的paper,放下你不知所措的心情,坐下来想一想,难道算法工程师们提升效果之路真的走到了一个死局里吗?是不是哪里出了问题?

你是算法工程师,不是深度学习工程师

正面回答这个问题之前,我想谈的是一个误区。不少同行常常感叹,深度学习的时代红利挖尽,算法方向瓶颈尽显。其实是默认了一个状态,算法工程师=深度学习工程师。这个等式成立吗?当然不是。在遭遇广告系统、推荐系统问题的时候,没有一个人规定你只能用深度学习的方法去解决。真实的情况是,搜广推领域的大量问题,深度学习都不是最好的解决办法。当我们面对推荐系统的冷启动、探索与利用,广告系统的出价、预算分配等等问题的时候,沿着深度学习的路子去深挖,往往是会误入歧途的。

只有逃开了这个误区,我们才可以谈一谈,作为一个算法工程师,如何去破局,如何从深度学习的限制中逃开,回到解决问题这条正道上来。像这篇文章略显玄幻的题目一样,也许是时候想一想在算法工程师的能力框架中,哪里是“天”,哪里是“地”,在这天地之间,我们可以做些什么。

算法工程师的天——系统架构

在写《深度学习推荐系统》那本书的时候,我一直努力让自己始终把推荐系统的框架印在脑海中,每写一节,都希望它能嵌回原来的系统架构中。任何脱离了系统单独存在的东西,都不会是理想的状态。我想一个算法工程师的天,应该就是这样一个印在脑海中的系统架构。而任何一个成功的改进,都应该是与这个系统自洽的。

脱离了系统架构谈算法模型的改进有时候会产生很滑稽的效果。很多年前我还在做垂直领域的广告模型,有些广告主的转化事件非常难,于是转化数量就非常稀少,一天可能就几个。在这样的场景下,因为当时业界转深度学习是大势所趋,所以很多同事就希望用深度学习的模型解决这个问题。但关键问题是深度学习模型恰恰不善于处理小样本学习的问题。我们不能说就因为当时这个技术fancy,就认为它能解决一切效果问题。在这个问题框架下,深度学习显然不是那个自洽的解决方案。

再举一个例子,我工作的第二年负责的是广告系统的pacing模块,就是要去优化一个广告计划的预算,让它的投放速度尽量平滑,不要短时间内把预算都投完了。我设计了一个PID控制的算法去控制单个计划的投放速度,控制效果是很好。但由于每一条广告计划都要独立进行大量的流量价值判断和自身剩余预算的判断,我居然把系统打崩了,工程负责的同学强行下线了这个策略。这个教训是什么?就是心中没有全局,没有算法和工程的整体架构,理不清各模块之间的关系,你单点做的再好,也不利于整体目标的达成。

其他例子我估计你身边也发生过不少,比如上了一个新模型,效果提升了0.1%,结果模型体积扩大了10倍,模型收入还cover不住资源的消耗。遇到一个问题就打补丁,还没搞清楚全局的问题在哪就着急解决问题,到处加规则最后谁都不敢动代码。解决问题本末倒置,精排的问题在粗排解决,粗排的问题在召回解决,从来不看看这几个模块能不能联合优化,从而各自为战。如果你遇到过这几个问题,那么毫无疑问,你的“天”不够高。

三四年前,我们还经常吐槽算法工程师的面试是“面试造航母,工作拧螺丝”,现在随着各家公司的系统复杂度都越来越高,对算法工程师的要求也确实水涨船高,作为一个合格的算法工程师,你还真得知道怎么造航母,才敢在一艘大船上拧螺丝。否则结果就是要么这艘船上到处都是螺丝钉,要么直接把船修沉了。

算法工程师的地——数据细节

如果说对系统架构的理解是算法工程师的天,那对数据细节的观察就是我们的地。魔鬼藏在细节中,一切宏大的故事能够讲成,首要条件是有一个好的故事框架,其次就是对所有细节的把握。在推荐系统,广告系统中更是如此。

我经常在知乎上受到类似这样的咨询,说王老师,我们公司最近刚上了DIEN模型,但是效果不好,原因是什么呢?

这个问题本身就是非常荒谬的。这就类似于一个高中学生问老师,老师,我最近上了你的物理补习课,但是成绩还是不好,原因是什么呢?

任何一个模型的提出,都有它的动机,背景和适用的数据集。在一个模型那些上的了台面的创新点背后,也会有无数的tricks在支撑着那个特性环境下的模型效果。我们往往浅尝辄止地去适配一个模型,遭遇挫折之后就把锅甩给这个模型,看似跟自己一点关系都没有,其实不过是懒得进行哪怕一点主动思考罢了。

好几年前我带过一位实习生,当时的任务是打通一个新的pipeline,收集一组新的特征加入模型。事情做的很快,一两天时间就得出结论说,这个特征加进去了,没效果,有没有其他任务给他做。当我回头把这个特征的数值分布打出来之后,看到几个关键问题,一是特征覆盖率有问题,大概只有20%,二是特征值的尺度有问题,outlier的位置偏离非常远,三是特征值的分布极不均衡。这几个问题发现不了,没有做相应处理,就是把特征加进去了,这不是应付公事是什么呢?在“加特征”这样一个小的不能再小的原子操作上,都不舍得把细节搞清楚,把数据拿出来看一看。难道还可以指望他在换模型,搭架构上有所建树吗?

如果说你对系统架构的理解决定了你工作的方向不会发生偏差,那么你对细节的把控能力就直接决定了你的工作是否会成功。

不可否认我们所有人都对“宏大叙事”有偏爱。但其实宏大叙事能够成功,往往都是从最重要的一两个点来突破的,而这一两个点,必须有人从头到尾,从始至终的关注细节,否则就是一堆处处漏风的空中楼阁。

算法工程师的天地之间

系统架构是天,数据细节是地。在这天地之间,才是最爱被算法工程师们津津乐道的建模能力和技术能力。你从系统架构中找到了最合理的思考方向,从数据细节中发现了问题的真正之所在,剩下的事情,就是用你的技术能力,你的建模能力去解决它。其实,如果你真正能够通过数据分析找到问题的所在,这一步反而是最简单的了。这里面需要注意的是,不要再次把自己的视野局限在所谓的“深度模型架构迭代”上,它重要,但仅仅是搜广推等互联网核心系统中的一个环节。

对于一个以机器学习为核心的大系统来说,要从三个方向找到你解决问题的方案:

1.样本与特征。你的特征是否干净,有无噪声,特征质量是否高,覆盖率怎样,样本相关的数据流实时性如何,样本是否有丢失等等问题。数据才是你系统效果的上限,模型只能决定接近这个上限的程度。

2.Label。对于Label的理解其实本质上就是你对问题的理解。到底什么才是你这个问题真正的label,如果没有明确的正label,如何处理处于中间阶段的label,要多目标还是多阶段,还是独立拆解成两个问题。在海外隐私合规日益严格的情况下,拿不到label怎么办?如何用一些替代信号当作label,如何在合规框架下拿到label。

3.模型。你对模型的理解是否还仅限于套用别人的框架?能否从你的业务特点来改造模型?哪些特征该交叉?哪些该做成wide,哪些该做成deep,哪些结构inference特别慢,如何优化,模型的改造会不会造成工程上吃不消,不同模型之间如何配合等等。总之模型的改造记住一句话,一切不经思考纯靠蒙,靠原封不动移植模型架构的尝试都不会有太好的结果。

这些都是天地之间的内容,远远不限于模型的改进。在真实的搜广推系统中,甚至不限于机器学习,还涉及到大量传统算法,控制论,博弈论的知识,把眼光仅仅放在深度学习完全是作茧自缚的行为。

几乎所有的算法工程师同行都是从学校的实验室走出来,我们喜爱那些干净的结论,清晰的创新点,但那不是真实的世界。真实的世界永远是混乱和秩序并存的,我们要做的就是从这个混乱的世界中精准的找到那根解决问题的线头,把它扯到秩序的这边来。

写在最后

既然谈到了天地之间这么宏大的主题,我们的文章也不能没有一个主题架构图啊,最后给大家补上。

算法工程师的“天地之间”

最近国内外互联网行业的形势都不轻松,不如趁这个机会练练内功,行业再怎么变化,真正能够主动思考,解决问题的同行,机会仍不会少,祝大家一切顺利。

讨论

你认为算法工程师的核心能力是什么?欢迎在评论区交流讨论~

整理不易,鼓励

图像算法工程师岗位的主要职责

参考技术A图像算法工程师岗位的主要职责一、确定岗位的职责1.根据工作任务的需要确立工作岗位名称及其数量;2.根据岗位工种确定岗位职务范围;3.根据工种性质确定岗位使用的设备、工具、工作质量和效率;4.明确岗位环境和确... 查看详情

工程上的排序算法

...性考虑)因为基本数据类型之间无差异,不需要考虑排序算法稳定性,而归并排序则可以实现算法的稳定性。2、当你需要排序的样本数量小于60,直接选择插入排序,虽然插入排序的时间复杂度为O(N²),我们是忽略常数项得出... 查看详情

qt多个工程之间调用

...译器支持STL,就可以直接用了。不过,Qt里有一套自己的算法和容器库完全可以替代C++的STL,功能比STL强大,但一般情况下效率稍低。不过,这种差别在GUI程序设计中是看不出来的。祝你好运!参考技术A把公用的部分做成库。然... 查看详情

aov网络和kahn算法拓扑排序(代码片段)

1.AOV与DAG活动网络可以用来描述生产计划、施工过程、生产流程、程序流程等工程中各子工程的安排问题。 一般一个工程可以分成若干个子工程,这些子工程称为活动(Activity)。完成了这些活动,整个工程就完成了。例如... 查看详情

openlayers高德腾讯、百度、天地图坐标相互转换

...,不能简单通过openlayers的转换方法实现,需要手动使用算法完成转换。本教程算法来自网络,目前提供点数据的转换,对于线和面推荐在数据库或者后端实现转换。注意:本示例将高德腾讯坐标设置为黑色;将百度坐标设置为... 查看详情

标定的分类

...;上干货!!!!标定的分类如果你是视觉工程师,一定会听说过标定这个词,有手眼标定,相机标定,九点标定等等。但是对于控制工程师来说,需要研究轴组和机器人,这时候他们理解的... 查看详情

04_特征工程

...bsp;为什么要进行FeatureScaling:如果输入范围变化,在某些算法中,对象函数将不能正常工作。梯度下降收敛得更快,与特征缩放完成。梯度下降法是逻辑回归、支持向量机、神经网络等常用的优化算法。涉及距离计算的算法如KNN... 查看详情

算法工程师应该学哪些

一、算法工程师简介(通常是月薪15k以上,年薪18万以上,只是一个概数,具体薪资可以到招聘网站如拉钩,猎聘网上看看)算法工程师目前是一个高端也是相对紧缺的职位;算法工程师包括音/视频算法工程师(通常统称为语音... 查看详情

网络工程师考试知识点[必考知识点]--必看(代码片段)

网络工程师考试知识点1、常用的虚拟存储器由主存-辅存两级存储器组成2、中断向量可提供中断程序的入口地址3、DMA工作方式下,在主存与外设之间建立直接的数据通信。4、PERT不能清晰秒速各个任务之间的并行情况,... 查看详情

网络工程师考试知识点[必考知识点]--必看(代码片段)

网络工程师考试知识点1、常用的虚拟存储器由主存-辅存两级存储器组成2、中断向量可提供中断程序的入口地址3、DMA工作方式下,在主存与外设之间建立直接的数据通信。4、PERT不能清晰秒速各个任务之间的并行情况,... 查看详情

如何学软件工程?

...的学生来说,我们学习了很多的专业课程,像编程语言、算法、数据结构、编译原理、软件工程等。很多学生都会有这样的疑问:我学了这么多的课程有什么用呢?在工作中有多少会真正被应用到呢?也就是说,大家都觉得理论... 查看详情

《对软件工程课程的期望》

...能力提升、加强深入学习的能力。  例如对项目所需要算法的优化,根据实际情况对算法进行改进等。5)阅读源码对项目课程的期望:1)适时灌点鸡汤。大部分同学是快乐地学习,而不是应付。激发不只是现在的热 查看详情

《对软件工程课程的期望》

...能力提升、加强深入学习的能力。  例如对项目所需要算法的优化,根据实际情况对算法进行改进等。5)阅读源码对项目课程的期望:1)适时灌点鸡汤。大部分同学是快乐地学 查看详情

图像算法工程师的职责概述内容

参考技术A  图像算法工程师需要协助完成项目的系统集成测试、版本交付等工作,对项目实施和维护提供支持。下面是我为您精心整理的图像算法工程师的职责概述内容。  图像算法工程师的职责概述内容1  职责:  1... 查看详情

算法工程师

 算法工程师包括音/视频算法工程师(通常统称为语音/视频/图形开发工程师)、图像处理算法工程师、计算机视觉算法工程师、通信基带算法工程师、信号算法工程师、射频/通信算法工程师、自然语言算法工程师、数据挖... 查看详情

作为一名算法工程师需要掌握什么技能?

本篇来自我在知乎上的一个回答:作为一名算法工程师需要掌握什么技能?想要了解算法工程师需要掌握的技能,我觉得最直接有效的方式就是去看看各公司对于算法岗社招的要求。本篇只做一些简单的整理和罗列。某大厂,推... 查看详情

qcna(全方向网络工程师)课程在本月上线咯

乾颐堂安德QCNA(全方向网络工程师)课程天地玄黄,宇宙洪荒日月盈昃,辰宿列张寒来暑往,秋收冬藏国庆军哥并未休息,在憋,憋这套全新课程,你们期盼的这就来啦,稍后会在51CTO学院上线课程简介是为闯荡武林,持天地玄... 查看详情

视觉算法工程师的主要职责8篇

参考技术A视觉算法工程师负责算法模块需求分析、软件设计、代码开发、问题定位等工作。下面是我为大家带来的视觉算法工程师的主要职责8篇,希望大家能够喜欢!视觉算法工程师的主要职责1职责:1.工业相机的firmware开发及... 查看详情