来源:Charlotte数据挖掘

作者:Justin ho

链接:https://www.zhihu.com/question/31284094/answer

1.接到一个项目之后心潮澎湃,脑子里马上闪现出faster rcnn,resnet,mask rcnn等各种的算法。

2.结果发现图片都不知道存在哪.....于是反馈给产品经理,开了一通会议,确定图片数据库在某个位置,准备读表爬虫!

3.结果发现表的信息是乱七八糟的,一张表里面有图片链接,但没有这个图片的标签信息;另一张表里面有标签信息,但又没有图片链接。找了许久才发现两张表可以用图片id来结合,行吧,不就是查表的事情,写一堆代码把这些信息整理起来吧!

4.花了一天终于整理出图片链接的csv了,交给爬虫组爬了三天三夜,期间在YY到时图片下下来之后可以用什么算法。

5.拿到图片了,发现类别有了,但是bbox,关键点坐标信息都没有啊!咋整,上网找了个labelme,自己整个1000张用着先呗,然后花了两天整了少量图片出来,期间还要劝服同事帮忙。

6.剩下的图片交给标注员去标注。接着就是根据前两天YY到的算法,上github找找有没有现成的模型,然后git clone。修改了一点输入输出,用公共数据集顺利跑通!看来还是不错的嘛!

7.回头把自己的数据放进去试试,简直一塌糊涂,那是当然的。现在就得回去仔细研究论文,看看作者的各种实现细节,然后魔改模型finetune.再次测试,咦,有点效果喔~

8.这时候领导紧急开了个会议,说现在目标有点改变,我们往另一个方向走吧。

9.开始研究这个领域的所有经典论文,每篇论文都看上好几次,看到最后几乎把整个领域的主要脉络摸清了,然后磨刀霍霍向模型!

10.国际惯例先找github,但是很不幸我想要的算法并没有开源实现,那我来做第一个吧!

11.马上照着菜单(论文),啪啪啪构建proposal模型,各种自定义层结构,特殊的菜单中提到的weight decay,learning rate decrease,几乎把论文所有角落的细节都翻遍了,目前为止进度还行,但是慢看!论文里提到的一个层,作者只是一笔带过了,没详细说明这是怎么实现的!

12.都到这地步了还能放弃?开玩笑,立刻照着上related work那一章提到的所有论文寻找线索,于是各种谷歌github知乎stackoverflow,终于弄懂了这个层的数学原理!

13.好不容易把模型复现出来了,好家伙,开始用标注员准备好的数据来训练。14.慢着,这loss曲线不对劲啊?为啥会是直线,而且一轮收敛?不不不,肯定哪里出了错误,我得把代码重头检查一遍!

15. 费好大劲终于找出bug,代码也顺利跑通了,然后进入各种调参无限死循环。

16.老板:那个,我们决定还是换个方向吧,需求变了。

17.算法工程师时常自嘲成调包师,而且外行人听多了就还真以为调包很容易,深度学习和其它机器学习算法不同的是,一篇新论文算法的出现都要写很长的代码去复现。而且前提是你深刻了解作者的思想,蛋疼的是,有时候作者不会把所有细节都告诉你!!!容易吗我!

作者:天雨粟链接:https://www.zhihu.com/question/31284094/answer/331809395

我这些回答仅是从我的几份实习中总结出来的,只是写自己的看法与感受,当然有些同学跟我所做的内容有些差别,所以答案仅供参考啦!

在算法模型领域大概实习了1年多的时间了,突然看到这个问题,也顺便总结一下自己过去实习的经历。

看到各位知乎大佬的答案,我仅从实习的这个角度来浅显地谈一谈我在工业界做算法和日常做小project之间的不同感受。

在我目前的理解上,算法工程师分为两类。其中一类是偏研究型的算法工程师,例如复现paper,改善模型,发paper,出专利,这一类人才大都是科研大佬。第二类则是更加贴近业务的算法工程师,不如称为「算法应用工程师」。这一类同学主要是与业务同学进行搭档,通过现有的一些成熟模型来帮助业务同学解决问题。

我所从事的主要是后者,即算法应用。

在我的工作中,大多数时间都花在定义问题、数据预处理(包含ETL、特征工程、特征筛选等)、模型评估上,而模型的训练、调参等所花费的仅仅是少数时间。这也印证了吴叔叔(Andrew Ng)所说的“实用化的机器学习基本就是在做特征工程”。

下面分别从这三个方面来具体说下:

首先是定义问题。定义问题包括很多方面,例如业务需求定义、模型产出形式、变量的定义与衍生、目标y的定义等等。在大多数时候,业务方同学对自己的需求并不是那么明晰,很可能只是说“我需要一个简单的用户画像or某个客群识别or某个值的预测”,但是具体的细节例如这个模型未来的使用场景、变量的要求等等都是不清楚的,需要在不断的讨论与数据验证过程中进行定义与修改。甚至更多的时候要考虑到模型在未来业务变化的情况下是否能保持稳定的产出,尽量减小模型的衰减。

其次是数据的预处理。这一步是非常消耗时间的,大多数情况下,数据并不是现成的放在面前,就等你跑个模型。我相信大多数学生党所接触到的机器学习都是拿到几张二维表,直接做个表连,然后调几个包,处理下特征,跑个模型。但真正在工业界(至少在我接触到的业务中),数据都是原始的、底层的,甚至是非结构化的,更甚至好不容易找到个相关数据源,但发现不维护了,数据质量得不到保证,就只能更换数据源。这类原始数据中充斥着各种脏数据,而我们的大多数工作就是在处理这些脏数据,让它们变成可以让我们的模型所使用的数据。其次很重要的就是特征的处理,俗话说“Garbage in, Garbage out”不是没有道理的。以前我做Kaggle的时候,总是想着,特征不用那么精细化处理,我随便调几个包,填个空值、做个特征排序就OK了。但其实在真正的业务中,是要对某一个特征的分布、数据的源头、加工逻辑有着严格的把控,一旦某个特征加工逻辑有问题就会导致结果非常差。由于我是做金融领域模型的,所以某些模型需要解释性,因此变量的筛选和特征工程就要做得非常精细化,否则即使模型效果再好,但没办法解释就无法上线(这也是为啥我们很少用DNN去做某些模型)。

第三点就是模型评估。在学校自己做project的时候,模型的评估无非就是MSE,MAE,混淆矩阵,precision,recall,F1 score等等,在validation上看看这些值,画几个图,再调调参数。但在工业界里,模型的评估是非常重要的一个环节。模型评估包含模型本身的性能、模型稳定性、变量的稳定性、可维护性等等方面,还要结合具体的业务指标进行验证。因为业务是经常发生变化的,所以要对模型的衰减有一个预估,保证在业务可接受的时间内稳定运行。

最后简单说几个和在学校做模型不同的地方:

1.工业界基本遵循“奥坎姆剃刀”原则,在不牺牲很大性能的情况下,更加愿意选择简单、稳定性强、可解释性强、可维护性好的算法与模型。其本身并不是像kaggle那样要追求那么高精准的结果,一个算法和模型的完成要综合考虑到方方面面。

2.特征工程十分重要!否则就是上面提到的“Garbage in, Garbage out”

3.业务规则>模型。做业务支持算法的同学可能对此有体会,有时候几个资深业务专家的规则的结果甚至要强于模型。现在我做模型也基本是规则+模型一起做。

4.数据分析很重要!这里包括对数据的理解、对统计学的认知等,一个好的算法工程师也一定是一个好的数据分析师。

5.统计学很重要!!!

6.对算法的原理、应用场景要非常熟悉,这也是一个算法工程师的基本功。

作者:flyingfish链接:https://www.zhihu.com/question/31284094/answer/3101401232017年,我做了一年机器学习,数据挖掘相关的工作。 工作体验和其他答主完全不一样,所以准备写一下部分难忘的经历。

可能在大公司做机器学习相关的工作容易很多吧,比如变量是现成的,甚至 标签也是现成的。 于是工作的日常就是抽取一些变量和标签进行建模,调整参数之类。每天不停的跑数据。

但是我们的工作完全不一样。

我们的目标在业务上是反欺诈,现有的特征不能使用,因为已经有建模的团队了。 为了提升反欺诈的效果,我们只能从数据角度出发,挖掘出更多更好的变量,不用现有的任何特征,目标却是比现有的模型效果更好。

了解了状况之后,于是开始做关系网络,因为这块是公司空缺的领域,而且整个行业来看的话,做的好的公司也没有几家。

说干就干,工作从研究数据类型,关系, 数据清洗开始。 遇到的第一个问题是 sql, 无法构造成图结构。 于是自己动手 写代码用 java 读写 hdfs 数据,在内存里面构图,计算特征。尽管搞到一台256G内存的机器,依然遇到 内存不够用的情况。 查的原因是 需要加载到内存的边太多,几亿条。 接下来,优化数据结构的内存开销,能用short 就不用integer, 能用long 就不用 string.  甚至自己做数据做分片。 计算特征的时候,仅仅加载该分片需要的所有数据到内存里面来。 终于第一个里程碑做到了, 特征有了, 标签有了。 从开始工作到第一个模型的建立,中间花了1.5个月。还好模型效果显著,得到了老大们的支持。

既然模型效果好,仅仅用了 xgboost 就效果显著了。那么就努力上线啊。这个时候才知道上线才是最大的困难。因为这个模型上线需要优先做到实时关系网络的构建。

关系网络数据存哪里?试过 Neo4j , OriginDB, Titan 等图数据库。 花了3个多星期用来写各种demo, 测试逻辑准确性,测试性能等等。 得到的结论是没有一个开源的图数据能够满足需求。

捉急啊,有价值的模型居然因为技术实现问题难以上线。总不能放弃吧。 最终决定只把边这一种数据保存到 HBASE 表里面。 让HBASE 帮我解决存储问题。 采用Flink 实时流框架,写了一堆代码暴力的往 HBASE里面写入 增量的边。 历时2个多月,完成 FLINK + kafka 做到实时关系网络的构建, 延时不到1秒。 并发的进程数量高达30多个。

后续还需要做 图的完整性测试,时效性测试,测试ok 后。 还需要自己写基于关系网络的特征工程,模型预测,预测结果还需要上线观察一个月。 真正意义上的上线都已经10月份了。从2月底开始尝试去做,到做成上线一共经历了7个月。

整个过程下来,建模的工作不超过2周。流计算,实时关系网络构建,特征工程,特征准确性测试等技术工程实现上花的时间占用99%。一条龙全部自己做。而业务使用上,只是到 hbase 的一张表里面根据 rowkey 拿模型预测分就好了。却无法感知上线路程之艰难。

模型的实际效果好,为之辛苦值得。

欢迎扫码关注:

做机器学习算法工程师是什么样的工作体验?相关推荐

  1. 做算法工程师是什么样的工作体验

      <!--StartFragment -->

  2. 机器学习算法工程师的自我修养

    https://www.toutiao.com/a6647345854191501828/ 2019-01-18 10:14:00 通往机器学习算法工程师的进阶之路是崎岖险阻的.<线性代数> ...

  3. 《百面机器学习算法工程师带你去面试》资料学习

    <百面机器学习算法工程师带你去面试>收录了超过100道机器学习算法工程师的面试题目和解答,其中大部分源于Hulu算法研究岗位的真实场景.本书从日常工作.生活中各种有趣的现象出发,不仅囊括了 ...

  4. 转载:机器学习算法工程师秋招总结

    转载:原文链接:https://blog.csdn.net/zichen_ziqi/article/details/83308809 版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权 ...

  5. 推荐算法工程师学习路线及工作指南

    干货!推荐算法工程师学习路线及工作指南 以下文章来源于大数据与人工智能 ,作者gongyouliu 本文从我自己的学习成长经历.如何判断自己是否适合从事推荐算法.推荐算法工程师需要的知识储备.怎么找一 ...

  6. 机器学习算法工程师面试集锦(更新中)

    机器学习算法工程师面试集锦(更新中) 面试问题汇总 常用的损失函数 介绍交叉验证 特征选择方法 机器学习项目的一般步骤 经验风险最小化与结构风险最小化 训练决策树时的参数是什么 在决策树的节点处分割标 ...

  7. 2018年机器学习算法工程师求职经验搬运

    机缘巧合下遇到了这篇文章... ---------------------  作者:GeekZW  来源:CSDN  原文:https://blog.csdn.net/zichen_ziqi/arti ...

  8. 作者:卢祥虎,男,北京金信网银金融信息服务有限公司机器学习算法工程师。...

    卢祥虎,男,北京金信网银金融信息服务有限公司机器学习算法工程师,目前从事P2P风险预警建模相关的算法设计工作,在机器学习算法领域具有一定的理论与实战经验,擅长机器学习中数学算法的优化与改进等.

  9. 大疆2019校招提前批机器学习算法工程师在线笔试题目回忆版

    最后还涉及到两道16分的在线编程题目,但是我忘记了,故没有列出来,望大家原谅2333. 大疆2019年校招提前批机器学习算法工程师B卷题目回忆版 1 考察关于各种激活函数 sigmoid.tanh.r ...

  10. 杭州校招 | ​阿里钉钉算法技术团队招聘NLP/机器学习算法工程师

    合适的工作难找?最新的招聘信息也不知道? AI 求职为大家精选人工智能领域最新鲜的招聘信息,助你先人一步投递,快人一步入职! 阿里巴巴 钉钉是阿里巴巴集团打造的全球头部企业级智能移动办公平台,致力于帮 ...

最新文章

  1. 语言中拟合函数 计算aic_Go语言函数深度解析(中)
  2. mongodb导入json文件
  3. 进口配额管理和出口配额管理_SAP采购管理模块中的quot;配额协议quot;应用详解...
  4. [算法][LeetCode]Spiral Matrix
  5. ADSL Modern+无线路由实现无线上网
  6. Centos7搭建SVN服务步骤说明
  7. c语言调用labview方法,LabVIEW与C语言接口的方法
  8. ijkplayer、VLC Player、SmartPlayer、ExoPlayer播放器比较
  9. Apache vs Nginx vs Tomcat vs JBoss vs Jetty
  10. swagger默认访问路径_spring-boot集成swagger-ui修改默认访问路径
  11. android 导入 苹果手机,安卓手机文件怎么传到苹果手机
  12. arduino android模拟器,模拟仿真Arduino软件(Virtual Breadboard)
  13. 中国知网查重方法有哪些
  14. *.dfm resource kept;file *.dfm resource discarded
  15. 使用Node.js爬取双色球十六年来所有中奖号码
  16. ToolScanner.java:8: 错误: 编码GBK的不可映射字符 //澹版槑绫? JAVA输出中文乱码
  17. 树莓派4B刷openwrt软路由系统,树莓派做有线路由器的扩展实现各种自定义操作
  18. 计算机磁盘图标变了怎么改过来,本地磁盘图标变了怎么办 本地磁盘图标变解决方法...
  19. Mermaid知识点总结4 - Flowchart 3
  20. SVN报错:can't open file db/txn-current-lock:permission denied 解决方法

热门文章

  1. 服务器维护合同需要交印花税吗,服务合同需要交印花税吗
  2. 软件项目管理 1.3.敏捷项目管理概念
  3. KSO-.NETCore部署CentOS7.5中验证码绘图Bitmap类型报错“The type initializer for ‘Gdip‘ threw an exception ”
  4. 第三方网站接入秀米,实现秀米编辑的文章同步到自己的网站平台
  5. Photoshop画小项目原型图设计
  6. 网易云桌面歌词好看的配色方案
  7. 03. JavaMail 发送HTML邮件
  8. FOI 冬令营 Day6
  9. AUTOCAD——矩形命令
  10. 云开发数据库update函数控制台显示更新成功,但数据库中的数据并没有更新(已解决)