NIO Power 业务团队的目标是构建全球创新的智能能源服务体系,基于移动互联网的加电解决方案,拥有广泛布局的充电换电设施网络,依托蔚来云技术,搭建“可充可换可升级”的能源服务体系,为车主提供全场景化的加电服务。
NIO Power 设备运维服务主要包括蔚来换电站、蔚来超充桩、7KW 家充桩 2.0、20KW 家用快充桩等设备;该服务当前面临诸多挑战,主要包括:
① 保障设备无安全隐患。
② 用户投诉:加电体验不佳。
③ 因设备故障导致的充换电成功率降低。
④ 因设备故障导致的停机。
⑤ 运维成本较高。
公司的 4 类主要充放电设备(换电站、超充桩、7KW 家充桩、20KW 家用快充桩)都包含大量传感器,因此将传感器实时采集的数据统一接入蔚来能源云进行统一存储和管理,并引入基于 PHM(故障预测与健康管理)预测性维护技术,通过一系列 AI 算法,例如:GAN(生成对抗网络)和 Conceptor(概念器网络),得到设备的异常检测情况以及故障诊断情况,并根据该诊断预测结果为设备提供最优的预测性维护决策方案,并下发相关运维工单,实现:
① 消除设备安全隐患。
② 减少用户对于加电体验不佳方面的投诉。
③ 提升充换电成功率。
④ 减少因设备故障导致的停机。
⑤ 降低运维成本。
因此,PHM 技术和算法的引入,有效地帮助公司改善了智能能源服务体系,并形成闭环,从而提升和优化 NIO Power 的服务能力。
前沿的 PHM 技术都是基于数据驱动的人工智能技术,“数据驱动”依赖大量样本和标签来构建模型,而模型往往都是在理想的场景下构建的,然而真实的场景往往并不理想。
从上图可以看出,真实场景常具备以下特点:
① 故障样本少。
② 故障样本标注困难。
由此带来了该场景下面临的两类问题:一类是无监督学习问题,另一类是小样本学习问题。
针对真实场景下面临的这两类问题,我们提出了以下几种 PHM 前沿技术,并应用于 NIO Power 场景下。
生成式对抗网络,于 2014 年提出,是一类基于深度学习的无监督学习技术,主要由生成器和判别器这两个子网络构成。
上图中红色 G 网络即为生成器网络,而蓝色 D 网络即为判别器网络。
生成器网络输入随机数分布(如高斯分布),输出用户指定的特定分布;从样本的角度来看,将 100 个从随机数分布中抽样得到的数据输入给 G 网络,G 网络会将这 100 个样本映射到与真实数据一样的空间中,形成分布 G(z),并利用判别器网络得到 G(z) 与真实数据 X 这两种分布的差异,随后优化 G 网络直至 G(z) 分布接近真实数据 X 分布。G 网络会输出这 100 个数据并形成一种特定的分布 G(z)。
判别器网络的核心是构建了 G(z) 分布与真实数据 x 分布的近似 Jensen-Shanon 散度,以此来衡量生成的分布与真实的分布的差异。近似 Jensen-Shanon 散度通过标准的基于二项交叉熵的二分类网络来实现,判别器网络输出是个从 0 到 1 的连续值。如果输出为 1,则认为输入样本 X 来源于真实的分布;如果输出为 0,则认为输入样本 X 是假的,是仿造的。
在 GAN 网络的训练形式上,生成器生成的样本尝试与真实样本的分布接近,而判别器尝试区分出生成的样本为假的,以此为生成器提供更准确的 Jensen-Shanon 散度值的梯度,可以让生成器朝着更优的方向迭代。最终这两种形成了对抗关系,生成器“拼命”生成假数据,判别器“拼命”对输入数据进行真假区分。GAN 网络最终将达到一种均衡的状态:生成得到的数据分布 G(z) 刚好完整覆盖所有的真实样本 X 的分布。
从数学的角度理解 GAN 网络,可以从损失函数理解。损失函数可使用价值函数 V(G,D),通过常见的 minmax 优化,同时优化 G 网络和 D 网络的参数;对于给定的 G 网络,优化目标就是最小化价值函数,如下公式所示:
公式中 JSD 为该损失函数最核心的优化项,是两种分布间差异性的一种度量方式。从公式中可以看出,该优化的本质就是最小化 X 和 G(z) 之间的分布差异;分布差异越小,说明 G 网络训练得越成功。
基于 GAN 网络,引入 Auto-Encoder 实现设备运行数据的异常检测。
具体实现方式是:
第一步,搭建 GAN 模型并训练得到一个 G 网络,该网络刚好重构了设备运行数据的分布。
第二步,丢弃 GAN 网络中的 D 网络部分,固定 G 网络参数并在 G 网络之前引入Encoder网络;这样,Encoder 网络和 G 网络组合形成一套标准的 Auto-Encoder 网络,该网络的损失函数为重构误差。
这样,我们通过优化 Auto-Encoder 网络,即可完成异常检测,其背后的原理是:不管输入样本如何,通过 Auto-Encoder 网络输出的样本都会处于正常样本区间范围内。因此,如果输入样本为正常样本,则生成样本和原样本同处于相同区间内,因此重构误差会很小甚至接近 0;而如果输入样本为异常样本,生成样本仍在正常样本区间范围内,这样会导致重构误差较大;因此,通过重构误差可以判断样本是否正常。
第三步,通过一小批正常样本来获得一系列重构误差分数,并以其最大值作为异常检测的重构误差阈值。
这一原理已经被完整论述在论文中,该论文于 2022 年发表在 IEEE in Transactions on Intelligent Transportation Systems 上,论文信息如下:
M. Xu, P. Baraldi, X. Lu and E. Zio, "Generative Adversarial Networks With AdaBoost Ensemble Learning for Anomaly Detection in High-Speed Train Automatic Doors," IEEE in Transactions on Intelligent Transportation Systems, 2022.
我们用到的第二类技术是一种无监督 RNN(命名为概念器网络:Conceptor)的小样本故障诊断技术。
首先介绍该技术的背景——无监督 RNN。无监督 RNN 和普通 RNN 相比,最特别的一点在于该网络输入层神经元的连接权重和隐藏层的连接权重是随机初始化,并且在整个训练和推理的过程中是固定不变的。这就意味着,我们不需要对输入层和隐藏层的权重参数进行训练;因此,相比于普通 RNN 网络,我们可以将隐藏层神经元设置得非常大,这样网络的记忆周期和记忆容量会很大,对输入的时间序列的记忆周期会更长久。这种特殊的无监督 RNN 的隐藏层神经元通常被称为 Reservoir。
状态更新方式和标准 RNN 更新方式相同。
基于这种无监督 RNN 开发一种无监督的表征学习方式,具体来说,输入可变长度的多维时间序列,经过 Reservoir 得到每个时间步的 RNN 隐藏神经元状态;使用 Conceptor 方法(上图浅蓝色方框所示),得到一个 N×N 维度的概念矩阵。用线性代数的方式去理解,该矩阵的含义是:在处理时间序列的时候,对于每个时间步,将时间序列信号投射到 N 维空间(N 对应隐藏神经元的尺度)。
如果有 ti 个时间步长,则该 N 维空间内的这 ti 个点形成点云;这样的点云椭球体可被解构成 N 个相互正交的方向,并得到每个方向上的特征向量和特征值。
而 Conceptor 的作用就是捕捉特征值和特征向量,并对特征值进行归一化;对于这 N 个特征向量,可理解成是在时间序列中捕捉到的 N 种性质(如周期性、趋势性、波动性等复杂时间序列特征),即隐式特征的提取;而所有被提取到的特征信息均被保留到这个 N 维矩阵中(即 Conceptor 矩阵,上图右侧深蓝色方框部分)。
根据矩阵的基本特性,将两个时间序列的 Conceptor 矩阵相减,并提取 Frobenius 范数,即得到两个时间序列的 Conceptor 距离;这个标量可用来表征两个时间序列的差异性。
基于 Conceptor 的上述特性,可用来进行小样本故障诊断分析。
假如存在少量的实际故障样本(比如只有不到 10 个故障样本),将对应的时间序列全部输入到 Conceptor 网络中,聚合形成相应的概念矩阵,作为该类别故障模式的抽象表征;同样,正常的样本也会聚合成一个正常的概念矩阵。在测试的时候,对输入的时间序列用相同的方法提取对应的概念矩阵,并分别与正常样本和异常样本的概念矩阵进行对比分析,计算对应的概念差异。如果输入样本和某一特定故障模式的概念矩阵相似度很高,则可认为该样本属于该种故障模式。
这一方法也被完整论述在下述论文中:
Mingjing Xu, Piero Baraldi, Zhe Yang, Enrico Zio, A two-stage estimation method based on Conceptors-aided unsupervised clustering and convolutional neural network classification for the estimation of the degradation level of industrial equipment, Expert Systems with Applications, Volume 213, Part B, 2023, 118962.
换电站电池仓的链条配合电池仓提升机,将入仓的电池提升至充电仓进行充电。链条如果有故障会发生松动甚至断裂的情况,从而在运送至充电仓的过程中会导致卡仓、无法入仓。此外,如果链条断裂将导致电池坠落,从而引发电池损坏甚至火灾事故的发生。
因此,需要构建模型提前检测链条的松动情况,提前杜绝相关安全事故的发生,将风险降到最低。
和链条松动直接相关的变量主要是振动相关信号,然而振动数据的采集和存储成本较高,因此大多数设备并未采集振动相关的信号。
在振动数据缺失的情况下,可以通过链条驱动电机的扭矩、位置、速度等信号来检测链条的松动情况。
对比下图中的链条松动数据和链条正常数据,可以明显看出,电池仓链条松动会使得扭矩信号发生明显的周期性波动,并且波动的幅度呈现衰减趋势。
该故障的实际样本数量很少,少于 20 个样本;然而这类故障重要性很高,因此对预测模型的准确率和召回率要求非常高。
① 首先对原始数据进行时间序列分割,对长时间序列提取出匀速过程的扭矩数据。
② 进而进行时间序列分解,仅保留时间序列的波动特征。
③ 进一步对序列进行频谱分析,最终得到频谱特征。
然而,发生故障时刻的频率波段不止一种,并且不同频段下的振幅服从特定的分布,因此用传统的方式去识别,准确率较低,会造成较多的误报警和漏报警。因此,选择 AE-GAN 模型,更精准地捕捉故障模式下特定的故障分布,最终得到设备异常分数。
松动检测数据和算法交互主要包括以下几层:数仓,数据层,特征层,算法层以及模型层。
其中,特征层主要就是前文所述特征工程所涉及到的算法模块;本案例中,算法层使用 AE-GAN 算法;基于算法层的异常分数结果,以及特征层中特征表的数据记录,在模型层中进行进一步判断和决策;最后输出工单下发给专员来处理。
基于上述流程,将传统的专家经验检测升级成 AI 算法检测,准确率提升超过 30%。
首先基于充电枪的充电电流、电压、温度等物理信号建立物理模型以得到枪头的温升系数物理量,并以此作为特征信号进行进一步的故障诊断。然而这种基于物理的特征工程,通常使用时间滑窗进行特征生成,最终得到一个新的时间序列作为特征结果;这样的特征序列往往噪声较大。
以下图为例,该项目通常选取一周或一月的数据作为时间窗口,得到类似下图的特征时间序列。图中可以看出,该序列的噪声很大,很难直接分辨劣化样本和正常样本。
此外,实际故障样本中,劣化枪头样本数往往小于 50。
基于以上两点原因,引入 Conceptor 模型,摆脱人工经验,通过模型自动捕捉劣化样本的时间序列特征。
a、假如输入 50 个故障样本,则会得到 50 个概念表征矩阵;
b、将这 50 个矩阵进行均值聚合,并乘以故障模式的表征矩阵重心,得到该故障模式下的表征矩阵;
c、模型测试阶段,对输入测试数据计算概念矩阵,将其与故障模式的表征矩阵进行对比,进而得到异常分数。
基于上述流程,将传统的机理模型检测方法升级成机理模型结合 AI 算法检测方法,可将模型误报警率减少至原来的 1/5。
A1:对于训练好的 AE-GAN 模型,输入一个样本到 Auto-Encoder 中,得到样本的重构误差即异常分数;如果该分数小于指定阈值,则认为该样本正常,反之则为异常样本。这一方法的使用前提是,训练数据全部为正常样本数据。
A2:GAN 网络训练时,要么使用正常数据,要么使用某种特定模式下的异常数据,不会使用混合数据进行训练,因此不会出现样本不均衡这类问题。如果实际数据中两类数据样本悬殊,一般会针对正常样本训练出一个 GAN 网络 1,再针对某种固定模式异常样本训练出 GAN 网络 2,并基于这两种网络的重构误差对测试样本进行最终判断。
A3:模式崩溃是 GAN 模型训练中遇到的最核心的问题。首先要理解模式崩溃,其次要关注 GAN 训练的核心任务。
模式崩溃,是生成器生成得到的数据聚焦于某个特定区域;出现这样情况的原因是 GAN网络中损失函数定义的忽略。GAN 网络训练过程中,通常将 G 网络的损失和 D 网络的损失分开计算,而常常忽略两个网络的联合损失函数(即公式中的 JSD 损失)。如果出现训练模式崩溃情况,往往 JSD 损失并未收敛;因此,在训练过程中将 JSD 损失进行可视化,可有效避免模式崩溃情况发生。这也是近期很多改进版的 GAN 模型能够脱颖而出产生较好效果的原因;此外,在标准 GAN 网络中引入特定 trick,也可以达到类似的效果。
A4:对于正负样本悬殊的场景,如果使用常用的 LSTM、RNN、GRNN 等模型,往往会面临损失函数不收敛的问题;因此这类问题的处理思路,往往是从无监督学习出发,随机固定主网络隐藏层的 weight,并使用特定方法对生成的概念矩阵的特征分量进行正则化处理;虽然 weight 参数是随机的,但是得到的表征分量可以反映出时间序列隐藏的特性,足以对小样本场景加以区分,以上是 RNN 隐藏层随机固定的优势。
A5:该模型如下图所示。
其中,Reservior 部分和普通 RNN 网络基本相同,唯一的不同是 Win 和 W 是随机设置的(注意只随机生成一次);后续对每个时间步长下的神经元隐藏状态进行计算和更新,并得到对应的概念矩阵。以上是 Conceptor 的完整版形态。
A6:下图是 Encoder 网络的训练过程。
首先会训练一个标准 GAN,在此基础上固定 G 网络中隐藏层的参数;然后在 G 网络前插入一个 Encoder 网络,将两个网络连接形成 Auto-Encoder 网络。Auto-Encoder 网络的输入是原始的数据样本,输出是重构的数据样本;AE-GAN 网络通过构建重构样本进而对异常数据进行识别。
A7:论文详见文章正文相关章节,代码暂未开源。
A8:可以使用。不过图像领域相比普通的信号,其维度更高,数据分布更复杂,训练所需数据量更大。因此,如果用来作图像分类,且数据样本较少,模型效果会打折扣;如果用作异常检测,效果还是不错的。
A9:评价指标最直观的就是误报率和漏报率,更科学的指标包括查全率、查准率、F-score 等。
A10:如果没有更直接、更快捷的方法得到故障特征,一般采用纯数据驱动的方法进行故障样本特征挖掘,一般是构建深度学习网络去学习故障样本关键特征,并被表征为概念矩阵。
A11:对于少量样本,一般使用无监督 RNN 方法胜场概念矩阵来表征数据特征;如果对于异常检测问题,存在大量正常样本,则可使用 AE-GAN 网络来实现。
A12:RNN 输出的概念矩阵,可以理解成输入的时间序列中所有特征的集合;由于相同状态下数据的特征是相似的,因此将该状态下所有样本的概念矩阵作均值聚合,即抽象出该类状态下的概念中心矩阵;对于未知状态的输入时间序列,通过计算其概念矩阵并和概念中心矩阵进行比较,相似度最高的概念中心矩阵即为输入数据对应的类别。
A13:完成网络训练后,使用小批量正常样本数据进行重构误差的计算,取其中最大值作为阈值。
A14:一般情况下不会更新,但是如果原始数据分布发生变化(如运行工况发生变化),则可能需要重新训练阈值,甚至可能将迁移学习相关方法引入 GAN 网络中,对阈值进行微调。
A15:GAN 一般不是训练原始的时间序列,而是训练基于原始时间序列提取出的特征。
A16:传统 GAN 也经常用来进行异常检测。AE-GAN 对 GAN 的原理剖析更加深入,因此也能最大程度地避免模式坍塌等问题;而 Auto-Encoder 的引入,可确保异常检测的原理被准确无误地执行,从而减少误报率。
A17:故障诊断模型划分很多层级,模型层的结果仅为决策层的依据而并非最终结果,一般会结合其他业务逻辑辅助判断。
A18:一般基于异常检测的结果,会指定技术专员到现场真实场景中进行确认。
A19:正在进行相关的尝试。
A20:文中提到的 Conceptor 模型可以处理任意长度的时间序列,因此无需填充 0,同时也避免了参数“训练”过程,因此可以规避这类问题。
A21:如果仅仅用于异常检测领域,其实越“过拟合”则模型表现会越好。此外,由于 GAN 模型的 G 网络在训练过程中存在较大的随机性,因此一般不会发生过拟合的情况。
A22:这类问题一般取决于神经网络的规模,隐藏神经元的维度等。一般来讲,对于 2 层神经网络、每层 100 个神经元这种规模的模型,训练数据的体量需要比隐藏层维度大 1-2 个数量级,才能达到较好的效果,同时还需要使用一些 trick 来避免模式坍塌的发生。
A23:目前上线的很多 Conceptor 模型都使用相同的一套经验参数,没有进行进一步调参;根据实践经验来看,相关参数设置从 10 到 100,对结果的影响差异很小,唯一的差别在于计算成本。如果故障数据的样本量较小而希望结果更精准,则可将参数设置成128、256 甚至更高,相应地,计算成本也会更高。故障分析的标签量,一般在 1 到 10 之间。业务价值量化,一般用误报警和漏报警来衡量,因为误报警和漏报警可以直接折算成定量的业务价值影响。
A24:可以采用 Conceptor 方法,利用时间增长窗口形成多个概念矩阵;并对概念矩阵进行谱聚类,进而确定故障发生时间。详见 Conceptor 章节相关论文。
A25:在真实的场景下,由于设备存在不同的运行工况,正常的数据往往也是千差万别的。
A26:这两种模型的具体使用场景很难进行明确的划分;一般来说,GAN 更擅长解决数据分布特殊、很难用分类网络来刻画的这类问题,而无监督 RNN 更适合处理小样本问题。
A27:对于领域特定场景,如能引入领域特定知识提取高阶特征,则一般是可以的;如果仅仅使用图像进行检测,如果图像样本量很大,且能够表征正常行为,则可将问题转化为 CV 领域细分场景检测,可以使用本文提到的模型加以检测。
A28:是无参数的。
A29:要看具体的场景,包括模型的需求、故障的样本量以及分布的复杂性等。如果两种故障的时序波箱相似性很高,一般无需单独训练模型,只需要构建多分类模型确定分类边界即可;而两种故障模式的数据形态差异很大,则可借助 GAN 模型进行更精准的识别。
A30:Conceptor 模型的训练成本很小,可用来提取特征;GAN 模型训练时间相对更长一些,不过对于常见的结构化的表格数据,训练时间也不会太长。
A31:两种模型本身对正负样本的数量都没有要求;考虑到模型训练时间,一般近选取上千个具有代表性的样本进行训练。时序子集的时间个数一般没有最小个数建议。
A32:特征矩阵的维度和隐藏神经元的个数直接相关,如果 N 个隐藏神经元,则特征矩阵的维度为 N×N。考虑到模型的复杂度以及计算效率,一般不会将 N 设得太大,常用的设定值为 32。
A33:根据 GAN 的原理,D 网络用来区分正常样本和伪造样本;而伪造样本如果训练成“完全体”状态,会非常接近正常样本,造成正常样本和异常样本之间难以区分;而 AE-GAN 网络假定正常样本和异常样本具备一定的区分性,这是使用 AE-GAN 的理论基础。
A34:模型的泛化能力,需要基于一个先验假设:所有同类型的故障,其数据分布也是相似的。如果同类故障数据分布差异较大,则一般需要对故障类别进行进一步的细分,才能保证模型的泛化能力。
A35:对于文中提到的两个模型,数据只需进行归一化即可。
A36:GAN 通过理论的完备性,更完善地描绘正常样本数据的分布情况,由此构建出更完整的决策边界。而普通的 AE、孤立森林以及 One Class SVM 等方法不具备理论上的完备性,无法构建更完整的决策边界。
A37:如果判别器确实无法识别正常样本和伪造样本,从侧面可以说明生成器的训练是很成功的;而在异常检测阶段,只用到生成器而没有用到判别器。GAN 网络中生成器的意义重大,因此 AE-GAN 不会退化成 AE,可将其理解成 AE 的升级版,是正则化的 AE。
A38:在小样本、可解释性要求高的场景下,还没有过这样的尝试,后期可能会进行相关尝试。
A39:VAE 也是异常检测常用的方法,VAE 在隐藏层使用了先验高斯分布,并对先验高斯分布改变形状进而拟合真实数据,使得两个分布等价;然而 VAE 使用的损失函数是 KL 散度而不是 JSD 散度,而 KL 散度是不对称的,因此在复杂样例中可能效果不佳。
A40:文中的充电枪案例,就是噪声严重的案例。一些基于时间序列的分解方法可以将时间序列中的周期项、趋势项、噪声项等分解出来;特征缺失,可用数据不全的方法进行处理。
A41:以 GAN 为例,主要是通过增加噪声的方式进行样本增强,没有使用到 APA 增强策略。
A42:这篇分享提供的参考文献中,包含了很多极端的例子,例如你举出的例子是典型的 two-gaussian ball 的例子。AE-GAN 可以解决这类问题。
以上是蔚来汽车深度学习算法实践的详细内容。更多信息请关注PHP中文网其他相关文章!