前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >揭开算法工程师的神秘面纱 | 不会coder的数学家不是一个好算法 | 算法杂谈(1)

揭开算法工程师的神秘面纱 | 不会coder的数学家不是一个好算法 | 算法杂谈(1)

作者头像
用户7623498
发布2020-08-04 17:02:26
1.2K0
发布2020-08-04 17:02:26
举报

今天,你算法了没?

关注:九三智能控,每天学点AI算法

0. 内容提要

算法工程师这个岗位听起来很高大上,但本质上和产品经理、前端、数据库等岗位没有区别,都是公司为了解决业务中的实际问题花钱找来的“人才”,因此业务落地经验、编程和数学能力缺一不可。产业界和学术界还是大不同的,业务场景不会因为算法的无能就增加各种假设的,用户只会为体验买单,你的公司只会为KPI买单

1.阿Q眼里的算法工程师

(1)上了课交了钱拿了证,可能连面邀都拿不到:缺乏经验

某知名 985 学校CS专业出身的小周,通过参加培训获得了某AI算法工程师证书,并参加了一个和预测数据类相关的小项目,大部分都是面向对象编程的工作经验,即使有一个和预测数据类相关的小项目,但这个项目显然无法替他敲开算法岗位的门。

自以为有相关经验的转岗求职者并不少见,市场给予他们的反馈也十分直白:不适合。

(2)发过paper只能证明学术小闭环

算法工程师的绝大部分工作是与模型打交道,即使是偏工程的算法工程师,其实也需要跟很多工具、模型打交道。因此,对于算法工程师而言,拥有一定的学术背景是公司考察的重点之一。 但是仅有学术能力是远远不够的。因为学术追求的成果距离业务落地仍然有很多不同的出发点,导致了难以在业务中产生效果和价值。

很多公司研究院做的东西,比如仿真这种,可能一个模型训练下来,(理论上)的确能够实现,在他们的 KPI 评价体系中也是达标的。但是这种实现都是对实现环境有非常严格要求的,这种理论上的实现和工业体系(实际业务)中差别还是非常巨大的。有些在工业体系中就是实现不了,并不是说他们错了,而是他们难以落地。

(3)算法的细分领域内不匹配

某知名 985 学校毕业的博士生林某,在图像算法领域有很深的研究,求职期间由于看重某大厂的平台,并且公司表示他可以单独负责一个新的方向,于是决定转岗广告算法。但入职之后,发现他了解的算法技能并不能很好地被应用到现有的岗位上,经过深思熟虑之后,他还是放弃了这个机会,重新到市场上进行求职。

虽然说底层的算法内核是一样的,但是他们在实际应用中,包括业务领域、处理的问题、需要的技巧方面的差异还是特别大。算法内部转岗可能意味着前期技术积累直接的浪费,这样一种不匹配求职十分可惜。

2.算法工程师到底是干啥的

(1)概述

算法工程师主要根据业务进行细分,常见的有广告算法工程师、推荐算法工程师、图像算法工程师等等。虽然不同的业务场景会提出更多细分的要求,但抽象来看,算法工程师的绝大部分工作内容都在和模型打交道。

算法工程师的简历中的典型内容

  • 与软件工程师协作,对 XXX 版中的 XXXX 和 XXXX 进行优化和改进,对公司用户的存储数据进行采集,采样和模拟,比较不同的算法在不同数据模式下进行动态存储分配的的性能。
  • 利用神经网络模型对用户数据进性建模,训练和分类,存储获得的模型参数和权重,将获得的模型转化成预测模型标记语言。
  • 利用机器学习模型和基于规则模型对 XXXX 的所有商品进行危险品检测,将模型部署用于在线实时分类以及离线批处理分类。
  • 主持人群分类与精准投放、广告效果归因分析、商品零售销量预测、基于匿名数据的跨屏用户打通、同源样本库等项目的研究与开发。

(2)典型的一天

这样说可能有点抽象,我们来看看某高级是工程师的“典型的一天”,以及他对算法岗位的感受。

7:30-8:00起床,边喝咖啡边看一些跟工作相关度不高的书,比如最近在看《自私的基因》

9:00出门上班

9:10-9:30边吃早餐看财经类新闻

9:30-18:00处理各种工作任务,分析问题,建模

比如说如果要做一个信用卡营销模型,简单来说就是去判断一个人需不需要办理信用卡,基本流程如下:

1. 首先需要对需要解决的问题进行分析,将一个问题拆分成几个小的子问题。在信用卡营销这个场景里,问题相对简单,是一个二分类的问题。

2. 明确问题之后,需要了解现有的数据情况,通过一些统计分析、可视化的方式去了解数据的特性。在该场景中,会有一些用户的上网行为日志数据。需要通过用户的上网行为去预测哪些用户具有信用卡需求。

3. 接下来就是对数据进行必要的清洗、加工,提取相应的特征,以满足后面算法建模的需求。

4. 对问题进行算法建模。一般来说,先会基于过往的经验对该问题进行适配,快速产生一个结果作为benchmark,然后基于数据情况和效果分析对模型特征、模型设计进行有针对性地优化。以该问题为例,对于一个分类问题,会先采用逻辑回归和XGBoost产生一份结果,由于数据的稀疏性和数据量的情况,会采用矩阵分解和DNN来试图提升结果。

5. 在经过多次的试验之后,需要分析得到的试验结果,并采用最贴合业务目标的指标来评估最佳模型,在这个问题中,我们更看重Precision和Recall的综合评估,因此采用F1指标来衡量模型效果。

6. 工程化、上线,并进行后期维护、更新模型。并同时跟踪业务指标是不是和模型指标相贴合,确保该模型在实际业务场景中是可行的。

18:00-20:00看算法相关的技术类书籍

20:00-22:30回家,看电影,看剧,喝茶

22:30准时休息。

一周固定健身三次。

周末固定去看书,社交,踢足球

(3)大牛的亲身感受

算法工程师是一个可以很简单也可以很复杂的岗位,一个优秀的算法工程师可以处理很多深层次的东西,而一个经验不足的算法工程师可能就只会使用工具包来解决问题。

作为一名算法工程师,是非常看好优秀的算法工程师的职业前景的,因为从经济学的角度来讲,只要生产在进步,科技在创新,人类就一定需要做提升效率的事,比如自动驾驶,人脸识别,都在提升效率,而算法工程师的核心就是在做提升效率的事情,如果没有好的算法团队,即使再多再好的数据也是无法使用的。

当然想从事算法工程师这行,本身也不是一件容易的事情,首先要有非常非常好的数学基础,其次要有计算机基础,会编程,python ,最后还要思维活跃,脑子灵活;有很强的想象力和推理能力

程序员和算法工程师有交集,算法需要思考的地方会更多一点”与程序员的工作不同,算法工程师需要有更多的时间来独立思考,比如一个算法问题有的算法工程师可能用一个小时就可以像搞定,而有的人则需要思考几个小时甚至几天,做算法模型的时候会非常烧脑,甚至枯燥,所以要不断去刺激自己的激情和新鲜感。

而提到作为算法工程最苦逼的事情,毫无疑问是三个字“准确率”!!!,比如做人脸识别的时候,如果准确率到75%就再也提升不上去的话,就会非常苦恼。这个职业难到即使是科班出身,逻辑推理能力非常强的大牛,碰到一个算法模型也要反反复复的看很多遍才能看的懂。

3.算法工程师的技能树

(1)学术/数学要求

a. 关注机器学习领域的最新进展,对深度学习、概率图模型有研究者优先;

b. 扎实的数学和计算机科学功底,对数据结构和算法有较为深刻理解;

c. 本科以上学历,扎实自然语言处理、机器学习、数据挖掘理论和技术基础;

d. 能够阅读英文技术文档和论文,具有良好的自学能力;

e. 在顶级会议、期刊上发表过论文者优先;

(2)编程要求

算法工程师的工程素养其实就是一个程序员的基本素养。这也是大部分非 AI 范畴公司招聘算法工程师的基本要求之一:

a.至少精通一门编程语言(Java,Python,Golang) Java优先, 熟悉常用的数据结构、算法等,掌握软件工程、敏捷开发模型,熟练掌握和应用各种设计模式;

b.有海量访问系统的开发经验,对高可用、高并发、易扩展有结合实际的理解。

(3)经验要求

算法工程师的工作不仅仅停留在训练模型层面,还需要把你的模型与实际工作相结合。如果没有好的业务理解,一个你认为找到了一个很棒的变量,其实是你的理解错误。这些要求在岗位描述上通常被这样婉转地表达出来:

a. 具备业务抽象和信息建模能力,能够将复杂的业务场景分解、抽象成标准化的业务模型;

b. 对于把大数据和人工智能分析的结果能够应用到实际业务场景产生商业价值具有强烈的热情

这些业务理解能力的另外一种表达方式就是对已有数据的敏感性。对数据的敏感主要表现在:了解数据的业务涵义、能够把数据进行准确的应用。

4.如何修炼/培养技能树

三句话:夯实基础,多写代码看数据,多做项目。

(0)菜鸟找感觉

如果你是一个算法新人,我建议还是多去听一听业界的会议,这些会议有些是收费的,有些是免费的。我个人觉得比较好的是一些公司组织的沙龙及小型的会议,可以参加去长长见识,看看别的公司在用什么,别的公司在解决什么问题。

然后,就是关注一些比较勤奋的人的博客、微信公众号,哪怕他讲得这个东西不是很好,但是他会把这个东西带到你的面前来,是你原来不知道的。比如九三智能控o(∩_∩)o 哈哈

最后一个就是看书。我是建议工程师多看书,盯住比较经典的书,再加上稍微跟一些最新的东西,看看新的东西跟经典的有哪些不一样的地方。

但主要精力,得花在比较困难的事情上。一旦变成自己的,可能很长一段时间都非常受益。

(1)夯实基础:数学和编程

数学基本上是三门功课为基础:概率、线性代数、微积分。有余力再修一下数值分析、凸优化、动态规划等多多益善。详细可以参见以前的文章《【Hacker News最火教程】机器学习必备的数学知识 | Learning札记 | 7th》《从入门到放弃 | 机器智能算法建模的数学书单 | 算法数学 | 1st》

编程方面,基本的数据结构和编程语言要掌握,语言推荐python、c++等。对于主流机器学习/深度学习框架的使用一定要熟练,比如tensorflow或pytorch、keras等。大型数据分析或分布式的部署需要对数据库的基本操作比较熟练,如sql、oracle等,这个不是难点,即用即学也来得及,一般找你的程序员同事请教一下也没问题。

(2)多写代码看数据

把体系化的算法,你都会自己去实现一遍。实现一遍之后,你会非常胸有成竹说这个算法都能干什么事情,都能解决什么问题,你在面对实际问题的时候,你才能把这个东西很好地组合起来。这就是要多写程序,把算法都实现了,不仅是要看懂,还得要实现。

多看数据,就是会发现很多问题、很多规律,会让你做事情是事半功倍的,会解决很多实际的业务问题,你会有成就感,你会不断地再驱使你不断再去学习。

真正算法的东西,书在市面上都有,随便买一本经典的书,然后把上面的算法都实现一遍。

(3)多做项目

纸上得来终觉浅,须知此事要躬行。业务落地能力说白了就是干过和没干过的区别,你走过的坑都是现在的经验。而且越熟练就越高效,这个经验是靠工作实践积累来的。

算法工程师的成长路径是一个升级打怪的过程,并且要不断的去增长建设。因为升级打怪过程中,你遇到的怪可能会越来越厉害,那么你原来的武艺可能打不过这个怪,就需要提升自己,工作是个很好的成长方式。在完成需求的基础上,想一想如何提高效果,比如,我有几个东西要组合起来去调用,几个组合?谁先谁后?不同的组合就有不同的响应时间,这个过程中,就要你去想办法得到最好的最少的响应时间,这就是一个非常典型的优化问题。推荐系统、机器学习里面,全都是这种优化问题,都可以用算法去解决。

5.扩展阅读

算法工程师的书单、经典论文和课程列表,详细参见九三智能控公众号对话框的菜单栏,持续更新中,也欢迎大家给九三推荐好的书籍、论文和课程资源,分享给大家~~

参考资料

1.算法工程师过去这一年:理想很丰满,现实很骨感:https://blog.csdn.net/dqcfkyqdxym3f8rb0/article/details/79350845

2.如何入门并成为一名出色的算法工程师?:http://www.sohu.com/a/232557625_355140

3.算法工程师简介:https://zhidao.baidu.com/question/1180243197582612339.html

4.一个90后算法工程师的自我修养:https://baijiahao.baidu.com/s?id=1596612406491632939&wfr=spider&for=pc

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 决策智能与机器学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
人脸识别
腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档