机器学习工程师第一年12的经历
来源|数据鲸
机器学习和数据科学是广义上的术语,涉及很多领域和知识。一个数据科学家做的事情可能与另一个非常不同,机器学习工程师也是如此。过去(数据)通常用于理解或预测(建模)未来。
为了把上面提到的要点放入上下文中,我必须解释我的角色是什么。我曾经待在一个小型的机器学习咨询团队。你能想到的很多行业,从数据收集到清理、建模、服务部署,我们都做过。因为团队小,每个人头上都有很多头衔。
机器学习工程师的日常生活:
早上9点,我走进办公室,和同事打了个招呼,把食物放进冰箱,倒了杯咖啡,走到办公桌前。然后我坐下来,看看前一天的笔记,打开Slack,阅读未读新闻,打开团队喜欢的论文或博客文章的链接。因为这个领域发展很快,我应该多看一些前沿的东西。
我一般会在看完未读消息后花一点时间浏览论文和博客文章,仔细研究那些难以理解的内容。不得不说,其中的一些内容对我正在从事的工作有很大的帮助。一般来说,阅读会花费我大约一个小时或更长时间,这取决于文章本身。有朋友会问我为什么这么久?
在我看来,阅读是终极元技能。因为一旦有更好的方法来完成我现在正在做的事情,我会马上学会使用它,从而节省更多的时间和精力。但也有特殊情况。如果一个项目的最后期限快到了,那么我会缩短阅读时间来推进项目。
看完之后,我会检查前一天的工作和我的笔记本,看看我需要从哪里开始工作,为什么我可以这样做。因为我的笔记本是日记。
例如,“为了将数据处理成正确的格式,我们现在需要在模型中训练数据。如果我在工作中遇到困难,我会写这样的话:“有一个数据不匹配,然后我会尝试修复混合匹配,在尝试新模型之前得到基线。」
下午4点左右,我会整理我的代码,大概涉及到:把乱七八糟的代码理清楚,加上注释,合并。为什么要这么做?因为这个问题,我经常问自己:如果其他人不能理解这个怎么办?如果我想读这段代码,我最需要什么?有了这个思路,我觉得花点时间整理一下代码特别有意义。下午5点左右,我的代码应该上传到GitHub了。
这是理想的一天,但不是每天。有时候下午4点你会有一个极好的想法,然后跟着去做,然后可能就是一整夜。
现在你应该对一个机器学习工程师的日常生活有个大概的了解了。接下来,我将与你分享我的经验:
1.睁眼闭眼都是数据。
很多时候,机器学习工程师会专注于建立更好的模型,而不是改进建立模型的数据。虽然通过投入足够的计算能力,该模型可以提供令人兴奋的短期结果,但它永远不会是我们想要的目标。
刚接触一个项目,一定要花很多时间熟悉数据。因为从长远来看,熟悉这些数据会为你以后节省更多的时间。
这并不意味着你不应该从细节入手。对于任何新的数据集,你的目标应该是成为这个领域的“专家”。检查分布,找到不同类型的特征,离群值,为什么是离群值等等。如果你不能讲述当前数据的故事,你如何让模型更好地处理数据?
探索性数据分析生命周期的示例(每次遇到新数据集时执行的操作)。关于探索性数据分析的更多细节。
2.沟通比解决技术问题更难。
我遇到的大部分障碍都不是技术上的,而是涉及到沟通问题。当然也有技术上的挑战,但是解决技术问题是我们工程师的工作。
但是永远不要低估内外沟通的重要性。没有什么比技术选择错误更糟糕的了,因为这是为了解决错误的技术挑战。这样到底会怎么样?
对外,这是因为客户追求的和我们能提供的不匹配。对内,由于很多人身兼数职,很难保证每个人都能专心做一件事。
如何解决这些问题?
对于外部的问题,只能不断和客户沟通。你的客户了解你能提供的服务吗?你了解顾客的需求吗?他们明白机器学习能提供什么,不能提供什么吗?你如何更有效地传达你的想法?
对于内部问题,你可以根据我们用来解决问题的软件工具数量来判断内部沟通的难易程度:Asana,吉拉,Trello,Slack,Basecamp,周一,微软团队。我发现的最有效的方法之一是在一天结束时在相关的项目频道中进行简单的消息更新。
完美吗?不,但它似乎是有效的。这让我有机会反思自己的所作所为,并告诉每一个需要支持我下一份工作的人,甚至得到每一个人的建议。
无论你是一名多么优秀的工程师,你维持和获得新业务的能力都与你的沟通技巧有关。
3.稳定性>;最先进的技术
现在有一个自然语言问题:将文本分类到不同的类别,目标是让用户将一段文本发送到服务,并自动将其分类到两个类别中的一个。如果模型对预测没有信心,请将文本传递给人类分类器,日负载约为1000-3000个请求。
伯特在去年很受欢迎。但是如果没有Google规模的计算,使用BERT训练模型来解决我们想要解决的问题还是很复杂的,因为在投入生产之前需要修改很多内容。相反,我们使用另一种方法,ULMFiT。虽然不是最先进的,但是我们还是可以得到满意的效果,而且比较好用。
4.机器学习初学者最常见的两个坑
把机器学习应用到实际生产中有两个坑:一个是从课程工作到项目工作的差距,一个是从笔记本里的模型到生产模型(模型部署)的差距。
我在网上上了机器学习的课程,完成了AI的硕士学位。但即使完成了很多最好的课程,当我开始从事机器学习工程师的工作时,我发现我的技能是基于课程的结构化主干,项目并不像课程那样有条理。
我缺乏很多在课程中学不到的具体知识,比如如何质疑数据,探究什么数据,用什么数据。
如何弥补这个缺陷?我很幸运成为澳洲最优秀的人才,但我也愿意学习和犯错。当然,错误不是目的,但为了正确,你必须弄清楚错在哪里。
如果你是通过一门课程来学习机器学习,那么继续学习这门课程,但是你需要通过自己的项目来学习你正在学习的东西,来弥补课程中的不足。
至于怎么部署?在这一点上我仍然做得不太好。幸运的是,我注意到一个趋势:机器学习工程和软件工程正在融合。通过像Seldon、Kubeflow和Kubernetes这样的服务,机器学习将很快成为堆栈的另一部分。在Jupyter中建立一个模型很简单,但是如何让成千上万甚至上百万的人都可以使用呢?这是机器学习工程师应该思考的,这也是机器学习创造价值的前提。但是,根据最近在Cloud Native的讨论,大公司以外的人不知道如何做到这一点。
5.20%的时间
20%的时间,也就是说我们花20%的时间学习。客观来说,学习是一个比较松散的名词,只要是关于机器学习的,都可以纳入学习范畴,相关业务要不断学习。作为一个机器学习工程师,了解业务可以大大提高你的工作效率。
如果你的商业优势在于你现在做得最好的是什么,那么你未来的商业取决于你继续做你最擅长的,这意味着你需要不断学习。
6.十分之一的论文值得一读,但很少使用。
这是一个粗略的指标。但是,在探索任何数据集或者模型的时候,你很快就会发现,这个规律是通用的。换句话说,你每年可能会在成千上万的投稿中获得10篇开创性的论文。在这10篇开创性论文中,有5篇可能来自同一个机构或个人。
你不可能跟上每一个新的突破,但你可以在经受住时间考验的基本原则的坚实基础上应用它们。
接下来是勘探开发的问题。
7.做自己最大的怀疑者。
探索和开发问题是在尝试新事物和已经奏效的事物之间的两难选择。你可以通过成为你最大的怀疑者来处理这些问题。不断问自己,选择这些而不是旧的有什么好处?
剥削
一般来说,很容易运行你用过的模型,得到高精度的数字,然后你就可以上报给团队作为新的基准。但是如果你得到了一个好的结果,记得检查你的工作,并要求你的团队再次做同样的事情。因为你是工程师,应该有这样的意识。
探索
花20%的时间在探索上是个不错的决定,但如果是70/20/10可能会更好。这意味着你需要把70%的时间花在核心产品上,20%的时间花在核心产品的二次开发上,10%的时间花在moonshots(以后要用的东西)上,虽然这些东西可能不会马上见效。很惭愧的说,我在角色里从来没有实践过这个,但这就是我在向这个方向发展。
8.“玩具问题”很有用
玩具问题可以帮助你理解很多问题,尤其是帮助你解决一个复杂的问题。首先建立一个简单的问题,这个问题可能是你数据的一小部分,也可能是无关的数据集。找到这个问题的解决方案,然后推广到整个数据集。在小团队中,诀窍是将问题抽象出来,然后进行整理。
9 .橡皮鸭
如果你有一个问题,坐下来盯着代码可能会也可能不会解决问题。这时候如果你和同事商量一下,假装他们是你的橡皮鸭,问题可能就容易解决了。
“Ron,我正在尝试遍历这个数组,循环访问另一个数组并跟踪状态,然后我想将这些状态组合成一个元组列表。”
“轮回中的轮回?为什么不矢量化呢?”
“我可以这样做吗?”
“我们来试试吧。”
10.从0开始构建的模型数量正在减少。
这与机器学习工程和软件工程的融合有关。
除非你的数据问题很具体,否则很多问题都很相似,比如分类,回归,时间序列预测,建议。
谷歌和微软的AutoML等服务正在为每个能够上传数据集和选择目标变量的人提供世界级的机器学习。对于开发者来说,有像fast.ai这样的库,可以用几行代码提供最高级的模型,还有各种模型动画(一套预建的模型),比如PyTorch hub、TensorFlow Hub,提供的功能是一样的。
这意味着我们不需要知道数据科学和机器学习更深层次的原理,只需要知道它们的基本原理,我们更应该关心的是如何应用到实际问题中去创造价值。
11.数学还是代码?
对于我处理的客户问题,我们都以代码为主,所有机器学习和数据科学的代码都是Python。有时候我会通过看一篇论文,再复制来涉猎数学,但是现有的大部分框架都包含了数学。这并不是说数学是不必要的。毕竟机器学习和深度学习都是应用数学的形式。
掌握最小矩阵的运算,一些线性代数和微积分,尤其是链式法则,就足以成为一个机器学习的实践者。
记住,大多数时候或者说大多数从业者的目标不是发明一种新的机器学习算法,而是向客户展示潜在的机器学习是否会对他们的业务有所帮助。
12.你去年做的,明年可能就无效了。
这是大趋势,因为软件工程和机器学习工程的融合,这种情况越来越明显。
但这也是你进入这个行业的原因。框架会变,各种实用库会变,但是基本的统计、概率、数学这些东西不变。最大的挑战仍然是:如何应用它们来创造价值。
现在怎么办?机器学习工程师的成长道路上应该有很多坑可以探索。如果你是新手,先掌握这些12就够了。