行业现状令人失望,工作之后我又回到UC伯克利读博了

8f52aa779d948ebf5ee633c8af8afea2.jpeg

文 | SHREYA SHANKAR
编 | 小舟、陈萍
源 | 机器之心

很多同学在面临读博和工作的选择时会犹豫不决,这篇文章也许能给你一点启发。

机器学习领域近来受到大模型的冲击,很多小公司表示难以承担大模型的训练费用。但行业中机器学习工程的发展具体是怎样的?

Shreya Shankar 是一位曾在初创公司、谷歌大脑和 Facebook 等担任工程师的机器学习从业者。现在她选择从产业回归学术研究,回到学校攻读博士学位。

7971077ed86be3b01ef59d744115f1f7.png
▲SHREYA SHANKAR

她撰写了一篇博客分享自己在行业工作中的见闻和感想。在这篇博客中,我们能够看到当前机器学习工程的现状。以下是博客原文。

人们一直在讨论机器学习工程(MLE)是否应该算作软件工程的一个子集。之前我曾从数据工程的角度思考 MLE,但这并不合适。即使是针对特定的预测任务,自动化端到端机器学习(ML)的生命周期也很难预估。

在机器学习工程中,有 Task MLE 和 Platform MLE 两种关键业务职位。

Task MLE 负责在生产中维持特定的 ML 流水线(或一小部分 ML 流水线),关注关键任务的特定模型。当 top-line 指标下降时,这些关键任务被分页,以「修复」某些东西。Task MLE 可能会告诉你模型上次重新训练的时间、评估结果等。

Task MLE 的工作太繁琐了。数据科学家对模型进行原型设计并提出功能创意,Task MLE 则需要「生产」这些创意。这需要编写 pipeline 将数据转换为模型输入、训练和重新训练模型、评估模型,并将预测结果转储到某处。Task MLE 需要分阶段监督部署,并快速诊断和对 ML 相关错误做出响应。

我曾经就是一个 Task MLE,这些工作令我非常痛苦。我对很多细节都抱有疑问,例如为什么在模型重新训练时,训练集会自动刷新而评估集保持不变,必须有人手动刷新评估集?

我从来不希望自己在科学上不严谨,但我经常发现自己的实验代码中包含模型开发期间就评估不成立的训练假设,更不用说部署了。

有时,我又太科学了,以至于公司赔钱。我自动化了一个超参数调整过程,该过程根据时间将训练集和验证集分成多个子集,并选择了在所有集合中性能平均最佳的超参数。事后才意识到这是多么愚蠢,我应该采用为最新评估集生成最佳模型的超参数。

我现在已经对生产 ML 进行了足够的研究,知道简单地过拟合最新数据并不断重新训练是值得的。成功的公司就是这样做的。

当人们说小公司因为没有预算而无法每天重复训练时,我感到很困惑。重新训练许多 xgboost 或 scikit-learn 模型最多只需要花费几美元,大多数模型并不是大型语言模型。我询问了许多小型公司的 Task MLE 是否以及如何监督他们的 pipeline 并进行分配,他们中的大多数人都提到了按小时、天或周安排训练。

「我知道这并没有真正解决数据漂移(data drift)问题」,我询问的 Task MLE 害羞地说道。

我认为这些问题是非常重要且有趣的,可悲的是,现在只有有趣。最终所有的问题都导致一个结果:数据不一致,模型表现不佳,业务指标受到影响。

第二种 MLE 是 Platform MLE,他们负责帮助 Task MLE 自动化其繁琐的工作部分。Platform MLE 构建支持多个任务的 pipeline(包括模型),而 Task MLE 负责解决特定任务。这类似于在软件工程(SWE)中构建基础设施与在基础设施之上构建软件。但我称它们为 Platform MLE 而不是 Platform SWE,因为我认为如果不充分了解 ML,就不可能实现 ML 「保姆级」自动化。当一个机构拥有多个 ML pipeline 时,就会产生对 Platform MLE 的需求。Platform MLE 和 Task MLE 的主要区别包括

  • Platform MLE 负责 pipeline 功能的创建,Task MLE 负责 pipeline 使用功能;

  • Platform MLE 负责模型训练框架,Task MLE 负责编写模型架构的配置文件和重新训练;

  • Platform MLE 负责触发 ML 性能下降警报,Task MLE 对警报采取行动。

对无效数据进行重新训练没有任何价值

Platform MLE 不仅存在于渴望达到 FAANG 规模(FAANG 是美国市场上五大最受欢迎和表现最佳的科技股的首字母缩写) 的公司中。它们通常存在于任何具有多个 ML 任务的公司中。我认为,MLOps 目前被认为是非常有利可图的。每个 ML 公司都需要功能、监控、可观察性等。Platform MLE 更容易构建这些服务 —— 编写一个每天刷新功能表的 pipeline,标准化所有 ML 工具的日志记录,保存和版本数据集快照。具有讽刺意味的是,MLOps 初创公司寻求用付费服务来取代 Platform MLE,不过这些公司也会要求 Platform MLE 将此类服务集成到他们的公司中。

目前,我最感兴趣的 Platform MLE 功能是监控和调试突然的数据漂移。Platform MLE 具有局限性,即无法更改模型、输入或输出,但其可以用来确定这些信息何时以及如何被破坏。目前 SOTA 解决方案是监控覆盖范围的变化(即部分缺失)和单个特征(即输入)的分布以及模型输出随时间的变化。这称为数据验证,当这些变化超出某个阈值(例如,覆盖率下降 25%)时,Platform MLE 会触发警报。

数据验证实现得到了很好的召回率。我认为至少 95% 的数据漂移(主要是由工程问题引起的)会被数据验证警报捕获。但精度比较低(大多数任务都低于 20%),并且它需要一个 Task MLE 来枚举所有特征和输出的阈值。在实践中,精度可能会更低,因为 Task MLE 具有警报疲劳,还有可能导致大多数警报静音。

我们可以用召回来换取精度吗?并非如此,高召回率是监控系统的重点,可以用来捕获 bug。我们不必做到监控每个特性和输出,但是警报必须具有等级,否则它们将无法对 Task MLE 进行操作。重新训练来解除警报也是不可取的,因为对无效数据进行重新训练没有任何价值。

有一段时间,我认为数据验证是准确率、精度、召回率等 ML 指标监控的等效物。由于缺乏真值标签,我们几乎不可能实时进行 ML 指标监控。许多机构只能每周或每月获得标签,这样一来时间太长了。此外,并非所有数据都被标记,数据标记也是一个浩大的工程。我认为唯一需要监控的是模型输入和输出。

然而我大错特错。假设 Task MLE 能够监控实时 ML 指标,数据验证仍然非常重要。一方面,不同任务的模型可以从相同的功能中读取。如果 Platform MLE 可以正确触发损坏的功能警报,则多个 Task MLE 可以受益。

其次,在现代数据堆栈时代,模型特征以及输出(即特征存储)经常被数据分析师使用。我曾经在 Snowflake 中匆忙执行了一堆查询,却没想到与年龄相关的列有一半是负值,年龄怎么会有负值呢?然而我没有检查就交给了 CEO。我认为犯这样的错误是可以理解的,这是大数据的问题,信息有对有错。

博士一年,我的研究更像是一种探索

现在,我已经读完了博士一年级。我意识到无论是 Task MLE 还是 Platform MLE,我们都是在确保满足 SLO(Service-Level Objectives,服务水平目标,通常是一个百分比,并与一个时间范围挂钩)。这让我想起了数据工程,简单地说,数据工程师负责向其他员工提供数据,ML 工程师负责确保这些数据及其相关的应用程序 (例如 ML 模型) 不是垃圾。

我想了很多关于什么是好的模型质量的问题。我讨厌质量这个词。这是一个定义模糊的术语,但实际上每个组织都有不同的定义。

有了数据 SLO,我们可以认为数据验证是一个成功的概念,因为它以二进制方式清楚地定义了每个模型输入和输出的质量。以上述年龄查询为例,年龄要么是正数,要么不是。记录要么匹配预定义的模式,要么不匹配,要么满足 SLO,要么不满足。

假设每个组织都能够清楚地定义他们的数据和模型质量 SLO,在 ML 设置中,我们应该在哪里验证数据?传统上,以数据为中心的规则是由 DBMS 执行的。在 Postgres 的论文中,美国计算机科学家 Stonebraker 简明扼要地阐述了数据库执行规则的必要性:在应用程序层很难执行规则,因为应用程序通常需要访问比事件所需的更多的数据。

一年前,我的导师告诉我一个短语「constraints and triggers for ML pipeline health」,我没有完全理解其中的含义。在 ex-Task MLE 中,我认为这个短语意味着使用代码检测 ML pipeline 组件以记录均值、中值以及输入和输出的各种聚合,并在数据验证检查失败时抛出错误 —— 这也是我在工作中所做的事情。

现在我已经有了更多的 Platform MLE 经验,Platform MLE 拥有数据管理器,Task MLE 拥有应用程序或 ML pipelines 的下游部分。Platform MLE 应该在特征表中强制执行规则(例如,数据验证),以便在查询是否有任何错误时提醒 Task MLE。Platform MLE 应该执行触发器,就像各种临时后处理 Task MLE 在将预测呈现给客户之前对预测所做的那样。

我还想了很多关于如何让研究者更容易指定和理解模型质量的问题。ML 公司拥有自己的生产 ML 框架(例如 TFX)—— 有些是开源的,有些是不公开的。作为 MLOps 初创公司的一部分,许多新框架即将问世。我曾经认为人们不会切换到新框架的原因是因为重写所有 pipeline 代码很麻烦。

d81583c4620c036915ad7993ccc01646.png
▲图源:https://databricks.com/glossary/mlops

ML pipeline 框架需要与 DBMS 紧密结合,DBMS 知道 Task MLE 想要什么类型的触发器,了解数据验证并调整警报以具有良好的精度和召回率,并且具有可扩展性。也许这就是为什么我最近与之交谈的许多人似乎正在转向 Vertex AI—— 一种充当数据库的服务,可以做很多事情。

我应该进行一系列科学问题并进行大量实验以得出结论,我的博士学位更像是一种探索,在那里我研究数据管理的工作原理,并尝试就它将如何在 MLE 生态系统中发挥作用提出看法。它给人一种扎根理论的感觉,我将不断地根据我学到的新信息更新我的观点。

d2cda017acff3bc808b5e36994021610.jpeg后台回复关键词【入群

加入卖萌屋NLP、CV、搜推广与求职讨论群

fc5e21cfa59d185ce2bb29565596a54d.png

[1] https://www.shreya-shankar.com/phd-year-one/?continueFlag=bfd381b12d97c9b15ebc46c66482df00

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

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

相关文章

前端遇上Go: 静态资源增量更新的新实践

为什么要做增量更新 美团金融的业务在过去的一段时间里发展非常快速。在业务增长的同时,我们也注意到,很多用户的支付环境,其实是在弱网环境中的。 大家知道,前端能够服务用户的前提是 JavaScript 和 CSS 等静态资源能够正确加载。…

剑指Offer - 面试题26. 树的子结构(双重递归)

1. 题目 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 例如: 给定的树 A:3/ \4 5/ \1 2 给定的树 B:4 /1 返回 true,因为 B 与 A 的一…

给1万帧视频做目标分割,显存占用还不到1.4GB | ECCV2022

文 | 明敏 发自 凹非寺源 | 量子位 | 公众号 QbitAI咦,怎么好好的藤原千花,突然变成了“高温红色版”?这大紫手,难道是灭霸在世??如果你以为上面的这些效果只是对物体后期上色了,那还真是被AI给…

互联网公司数据安全保护新探索

近年来,数据安全形势越发严峻,各种数据安全事件层出不穷。在当前形势下,互联网公司也基本达成了一个共识:虽然无法完全阻止攻击,但底线是敏感数据不能泄漏。也即是说,服务器可以被挂马,但敏感数…

剑指Offer - 面试题47. 礼物的最大价值(动态规划)

1. 题目 在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值&#…

大佬在线复盘:我在训练 DALL·E 时犯过的错

文 | jxyxiangyu在写了一周的业务代码后,沏一杯绿茶,总算可以有时间看看鸽了一个月的素材了。好的,小伙伴们,废话不多说,今天我们将跟随 Boris Dayma 大佬,看看他在训练 DALLE-Mega 时遇到的一系列问题。据…

Toast与Snackbar的那点事

背景 Toast是Android平台上的常用技术。从用户角度来看,Toast是用户与App交互最基本的提示控件;从开发者角度来看,Toast是开发过程中常用的调试手段之一。此外,Toast语法也非常简单,仅需一行代码。基于简单易用的优点&…

LintCode 1683. 杀怪兽(队列)

1. 题目 有 n 只怪兽和一个奥特曼,奥特曼和怪兽都有5个属性值。 当且仅当奥特曼的5个属性值都不小于怪兽时,奥特曼可以杀死怪兽。 当一个怪兽被杀掉时,这个怪兽的5个属性会增加到奥特曼身上。 请问奥特曼最多可以杀死多少怪兽? 样例 1: 输…

聊聊大火的多模态

多模态机器学习,英文全称 MultiModal Machine Learning (MMML),旨在通过机器学习的方法实现处理和理解多源模态信息的能力。每一种信息的来源或者形式,都可以称为一种模态。例如,人有触觉,听觉,视觉&#x…

2018开春大礼:750页电子书 + 33场技术沙龙资料 + 17场线上课程分享

2017年,美团成长为中国领先的生活服务电子商务平台,在吃喝玩乐住行等200多个品类,2800多个城区县,服务了亿万消费者、数百万商家,日订单数超过2200万,年度交易总额达到了3600亿。2017年10月,美团…

LintCode 1677. 石头(自定义优先队列)

1. 题目 给定数组 p 代表 n 个石头的位置和数组 d 代表这 n 块石头能够扔的距离。 从左(0位置)往右走。当你第 k 次碰到一个石头时, 如果 k 是奇数, 把这个石头往右扔; 如果 k 是偶数,跳过这个石头。 返回不再会碰到石头时&…

手机上也能训练BERT和ResNet了?!

源 | 机器之心研究者表示,他们将边缘训练看作一个优化问题,从而发现了在给定内存预算下实现最小能耗的最优调度。目前,智能手机和嵌入式平台等边缘设备上已经广泛部署深度学习模型来进行推理。其中,训练仍然主要是在具有 GPU 等高…

LintCode 125. 背包问题 II(DP)

1. 题目 有 n 个物品和一个大小为 m 的背包. 给定数组 A 表示每个物品的大小 数组 V 表示每个物品的价值. 问最多能装入背包的总价值是多大? 样例 1: 输入: m 10, A [2, 3, 5, 7], V [1, 5, 2, 4] 输出: 9 解释: 装入 A[1] 和 A[3] 可以得到最大价值, V[1] V[3] 9 样例…

大众点评App的短视频耗电量优化实战

前言 美团测试团队负责App的质量保证工作,日常除了App的功能测试以外,还会重点关注App的性能测试。现在大家对手机越来越依赖,而上面各App的耗电量,直接影响了手机的待机时间,是用户非常关心的一点。本文主要通过一个典…

解决CNN固有缺陷!通用 CNN 架构CCNN来了| ICML2022

文 | David W. Romero等源丨机器之心在 VGG、U-Net、TCN 网络中... CNN 虽然功能强大,但必须针对特定问题、数据类型、长度和分辨率进行定制,才能发挥其作用。我们不禁会问,可以设计出一个在所有这些网络中都运行良好的单一 CNN 吗&#xff1…

境外业务性能优化实践

本文根据第16期美团技术线上沙龙OnLine演讲内容整理而成。 前言 性能问题简介 应用性能是产品用户体验的基石,性能优化的终极目标是优化用户体验。当我们谈及性能,最直观能想到的一个词是“快”,Strangeloop在对众多的网站做性能分析之后得出…

LeetCode 第 21 场双周赛(779/1913,前40.7%)

文章目录1. 比赛结果2. 题目LeetCode 5336. 上升下降字符串 easyLeetCode 5337. 每个元音包含偶数次的最长子字符串 mediumLeetCode 5338. 二叉树中的最长交错路径 mediumLeetCode 5339. 二叉搜索子树的最大键值和 hard1. 比赛结果 只做出来了第1题,第3题有一个例子…

算法工程师的三观测试

文 | 小戏编 | 小轶如果我在谷歌输入“How to improve my machine learning models”,我会得到形形色色花样繁多的提升模型性能的方法。从调参到特征工程,从集成模型到数据增强,琳琅满目,不胜枚举。可是如果我在这个问题上加一点限…

领域驱动设计在互联网业务开发中的实践

至少30年以前,一些软件设计人员就已经意识到领域建模和设计的重要性,并形成一种思潮,Eric Evans将其定义为领域驱动设计(Domain-Driven Design,简称DDD)。在互联网开发“小步快跑,迭代试错”的大…

LeetCode 1377. T 秒后青蛙的位置(BFS)

1. 题目 给你一棵由 n 个顶点组成的无向树,顶点编号从 1 到 n。青蛙从 顶点 1 开始起跳。规则如下: 在一秒内,青蛙从它所在的当前顶点跳到另一个 未访问 过的顶点(如果它们直接相连)。青蛙无法跳回已经访问过的顶点。…