写点什么

在深度学习的浪潮中,如何做好一名算法工程师?

  • 2020-04-14
  • 本文字数:4596 字

    阅读完需:约 15 分钟

在深度学习的浪潮中,如何做好一名算法工程师?

2020 年 4 月 1 日,AlphaGo 研发团队领导者 David Silver 获得了 ACM 计算奖,作为深度强化学习领域的领军人物,他领导开发的 AlphaGo 集深度学习、强化学习、传统树搜索算法和大规模计算的思想为一身,其横扫人类所有围棋高手的表现一次又一次向这个世界宣告了深度学习在各领域的应用进入了高潮。需要清楚的是,David Silver 不仅是 DeepMind 的首席科学家,而且在 AI 系统工程化、密集计算领域都有诸多贡献,在深度学习的浪潮之中,将理论落地于实践,让学术创新驱动产业升级成为了所有公司,以及相关的算法工程师、研究员们的首要目标,作为应用属性更强的计算广告、推荐系统、个性化搜索领域,深度学习也已经成为了驱动公司业务发展的引擎。


作为一名在计算广告、推荐系统领域工作了八年的算法工程师,借发布我的新书《深度学习推荐系统》的机会,在此与大家一同探讨“在深度学习的浪潮中,做好一名算法工程师”的经验,以及我对这个行业,对算法工程师职业前景的看法。

1、知识体系的重要性

可能有的同学读过我之前在 AI 前线(公众号 ID:ai-front)写的一系列深度学习 CTR 预估模型的文章,或者关注过我的知乎专栏“王喆的机器学习笔记”。持续与业界同行分享这些知识的好处就是可以快速梳理自己的知识体系,期间有无数同行在文章的留言中反馈过自己的经验、指出过我的错误,记得我在知乎写的一篇文章《YouTube 深度学习推荐系统的十大工程问题》获得了 232 条留言,要知道技术文章是有一定的阅读门槛的,在这篇文章下留言的全都是业界和同行或者在校相关方向的博士生、研究生,他们给我自己带来的信息量也是巨大的。


但要清楚的是,所有外界的反馈都是零散的,片段似的,只有让这些零散的知识生长到你自己的知识体系上,才能够对自己的技术选择,甚至之后的职业生涯产生积极的影响。


拿我熟悉的推荐系统领域来说,推荐模型的发展日新月异,只有把模型的发展串联起来,才能够在业界知识爆炸式增长的浪潮之中,让自己的这棵知识树也能开枝散叶。正如《深度学习推荐系统》这本书中的模型演化图(如图 1),当把模型的知识压缩成这样的知识体系之后,零散的知识点才能够压缩成紧凑的知识面,而你对各个模型的理解,对他们应用的场景也会更加深刻。



图 1 深度学习推荐模型的演化趋势


这样类似推荐模型演化图的形式已经被越来越多的同学采用,也有很多热心的同行在此基础之上进行了进一步的补充和更新。这是秉着开放精神分享知识的另一好处,就是能为这个行业提供一点自己的贡献,同时获得越来越多的正向反馈,这是一个双赢的过程。


这样的思路也可以延续到所有的知识点的梳理过程中,比如推荐系统的评估方法也应形成一个多层的筛选体系;从 Word2vec,到 Item2Vec,再到各种 Graph Embedding 方法也遵循从经典到前沿的演化过程。在建立了这样一个深度学习技术框架之后,以此为基点,或者说起点,每个人都可以生发出属于自己职业生涯的知识体系。

2、“不谋全局者,不足谋一域”的工程能力

如果说理论知识体系是驱动一个人作出正确技术抉择的“内功”,那么工程能力就是决定着能否把技术抉择成功落地的“招式”。


一个资深的工程师跟一个一般的工程师的差距不仅在于工具用的熟不熟练,代码写的快不快,而更多是在于技术的格局和知识体系化上的差距。有一句话我是非常推崇的——“不谋万世者,不足谋一时;不谋全局者,不足谋一域。”技术也是这样,它同样遵循事物发展的一般规律。要作出最合理的技术改进,必须要有一个全局的技术框架在心中,只有这样,才能够提出全局最优的技术决策,和充分考虑各方利弊的技术权衡。


还以推荐系统为例,我们应该建立的是类似图 2 一样的整个深度学习推荐系统的业界主流的技术架构图,并熟悉自己公司当前采用的技术方案,在此基础上才能够作出更合理的、技术投资回报比最大的技术改进。



图 2 深度学习推荐系统的技术架构


如果所有人都一头扎进模型结构改进的“红海”之中,而忽视一些投资回报比更高的技术点,是难以取得效果上较大的提升的。就像我在书中提到的技术迭代中的“木桶理论”,一名嗅觉敏锐的算法工程师应该做的事情是找到整体技术框架中那个“最短的木板”,而不是盯着一块已经很长的木板“执着”地继续补强,这块最长的木板不会对蓄更多的水起到太大的作用。


在所有人都盯着“模型结构”这块木板的时候,也许你在“数据实时性”,“模型在线学习”,“边缘计算”这些本来不长的木板上的投入,会取得事半功倍的效果。而毫无疑问,这些都需要建立在你自己的业界“知识体系”,以及对公司整体的技术框架有了充分认知的基础上实现的。这也是我自己实践中一贯倡导的技术思路。

3、对于算法工程师职业生涯的看法

这里为什么一再强调“知识体系”,“技术框架”的重要性,这涉及到我对算法工程师这个职业方向的理解,或者说对机器学习相关行业的认识。


首先在我看来,这个行业是值得你去投资一生的职业方向。一个算法工程师最大的魅力在于 TA 凭一己之力影响了千万人的兴趣、爱好、以及生活的方方面面,无论从发展、薪资还是知识总量上来说,这个行业的天花板都足够高,足够你用整个职业生涯去触摸新的高度。


要知道,互联网在带给人们看似平等自由的交流空间的同时,它的核心却越来越中心化、集约化,头部公司的影响力在日益扩大,但头部公司的技术核心是什么?不正是由诸位算法工程师驱动的各种推荐、广告、图像、翻译等等不同的 AI 引擎吗?在电商、搜索、新闻、视频等真正实现机器学习落地的领域,根本不存在所谓的 AI 泡沫,你要看到,在整个互联网行业的 AI 泡沫之中,总有那些真正在用机器学习驱动产品并以此构建成功的商业模式的公司在引领互联网的发展方向。


但是,越来越中心化的互联网也给算法工程师带来了另外一个挑战,那就是所有的公司都紧缺资深的算法工程师,而却在不断裁员边缘的、初级的算法从业者。因为在这样一个中心化极端严重的行业,(10 个初级算法工程师 +1 个资深算法工程师)带来的收益无限接近于(1 个资深算法工程师)。一个不太合格的算法工程师为公司和团队作出的贡献甚至是负的,因为他们产生出的东西经常需要被重构甚至重写,他们提出的模型也经常会成为 AB Test 中的失败者而无法产出。这也就是为什么在这样一个互联网寒冬,某些一线的机器学习团队用 200 万的年薪招不到满足要求的算法工程师,而另一边,校招的同学们又叫苦连天说今年是史上算法工程师招聘最差的一年。


也还记得我 07 年刚进入清华的 KEG 实验室的时候,那时正是上一轮互联网泡沫破裂到这一轮 AI 浪潮间的低谷时期,即使在那个阶段,当时如日中天的百度、腾讯、搜狗这些公司也毫不吝啬对学界的优秀人才和业界的资深工程师的追求。在这个金字塔式的人才结构之上,与其怨天尤人大环境的不堪,不如好好修炼自己的“内功”,跨越金字塔那个大大的基座。

4、深度学习的发展及算法人员的“技术护城河”

话题自然而然的过渡到了对整个深度学习相关行业发展的理解。刚刚说到技术的整体性,而推荐系统,广告搜索这些行业在深度学习时代的发展也从最初的“深度学习模型”快速迭代的单峰模式,发展到了“深度学习模型”+“深度学习工程架构”并举的双峰模式。甚至可以说,在深度学习模型已经成为显学的今天,各大公司在“深度学习工程架构”上的投入日益剧增,几乎成为了一线公司和二线公司拉开差距的主要领域。


在这样的行业大趋势下,身为算法工程师的我们也要深入的思考什么才是在这个行业安身立命的根本。是用 TensorFlow 训练一个模型吗?是看一看最新的 paper,尝试几个新的模型架构吗?在刚走出高校、实验室的应届生都能完成这些任务的时候,我想这不能成为一位资深算法工程师“资深”的理由。


诚然,模型相关的一切是我们之所以被称为“算法”工程师的原因,这是我们应该掌握的基本技能,但是在一线企业动辄上万 QPS,动辄千万维特征,TB 级数据量,亿级用户量的前提下,只有在这些高强度的、苛刻的压力下建立高效、高可靠且高效果的模型及模型服务基础设施才是一位“工程师”坚不可摧的技术护城河。比如深度学习工程上的热点 model serving,数据实时性,模型压缩与数据蒸馏,对这些技术点的理解和实现是在实验室环境下很难进行的,也是你永远也无法替代的工程经验。


另一方面,拥有深刻的洞察能力也成为了一个敏锐的算法工程师的“稀缺超能力”。我在之前的专栏文章不止一次的提到,对用户行为以及背后动机的感知,并将这些动机融合进模型结构之中才是构建推荐模型的“银弹”。没有任何一个模型结构是万能的,只有最适合你的应用场景的,符合你的用户使用习惯的模型才是解决问题的“灵丹妙药”。能够站在产品经理的角度去思考推荐问题,甚至是站在一个普通用户的角度去换位思考我们要应对的场景,将是你永远也无法被替代的行业洞察。


就像图 3 中直观展示的,资深的算法工程师一定是拥有“领域知识”,“算法基础逻辑”,“业务理解”和“深度学习工具”全面技能的业界专家,而不是在一个能力方向偏科,抑或是歧视产品思考、不愿去做更多业务理解的“学生思维”型工程师。



图 3 深度学习相关各职位的技能雷达图

5、共勉

当然,还有很多想跟大家去沟通,比如理论和工程的权衡问题,对优化目标的理解,对算法团队与其他团队的沟通问题,以及算法工程师面试跳槽的建议。我们不可能在这一篇文章中倾诉所有,还是回到我们卖书的“正事”上来:),大家可以在《深度学习推荐系统》这本书中找到我的一些想法,希望继续在书中与大家探讨这些略“形而上”的经验。它不是本书的重点,但丝毫不影响这些内容是重要的。


同行们常说这是一个时刻处在被淘汰边缘的职业,当你在谈一个流行的技术点时,它已经进入了过时的倒计时。当你 coding 一天回家,还是勉为其难再多看一篇 paper 的时候,也许你也曾和我一样觉得不如就随波逐流算了。当你苦心作出一个模型的尝试却没有效果的时候,感觉自己的工作几乎是要从零开始。


但是我还要说,这是一个充满魅力和激情的方向,它不是简单的完成一个机械式的任务,而是用你的观察,你的思考,你的智力,你的经验去实现一个个目标,当你真正突破这些目标的时候,我相信你会体会到比一道编程题 AC 大 100 倍的成就感,毫无疑问,它值得你为之付出一个长长的职业生涯。


最后,希望《深度学习推荐系统》这本书能够成为你职业生涯中的一个小小的知识节点,在这深度学习的浪潮之中,帮助你成为一个更好的算法工程师,与君共勉。


作者介绍:


王喆,毕业于清华大学计算机科学与技术系,美国流媒体公司 Roku 资深机器学习工程师,推荐系统架构负责人。曾任 Hulu 高级研究工程师,品友互动广告效果算法组负责人。清华大学 KEG 实验室学术与搜索引擎 Aminer 早期发起人之一。主要研究方向为推荐系统、计算广告、个性化搜索,发表相关领域学术论文 7 篇,拥有专利 3 项,是《百面机器学习:算法工程师带你去面试》等技术书的联合作者。曾担任 KDD、CIKM 等国际会议审稿人。


书籍介绍:


深度学习在推荐系统领域掀起了一场技术革命,本书从深度学习推荐模型、Embedding 技术、推荐系统工程实现、模型评估体系、业界前沿实践等几个方面介绍了这场技术革命中的主流技术要点。


《深度学习推荐系统》既适合推荐系统、计算广告和搜索领域的从业者阅读,也适合人工智能相关专业的本科生、研究生、博士生阅读,帮助他们建立深度学习推荐系统的技术框架,通过学习前沿案例加强深度学习理论与推荐系统工程实践的融合能力。


购买地址:https://item.m.jd.com/product/12630209.html


2020-04-14 12:053686

评论

发布
暂无评论
发现更多内容

Hive-0

爱好编程进阶

Java 程序员 后端开发

2021年学习Java还有意义吗?

爱好编程进阶

Java 程序员 后端开发

ElasticSearch 概述

爱好编程进阶

Java 程序员 后端开发

#define定义标识符——定义宏——替换规则——##的作用—

爱好编程进阶

Java 程序员 后端开发

12 Steps to Better Code【改善代码的12步】

爱好编程进阶

Java 程序员

2020最新蚂蚁金服三面+HR一面,面试经验总结及分享

爱好编程进阶

Java 程序员 后端开发

Backbone 之 Inception:纵横交错 (Pytorch实现及代码解析

爱好编程进阶

Java 程序员 后端开发

CGB2107-DAY07总结复习

爱好编程进阶

Java 程序员 后端开发

在 HarmonyOS 中实现 CircleImageView 库

海拥(haiyong.site)

鸿蒙 5月月更

@requestMapping参数详解

爱好编程进阶

Java 程序员 后端开发

SAP 电商云的 Spartacus Storefront 如何配置多个 JavaScript Application

汪子熙

angular SPA SAP 5月月更 电商云

Day159

爱好编程进阶

程序员 后端开发

Day182

爱好编程进阶

Java 程序员 后端开发

Dubbo源码分析- 总体介绍与模块划分

爱好编程进阶

程序员 后端开发

AQS源码解读(番外篇)

爱好编程进阶

Java 程序员 后端开发

SecurityContextPersistenceFilter 过滤器链

急需上岸的小谢

5月月更

30个类手写Spring核心原理之Ioc顶层架构设计(2)

爱好编程进阶

Java 程序员 后端开发

HTTP 协议入门详解

爱好编程进阶

Java 程序员 后端开发

《深入理解计算机系统》读书笔记——第一章

如浴春风

5月月更

19 分布式缓存集群的伸缩性设计

爱好编程进阶

Java 程序员 后端开发

关于Flutter中的RichText组件,你了解多少?

坚果

5月月更

7月编程语言排行榜来了,为什么不同媒体报道的结果不一样?

爱好编程进阶

Java 程序员 后端开发

Day220、nginx快速入门 -nginx

爱好编程进阶

程序员 后端开发

docker安装与启动

爱好编程进阶

Java 程序员 后端开发

jackson学习之二:jackson-core

爱好编程进阶

Java 程序员 后端开发

win10搜索功能失效用不了如何解决

Sher10ck

实战:向GitHub提交代码时触发Jenkins自动构建

程序员欣宸

DevOps jenkins java 5月月更

B站疯传20W份整套2021大厂面试1000题最新汇总(附视频答案详解)

爱好编程进阶

Java 程序员 后端开发

flume基本概念与操作实例(常用source)

爱好编程进阶

Java 程序员 后端开发

Hibernate多对多的关系映射,详解(代码

爱好编程进阶

Java 程序员 后端开发

hive学习笔记之四:分区表

爱好编程进阶

Java 程序员 后端开发

在深度学习的浪潮中,如何做好一名算法工程师?_AI&大模型_王喆_InfoQ精选文章