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