机器学习工程师第一年的12点体会

机器学习和数据科学都是广义上的术语,它们涉及超级多的领域以及知识,一位数据科学家所做的事情可能与另一位有很大的不同,机器学习工程师也是如此。通常使用过去(数据)来理解或预测(构建模型)未来。
为了将上面刚刚提到的要点融入上下文中,我必须要解释我的角色是什么。曾经我呆在一个小机器学习咨询团队。我们做到了从数据收集到清洗、构建模型再到你能想到的多个行业的服务部署。因为团队很小,所以每个人头上都有很多头衔。

机器学习工程师的日常:

早上9点,我走进办公室,向同事问好,把食物放在冰箱里,倒一杯咖啡,走到我的办公桌前。然后我坐下来,看看前一天的笔记,打开Slack,阅读未读的消息并打开团队共享的论文或博客文章链接,因为这个领域发展很快,所以要多看一些前沿的东西。
我通常都是在读完未读消息后,会花一点时间来浏览论文和博客文章,并仔细研究那些理解起来困难的内容。不得不说这其中,有一些内容对我正在做的工作有很大的帮助。一般来说,阅读会花费我大概一个小时甚至更久,这取决于文章本身。有些朋友会问我为什么这么久?
在我看来,阅读是一种终极元技能。因为一旦有更好的方式来完成我当前在做的事情,我会立即通过学习使用它,从而节约更多的时间和精力。但也有特殊情况,如果有一个项目的截止日期临近,那么我将把阅读时间缩短来推进该项目。
完成阅读之后,我会检查前一天的工作,检查我的记事本,看看我需要从什么地方开始工作,为什么我可以这样做?因为我的记事本是流水账式的日记。
例如:「将数据处理为正确格式,现在需要在模型中训练这些数据。」如果我在工作过程中遇到了困难,则会写下类似于:「发生了数据不匹配的情况,接下来我将尝试修复混合匹配,并在尝试新模型之前获得基线。」
大约在下午4点的时候我会整理一下我的代码,大概涉及:让混乱代码变得清晰,添加注释,组合。为什么要这样做?因为这个问题我经常会问自己:如果其他人看不懂这个怎么办?如果是我要读这段代码,我最需要什么?有了这样的思考后,我觉得花费一段时间来整理代码变的格外有意义。 大约在下午5点,我的代码应该会被上传到GitHub上。
这是理想的一天,但并不是每一天都是如此。有时候你会在下午4点有一个极好的想法,然后跟随它,然后就有可能是通宵。
现在你应该已经大致了解了机器学习工程师一天的日常了吧,接下来我会将我在其中获得的心得分享给你。

1.睁眼闭眼全是数据

很多时候,机器学习工程师都会专注于构建更好的模型,而不是改进构建它的数据。尽管可以通过投入足够的计算能力让模型提供令人兴奋的短期结果,但这始终不会是我们想要的目标。
首次接触项目时,必须要花费大量时间熟悉数据。因为从长远来看,熟悉这些数据在未来会将节省你更多的时间。
这并不意味着你不应该从细节着手,对于任何新数据集,你的目标应该是成为这方面的「专家」。检查分布、找到不同类型的特征、异常值、为什么它们是异常值等等此类问题。如果你无法讲出当前这些数据的故事,那又怎么让模型更好的处理这些数据呢?

探索性数据分析生命周期的示例(每次遇到新数据集时都会执行的操作)。更多关于探索性数据分析的详细介绍。

2.沟通比解决技术问题更难

我遇到的大多数障碍都不是技术性的,而是涉及到沟通问题。当然,这其中也存在技术挑战,但作为工程师解决技术难题是我们的本职工作。
但永远不要低估内部和外部沟通的重要性。没有什么比技术选型错误更糟的了,因为这是要解决错误的技术挑战。到底什么情况会出现这样的情况呢?
从外部来看,这是因为客户所追求的与我们可以提供的东西之间的不匹配。而在内部,因为很多人都身兼数职,所以很难确保每个人都可以全身贯注于一件事情。
碰到这些问题时到底如何解决呢?
对于外部问题,我们只能不断的与客户沟通。你的客户是否了解你可以提供的服务?你了解你的客户的需求吗?他们是否了解机器学习可以提供什么以及它不能提供什么?怎么样才能更有效的传达你的想法?
对于内部问题,你可以根据我们使用解决问题的软件工具的数量来判断内部通信有多难:Asana,Jira,Trello,Slack,Basecamp,Monday,Microsoft Teams。我找到的最有效的方法之一是在一天结束时在相关项目频道中进行简单的消息更新。
它完美吗?不,但似乎有效。它给了我一个机会来反思我做了什么,并告诉大家我接下来的什么工作需要谁的支持,甚至可以从大家那里得到建议。
无论你是多么优秀的工程师,你维持和获得新业务的能力都与你沟通的技能能力有关。

3.稳定性>最先进的技术

现在有一个自然语言问题:将文本分类到不同的类别,目标是让用户将一段文本发送到服务并将其自动分类为两个类别之一。如果模型对预测没有信心,请将文本传递给人类分类器,每天的负载约为1000-3000个请求。
BERT虽然在最近一年很火。但是,如果没有谷歌那样规模的计算,用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%,在moonshots(未来要用的事情)上花费10%,虽然这些东西可能不会立即起作用。说起来很惭愧,我从来没有在我的角色中练习这个,但这是我正朝着这个方向发展的。

8.“玩具问题”非常有用

玩具问题可以帮你理解很多问题,特别是帮助解决一个复杂的问题。首先先建立一个简单的问题,它可能是关于你的数据或不相关数据集的一小部分。找出这个问题的解决方法,然后把他扩展到整个数据集中。在一个小团队中,处理问题的诀窍是抽象问题,然后理出头绪解决。

9.橡皮鸭

如果你遇到问题,坐下来盯着代码可能会解决问题,可能不会。这时,如果同你的同事探讨一下,假装他们是你的橡皮鸭,那么问题可能很容易就被解决了。
“Ron,我正在尝试遍历这个数组,并在循环通过另一个数组并跟踪状态,然后我想将这些状态组合成一个元组列表。”
“循环中的循环?你为什么不把它矢量化呢?“
“我能这样做吗?”
“让我们来尝试下吧。”

10.从0开始构建的模型数量正在下降

这与机器学习工程与软件工程正在融合有关。
除非你的数据问题非常具体,否则许多问题非常相似,分类、回归、时间序列预测、建议。
谷歌和微软的AutoML等服务正在为每个可以上传数据集并选择目标变量的人提供世界一流的机器学习。在面向开发人员方面,有像fast.ai这样的库,它们可以在几行代码中提供最先进的模型,以及各种模型动画(一组预先构建的模型),如PyTorch hub和TensorFlow集线器提供相同的功能。
这意味着我们不需要了解数据科学和机器学习的更深层次原理,只需要知道他们的基本原理即可,我们应该更关心如何将它们应用到实际问题中去创造价值。

11.数学还是代码?

对于我所处理的客户问题,我们都是代码优先,而且所有的机器学习和数据科学代码都是Python。有时我会通过阅读论文并复现它来涉足数学,但是现有的框架大都包含了数学。这并不是说数学是不必要的,毕竟机器学习和深度学习都是应用数学的形式。
掌握最小矩阵的操作、一些线性代数和微积分,特别是链式法则足以成为一个机器学习从业者。
请记住,大多数时候或者大多数从业者的目标不是发明一种新的机器学习算法,而是向客户展示潜在的机器学习对他们的业务有没有帮助。

12.你去年所做的工作明年可能会无效

这是大趋势,因为软件工程和机器学习工程的融合,这种情况正在变得越来越明显。
但这也是你进入这个行业的原因,框架将发生变化,各种实用库将发生变化,但基础统计数据、概率学、数学、这些事情都是不变的。最大的挑战仍然是:如何应用它们创造价值。

现在怎么办?

机器学习工程师的成长道路上应该还有很多坑需要去探,如果你是一个新手,先掌握这12条就足够了!


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518165.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

今天下午三点,2020深圳开放数据应用创新大赛将举行第二场线上推介会

4月27日15:00 - 16:30,网易客户端、ZAKER、华为云、南方 plus、虎牙在线直播每场线上推介会设两轮抽奖,欢迎互动。继4月20日首场线上推介会顺利举行后,4月27日下午,以"数聚粤港澳,智汇大湾区"为主题的"…

解决Another app is currently holding the yum lock; waiting for it to exit...问题

在下载安装lrzsz时出现Another app is currently holding the yum lock; waiting for it to exit...问题yum被锁定了可以使用 rm -rf /var/run/yum.pid 强制杀死进程来解决

优化 Tengine HTTPS 握手时间

背景 网络延迟是网络上的主要性能瓶颈之一。在最坏的情况下,客户端打开一个链接需要DNS查询(1个 RTT),TCP握手(1个 RTT),TLS 握手(2个RTT),以及最后的 HTTP …

揭秘!如何用Flutter设计一个100%准确的埋点框架?

阿里妹导读:用户行为埋点是用来记录用户在操作时的一系列行为,也是业务做判断的核心数据依据,如果缺失或者不准确将会给业务带来不可恢复的损失。闲鱼将业务代码从Native迁移到Flutter上过程中,发现原先Native体系上的埋点方案无法…

安装rzsz

yum install -y lrzsz

抽象思想解读Linux进程描述符

来源 | 嵌入式客栈责编 | Carol头图 | CSDN 下载自视觉中国内核是怎么工作的?首先要理解进程管理,进程调度,本文开始阅读进程管理部分,首先从进程的抽象描述开始。抽象是软件工程的灵魂,而对于Linux操作系统而言&#…

CentOS Linux 7.7 安装kafka zookeeper

文章目录一、软件下载1. zookeeper2. kafka二、安装与启动2.1. jdk2.2. zookeeper2.3. kafka三、 kafka 基本演示一、软件下载 1. zookeeper http://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/apache-zookeeper-3.5.7-bin.tar.gz 2. kafka https://archive.apach…

《Java开发手册》2019最新版发布!

致全球Java开发者: 代码是二进制世界的交流方式,极致的代码是我们的荣耀。 2017年春天,《阿里巴巴Java开发手册》发布,我们希望在涵盖编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程规约、设计规约等7个维度上为开…

IDEA 惊天 bug:进程已结束,退出代码 1073741819

来源 | 沉默王二责编 | Carol头图 | CSDN 下载自视觉中国今天要写的文章中涉及到一串代码,关于 Undertow 的一个入门示例,贴出来大家看一下。public class UndertowTest {public static void main(final String[] args) {Undertow server Undertow.buil…

python3-Anaconda3 基本使用

1、下载 最新版本官网下载: https://www.anaconda.com/distribution/ 历史版本 清华镜像(国内首选): https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 历史版本 官网镜像: https://repo.anaconda.com/archi…

淘宝应用柔性架构的探索

导读:随着淘宝业务的飞速发展,微服务架构在持续演进的过程中,也受到了越来越多的挑战:如同步模型带来的资源利用率有限、依赖调用并发度有限、下游故障引发应用自身出问题;又如静态限流随着业务代码的演进、依赖拓扑的…

iOS13 一次Crash定位 - 被释放的NSURL.host

每年一次的iOS升级,都会给开发者带来一些适配工作,一些原本工作正常的代码可能就会发生崩溃。 本文讲到了一种 CoreFoundation 对象的内存管理方式在iOS13上遇到的问题。 1. 问题 iOS 13 Beta 版本上,手淘出现了一个必现的崩溃: …

面试官吐槽:“Python程序员就是不行!”网友:我能把你面哭!

最近几年,Python莫名火了起来,很多公司都想赶上这“莫名”的热潮,招聘到大牛人才。但是,最近一个HR在社交网站的吐槽又火了:那么问题来了,市面上为什么鲜有企业满意的优秀的Python程序员?企业到…

python3-pandas 数据结构 Series、DataFrame 基础

Pandas 应用 Pandas 的主要数据结构是 Series (一维数据)与 DataFrame(二维数据),这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。 数据结构 Series 是一种类似于一维数组的对象&#xf…

十年磨一剑 | 淘宝如何打造承载亿级流量的首页?

阿里妹导读:手机淘宝作为整个互联网领域旗舰 APP 之一,装机量和用户访问量都是名列前茅的。而首页作为打开手机淘宝的门面,是淘宝电商领域的主要流量入口和服务消费者的核心阵地,其业务的复杂性之高、系统的稳定性之重都有着极高的…

switchhosts 没有修改hosts的权限解决方案

使用swtichHost工具切换开发环境时候提示没有权限问题,如下图。。 解决方案有两点 1、进入 C:\Windows\System32\drivers\etc右键点击hosts的属性查看 属性的只读是否被勾选了,如果被勾选了将勾选勾去掉 上述完成后以管理员身份运行(管理员…

闲鱼亿级商品结构化背后的思考和演进

1. 缘起 闲鱼是一个典型的C2C场景的闲置交易平台。每个在闲鱼的用户都能享受到自由交易的乐趣。在这里,可能你只要简单的输入商品名,商品价格,库存等信息就能完成一个商品的发布。即便是发布以后,你也可以随时修改价格&#xff0…

QingStor NeonSAN跻身四强 新风口下的青云QingCloud正在厚积薄发

人类以日新月异的速度刷新着科技的成果,其中存储的发展历史尤其悠久,堪称万年进化史。自文明诞生以来,我们就一直在寻求能够更有效存储信息的方式,从4万年前的洞穴壁画、6000年前泥板上的楔形文字,到今天正在普及的SSD…

python3-pandas DataFrame 索引、bool索引、pandas 字符串方法

1、DataFrame 索引 1.1 普通索引取值 pandas 取行或者列的注意点: 方括号写数组,表示取行,对行进行操作方括号写字符串,表示取列,对列进行操作 import pandas as pd import numpy as np # pandas 取行或者列的注意…

记一次Cassandra Java堆外内存排查经历

背景 最近准备上线cassandra这个产品,同事在做一些小规格ECS(8G)的压测。压测时候比较容易触发OOM Killer,把cassandra进程干掉。问题是8G这个规格我配置的heap(Xmx)并不高(约6.5g)已经留出了足够的空间给系统。只有可能是Java堆…