编者按:
近日,知名社交平台 Reddit 上有人问了一个问题:那些做机器学习的,平时都在做什么事情?问题一出,顿时引爆了整个平台,无数机器学习工程师和数据科学家前来回答。我们精选了一些比较有意义,或者有意思的内容,希望能够给各位读者一些启发。
更多精彩文章请添加微信“AI 前线”(ID:ai-front)
关注人工智能的落地实践,与企业一起探寻 AI 的边界,AICon 全球人工智能技术大会火热售票中,6 折倒计时一周抢票,详情点击:
https://aicon.geekbang.org/apply?utm_source=wechat&utm_medium=ai-front
那些做机器学习的,平时都在做什么事情?一般来讲,他们又会如何在各项工作身上分配自己的时间(平均而言)?
回复 1
: 由于我在投身于建模工作之前,负责的是现场工作,因此我更倾向于直接同客户——而非同事——进行对接与协作。我的其他同事在这类事务中投入的时间可能比我高 10% 到 20%,但
我们的大部分时间仍然被投入到数据清洗 / 电子设计自动化(简称 EDA)身上
。
40% 时间进行数据清洗 /20% 时间利用客户输入信息进行 EDA 设计实验,10% 时间用于机器学习(我参与的大多数项目都涉及部分机器学习因素,但我很少将时间真正投入到这方面工作当中。我很清楚我们这一领域的实际情况,而且只要拥有清洁数据,即可轻松运行这些模型。)30% 时间用于解释实验结果 / 探索如何更有效地利用并解读我们的模型。
这样的时间分配方式对我而言非常理想——我有时候也会希望自己能够投入更多时间开发新的机器学习技术,但我们更倾向于在业务淡季期间提升开发时长比例。
回复 2
: 数据清洗?
所谓数据清洗,就是确保所有必要数据皆已准备就绪,同时收集数据以保证其状态良好(准确)。另外,如果当前数据的格式与您的使用方式不符,则需要转换其格式以实现可用性,同时了解其内容。我发现这项工作通常需要耗费大量时间。
回复楼上
:我正参与自己人生中的第一个大项目,我当然希望一切都能按部就班顺利进行 ; 我拿出了大量时间筹备数据集,但通过观察,我发现其在很大程度上正是典型的现实世界数据集。
回复 3
: 说个我听过的笑话:80% 的时间用于数据清洗,20% 时间用于抱怨数据清洗。
回复楼上
:
不应该是“80% 的时间用于数据清洗,30% 时间用于抱怨数据清洗”吗?
RUNTIME ERROR : 输入空间必须恰好为 100 个单位。
”见鬼。”修正、修正。“80% 的时间用于数据清洗,18% 时间用于抱怨数据清洗。”
RUNTIME ERROR : 输入空间必须恰好为 100 个单位。
“见鬼。SELECT FROM EFFORT WHERE TYPE IS DATA CLEANING OR COMPLAINING。”修正、修正。
RUNTIME ERROR : 域不连续。输入空间不可存在不连续性。
回复
:幸运的是,我并不是那么重要的角色,因此不会参加各类与数据事务相关的招聘及会议(这些工作往往少则持续一、两小时,多则持续数天)。70% 的时间用于数据工程、实现良好的输入表达以及可视化模型输出。20% 的时间进行调试以及文档阅读。我遇到的 bug 一般比较简单,但相关文档却晦涩难懂,而且其中的代码也不易测试(仅指我遇到的一例)。9% 时间有于模型评估(翻译:超参数调整)。
1% 时间用于寻找灵感和编写新代码
。
回复
:我管理着一支数据科学家团队:我们把 60% 的时间用于相互交流:包括我们正在解决什么问题,目前已经掌握哪些数据等,旨在确保整个团队遵循标准并给予必要帮助 ; 向企业管理者提供状态更新与事务动态,从而说服其为项目提供支持 ; 决定还应为团队引入哪些新成员(同外部顾问合作或者聘请全职人员等)。40% 的时间用于筹备交流内容。
0% 的时间用于实际机器学习研究(不高兴)
。
回复
:50% 的时间用于数据清洗,30% 时间用于评估,20% 时间用于实现算法。
回复楼上
:50% 到 66% 的时间用于数据清洗——其中包括编写各类数据转换机制、整合不同第三方模型(及其数据 / 知识格式)、审查潜在的外部知识来源(可能还需要编写部分代码以实现导入 / 提取 / 转换等)、为手动标记数据建立自动清洗与检查流程、为数据标记及相关数据管理管道创建工具、处理说明指南以及边缘案例当中最符合实际需求的具体策略等概念性工作、处理与各类自动化与人工工具中的数据格式相关的概念性工作,外加特征工程与输入表达等等。
大概投入 10% 的时间编写实际机器学习代码
。
5% 到 20% 时间进行结果分析并发现改进空间,具体包括文献审查、模式调整等。大部分改进空间源自更多 / 更好 / 不同的数据集。
5% 到 20% 时间用于处理各类文书工作、成果交付、TPS 报告、财务与时间周期报告等。
在进行大型模型训练时也会存在一些单纯的等待时间,但由于此类等待并不会影响到大部分其它任务,因此团队成员仍然能够正常推进其它工作。
回复
:行业研究科学家:
• 每天拿出一小时在会议室 / 走廊上与团队成员进行交流。
• 一小时用于查阅并回复邮件。
• 一小时用于发现必要的数据在哪里 / 由谁持有。
• 四小时用于通过 pytorch 编写神经网络。
• 一小时用于阅读文献。
• 一小时用于逛 stackoverflow。
研究科学家们非常幸运,因为他们拥有专职数据与基础设施工程师帮助其处理各类非机器学习事务。不过我个人尤为幸运,因为有一名全职工程师外加一位科学家共同为我提供支持。
回复
:按照我第一感觉得出的答案,依次需要进行建模、数据提取、概念验证方案创建与评估、产品讨论、商业讨论、工程讨论、撰写设计规范、创建单元测试与数据质量检查机制、与副总裁及其他高管交流、开会设计实验、运行实验、评估实验、记录与客户间的交流内容。
以下为时间细分方式:
• 10% 时间用于创建模型并选择概念验证中使用的数据。
• 5% 时间用于运行概念验证方案。
• 20% 时间用于建立基础设施,其负责在概念验证成功后为模型运行提供生产环境。
• 20% 时间用于开会。
• 15% 时间用于设计并运行实验。
• 10% 时间用于提取并整理数据,以供评估及点滴分析。
• 5% 时间进行文档记录。
•
5% 时间用于抱怨休息室里的橙子味苏打水气泡太少
。
• 5% 时间用于确保数字总和为 100。
• 5% 时间用于逛 reddit。
现在我运行有一支数据科学研究团队,因此会议数量乘 2,管理时长平均增加 15%,其它项目的时间分配则依此比例递减。
回复
:50% 的时间用于管理环境及服务器,20% 时间进行数据清洗 / 管理,20% 时间用于研究最佳实现方式,10% 时间用于忽略我自己的一些想法——因为企业高管并不关心“用正确的方法做事”这类原则。
回复
:作为背景介绍,我已经决定暂时中止自己的博士学业,转而加入一家计算机视觉初创企业担任开发人员。
35% 的时间用于 AI/txxy 代码开发,20% 时间用于处理其它紧急工作,15% 时间进行文档记录,10% 时间与其他同事开会 / 交换意见,5% 时间在 ArXiv 上查询相关资料,5% 的时间则坐等模型训练完成(我现在会越来越多地利用夜晚时段进行模型训练,但白天训练的情况仍然偶有发生)。
回复
:实际情况?(免责声明:这位机器学习效力于一家大型技术企业,其主要任务并非撰写论文或者提供研究成果,而积极追踪流行思路,并考察其是否 / 如何能够被引入生产环境)
这里假定每天有 8 个小时在办公室内 / 周边度过。
1 到 1.5 个小时用于吃午饭 / 和同事们喝咖啡,其间会通过交流理清对于某些议题的思路。
1 个小时用于通过 reddit 认真上的论文标题浏览 / 细读新闻。
1 到 2 个小时用于开会 / 面试。
剩下的 3.5 到 5 个小时进行实际工作,具体包括以下内容:
-
数据清洗 / 转换(占比 60% 到 70%)。
-
评估实验结果(占比 20% 到 30%),其中包括编写文档。我不会将这部分工作计入真正的机器学习范畴,因为其主要内容只是编写脚本并查看数据内容,从而尝试获取洞察结论。
-
机器学习建模工作(占比 0% 到 20%)。具体包括编写机器学习代码、提高代码执行效率以及尝试新方法等等。
到这里,只剩下 0 到 60 分钟用于大家普遍认知当中的机器学习工作
。一方面,工作量绝对不可能以均匀方式分布,因此在以 1 个月为周期的时段之内,我们往往会与各种数据清洗难题作斗争。而接下来的 2 周则比较轻闲,使我们能够作为机器学习技术人员充分验证自己的思路——而不再像数据水暖工般到处修修补补。
加班会定期发生,但频率并不高,而且如果必要员工可以随时离开。
回复
:我负责产品侧的机器学习工作。我的时间分配方式为:
10% 时间用于开会及敏捷讨论 ;
20% 时间用于模拟标签选项(我们的多数产品并不具备可资利用的明确监督标签,而且找到’正确‘标签本身就是一项创造性挑战);
30% 时间用于数据清洗 ;
10% 时间用于建模(其中不包括用于等待模型训练的时间,因为训练工作会安排在夜间进行);
20% 时间用于打理及维护基础设施,因为我们并不会设专职的数据工程师 ;
10% 时间用于向他人介绍目前的工作进展以及自我研究。
回复
:(数据清洗的工作)这类任务听起来像是适合外包的样子吗?
虽然外包听起来像是个不错的主意,但数据清洗工作则完全不同——如果对方不熟悉我们所处的行业或者不了解我们使用的模型,那么数据清洗效果不可能令人满意。通常情况下,“良好的模型”与“卓越的模型”之间的差异,恰恰源自数据清洗所带来的成效——而非仅仅在于投入时间以寻求新的创造性模型构建方式。
回复
:以外包方式处理“数据清洗”工作存在大量弊端:
1) 难以指定规范。这里所指的并不是简单的输入错误,而是确切描述需要规范的情景与客观的理解方式。
2) 虽然数据是分析结论的金矿,但如果我们在模型当中采取的假设存在前提性错误,那么其必然带来令人头痛的问题。一切表象可能皆围绕真相而来,但却又不可尽信,因此我们必须重制整体模型以调整假设前提。如果采取包外方式,那么上述目标将永远无从谈起。
3) 如果您的模型发生了巨大变化,则很有可能需要重新构建。也许大家意识到自己并不应该使用 PCA 变量,或者发现模型本身无法处理某些异常状况,或者是认识到自己需要对分类变量进行重新调整甚至将重量列中的数字单位由千克调整为磅。
在开始进行之前,大家可以进行各类尽职调查,但不可否认的是,机器学习模型的构建工作始终是一个持续的迭代流程。
回复
:不应该外包。大家必须熟悉自己的数据,而将这项管理工作外包出去通常无法节约时间或者金钱。
回复
:是否存在一种新的算法设置方式能够提升数据适应能力?或者说将数据添加至现有算法当中以改善准确度?
回复
:在数据清洗过程当中,你所作出的一切决定都会对下游的一切产生重大影响。数据清洗涉及到数据格式化、缺失值处理以及变量保留判断等多项工作。更重要的是,我们必须了解如何完成清洗以及为何能够断言清洗已经完成,并在必要时重新清洗以满足特定要求。总而言之,对于原始数据的熟悉程度越高,清洗效果也就越好。