当前位置: 首页 > 科技观察

一位算法工程师写给初学者的一封信

时间:2023-03-12 06:16:59 科技观察

加入公司一年后,交流能带来比技术本身更大的价值。”——匿名亲爱的读者:大家好!我是来自澳大利亚的机器学习工程师DanielBourke。我这个岗位已经工作一年了,嗯,很多读者可能对这个岗位还不熟悉,可以关注我,看看第二天的工作流程:早上9点,我会走进公司,和同事说早安,把食物放进冰箱,倒一杯苏打水,然后走到办公桌前,坐下,看看昨天的工作笔记,然后打开Slack,然后看新闻,打开团队分享的每一篇论文或博客,每天都会有一些新闻可以看,因为这个领域的更新和发展非常快。快。我看完消息后,扫描论文和博客,重点关注那些让我困惑的。通常,那里会有一些内容可以帮助我耳鼻喉科的工作。我会花一个小时阅读,有时更多,这取决于我阅读的内容,阅读是最基本和最关键的能力,如果我正在做的事情有更好的方法,那么我会学习并使用这种方法,这节省了我时间和精力。上午10点,如果工作任务的截止日期临近,我就会减少阅读以赶上进度,这是我一天中花费最多时间的地方。我回头看看我昨天做了什么,看看我记下的下一步,我的笔记本记录了我当天的工作流程。在后续操作数据的过程中,如果我已经将数据处理成正确的形式,那么我就需要使用模型来运行数据。一开始,我会把训练时间调的很短。如果有进展,我会减少时间更长,如果我遇到问题并且出现数据不匹配,那么接下来,我会修复它并在尝试新模型之前获得基线。我的大部分时间都花在确定数据是否被处理成模型需要的形式上。快到下午4点了,是时候放松一下了。当我说放松时,我的意思是清理我编写的代码并使其清晰易读。我将添加一些注释并重组代码,如果其他人想阅读我的代码怎么办?我会问自己,通常,读我代码的人是我自己,因为我经常很快忘记那些写代码时产生的想法。以上是一天上班的理想,但不是每天,有时候,下午4点37分突然冒出一个绝妙的主意,那我继续工作,现在你对我每天的工作有一个很好的了解吧我们有了一个大概的了解,下面说说机器学习。人工智能浪潮不断推进。相信很多读者都和我一样加入了机器学习的队伍。我的工作内容非常全面:从数据采集、数据处理、建模、实施服务,业务范围涉及你能想到的每一个行业。.在这个位置待久了,我发现做很多事情都是有规律可循的。根据前辈的经验,我总结了一个优秀的机器学习工程师需要注意的12个方面。希望读者阅读后能够对机器学习的实践和学习有所帮助!明智地花费时间:数据非常重要!如果你熟悉数据科学的一些基本原理,你会发现解决实际应用问题和处理编码问题本质上都与数据处理有关。令人惊讶的是,我经常忘记这一点,很多时候我专注于构建更好的模型而不是提高数据质量。构建更大的模型,使用更多的计算资源可以在短时间内为您带来出色的结果。但是出来混总是要还的,到时候就会遇到很麻烦的事情。当您在处理您的第一个项目时,请花费大量时间来熟悉数据。之所以说很多很多,是因为你通常需要把你预计花费的时间乘以3。从长远来看,这会为你接下来的工作节省很多时间。当你得到一个新的数据时,你的目标应该是成为最了解数据的专家。你想检查数据的分布,找到不同类型的特征,离群值在哪里,为什么是离群值?如果你不能把你的数据描述清楚,那你怎么建立模型呢?不要低估沟通的重要性。我遇到的大部分问题不是技术问题,而是沟通问题。是的,总是有技术问题,但他们是工程师。应该解决的问题。永远不要低估沟通的重要性,无论是公司内部还是外部。没有什么比解决一个不应该解决的技术问题更糟糕的了。为什么会这样?从外部来看,发生这种情况的大部分原因是因为客户的期望与我们可以提供的服务不匹配,尽管客户的期望可以通过机器学习来实现。在内部,因为我们每个人在公司负责的事情太多了,所以我们很难同步同一个目标。1、反省自己,回归问题的本质。请经常这样做。问问自己,您的客户了解您可以提供什么吗?你了解客户的问题吗?他们知道机器学习能带来什么,不能带来什么吗?什么样的交流方式让你很容易展示你的工作成果?2.为了解决公司员工内部沟通问题,人们设计了很多软件。从他们的数量上,就可以看出解决内部沟通问题有多么困难。这些软件包括Asana、Jira、Trello、Slack、Basecamp、Monday、MicrosoftTeams。对我来说最有效的方法之一是在每个工作日结束时在与项目相关的频道上更新我的信息。更新内容包括:3-4点关于我工作内容的想法为什么根据以上内容,我接下来要做的很完美吧?不,但它似乎有效,它让我可以展示我已经做了什么以及我将要做什么。公开你的计划的一个额外好处是,如果你的工作建议不成立,其他人会指出来。你是一个多么优秀的工程师并不重要,重要的是你有能力告诉别人你的技术是什么,你的技术能带来什么,这与你维持现有业务和开拓新业务的能力密切相关。稳定性>边界我们曾经遇到过自然语言的问题:将文本内容分类到不同的类别中。该任务的目标是帮助用户向服务中心发送一段文字,并自动将这段文字归为两类之一。如果模型预测不够准确,则将文本交给人工处理。工作量大概是每天1000-3000次Requests,不多也不少。BERT成为今年最受关注的名词。但是没有谷歌的大规模计算工具,使用BERT训练模型来满足我们的需求是非常麻烦的,而这只是将模型投入生产所需要的工作,所以我们找到了另一种方式——ULMFiT。这种方法不是很先进,但它产生的效果足够好,而且该方法易于使用。与其将某种方法改进到尽善尽美,还不如借鉴已有的模型,在此基础上进行迁移学习,这样才能带来更多的价值。机器学习的两大难点机器学习落地有两个瓶颈:课程成果到项目成果的瓶颈,以及理论模型到生产模型(模型部署)的瓶颈。机器学习课程的互联网搜索返回了大量结果,其中许多我用来创建自己的AI硕士学位课程。但即使在上了最好的几门课程之后,当我开始担任机器学习工程师时,我的技能还是建立在课程的结构化主干上,而在现实世界的问题中,项目没有结构化,我缺乏特定的知识,一些在线互联网课程无法教授的技能,例如:如何质疑数据、探索和开发模型。1.我该如何改进?我很幸运能与澳大利亚一些最优秀的人才一起工作,但我愿意学习并愿意犯错。当然,犯错不是目的,但为了正确,你必须弄清楚哪里错了。如果你是通过一门课程来学习机器学习,那么继续学习这门课程,同时将所学知识应用到自己的工程项目中,这样你就可以拥有专业的知识。2、如何在工作中提升能力?我在这方面的知识仍然不足,但我注意到一个趋势——机器学习工程和软件工程正在融合。随着Seldon、Kubeflow和Kubernetes等开源平台的发展,很快机器学习将成为其中的另一部分。在Jupyternotebook中构建模型是一回事,但让成千上万甚至数百万人可以使用该模型又是另一回事。从最近一次CloudNative活动的讨论来看,大公司以外的大多数人都不知道如何做到这一点。机器学习中也有一个28-20定律。我们有一个20%的规则,这意味着我们必须将20%的时间花在学习上。事实证明,这段学习时间非常宝贵。比如ULMFiT的使用率超过BERT,就是因为20%的时间规则,20%的时间用于学习,也就是说剩下的80%的时间会用于核心项目。80%的核心产品(机器学习专业服务)。20%与核心产品相关的新事物。如果你工作的优势在于你在你现在所做的事情上做得最好,那么未来的工作也取决于你继续做你最擅长的事情,这意味着不断学习。论文需要精读这是一个粗略的指标,但是当你探索了一些数据集和实验现象之后,你就会明白这是一个客观事实。这个概念来源于Zinf/Price定律,即在同一个topic中,一半的论文是由一群高产的作者所写,这个作者集合的数量约等于总数的平方根作者。换句话说,在每年提交的数千篇文章中,您可能会找到10篇开创性论文,而在这10篇开创性论文中,可能有5篇来自同一机构或作者。如何紧跟时代潮流?你无法跟上每一个新的突破。你最好对一些基本原理有扎实的掌握和应用。这些基本原则经受住了时间的考验。新的突破要靠原有的突破,再有新的探索和发展。做你自己的怀疑论者你可以通过怀疑自己来处理探索和开发。探索与利用问题是尝试新事物与重用现有模型结果之间的两难选择。1.开发自己的模型很容易运行你已经使用的模型并得到高精度的结果,然后作为新的基准报告给团队。但是如果你得到了一个好的结果,记得仔细检查你的结果并要求你的团队也这样做,因为你是一名工程师,一名科学家。2.探索新事物的20%时间的标准在这里也很有用,但如果时间分配是70/20/10会更好。可能你70%在核心产品上,20%在核心产品的建设上,10%在探索上,但是探索的东西可能行不通,我自己没试过这个方法,但是我正在开发这个方向。先积步,不积千里而行千里。先搭建一些小东西,这样可以快速理解一个新概念。您可以使用自己的数据集或不相关的小数据。在小团队中,成功的诀窍是先迈出一小步,然后快速迭代。让我们一起玩橡皮鸭吧。很多程序员可能知道一点小黄鸭调试法(也叫橡皮鸭)调试法。这个概念指的是调试代码的时候随身带着一只小黄鸭,然后要求它详细解释每一行代码。很多读者可能会觉得好笑。这是基于一个原则。它类似于一种称为答案锥的常见现象。比如:你的朋友问你一个问题,聊到一半他就发现问题了,没有什么可以回答的了。面无表情的你……一般来说,当你试图向别人表达你的问题时,你自然是在督促自己调整自己的思维。这种方法同样适用于程序员。橡皮鸭法是我的同事罗恩教的。遇到问题,坐下来盯着代码,可能会解决问题,但也不一定。这时候最好用队友的语言重复一遍,就像你的橡皮鸭一样。“罗恩,我正在尝试遍历这个数组,并尝试通过遍历另一个数组并跟踪其状态来跟踪该数组的状态,然后我想将其组合成一个元组列表。”“循环中的循环?你为什么不对其进行矢量化?”“我可以吗?”“让我们来看看。“……”迁移学习很重要,你不需要从头开始重构模型,这个问题来自机器学习工程和软件工程的融合。除非你的数据问题非常具体,否则很多主要问题都非常相似,分类、回归、时间序列预测、推荐系统。谷歌和微软的AutoML等服务让机器学习的使用变得简单,只需上传数据集并选择目标变量即可。但这些东西还处于起步阶段,还没有形成。如果你是一名开发人员,只需使用像fast.ai这样的库,你就可以在几行代码中使用最先进的模型,以及各种模型的预构建模型,例如PyTorchhub和TensorFlow提供相同的功能。这是什么意思?虽然机器学习如此方便,但你仍然需要了解数据科学和机器学习的基本原理,更重要的是,如何正确使用它们。数学还是代码?这是一个问题对于我处理的客户问题,代码优先,所有机器学习和数据科学代码大部分是Python。有时我通过阅读论文并重新创建它们来涉足数学,但99.9%的时间,现有框架已经包含数学库。虽然在现实生活中,数学并没有我想的那么重要,毕竟机器学习和深度学习都是数学的应用。但是知道最小矩阵乘法,一些线性代数和微积分,尤其是链式法则还是重中之重。请记住,我的目标不是发明一种新的机器学习算法,而是向客户展示机器学习是否可以帮助他们的业务。有了坚实的基础,您可以构建自己的最佳模型,而不是重复使用现有模型。软件行业的典范。软件行业的快速迭代,你去年做的工作,明年可能就没用了!这是客观事实,而且由于软件工程和机器学习工程的融合,这种情况越来越严重。但是既然你已经加入了机器学习大家庭,我在这里告诉你什么是不变的——框架在变,库在变,但基础统计、概率论、数学永远不会变。最大的挑战仍然是:如何应用它们。说了这么多,希望以上的建议能够对机器学习的初学者和从业者有所帮助。最后,玩得开心,开始您的数据之旅!相关报道:https://towardsdatascience.com/12-things-i-learned-during-my-first-year-as-a-machine-learning-engineer-2991573a9195【本文为专栏组织大佬原创翻译数据文摘微信公众号《大数据文摘(id:BigDataDigest)》】点此查看作者更多好文