内容简介:目前笔者已经在互联网行业从事机器学习方向三年有余,经常也被问到做机器学习算法工程师是一个什么样的体验,同时也常常在其他平台上看到其他人问类似的问题。于是提笔写下此文,供有志投身于这个行业的人参考。读根据论文或者某个讲座得到的信息来提出某个数学猜想 -> 然后开始在 Google 上搜索论文 -> 再花费几周到几个月的时间来读论文,并且思考这些论文的优点和缺点 -> 思考 -> 思考 -> 思考 -> 继续读更多的论文 -> 思考 -> 思考 -> 思考 ->…-> 放弃。。。。
目前笔者已经在互联网行业从事机器学习方向三年有余,经常也被问到做机器学习算法工程师是一个什么样的体验,同时也常常在其他平台上看到其他人问类似的问题。于是提笔写下此文,供有志投身于这个行业的人参考。
日常生活
读 数学博士 的时候,通常的日子是这样的:
根据论文或者某个讲座得到的信息来提出某个数学猜想 -> 然后开始在 Google 上搜索论文 -> 再花费几周到几个月的时间来读论文,并且思考这些论文的优点和缺点 -> 思考 -> 思考 -> 思考 -> 继续读更多的论文 -> 思考 -> 思考 -> 思考 ->…-> 放弃。。。。
在互联网公司做 机器学习 的时候,通常的日子是这样的:
根据行业的PPT或者业务中的某些痛点来提出技术方案 -> 然后开始收集数据,不仅要问遍组内,还要去其他组收集各种各样的需求 -> 根据之前的技术方案来进行数据的预处理 -> 撰写特征工程 -> 训练模型 -> 调参 -> 调参 -> 重新收集数据 -> 数据的预处理 -> 收集更多数据 -> 调参 -> 调参 -> 调参 ->…->放弃。。。。
业务理解
就做机器学习的经验来看,通常来说在做业务之前,一定要清楚的弄明白项目的 业务需求 是什么,弄清楚这个问题是什么比一开始就写代码重要得多。意思就是在回答问题之前,一定要把问题的内容弄清楚。有的时候,虽然看上去是一个很大的需求,但是实际操作起来的时候使用一些简单的办法也能够达到项目指标。有的时候,虽然看上去很简单,但是实际操作起来并不是一件容易的事情。从之前做理论数学的经验来看,通常数学里面的一些问题是是非题,不能够添加条件的。在 PDE 等方程领域,定理的条件越多,表示定理越不值钱。不过在工作中,这些条条框框会相对减少很多,只要能够达成项目目标,无论是添加样本,添加特征,添加服务器数量其实都是可以的,并且要把 机器学习模型 和 业务指标 有机结合才能够达到最终的项目指标。
一般搞数学科研的时候都是单打独斗,通常来说都是自己干自己的事情,别人也没办法帮自己。但是在工作中是不一样的,工作中除了干好自己的事情之外,周边的很多资源其实是可以在一个合理的范围内去争取的。无论是人员的数量,还是人员的种类,只要最终能够达成项目目标即可。无论是算法人员,还是开发人员,产品经理,最终都是要为一个项目的结果负责的。之前听过一句经典的话“ 失败的项目里没有成功的个人 ”,因此,无论怎么做,最终都要保证项目尽量成功。
数据清洗和特征工程
而在机器学习算法工程师的日常生活中,除了上面的小段子之外,其实最重要的是 样本 层和特征层的处理工作。在学术界,都是使用开源的数据,别人都已经完全标记好了,学术圈的人通常来说只需要在这些数据的基础上提出更好的模型,更创新的算法即可。但是在工业界就完全不一样了,不要说有人帮你标记数据了,有的时候连数据在哪里都不知道,数据的质量如何也不知道,因此更多的时候是进行数据的处理和清洗工作。之前做一个项目的时候,准确率和召回率始终上不去,但是等把样本里面的脏数据清理掉之后,模型的效果瞬间提升了一个档次。在脏数据面前,再好的模型都是没有用的,在训练模型之前,一定要先看一下数据层的问题。
除了数据的问题,通常来说在一些场景下,样本的数量并没有那么大,因此深度学习等方案不一定特别适合。在这种情况下,一般就会使用传统的机器学习方法,并且会使用一些基于业务的 特征工程 。这种时候就需要机器学习从业者对业务有一个精准的理解,只要业务理解得好,有的时候写一些简单的规则就可以解决问题。特征工程也是机器学习里面的一个重要问题。
持续学习
在人工智能这个领域,无论是 CV,NLP,还是机器学习,里面的技术迭代都是非常快的,而且是需要相对专业的人才能够从事这些领域。在这种情况下,机器学习从业者的持续学习就显得尤其重要,几年前的技术在新的业务场景下就未必适合,可能需要使用其他的模型或者框架才能够更好地解决问题。所以,除了完成日常的搬砖工作之外,建议每天抽一点时间来阅读论文,保持对业界技术的跟进和迭代。不过这个行业鱼龙混杂,有的时候论文或者 PPT 里面的技术框架其实没有办法复现,能够精准地判断哪些方案好,哪些方案差绝对是算法工程师必备的 关键能力 之一。
编程能力
如果是在工业界的话,编程能力是非常重要的。因为从事算法的人通常来说会有一些算法上的优化,工程上的改进,数据分析之类的工作。在这种情况下,首先需要有一定的业务直觉。而业务的经验积累需要通过各种各样的基础数据提取,在海量的数据分析工作中逐渐积累的。在这种情况下,提取数据的 工具 就是必须要掌握的,例如 SQL 等。其次,分析数据的工作也是必须要具备的,无论是使用 SQL 来进行分析,还是使用 Python 来做数据分析,都是自行编程解决的。再次,在从事机器学习方向的时候,不可避免的就会进行算法的效果对比。而在这种情况下,算法的效果对比是需要机器学习从业者通过写程序来实现的。最后,工业界的算法通常来说都强调 上线 ,如果能够自行把离线,上线,效果验证,ABTest都做完,其实是最好的状况。在这种情况下,通常 Python 就不太够了,需要使用 C++ 或者 Java 等其他编程语言。因此,熟练使用多种编程语言也是一个算法工程师的能力。
常用工具
在互联网公司里面笔者用过的机器学习工具大概有这几个:
- XGBoost :做分类的工具,提供离线的Python训练和在线的C++调用功能,方便机器学习从业者训练模型和线上部署;不仅在推荐场景可以用,在安全,运维等领域都有着用武之地。
- Tensorflow :这个也不用多说了,深度学习的经典工具之一,离线训练和在线服务都是不错的。
- ScikitLearn :单机版本的机器学习工具。方便学生在校学习知识,文档详细感人,关键是还开源。其实在工业界,如果数据量不大的话,其实用 ScikitLearn 就基本上够用了。
- Pandas :表格类数据或者时间序列数据的经典工具。尤其是在时间序列的处理上面有特别独到的优势,应该还有其他功能,但是笔者暂时了解不多。Pandas 的接口和函数特别多,每次遇到问题的时候可以搜一下,其实比自己重头写好得多。
- Spark :在大数据的情况下用得比较多,通常是推荐系统一类的,海量样本的前提下,单机版的模型根本搞不定,因此会用分布式的工具。
- SQL :提数工具。如果不掌握这个的话,基本上什么都做不了。。。。。
- FbProphet :稍微小众一些,Facebook 的开源工具之一,在时间序列预测的场景下才能用到。
工作感受
给自己压力。一般来说,转专业求职是一个艰苦的过程,但是入职之后的生活则更加辛苦。因为公司的考核是每半年甚至两个月就一次,所以,在这种情况下,任何人都需要有一个上手的速度。有的人因为在学校学过相关的内容,或者之前实习过,因此上手的时候比较快;但是有的人转专业就面临上手慢的情况。其实这些对于应届生来说都可以理解,毕竟所有的人都需要有一个适应的过程。在这种情况下,在工作的初期一定要给自己一定的压力。意思就是说:在刚工作的第一年,每三个月就要让自己有一个飞速的提升;在工作的第二年,每半年就要让自己有一个提升;后续的话,每一年都要让自己有提升才是关键。因此,无论是本专业还是转专业的同学,都建议在前两年工作的时候,多给自己一些压力,只有这样,才能够让自己有更好的进步空间。
对业务的理解。公司里面有很多东西并不是直接使用开源代码就能够发挥作用的,在公司里面无论做什么事情,最重要的一点就是对业务的理解。在对业务的理解方面,老员工相对于新人来说确实有着不少的优势。其次,在做业务的过程中,通常都会经历很多的坑,无论是别人主动挖的,还是自己踩坑踩出来的,都是自身宝贵的财富和经验。而这些经验只能够通过靠做大量的业务来获得。如果要想长期保持自身的优势,通过长期的训练和学习确实是一个有效的办法。无论是天才还是普通人,要想提升自身的技术,不花一定的时间去学习是不可行的。因此,无论在任何时候都不能够放弃让自己学习和充电的机会。
勇于接受新的挑战。公司里面除了已有的项目之外,通常来说都会开启各种各样的新项目,在这种情况下,如果有机会做新的项目,也就是别人没有做过的项目。这种机会已经要把握住,因为对于新人来说,能够接触全新的项目肯定是好过维护已有的项目的。但是几乎所有的人都是从维护旧的项目开始的,只有旧的项目做好了,才有机会拿到新的项目。
不要永远抱着已有的方向不放手。在公司里面,业务方向总会或多或少的发生变化,随着部门的调整,方向的变化,所做的内容总会发生一些变化。在工作的时候,最好不要抱着我就是来做这个方向的,除了这个方向之外其他的内容我一概不想做。因为当时的工作岗位未必能够提供你想做的方向,但是说不定能够提供其他的研究方向。有的时候,在公司里面,根据方向的变化来调整自己的工作内容也是一个必要的技能。而且,在公司的时候,一定要多做一些有挑战的项目,只有通过这些项目,才能够让自己的技术壁垒更加深厚。当然,在求职的时候,每个人都有着自己的想法和选择,所以,在求职的时候,是可以选择一个自己喜欢的方向来做的。
经验总结
通常来说,在干了两三年算法工程师之后:(以下是从其他地方看到的小段子,出处忘记了~~~)
- 能够熟练写各种脚本;
- 80%的时间在写脚本;
- 能够说出几种机器学习算法的名字;
- 轻松完成各种脏活累活(叫小弟做);
- 对无法解释的结果已经习以为常,能够强行解释一波,让领导信服;
- 调参前,都会去寺庙烧柱香;
- 桌上堆着很多崭新的技术书籍,没怎么翻过,大概都会有一本叫做《统计学习方法》的书。
Advertisements
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 机器学习算法:Adaboost 算法详解
- 从 0 开始机器学习 - 机器学习算法诊断
- 详解十大经典机器学习算法——EM算法
- 机器学习基础概念和统计机器学习基本算法
- 【白话机器学习】算法理论+实战之K近邻算法
- 构建机器学习算法
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
程序员2010精华本
程序员杂志社 / 电子工业 / 2011-1 / 49.00元
《程序员(2010精华本)》主要内容:《程序员》创刊10年来,每年末编辑部精心打造的“合订本”已经形成一个品牌,得到广大读者的认可和喜爱。今年,《程序员》杂志内容再次进行了优化整合,除了每期推出的一个大型专题策划,各版块也纷纷以专题、策划的形式,将每月的重点进行了整合,让内容非常具有凝聚力,如专题篇、人物篇、实践篇等。另外杂志的版式、色彩方面也有了很大的飞跃,给读者带来耳目一新的阅读体验。一起来看看 《程序员2010精华本》 这本书的介绍吧!
JS 压缩/解压工具
在线压缩/解压 JS 代码
html转js在线工具
html转js在线工具