Peter Webb和Lucio Cetto, MathWorks
我们将介绍端到端工作流,特别强调将流数据集成到开发环境中,以及模拟生产环境对数据科学家的好处。我们将展示物理模型如何加速引导系统。我们在MLOps的背景下讨论该系统。最后,我们总结了在操作系统中这种架构折衷的影响,因为它们通知了系统的发展
谢谢你来参加我们今天的讲座。我是彼得·韦伯。我在MathWorks的工作重点是MATLAB部署和远程执行。今天和我一起主持节目的是Lucio Cetto,他比我更了解机器学习和数学。
我们在这里与您分享一个用例故事。我们使用联合机器学习开发了工业冷却风扇的预测性维护应用程序。我们训练了一个模型来检测来自风扇的传感器数据流中的异常并触发服务警报。我们在30天内就完成了生产。
我们如何能如此迅速地将这样一个庞大的系统整合在一起?没有大的秘密。我们用了一个盒子——你知道,所有东西都从这个盒子里出来了。Out of the box, off the shelf——我们可以直接获取和使用的软件。我们需要一个物理上精确的模拟器来生成训练数据,一个流媒体服务来将球迷的传感器数据传输到一个分析引擎,以及一个指标可视化平台。我们还得把所有的碎片粘合在一起。
但我们可以专注于重要的工作。卢西奥必须编写机器学习分析。我必须创建一个指标仪表板。但在我们开始之前,先说说这个项目本身。
这就是大意。扫描风扇从工厂产生的数据,生成服务警报。但我们不止有一家工厂。他们每个人都知道其他人不知道的事。
如果我们把来自所有工厂的所有数据结合起来,我们就会有更好的模型,但这需要额外的基础设施,一个中央服务器来培训和更新模型,以及一些将数据推送到服务器的大管道。然后,一旦模型更新,本地分类器必须暂停来获取新的模型。这种架构是可行的,但我们认为我们可以做得更好。
我们想要的是联合学习。我们用更简单、更便宜的数据存储取代了中央计算服务器。我们需要来回传送的唯一信息就是模型和它们的参数,不需要那些昂贵的数据管道。每个工厂的本地分类器仍然受益于同行积累的知识。
这会让我们有一个问题。联合学习可以建立一个模型,作为可以访问所有数据的培训师的准确性?后来,你会看到Lucio的一些分析,帮助我们了解权衡。
我们正在使用联合学习来简化我们的基础设施。但另一个重要的用例是数据隐私。由于这些数据从未离开过拥有它的网站,所以它所包含的任何秘密都是本地的。虽然这可能对风扇传感器数据没有太大的影响,但它可能对医疗或其他类型的监管或保护数据非常重要。
说到数据,我们的训练算法需要很多很多的数据。但这不仅仅是数量的问题。如果是这样,我们只需将模型与风扇的数据连接起来,我们的数据科学家就会失业。因此,我们转而求助于一个既能提供信号又能提供标签的源——一个物理上准确的多领域模拟模型。
关于标签的那部分是值得强调的。因为模型会生成数据流,所以它知道风扇什么时候工作不正常,并将这部分信号标记给训练器。如果没有这个模型,我们就会有大量的手工分类工作要做。
我们需要模拟这些风扇的三个特征——电、机械、热——并扫描每个领域的异常情况。例如,负载异常表示外部温度异常快速上升,可能是由于风扇冷却的设备负载增加造成的。单独建模这些域是不够的,因为在真正的扇子中,它们是相互作用的。
例如,当温度升高时,风扇控制器会提高电源电压。电机运转速度加快,冷却速度加快。这为我们提供了足够的准确性,以生产准备在第一天。
这是第一天。粉丝们正在将数据传送到分类器。仪表盘为操作人员提供了系统的近实时视图。
但现在我们有了另一个标签数据来源。分类器正在标记实时风扇数据。我们如何利用它来改进算法?现在我们需要一个人参与进来。
操作员可以定期确定分类器错过了真正的异常或提出了误报。这不应该经常发生。但是,当它这样做时,操作员可以将错误分类的信号和正确的标签发送到培训师。
当积累到足以进行再训练时,训练器更新模型并将其发送回分类器。只有在偶尔需要时,手工分类才可行。机器学习算法处理了大部分工作。
这样,我希望我已经给了你们背景知识来理解下一节。Lucio将告诉你我们的建模技术以及我们如何评估它们的有效性。卢西奥。
所以今天,我将扮演数据科学家的角色。对我来说,没有比拥有一个物理模型更好的方案了。这将帮助我们更好地理解我们手头的问题,这样我们就可以提出一种增量和联合的学习方法,可以让我们检测和分类风扇的异常。
让我们从了解我们能观察到的数据开始。我们从每个系统的传感器观察到三个不同的变量。如果你愿意,我们也可以称他们为粉丝。我们观察施加在电机上的电压、风扇的角速度和温度。
为了可视化目的,在这些例子中,我们引入了我们通常期望的更多异常。异常在第一个图的顶部注释。有三种类型的异常。
当系统在过载状态下工作时,检测到负载异常。也就是说,我们对这个系统的设计要求更多的工作。当电机或风扇的机械子系统发生故障时,就会检测到风扇异常。最后,电源异常是一种不足,表现为电压下降。
现在让我放大一个小区域。这个面积大约是2米。在我们的例子中,异常表现为持续10到100秒的痕迹上的小脉冲。请注意,不同类型的异常有不同的轮廓。仅仅包含在这些痕迹中的一个信息通常不足以对不同类型的异常进行完美的分类,因为一个异常或另一个异常可以在几个信号中表现出来。
这里有一些复杂性。例如,定义速度的第二个异常的脉冲——让我在这里给你们展示一下——是在噪声振幅之内的。此外,在接近末端的温度轨迹上有两个明显的脉冲。但它们并不代表任何异常。
这些是我们可以在这个问题中发现的数据分析挑战。不同位置的系统条件不同。例如,负荷刻度——你可以在右边的第二条曲线中看到,温度在一天中不断变化。
个别系统是不同的。这意味着每个球迷的年龄可能都不一样。因此,我们测量的特征可能是不同的。
此外,观测到的异常在几个地点是不同的。在某些情况下,在某些工厂,我们只能观察到一种异常。最后,异常检测延迟应该以秒为顺序。所以我们不能用大窗口来校正这些信号。
在讨论联合学习之前,让我们做一些假设。正如我们在之前的幻灯片中看到的,有当地的系统条件,或者依赖于工厂,或者依赖于单个风扇本身。例如,一个给定的工厂可能在一个温度可控的环境中有一组风扇。或者他们可能每周7天24小时工作,而时间却很短。
此外,每个风扇可能处于其生命周期的不同点。因此,我们假设这些变量条件将主要由信号趋势线的小变化来表示。为此,我们将使用剩余的有用生命周期建模和一些健壮的趋势机制。
我就不细说了。我们在一年前的演讲中已经讨论过这个问题了。但是,我将向您展示应用这些修正后的数据效果。
在这里,我仅通过观察两个变量来绘制数据点。我们可以看到,在去除局部影响后,我们可以清楚地将负载异常与正常数据分开。顺便说一下,当我们看模型电压时,电源异常也很容易区分,这些图中没有标出。
最重要的是,我要强调的是,关于本地条件的任何信息——这意味着健壮的重趋势和剩余的有用生命周期——都不会传递给其他系统或联邦。它将对每个型号保持本地。
现在让我们进入建模技术。为了对异常进行建模,我们使用一组二元分类器来对给定类型的异常与正常行为进行建模。我们实验了增量线性支持向量机和增量朴素贝叶斯分类器。金宝app
支持向量机采用随机梯度下降算法从一个随机超平面开始更新模型。Naive-Bayes分类器更新表示独立正态分布的汇总统计量。朴素贝叶斯分类器的优点是可以在概率框架内提供分数。然而,在我们的实验中,我们发现支持向量机对这类问题更准确。金宝app
现在,回想一下,并不是所有的异常都能在每个节点上得到充分的表示。因此,我们只在我们有足够证据的每一个扇子上训练那些二元学习者。让我们对标签做一个小括号。
我们假设这些是通过以下两种方式提供的。在第一种情况下,某个工厂的操作人员可能会在经历异常情况后给它们贴上标签,将信息修改到极致。在第二种情况下,我们可以考虑一个工程团队,他们可能在给定工厂的特定条件下启动系统的操作,为此他们创建了一个物理计算机模型,生成标签中的数据。
好的,让我们看看联邦是如何运作的。假设有5个节点。采用增量学习算法对每个节点进行局部数据训练。模型参数和模型权重被发送到联邦。
权重值包含我们在每个本地节点上观察到的每个异常的证据量。在federation中,我们也保留了全局模型参数和全局权重,这里表示为W零和theta零。我们可以简单地使用加权和计算模型参数。在支持向量机的情况下,我们计算新的滑水金宝app系数和偏差。在朴素贝叶斯的情况下,分类器我们计算每个变量的标准差和均值的权重本身。
这个计算可以是同步的,也可以是异步的。也就是说,只要我们收到一个模型更新,就可以更新全局模型。或者当我们收到所有的模型更新时,我们可以批量更新。稍后,Peter将向您展示我们也可以在每个节点上计算全局更新。
从这个设置中记住有三个重要方面。联邦使用每种类型异常的证据量权重模型参数。联邦还负责协调节点报告的新型异常。这意味着,随着新的异常出现,联合会将更新已知异常的库存。
正如我所说,全球联合重量被覆盖在任意值。所以我们一直在考虑节点引入的新颖性。然后将新更新发送回联合会。我们拥有粉丝的每一个人的每一个 -
让我们看看分类模型的准确性。回想一下,在这里,我们展示的是两种不同范式的结合——增量学习和联合学习。为了更好地理解准确性是如何影响准确性的,我们将按照以下步骤探索准确性。首先让我们看看这个简单的线性支持向量机的准确性。这是一个离线的线性支持向量机。我们得到所有的数据,然后用SVM进行训练。
让我们来看看离线线性SVM模型的对比图。这里的准确性是通过对运行超过24小时的10个风扇系统的所有数据进行5倍交叉验证来计算的。第一行和列表示正常数据,您可以看到这显然是最常见的情况。
接下来我们有三种异常。最后一行和最后一列是最不常见的条件。对我们来说,它代表着我们同时观察到两个或两个以上的异常,这是一种非常罕见的情况。您可以注意到,我们只是没有在不重叠的情况下标记七个真正的正常异常。
让我们比较一下增量支持向量机学习器。金宝app在这里,我们通过观察一个24小时后的预测来衡量准确性。请注意,我们也忽略了很少的异常。然而,该模型会产生更多的假警报。
值得强调的是,我们没有对异常情况进行错误分类。这是由于建模的性质。也就是说,因为我们使用的是正常数据和异常类型之间的二元模型,错误分类实际上意味着在两个二元学习者中存在错误,这种可能性要小得多。综上所述,在这两种情况下,我们的假阴性率和假发现率都很低,这是很好的。
好了,现在我们来比较一下增量式联合学习方法。在这种情况下,每个本地模型只使用一种异常类型。然后将模型发送给联邦,我们使用联邦模型上预测的预测来度量准确性。我们仍然忽略了一些真正的异常。
但在这些条件下,错误发现率增加到大约每200个标记异常就有一个错误。让我在这里强调一下,虽然左边的增量模型需要访问所有数据,但是右边的联邦模型不需要共享或通信任何数据。相反,我们只分享个人模式,也就是联合学习模式。
让我向你展示一些我们正在做的典型错误。最常见的错误是当两个异常同时发生时。我们实际上预计此类错误,因为信息量并不是足以调整模型。
在系统的瞬态期间发生另一个错误。这也预料。有两种可能的解决方法,我们没有在我们的概念证明中完全实现。首先,我们可以考虑一些小滞后。我们还可以集成到系统评分或后验概率中,以使操作员对任何检测到的异常的意义的想法。
为了结束本次演讲的数据分析部分,让我向你们展示我将如何打包我们刚刚描述的算法。有三个流函数。其中两个在每个节点本地运行。还有两个更新了联邦模型。异常预测器接收带有观测值的流,并将其提供给带有异常类型和分数的输出流。
分类模型还有其他的输入和本地条件。虽然第一个不需要更新,但每个型号或风扇的本地条件都需要更新。回想一下,我们保持每个风扇或系统的本地条件。
逐步学习异常分类器的功能具有类似的签名,其差异是它还在输入流中接收异常级别。它还使用更新的参数更新分类模型。最后,更新联合模型的函数不会收到任何数据,标签或本地条件。输入和输出只是分类模型和证明的权重。
就是这样。现在让我们回到Peter,他将告诉我们他是如何配置整个系统的,并推动我们通过一些实现细节。谢谢你!
卢西奥,谢谢你解释了异常探测器是如何将模拟信号转化为方波,即离散状态变化,这是我们需要计算的。毕竟,这就是我们开始的任务——扫描一组实时信号,为冷却系统操作人员创建一个预测性维护解决方案。让我们来看看这个系统以及我们是如何快速地把它整合在一起的。
该系统本质上由三个组件组成——数据源、分析引擎和指标仪表板。连接器链接或与流服务交互,以管理通过此管道的消息流。这是整个系统的高级抽象视图。但它不会做任何事情,直到我们填满这些抽象。
现在我们回到盒子,拿出所有复杂的软件。Simscape的多领域模型生成了我们的训练数据。MATLAB生产服务器运行训练和分类算法。Redis保存模型参数和其他状态。而inflxdb和Grafana提供了仪表板。
为了帮助您了解建立这样的系统的权衡,我以为我们会遵循通过管道的旅程。我们将停在三个组件中的每一个。或者我将突出我们面临的挑战以及我们所做的选择。所以让我们来看看数据生成。
该模型允许我改变在给定期间发生的异常的类型和数量。该变化提高了我可以在培训师投入的场景的多样性,并提高了模型的最终精度。您看到的颜色指示不同的仿真域。
这是正在工作的模拟器,产生大约一小时的标记合成数据。这里有四张图,三个风扇信号,还有负载异常。当它运行时,你会明白我所说的异常标签的意思。
负载异常是那些你在上面的图表中看到的方形。在本节中,您将看到几个注入的负载异常。外壳温度升高,风扇转速加快,吸收更多功率并进行补偿。
在顶部的图表中,您可以看到标签,它们是逻辑值,在发生异常时为真,在一切正常时为假。所以异常信号是方波。这是电压异常。下面的图表中有较大的电压降和相应的风扇转速下降。温度略有上升,但不足以触发异常标签。
另一件需要注意的事情是,每个红色区域大约90秒宽,因此包含大约900条信息。那些方波标签被切成许多小块。这在以后会很重要。我们移动信号的下一站是分类器,在那里我们将看到如何为高吞吐量设计联邦。
这是我们的一个知识共享工厂的异常检测管道。让我们看看这个信号分类器。每个工厂都有许多异常检测器,每个检测器都使用缓存在本地数据存储中的模型。联合所需的参数存储在所有工厂都可以访问的共享数据存储中。异常探测器同时运行,每个探测器处理来自一组独特风扇的信号。
当需要将其他工厂的参数集成到本地模型时,我们希望将每个本地检测器暂停尽可能短的时间。事实证明,如果我们将联邦合并到每个检测器中,数据存储的原子读权保证使每个检测器能够完全独立地操作。一旦任何给定的检测器确定它已经看到了足够的数据,可以以可测量的方式更改参数,它就从共享存储中提取新的参数并更新它的模型。
请注意,与此同时,绿色工厂向共享商店发送了一个更新。联邦检测器得到更新了吗?这并不重要。如果没有,它将在下一个周期得到它。重要的是其他探测器没有停止,参数数据也没有损坏。
然后,联邦检测器更新工厂的模型和本地存储。与此同时,另一个探测器加载模型。同样,我们不知道它得到的是更新前的版本还是更新后的版本,这并不重要。因为每个检测器都可以自己联合,所以不需要一个同步阶段来让其中一些检测器等待。这使我们的产量保持在较高水平。
我们的信号变成了方波,正朝仪表盘方向移动。我将利用信号旅程的最后阶段来强调关于时间序列数据的几个微妙的点。在设计自己的数据模型时,您至少需要考虑这些问题。虽然这两个信号看起来像原子不可分割的单位,但采样率把它们分成了几段。这就是它们通过系统传输的方式——作为多个信息。
现在你可能已经看到了问题所在。高吞吐量所需的数据并行性可以与网络延迟结合起来扰乱信号。大多数消息传递服务都会给数据一个摄取或到达时间戳。这是系统接收消息的时间。
但要再次将这些消息放在一起,我们需要事件时间戳,该时间戳记录了产生信号的时间。因此,如果您正在生成时间序列数据,请确保您的数据模型包括事件时间。现在我们的信号在野外,跨越网络流。我们将在其中一个连接器中遇到它。
我们贫穷,小方波在四件中,碎片不再是秩序。但连接器使用消息时间戳重新组装,将其放入名为Windows的小缓冲区。然后它将每个窗口作为单个较大的消息发出。在我们的案例中,窗户向涌入涌入。
我希望您能明白为什么在这里使用事件时间戳很重要。注意,异常信号跨越窗口边界分裂。这就是为什么信号用那些小方块装饰的原因。它们表示一个单一的、唯一的信号标识符,数据库查询使用它将窗口连接在一起。
最后,一个时间一致的数据窗口被绑定到仪表板上。让我们看看当它到达那里时会发生什么。您已经看到了风扇传感器数据的视频,所以我想我应该从分类器开始,然后向您展示指标仪表板。
这是开发过程中的分类器。我使用MATLAB会话作为Airside服务器,这对于生产来说太慢了,但对于调试来说非常方便。现在我们停在断点处。我们可以查看风扇输入数据,它被存储为一个时间表。
有一些传感器信号的值。在将这些数据通过生产函数传递之后,我们可以检查结果。如果我是一个更好的数据科学家,我就能更好地判断这些是否正确。但我相信卢西奥的数学,所以我确定他们是。
现在,相同的分类器在我的8个工人本地服务器上运行。在这里,我主要想强调吞吐量,因为每个请求包含大约1,000条消息。你可以看到我们每秒处理6000到8000条信息。
这是仪表板。这是冷却系统的概述 - 顶部的异常数,条形图;在它下面,风扇的异常分解。在右边,有一个总异常的时间表,显示它们的发生时。
我们还可以深入了解每个扇子的更多细节。这是粉丝6号。您可以看到异常计数和触发它们的信号值。
现在我们在跑步中进一步越来越多,你可以看到另外几个粉丝都上网了。让我们来看看九九。它只是迄今为止报告一种类型的异常。在右侧,您可以看到风扇速度图中有更多的向下尖峰。
现在我要回到主屏幕。你可以看到我们又积累了几百个异常现象。这就是我们开发的Grafana仪表板的概述。
这就是我们所学到的。物理模型提供的训练数据可以让您领先一步。使用现成的组件可以让你非常迅速地把一个系统组装起来。
联邦使您的模型变得更聪明。并仔细分离关注和界面设计使得必要时更容易缩放。物理模型提供了稳健预测维护分类器的快速增长的种子。非常感谢。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。