20万到100万年薪的算法工程师有什么区别?

2023-05-16

公元七世纪,在车迟国国家气象局组织的一次求雨活动中,虎力、鹿力、羊力三位大仙成功地祈下甘霖,救黎民于水火中。老国王虽然不明就里,却从此尊他们为国师,奉道教为圭臬。

本世纪,算法工程师们的境遇也差不多:早些年,信奉糙快猛主义的大佬们觉得他们饱食终日、无所用心,没工作只好在学校混博士,靠数据上的障眼法装神弄鬼。可是,随着去年 AlphaGo 大破李世石,大佬们在心底喊出“我操”的同时,慌不择路地把各种搞劫持、送外卖的生意包装成人工智能,并纷纷请来几位懂算法的国师加持。虽然他们对国师们所做的事智商上并不理解,却虔诚地希望他们快点儿求下雨来。

于是,算法工程师的身价也水涨船高了。各门派工程师不论过去练的是 Java、PHP 还是 Excel,都放弃了最好语言的争论,抄起了深度学习,发誓重新修炼成算法工程师。前些天,还有人在知乎上问我:20 万、50 万、100 万年薪的算法工程师,到底有什么区别?

这样充满铜臭味儿的问题,让我十分欣慰。虽说在北京,20 万已经基本不可能招到靠谱儿的算法工程师了,还是姑且用上面的数字做个参照,谈谈算法工程师的三个层次吧。(这里说的算法,并不是计算机系本科课程《算法与数据结构》里那个算法。那门课里讲的,是排序、查找这类“确定性算法”;而这里我们说的,是用统计方法对数据进行建模的“概率性算法”。)下文中会提到一些算法和模型,但不过是为了举例说明概念,无需深究,有兴趣钻研的朋友可以自己查阅资料。

第一层次“Operating”:会使用工具

这个层次的工程师,对常用的模型比较熟悉,来了数据以后,好歹能挑个合适的跑一下。

达到这个层次,其实门槛不高。早些年,您只要掌握了什么叫 LDA、哪叫 SVM,再玩过几次 libnear、mahout 等开源工具,就可以拿到数据后跑个结果出来。到了深度学习时代,这件事儿似乎就更简单了:管它什么问题,不都是拿神经网络往上堆嘛!最近,经常会遇到一些工程师,成功地跑通了 Tensorflow 的 demo 后,兴高采烈地欢呼:我学会深度学习了,我明天就统治人类了!

这事要真这么简单,我是茄子。任凭你十八般开源工具用的再熟,也不可能搞出个战胜柯洁的机器人来。这里要给大家狠狠浇上一盆冷水:进入这个领域的人,都要先了解一个“没有免费的午餐定理”,这个定理的数学表达过于晦涩,我们把它翻译成并不太准确的文艺语言:

如果有两个模型搞一次多回合的比武,每个回合用的数据集不同,而且数据集没什么偏向性,那么最后的结果,十有八九是双方打平。

管你是普通模型、文艺模型还是 2B 模型,谁也别瞧不起谁。考虑一种极端情况:有一个参赛模型是“随机猜测”,也就是无根据地胡乱给个答案,结果如何呢?对,还是打平!所以,请再也不要问“聚类用什么算法效果好”这样的傻问题了。

这就很尴尬了!因为掌握了一堆模型并且会跑,其实并没有什么卵用。当然,实际问题的数据分布,总是有一定特点的,比方说人脸识别,图中间怎么说都得有个大圆饼。因此,问“人脸识别用什么模型好”这样的问题,就有意义了。而算法工程师的真正价值,就是洞察问题的数据先验特点,把他们表达在模型中,而这个,就需要下一个层次的能力了。

会使用工具,在算法工程师中仅仅是入门水平,靠这两把刷子解决问题,就好比杀过两只鸡就想做腹腔手术一样,不靠谱儿程度相当高。如果不是在薪酬膨胀严重的互联网界,我觉得 20 万是个比较合理的价格。

第二层次“Optimization”:能改造模型

这个层次的工程师,能够根据具体问题的数据特点对模型进行改造,并采用相应合适的最优化算法,以追求最好的效果。

不论前人的模型怎么美妙,都是基于当时观察到的数据先验特点设计的。比如说 LDA,就是在语料质量不高的情况下,在 PLSA 基础上引入贝叶斯估计,以获得更加稳健的主题。虽说用 LDA 不会大错,但是要在你的具体问题上跑出最好的效果,根据数据特点做模型上的精准改造,是不可避免的。

互联网数据这一现象更加明显,因为没有哪两家公司拥有的数据是相似的。百度的点击率模型,有数十亿的特征,大规模的定制计算集群,独特的深度神经网络结构,你能抄么?抄过来也没用。用教科书上的模型不变应万变,结果只能是刻舟求剑。

改造模型的能力,就不是用几个开源工具那么简单了,这需要有两方面的素养:

一、深入了解机器学习的原理和组件。 机器学习领域,有很多看似不那么直接有用的基础原理和组件。比方说,正则化怎么做?什么时候应该选择什么样的基本分布?(如下表) 贝叶斯先验该怎么设?两个概率分布的距离怎么算?当你看到前辈高人把这些材料烹调在一起,变成 LDA、CNN 这些成品菜肴端上来的时候,也要想想如果自己下厨,是否了解食材,会不会选择和搭配。仅仅会吃几个菜,说出什么味道,离好厨师差的还远着呢。

enter image description here

二、熟练掌握最优化方法。 机器学习从业者不懂最优化,相当于武术家只会耍套路。这就跟雷公太极和闫芳大师一样,实战起来一定是鼻青脸肿。管你设计了一个多牛逼的模型,如果无法在有限的计算资源下找出最优解,那么不过是个花瓶罢了。

最优化,是机器学习最、最、最重要的基础。你要知道,在目标函数及其导数的各种情形下,应该如何选择优化方法;各种方法的时间空间复杂度、收敛性如何;还要知道怎样构造目标函数,才便于用凸优化或其他框架来求解。而这些方面的训练,要比机器学习的模型还要扎实才行。

enter image description here

拿大家以为“以不变应万变”的深度学习举个例子。用神经网络处理语音识别、自然语言处理这种时间序列数据的建模,RNN(见上图)是个自然的选择。不过在实践中,大家发现由于“梯度消失”现象的存在,RNN 很难对长程的上下文依赖建模。而在自然语言中,例如决定下面的 be 动词是“is”还是“are”这样的问题,有可能往前翻好多词才能找到起决定作用的主语。怎么办呢?天才的 J. Schmidhuber 设计了带有门结构的 LSTM 模型(见下图),让数据自行决定哪些信息要保留,那些要忘掉。如此以来,自然语言的建模效果,就大大提高了。大家初看下面两张 RNN 与 LSTM 的结构对比,面对凭空多出来的几个门结构可能一头雾水,唯有洞彻其中的方法论,并且有扎实的机器学习和最优化基础,才能逐渐理解和学习这种思路。

enter image description here

当然,LSTM 这个模型是神来之笔,我等对此可望不可及。不过,在这个例子里展现出来的关键能力:根据问题特点调整模型,并解决优化上的障碍,是一名合格的算法工程师应该追求的能力。年薪 50 万能找到这样的人,是物有所值的。

第三层次“Objective”:擅定义问题

这个层次的工程师(哦,似乎叫工程师不太合适了),扔给他一个新的实际问题,可以给出量化的目标函数。

当年,福特公司请人检修电机,斯泰因梅茨(编者注:Steinmetz,Charles Proteus 德国-美国电机工程师,对交流电系统的发展作出巨大贡献。)在电机外壳画了一条线,让工作人员在此处打开电机迅速排除了故障。结账时,斯坦门茨要 1 万美元,还开了个清单:画一条线,1 美元;知道在哪儿画线,9999 美元。

同样的道理,在算法领域,最难的也是知道在哪里画线,这就是对一个新问题构建目标函数的过程。而有明确的量化目标函数,正是科学方法区别于玄学方法、神学方法的重要标志。

目标函数,有时能用一个解析形式(Analytical form)写出来,有时则不能。比方说网页搜索这个问题,有两种目标函数:一种是 nDCG,这是一个在标注好的数据集上可以明确计算出来的指标;另一种则是人工看 badcase 的比例,显然这个没法用公式计算,但是其结果也是定量的,也可以作为目标函数。

定义目标函数,初听起来并没有那么困难,不就是制定个 KPI 么?其实不然,要做好这件事,在意识和技术上都有很高的门槛。

一、要建立“万般皆下品、唯有目标高”的意识。 一个团队也好、一个项目也好,只要确立了正确的、可衡量的目标,那么达到这个目标就只是时间和成本的问题。假设 nDCG 是搜索的正确目标函数,那么微软也好、Yahoo! 也好,迟早也能追上 Google,遗憾的是,nDCG 这个目标是有点儿问题的,所以后来这两家被越拉越远。

所谓“本立而道生”:一个项目开始时,总是应该先做两件事:一是讨论定义清楚量化的目标函数;二是搭建一个能够对目标函数做线上 A/B 测试的实验框架。而收集什么数据、采用什么模型,倒都在其次了。

二、能够构造准确(信)、可解(达)、优雅(雅)的目标函数。
目标函数要尽可能反应实际业务目标,同时又有可行的优化方法。一般来说,优化目标与评测目标是有所不同的。比如说在语音识别中,评测目标是“词错误率”,但这个不可导所以没法直接优化;因此,我们还要找一个“代理目标”,比如似然值或者后验概率,用于求解模型参数。评测目标的定义往往比较直觉,但是要把它转化成一个高度相关,又便于求解的优化目标,是需要相当的经验与功力的。在语音建模里,即便是计算似然值,也需要涉及 Baum-Welch 等比较复杂的算法,要定义清楚不是简单的事儿。

优雅,是个更高层次的要求;可是在遇到重大问题时,优雅却往往是不二法门。因为,往往只有漂亮的框架才更接近问题的本质。 关于这点,必须要提一下近年来最让人醍醐灌顶的大作——生成对抗网络(GAN)。

GAN 要解决的,是让机器根据数据学会画画、写文章等创作性问题。机器画画的目标函数怎么定?听起来是一头雾水。我们早年做类似的语音合成问题时,也没什么好办法,只能找人一句句听来打分。令人拍案叫绝的是,Ian GoodFellow 在定义这个问题时,采取了下图的巧妙框架:

enter image description here

既然靠人打分费时费力,又不客观,那就干脆让机器打分把!好在让机器认一幅特定语义的图画,比如说人脸,在深度学习中已经基本解决了。好,假设我们已经有一个能打分的机器 D,现在要训练一个能画画的机器 G,那就让 G 不断地画,D 不断地打分,什么时候 G 的作品在 D 那里得分高了,就算是学成了。同时,D 在此过程中也因为大量接触仿品而提升了鉴赏能力,可以把 G 训练得更好。有了这样定性的思考还不够,这样一个巧妙设计的二人零和博弈过程,还可以表示成下面的数学问题:

enter image description here

这样一个目标,优雅得象个哲学问题,却又实实在在可以追寻。当我看到这个式子时,顿时觉得教会机器画画是个不远的时间问题了。如果你也能对这样的问题描述感到心旷神怡,就能体会为什么这才是最难的一步。

一个团队的定海神针,就是能把问题转化成目标函数的那个人——哪怕他连开源工具都不会用。100 万找到这样的人,可真是捡了个大便宜。

在机器学习领域,算法工程师脚下的进阶之路是清晰的:当你掌握了工具、会改造模型,进而可以驾驭新问题的建模,就能成长为最优秀的人才。沿着这条路踏踏实实走下去,100 万并不是什么问题。什么?您说还有 300 万的呢?这个不用眼热,人家只不过把你写代码的时间都用来跳槽了而已。

@北冥乘海生 2018.9

——————
推荐阅读:
《The Coder》9 月刊聚焦程序员的职场江湖

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

20万到100万年薪的算法工程师有什么区别? 的相关文章

  • 【杭电100题】2073 无限的路

    题目链接 xff1a http acm hdu edu cn showproblem php pid 61 2073 xff08 c语言的double类型printf lf 显示0 00000问题 xff09 xff1a https blo
  • 【杭电100题】2094 产生冠军

    原题 xff1a http acm hdu edu cn showproblem php pid 61 2094 最近很喜欢用map 把成功者 失败者都存起来 然后在成功者里把曾经失败的划掉 最后成功者里如果只剩一个人 xff0c 冠军产生
  • 计算100以内的素数的个数

    以下代码是用来计算100以内的素数的个数 xff0c 请把相应的空填上 struct prime number node int prime number prime number node next int calc prime numb
  • [转载] Python一行代码实现1到100之和

    参考链接 xff1a 各种Python实现之间的区别 一行代码实现1到100之和 xff1a 第一反应等差数列求和公式 这个真的可以用 print 1 43 100 100 2 其实还可以使用python内置求和函数sum xff0c su
  • html遍历1到100,bat for循环100次:循环100求和

    这篇文章主要为大家详细介绍了bat for循环100次 循环100求和 xff0c 具有一定的参考价值 xff0c 可以用来参考一下 64 echo off setlocal ENABLEDELAYEDEXPANSION set a sum
  • 输出1-100的循环

    以下是在 Python 中输出 1 100 的循环代码 xff1a span class hljs keyword for span span class hljs selector tag i span span class hljs k
  • python怎么限制输入0到100的范围,思路及方法

    python限制输入0到100的范围的思路 要用python设计一个程序 xff0c 不仅可以满足限制用户输入0到100的范围 xff0c 而不仅仅是提示 xff0c 而且当用户输入超出范围的值的时候 xff0c python程序会给出提示
  • Python求1+2+3+...+100的值,计算自然数的立方和的两个程序代码

    目录 前言 一 求1 43 2 43 3 43 43 100的值 1 实现的功能 2 代码程序 3 运行截图 二 计算自然数的立方和的 1 实现的功能 2 代码程序 3 运行截图 前言 1 因多重原因 xff0c 本博文由两个程序代码部分组
  • C语言经典100题——输出“魔方阵“

    lt 1 gt 题目描述 输出 魔方阵 xff0c 所谓魔方阵是指它的每一行 每一列和对角线之和均相等 例如 xff1a 8 1 6 3 5 7 4 9 2 要求输出1 n 2的自然数构成的魔方阵 lt 2 gt 思路分析 将1放在第1行中
  • 靠写作能挣100万吗

    不要被标题吓到 xff0c 今天说的就是关于写作 Fenng大说 xff0c 同等能力的人绝对要文字写得好的 帅张说编程 英语 写作是程序员的3大底层能力 写作能给我带来什么 xff1f 王朔曾说 xff0c 写作是一条狗 xff0c 只要
  • c语言中写cord_l的作用,计算机等级二级c语言程序设计100例六_软件水平考试

    程序61 题目 xff1a 打印出杨辉三角形 要求打印出10行如下图 1 程序分析 xff1a 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 2 程序源代码 xff1a 以下是引用片段 xff1a
  • c语言中num =10,num/100%10 这是什么意思求详细的计算逻辑

    include int main 定义三位数num 个位数sd 十位数td 百位数hd int num sd td hd 循环所有三位数 for num 61 153 num 61 153 获取三位数字num百位上的数字 hd 61 num
  • git clone github_提高github下载速度的方法100%有效可达到2MB/s

    点击上方 Python全家桶 xff0c 星标 或 34 置顶 34 关键时刻 xff0c 第一时间送达 作者 kcx64 本文仅做分享 xff0c 若有侵权请联系小编 第一时间删文 阅读本文大概需要 2 8 分钟 因为大家都知道的原因 x
  • js生成1到100的数组方法

    生成1到100的数组的一种方法是使用JavaScript的Array from 方法 例如 xff0c 下面的将生成1到100的数组 xff1a const numbers 61 Array from Array 100 keys n 61
  • 量化投资学习——A股H股套利年化100%

    一 交易对象选取 首先是选取数据 xff0c 选取数据的来源是wind xff1a 从wind中的交易数据 AH比较 里面可以看到历史收盘价和A H溢价率 xff0c 考虑到在2008年金融危机之后 xff0c 全球市场发生了较大的变化 x
  • 1到100的二进制表示

    1 61 1 2 61 10 3 61 11 4 61 100 5 61 101 6 61 110 7 61 111 8 61 1000 9 61 1001 10 61 1010 11 61 1011 12 61 1100 13 61 11
  • Atcoder Beginner Contest 100 - 题解

    A 原题 Happy Birthday 本题其实很水 只需要输入这两个整数 xff0c 如果中有一个大于 就输出 xff0c 否则输出 Yay include lt bits stdc 43 43 h gt using namespace
  • 这100个shell脚本案例,你都知道吗?一篇教会你写90%的shell脚本

    shell 是一个应用程序 xff0c 它连接了用户和 Linux 内核 xff0c 让用户能够更加高效 安全 低成本地使用 Linux 内核 xff0c 这就是 Shell 的本质 shell脚本就是由Shell命令组成的执行文件 xff
  • 20万到100万年薪的算法工程师有什么区别?

    公元七世纪 xff0c 在车迟国国家气象局组织的一次求雨活动中 xff0c 虎力 鹿力 羊力三位大仙成功地祈下甘霖 xff0c 救黎民于水火中 老国王虽然不明就里 xff0c 却从此尊他们为国师 xff0c 奉道教为圭臬 本世纪 xff0c
  • C语言实现1/1-1/2+1/3-...-1/100求和

    观察题目要求可以看出 xff0c 底数为奇数是前面符号为正 xff0c 偶数是则为负 那么我们可以考虑使用一下方式完成求解 解法一 xff1a span class token macro property span class token

随机推荐

  • 如何找到现有研发体系的「内耗问题」?| 谈效风生

    第3期 xff1a 如何找到现有研发体系的 内耗问题 xff1f 在上一期 谈到提升效能 xff0c 我们应该如何下手 xff1f 我们聊到开始做研发效能的四个要点 xff1a 评估现有流程 引入自动化工具 建立度量指标 持续改进 本期就围
  • Ubuntu 18之vnc连接不上问题(已解决)

    在配置vnc时所以的准备动作已经准备好了 xff0c 该配的文件也配好了 xff0c 但就是一直连接不上 在主机端报time out的错误 xff0c 后来查百度得知vncserver xff1a 1对应5901端口 xff0c 2就是59
  • 「自动化」聊起来简单,做起来难 | 谈效风生

    第4期 xff1a 自动化 聊起来简单 xff0c 做起来难 在上一期 如何找到现有研发体系的 内耗问题 中 xff0c 我们聊了评估现有研发体系 xff0c 正确的找到 体系内耗问题 xff0c 是改变研发体系的第一步 本期我们继续聊下一
  • GitChat·前端 | 从软件工程角度看大前端技术栈

    GitChat 作者 xff1a 韩亦乐 前言 我们都知道 xff0c 大学几乎是没有 Web 前端课的 以我所在的大学为例 xff0c 唯一引导我们了解 JavaScript 的也只是 人机界面 和 Web应用开发 选修课 再者 xff0
  • 当我说要做大数据工程师时他们都笑我,直到三个月后……

    作者 xff1a Fickr孫啟誠 原文 xff1a 三个月大数据研发学习计划实战解析 关注微信公众号 xff1a GitChat 技术杂谈 一本正经的讲技术 不要错过文末彩蛋 申明 xff1a 本文旨在为普通程序员 xff08 Java程
  • 原来这样做,才能向架构师靠近

    说在前面 xff1a 达人课是GitChat的一款轻阅读产品 xff0c 由特约讲师独家发布 每一个课程你都可获得6 12篇的深度文章 xff0c 同时可在读者圈与讲师互动交流 GitChat达人课 xff0c 让技术分享更简单 进入我的G
  • 带你从零开始,快速学会 Matlab GUI

    本文来自作者 木木小迷哥 在 GitChat 上分享 Matlab GUI 零基础学员快速入门 xff0c 阅读原文 查看交流实录 文末高能 编辑 洛肯 Matlab广泛地应用于数学分析 计算 自动控制 系统仿真 数字信号处理 图像处理 数
  • Cordova App 打包全揭秘

    运营专题 零预算引爆个人和企业品牌 原文链接 Selenium 自动化测试从零实战 原文链接 原来这样做 xff0c 才能向架构师靠近 原文链接 TensorFlow on Android xff1a 物体识别 原文链接 TensorFlo
  • Selenium 自动化测试从零实战

    运营专题 零预算引爆个人和企业品牌 原文链接 原来这样做 xff0c 才能向架构师靠近 原文链接 Cordova App 打包全揭秘 原文链接 TensorFlow on Android xff1a 物体识别 原文链接 TensorFlow
  • [运营专题]零预算引爆个人和企业品牌

    文章推荐 Selenium 自动化测试从零实战 原文链接 原来这样做 xff0c 才能向架构师靠近 原文链接 Cordova App 打包全揭秘 原文链接 TensorFlow on Android xff1a 物体识别 原文链接 Tens
  • 图解敏捷教练和 ScrumMaster

    运营专题 零预算引爆个人和企业品牌 原文链接 Selenium 自动化测试从零实战 原文链接 原来这样做 xff0c 才能向架构师靠近 原文链接 Cordova App 打包全揭秘 原文链接 TensorFlow on Android xf
  • TensorFlow on Android:物体识别

    运营专题 零预算引爆个人和企业品牌 原文链接 Selenium 自动化测试从零实战 原文链接 原来这样做 xff0c 才能向架构师靠近 原文链接 Cordova App 打包全揭秘 原文链接 TensorFlow on Android xf
  • Jetson Xavier NX can通信,拒绝误导!

    概述 最近在开发一个网关项目 xff0c 需要调试一些通信接口 网关底板是基于jetson xavier nx设计的 xff0c 所以硬件上许多相似 xff0c 所以我也会基于jetson xavier nx去做一些接口的测试 xff0c
  • TensorFlow on Android:训练模型

    文章推荐 运营专题 零预算引爆个人和企业品牌 原文链接 Selenium 自动化测试从零实战 原文链接 原来这样做 xff0c 才能向架构师靠近 原文链接 Cordova App 打包全揭秘 原文链接 TensorFlow on Andro
  • 深入理解 MySQL 底层实现

    本文来自作者 默默 在 GitChat 上分享 深入理解 MySQL 底层实现 xff0c 阅读原文 查看交流实录 文末高能 编辑 哈比 MySQL 的常用引擎 1 InnoDB InnoDB 的存储文件有两个 xff0c 后缀名分别是 f
  • 修改订单金额!?0.01 元购买 iPhoneX?| Web谈逻辑漏洞

    本文来自作者 肖志华 在 GitChat 上分享 Web 安全恩仇录 xff1a 再谈逻辑漏洞 xff0c 阅读原文 查看交流实录 文末高能 编辑 哈比 Web 漏洞里有 SQL 注入 XSS 等漏洞 xff0c 但是逻辑漏洞等问题也是一个
  • 如何开发一款游戏:游戏开发流程及所需工具

    本文来自作者 goto先生 在 GitChat 上分享 如何开发一款游戏 xff1a 游戏开发流程及所需工具 编辑 哈比 游戏作为娱乐生活的一个方面 xff0c 参与其中的人越来越多 xff0c 而大部分参与其中的人都是以玩家的身份 他们热
  • 如何用 Python 做自动化测试

    本文来自作者 Vant 在 GitChat 上分享 如何用 Python 做自动化测试 编辑 哈比 一 Selenium 环境部署 1 window 环境部署 1 1 当前环境 Win10 64 位系统 xff1b Python3 6 2
  • 我真的要做一辈子的程序员吗?

    本文来自作者 王鹏 在 GitChat 上分享 程序员跳槽时 xff0c 如何正确做好职业规划 xff1f 阅读原文 查看交流实录 编辑 贝吉塔 经常听一些同学说 xff1a 不知道下一份工作该去哪类公司做些什么 xff0c 我的职场人际一
  • 20万到100万年薪的算法工程师有什么区别?

    公元七世纪 xff0c 在车迟国国家气象局组织的一次求雨活动中 xff0c 虎力 鹿力 羊力三位大仙成功地祈下甘霖 xff0c 救黎民于水火中 老国王虽然不明就里 xff0c 却从此尊他们为国师 xff0c 奉道教为圭臬 本世纪 xff0c