当前位置: 首页 > news >正文

算法工程师的危机

不久前,讯飞AI同传语音造假的新闻刷爆科技圈,科大讯飞股价应声下跌3.89%(不是65.3%,标题党文章害死人)。 吃瓜群众纷纷感慨,有多少人工,就有多少智能。

AI概念在2015年起就红得发紫,不论是送外卖,搞团购,卖车,或是推荐莆田医院的,是个公司都会标榜自己是搞人工智能的。

在21世纪的第二个十年,计算机专业相关的学生不说自己是搞AI算法的,同学聚会都抬不起头,相亲都没机会。

随便从一摞简历里抽出一份,一定会有AI、调参、CNN、LSTM这些关键词。未来最赚钱的职业,一定不是天桥贴膜,而是天桥调参,50块钱一次,一调就灵:

天桥调参

NIPS会议,人满为患,改改网络结构,弄个激活函数就想水一篇paper;  到处都是AI算法的培训广告,三个月,让你年薪45万!

在西二旗或望京的地铁车厢里打个喷嚏,就能让10个算法工程师第二天因为感冒请假。

谁也不知道这波热潮还能持续多久,但笔者作为一线算法工程师,已经能明显感受到危机的味道: 以大红大紫的图像为例,图像方向简历堆满了HR的办公台,连小学生都在搞单片机和计算机视觉。

在笔者所在的公司,人工智能部门正在从早前研究院性质的组织架构分别向前台和后台迁移:前者进入业务部门,背上繁重的KPI,与外部竞争者贴身肉搏。

后者则完全融入基础架构,像数据库一样普通和平凡。之前安逸的偏研究生活被打破, AI早已走下神坛。

以笔者愚见,对于一般的算法工程师,这种危机包含两部分:一方面是来自人的竞争,大量便宜的毕业生和培训生涌入这个行业,人才缺口被迅速填满甚至饱和,未来的竞争会更激烈。

另一方面则是来自机器的竞争,大量算法工程师会很快被他们每天研究的算法所代替。 这两者互相恶化,AI人才市场终会变成一片红海。

 

 

连小学生都会写模型

 

工具和框架本身的发展,让设计模型所需的代码写得越来越简洁。10年前从头用C++和矩阵库实现梯度下降还是有不小的门槛的,动辄上千行。而当今几十行Keras甚至图形化的模型构建工具,让小学生都能设计出可用的二分类模型。

强大的类库吞噬了知识,掩盖了内部的复杂性,但也给从业者带来了不小的惰性。从业者的技术水平,和使用模型的复杂程度关系不大,越是大牛,用的技术更底层更make sense。

不仅如此,深度学习本身的性质,造成了明显的数学鸿沟。与SVM, 决策树不同,由于模型存在大量的非线性和复杂的层次关系,且输入信号(例如图像,文本)也很复杂,因此严格的数学论证是需要极高的抽象技巧的。

该方法为什么好,在什么类型的数据上好,有时连作者都在拍脑袋,很多state of arts的方法,成了口口相传的经验和trick,而非严谨的theory。 连batch normlization(批规范化,只包含四个初中数学级别的简单公式)为何有效,都被争论了好几年。

只有凤毛棱角的专家,能深入到模型最深处,用数值分析和理论证明给出严谨的答案。 大部分人在入门后便进入漫长的平台期,美其名曰参数调优,实际就像太上老君炼丹一样。

我们把这种现象绘制成下面的AI学习曲线,左侧是稍显陡峭的入门期,需要学习基本的矩阵论,微积分和编程,之后便是漫长的平台期。 

随着复杂性越来越高,其学习曲线也越来越陡峭,大部分人也就止步于此。 越来越易用的工具,让曲线的斜率变大,入门期变短,却并不能改变右侧的陡峭程度。

AI学习曲线

入门容易深入难,这条曲线同时也能描述AI人才的收入水平。而真正处于危机的,莫过于夹在中间的芸芸众人:对理论一知半解,对工具非常依赖。可替代性很强,一旦AI浪潮过去,就知道谁是在裸泳。

市场和业务变化越来越快,能有哪些核心业务,是能让工程师静心调个一年半载的呢?

当一个从培训学校里出来的人都能做模型时,有多少业务能让公司多花两三倍的人力成本,而仅带来1%的性能提升呢?

 

 

机器都能调参,要你干吗?

 

面向大众AI科普节目,最常讨论的便是“AI时代如何不被机器所取代”。很不幸,最容易且最快被取代的反而是算法工程师。

算法岗比工程岗更容易被取代。 在现有技术下,由于业务需求的复杂性, 自动生成一套软件App或服务几乎不可能的(否则就已经进入强人工智能时代了),但模型太容易被形式化地定义了。

根据数据性质,自动生成各个领域的端到端(end2end)的模型也逐渐在工业上可用了:图像语音和广告推荐的飞速发展,直接套用即可。理论和经验越来越完善,人变得越来越可替代。

特征可以自动生成和优选,特征工程师失业了; 深度网络采用经典结构即能满足一般业务需求,参数搜索在AutoML下变得越来越方便,调参工程师的饭碗也丢了; 以前需要大力气搭建的数据回流和预测的链路,已经成了公司的基础组件,数据工程师也没事干了。  

此处引用老板经常说的一句话:机器都能干了,要你干吗?

从目前AI热门论文的情况看,广告推荐领域已经逐渐成熟,很多技巧沉淀为一整套方法论,已进入平台期。

下一个即将被攻陷的领域应该是图像;而文本由于其内在的抽象性和模糊性,应该是算法工程师最后的一块净土,但这个门槛,五年内就会有爆发式的突破。

 

 

如何最优化职业发展?

 

人工智能已经火了至少五年,它在未来五年是否火爆我们不能确定,但一定会更加两极化:偏基础的功能一般程序员就能搞定,像白开水一样普通。而针对更复杂模型甚至强人工智能的研究会成为少数人的专利。

在一般的技术公司,传统意义的软件开发和产品设计,远比AI算法的需求来的多。

算法永远是锦上添花,而非雪中送炭,再好的算法也拯救不了落后的业务和商业模式。一旦经济下行,企业首要干掉的就是锦上添花且人力成本较高的部分。

如果你是顶级的算法专家,这样的问题根本不需担心。但是,对大部分人来说,如何找到自己的梯度上升方向,实现最优的人生优化器呢?

笔者给出一些不成熟的小建议,供读者抛砖引玉,基本也是往两头走:

首先是深入原理和底层,类似TensorFlow的核心代码至少要读一遍吧?就算没有严格的理论基础,最起码也不能瞎搞啊。 

切莫不能被工具带来的易用性迷惑双眼。要熟悉工具箱里每种函数的品性,对流动在模型里的数据有足够的嗅觉,在调参初期就能对不靠谱的参数快速剪枝。

按个人理解,做算法带来的最大收获是科学精神和实验思维,这是做工程很难培养出来的。以前看论文看了introduction和模型设计,草草地读一下实验结果就完事儿了。

殊不知AB实验设计很可能才是论文的核心:实验样本是否无偏,实验设计是否严谨,核心效果是否合理,是否能证明论文结论。

也许一行代码和一个参数的修改,背后是艰辛的思考和实验,做算法太需要严谨和缜密的思维了。即使未来不做算法,这些经验都会是非常宝贵的财富。

再者是尽早面向领域,面向人和业务。AI本身只是工具,它的抽象性并不能让其成为各个领域的灵丹妙药。 

如果不能和AI专家在深度上竞争,就在业务领域专精深挖,拥有比业务人员更好的数据敏感度,成为跨界专家。现在已经有大量AI+金融、AI+医疗、AI+体育的成功案例。 

人能熟悉领域背后的数据,背后的人性,这是机器短时间内无法代替的,跨界带来的组合爆炸,也许暗含着危机中的机会吧。

最后感慨一下,同样是80后,年龄相差无几,有人已是副总裁,有人带了几个人的小团队,有人还在基层苦苦挣扎,轨迹在毕业时分叉,几年后早已沧海桑田。

相关文章:

  • 论文类型 Journal 、 magazin 、 transaction 、 letter 等的区别
  • latex 真的 很简单!
  • 查看大型工程源代码方法
  • c++ code:(2)function
  • c++ code:(4)pointer
  • c++ code:(5)sort
  • code 练习之路
  • 初见kopernio
  • c++ code:(7)basics2
  • c++ code:(10)operator overload
  • c++ code:(11)inheritance
  • c++ code:(12)polymorphism
  • c++ code:(13)io and template
  • 英文论文写作素材
  • 王梓坤院士的学术思想
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 【前端学习】-粗谈选择器
  • create-react-app项目添加less配置
  • docker python 配置
  • Golang-长连接-状态推送
  • happypack两次报错的问题
  • HomeBrew常规使用教程
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • JavaScript类型识别
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Spring声明式事务管理之一:五大属性分析
  • STAR法则
  • tensorflow学习笔记3——MNIST应用篇
  • vue 配置sass、scss全局变量
  • Webpack 4x 之路 ( 四 )
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 那些被忽略的 JavaScript 数组方法细节
  • 你真的知道 == 和 equals 的区别吗?
  • 批量截取pdf文件
  • 前嗅ForeSpider采集配置界面介绍
  • 全栈开发——Linux
  • 入门级的git使用指北
  • 实战|智能家居行业移动应用性能分析
  • 思考 CSS 架构
  • 异常机制详解
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • linux 淘宝开源监控工具tsar
  • ​TypeScript都不会用,也敢说会前端?
  • ​ubuntu下安装kvm虚拟机
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • ###C语言程序设计-----C语言学习(3)#
  • (04)odoo视图操作
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (NSDate) 时间 (time )比较
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • @Autowired和@Resource装配
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法