机器学习和数据科学都是广义上的术语,它们涉及超级多的领域以及知识,一位数据科学家所作的事情可能与另外一位有很大的不一样,机器学习工程师也是如此。一般使用过去(数据)来理解或预测(构建模型)将来。
为了将上面刚刚提到的要点融入上下文中,我必需要解释个人角色是什么。曾经我呆在一个小机器学习咨询团队。咱们作到了从数据收集到清洗、构建模型再到你能想到的多个行业的服务部署。由于团队很小,因此每一个人头上都有不少头衔。算法
早上9点,我走进办公室,向同事问好,把食物放在冰箱里,倒一杯咖啡,走到个人办公桌前。而后我坐下来,看看前一天的笔记,打开Slack,阅读未读的消息并打开团队共享的论文或博客文章连接,由于这个领域发展很快,因此要多看一些前沿的东西。
我一般都是在读完未读消息后,会花一点时间来浏览论文和博客文章,并仔细研究那些理解起来困难的内容。不得不说这其中,有一些内容对我正在作的工做有很大的帮助。通常来讲,阅读会花费我大概一个小时甚至更久,这取决于文章自己。有些朋友会问我为何这么久?
在我看来,阅读是一种终极元技能。由于一旦有更好的方式来完成我当前在作的事情,我会当即经过学习使用它,从而节约更多的时间和精力。但也有特殊状况,若是有一个项目的截止日期临近,那么我将把阅读时间缩短来推动该项目。
完成阅读以后,我会检查前一天的工做,检查个人记事本,看看我须要从什么地方开始工做,为何我能够这样作?由于个人记事本是流水帐式的日记。
例如:「将数据处理为正确格式,如今须要在模型中训练这些数据。」若是我在工做过程当中遇到了困难,则会写下相似于:「发生了数据不匹配的状况,接下来我将尝试修复混合匹配,并在尝试新模型以前得到基线。」
大约在下午4点的时候我会整理一下个人代码,大概涉及:让混乱代码变得清晰,添加注释,组合。为何要这样作?由于这个问题我常常会问本身:若是其余人看不懂这个怎么办?若是是我要读这段代码,我最须要什么?有了这样的思考后,我以为花费一段时间来整理代码变的格外有意义。 大约在下午5点,个人代码应该会被上传到GitHub上。
这是理想的一天,但并非每一天都是如此。有时候你会在下午4点有一个极好的想法,而后跟随它,而后就有多是通宵。
如今你应该已经大体了解了机器学习工程师一天的平常了吧,接下来我会将我在其中得到的心得分享给你。数组
不少时候,机器学习工程师都会专一于构建更好的模型,而不是改进构建它的数据。尽管能够经过投入足够的计算能力让模型提供使人兴奋的短时间结果,但这始终不会是咱们想要的目标。
首次接触项目时,必需要花费大量时间熟悉数据。由于从长远来看,熟悉这些数据在将来会将节省你更多的时间。
这并不意味着你不该该从细节着手,对于任何新数据集,你的目标应该是成为这方面的「专家」。检查分布、找到不一样类型的特征、异常值、为何它们是异常值等等此类问题。若是你没法讲出当前这些数据的故事,那又怎么让模型更好的处理这些数据呢?框架
探索性数据分析生命周期的示例(每次遇到新数据集时都会执行的操做)。更多关于探索性数据分析的详细介绍。机器学习
我遇到的大多数障碍都不是技术性的,而是涉及到沟通问题。固然,这其中也存在技术挑战,但做为工程师解决技术难题是咱们的本职工做。
但永远不要低估内部和外部沟通的重要性。没有什么比技术选型错误更糟的了,由于这是要解决错误的技术挑战。到底什么状况会出现这样的状况呢?
从外部来看,这是由于客户所追求的与咱们能够提供的东西之间的不匹配。而在内部,由于不少人都身兼数职,因此很难确保每一个人均可以全身贯注于一件事情。
碰到这些问题时到底如何解决呢?
对于外部问题,咱们只能不断的与客户沟通。你的客户是否了解你能够提供的服务?你了解你的客户的需求吗?他们是否了解机器学习能够提供什么以及它不能提供什么?怎么样才能更有效的传达你的想法?
对于内部问题,你能够根据咱们使用解决问题的软件工具的数量来判断内部通讯有多难:Asana,Jira,Trello,Slack,Basecamp,Monday,Microsoft Teams。我找到的最有效的方法之一是在一天结束时在相关项目频道中进行简单的消息更新。
它完美吗?不,但彷佛有效。它给了我一个机会来反思我作了什么,并告诉你们我接下来的什么工做须要谁的支持,甚至能够从你们那里获得建议。
不管你是多么优秀的工程师,你维持和得到新业务的能力都与你沟通的技能能力有关。工具
如今有一个天然语言问题:将文本分类到不一样的类别,目标是让用户将一段文本发送到服务并将其自动分类为两个类别之一。若是模型对预测没有信心,请将文本传递给人类分类器,天天的负载约为1000-3000个请求。
BERT虽然在最近一年很火。可是,若是没有谷歌那样规模的计算,用BERT训练模型来解决咱们想要解决的问题时仍是很复杂的,由于在投入生产以前,咱们须要修改不少内容。相反,咱们使用了另外一种方法ULMFiT,尽管它不是最早进的,但仍然能够获得使人满意的结果,而且更容易使用。学习
将机器学习运用到实际生产中存在两个坑:一是从课程工做到项目工做的差距,二是从笔记本中的模型到生产模型(模型部署)的差距。
我在互联网上学习机器学习课程,以此来完成本身的AI硕士学位。但即便在完成了许多最好的课程以后,当我开始担任机器学习工程师时,我发现个人技能是创建在课程的结构化主干上,而项目并无课程那样层次分明。
我缺少不少在课程中没法学到的具体的知识,例如:如何质疑数据,探索什么数据与利用什么数据。
如何弥补这个缺陷呢?我很幸运可以成为澳大利亚最优秀的人才,但我也愿意学习并愿意作错。固然,错误不是目标,但为了正确,你必须弄清楚什么是错的。
若是你正在经过一门课程学习机器学习,那么继续学习这门课程,不过你须要经过本身的项目来学习你正在学习的知识,从而弥补课程中的不足。
至于如何进行部署?在这点上我仍然作的不是很好。还好我注意到了一种趋势:机器学习工程和软件工程正在融合。经过像Seldon,Kubeflow和Kubernetes这样的服务,很快机器学习将成为堆栈的另外一部分。在Jupyter中构建模型是很简单的,可是如何让数千甚至数百万人使用该模型?这才是机器学习工程师应该思考的事情,这也是机器学习创造价值的前提。可是,根据最近在Cloud Native活动上的讨论状况来看,大公司之外的人并不知道如何作到这一点。动画
20%的时间,这意味着咱们20%的时间都花在了学习上。客观意义上,学习是一个松散的术语,只要是关于机器学习的均可以归入到学习范畴内,相关业务也要不断的学习,做为机器学习工程师,懂业务能够极大的提升你的工做效率。
若是你的业务优点在于你如今所作的最好,那么将来的业务取决于你继续作你最擅长的事情,这意味着须要不断学习。spa
这是一个粗略的指标。可是,探索任何数据集或者模型时,你很快就会发现这个规律是广泛存在的。换句话说,在每一年数以千计的提交中,你可能会获得10篇开创性的论文。在这10篇开创性的论文中,有5篇可能来自于同一所研究所或者我的。
你没法跟上每个新的突破,但能够在基本原则的坚实基础应用它们,这些基本原则经受住了时间的考验。
接下来是探索与开发的问题。blog
探索与开发问题是尝试新事物和已经发挥做用事物之间的两难选择,你能够经过成为本身最大的怀疑者来处理这些问题。不断的向本身提问,选择这些取代旧的能够带来哪些好处?
开发
通常来讲,运行你已经使用过的模型并得到高精度数字很容易,而后能够将其做为新基准报告给团队。可是若是你获得了一个好的结果,记得检查你的工做,并再次让你的团队也这样作。由于你是一名工程师,你应该有这样的意识。
探索
20%的时间花费在探索上是一个不错的决定,可是若是是70/20/10可能会更好。这意味着你须要在核心产品上花费70%的时间,在核心产品的二次开发上花费20%,在moonshots(将来要用的事情)上花费10%,虽然这些东西可能不会当即起做用。提及来很惭愧,我历来没有在个人角色中练习这个,但这是我正朝着这个方向发展的。生命周期
玩具问题能够帮你理解不少问题,特别是帮助解决一个复杂的问题。首先先创建一个简单的问题,它多是关于你的数据或不相关数据集的一小部分。找出这个问题的解决方法,而后把他扩展到整个数据集中。在一个小团队中,处理问题的诀窍是抽象问题,而后理出头绪解决。
若是你遇到问题,坐下来盯着代码可能会解决问题,可能不会。这时,若是同你的同事探讨一下,伪装他们是你的橡皮鸭,那么问题可能很容易就被解决了。
“Ron,我正在尝试遍历这个数组,并在循环经过另外一个数组并跟踪状态,而后我想将这些状态组合成一个元组列表。”
“循环中的循环?你为何不把它矢量化呢?“
“我能这样作吗?”
“让咱们来尝试下吧。”
这与机器学习工程与软件工程正在融合有关。
除非你的数据问题很是具体,不然许多问题很是类似,分类、回归、时间序列预测、建议。
谷歌和微软的AutoML等服务正在为每一个能够上传数据集并选择目标变量的人提供世界一流的机器学习。在面向开发人员方面,有像fast.ai这样的库,它们能够在几行代码中提供最早进的模型,以及各类模型动画(一组预先构建的模型),如PyTorch hub和TensorFlow集线器提供相同的功能。
这意味着咱们不须要了解数据科学和机器学习的更深层次原理,只须要知道他们的基本原理便可,咱们应该更关心如何将它们应用到实际问题中去创造价值。
对于我所处理的客户问题,咱们都是代码优先,并且全部的机器学习和数据科学代码都是Python。有时我会经过阅读论文并复现它来涉足数学,可是现有的框架大都包含了数学。这并非说数学是没必要要的,毕竟机器学习和深度学习都是应用数学的形式。
掌握最小矩阵的操做、一些线性代数和微积分,特别是链式法则足以成为一个机器学习从业者。
请记住,大多数时候或者大多数从业者的目标不是发明一种新的机器学习算法,而是向客户展现潜在的机器学习对他们的业务有没有帮助。
这是大趋势,由于软件工程和机器学习工程的融合,这种状况正在变得愈来愈明显。
但这也是你进入这个行业的缘由,框架将发生变化,各类实用库将发生变化,但基础统计数据、几率学、数学、这些事情都是不变的。最大的挑战仍然是:如何应用它们创造价值。
机器学习工程师的成长道路上应该还有不少坑须要去探,若是你是一个新手,先掌握这12条就足够了!
原文连接 本文为云栖社区原创内容,未经容许不得转载。