ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

非均衡数据下船舶柴油机故障诊断:图卷积网络如何破解长尾难题

非均衡数据下船舶柴油机故障诊断:图卷积网络如何破解长尾难题 这期100期纪念专辑里的文章不少主题从结构健康监测到智能运维都有我翻完目录后回头把陈辉团队这篇论文又单独调出来读了一遍。原因很简单标题里“非均衡数据”这四个字几乎是每个做过设备诊断的人都会在项目里遭遇、但论文里又常常被一笔带过的难题。陈辉团队把这个问题放到船舶柴油机故障诊断的场景下来解而且把图卷积网络当成核心工具这本身就值得好好拆解。无论你是刚进故障诊断领域的研究生还是在船厂、船上做动力装置维护的工程师或者只是想看一种图神经网络如何在工程数据上落地的算法学习者这篇解读都会有一些对应的启示。这篇文章我读下来最想推荐给两类人一类是被非均衡数据折磨过的工程诊断算法工程师另一类是刚入门故障诊断、想找一个既有物理意义又有前沿方法的研究生。下面我按自己的理解把这类研究的要点拆开来讲包括非均衡数据为什么难、GCN为什么适合、实验怎么设计才靠谱。1. 100期纪念专辑里为什么我先读这篇船舶柴油机故障诊断论文很多故障诊断方向的论文实验数据用的是公开的平衡数据集各类样本数量差不多工况也干净。这种论文看起来指标高但拿到实际设备上往往水土不服。因为真实世界里故障本来就是小概率事件。一台远洋船舶主机整个寿命周期中绝大多数时间在健康状态下运行故障样本可能只占全部监测数据的百分之几甚至千分之几。我们做诊断算法的人要面对的不是一个漂亮的平衡分布而是一个极其偏斜、还不断变化的长尾。这一点在船舶柴油机上尤其突出。船机运行环境恶劣负荷和转速时常变化传感器信号夹杂着大量噪声故障又不像实验室里那样按照预设方案逐项触发。数据不缺缺的是有标签的故障数据。陈辉团队把这个问题直接放进了标题里等于告诉我们这不是一篇用漂亮数据集刷指标的文章而是一篇从工程实际长出问题、再用合适工具去解决的文章。再说图卷积网络的选择。船舶柴油机监测系统通常布置多个测点比如缸盖振动、缸体振动、曲轴箱压力、增压器转速、进排气温度等。这些测点之间有实打实的物理耦合喷油燃烧改变缸内压力压力波动经缸体传到振动传感器排气脉冲又影响增压器。要建模这种多测点多变量的非结构化关联卷积神经网络有点力不从心普通全连接网络和循环网络也未必好用而图卷积网络恰恰是这方面的合适工具。论文标题把“图卷积网络”和“非均衡数据”放在一起技术路线和现实难题是对上的。这里还想提一个投稿层面的观察。这类把工程问题和方法结合得比较紧的工作通常受到机械工程、船舶工程、可靠性工程类期刊的青睐从二区到三区的SCI期刊都有适合的出口。能在100期纪念专辑里占据一个位置说明评审和编辑都认可这个选题的代表性——非均衡数据的处理确实是近年来故障诊断领域绕不开的公共难题。2. 非均衡数据到底难在哪船舶柴油机故障样本的真实分布这一章我想把“非均衡”这个词拆开来看。它不是一个简单的类别比例问题而是多层困境的叠加。2.1 先看清失衡比例正常样本与故障样本的现实对比做故障诊断的人几乎都遇到过这种尴尬跟甲方要故障数据对方说“我们已经存了十年数据”等到服务器打开一看99.9%都是正常运行状态下的采样故障样本可能只有几十条。放在船舶柴油机场景里这个比例还要更极端。柴油机是持续运行的动力设备每天产生海量运行数据但故障窗口可能只有几小时甚至几分钟。以常见的故障诊断数据组织形式来说把连续信号切段后做样本正常样本和故障样本的失衡比达到50:1不算稀奇达到100:1以上也常见。更要命的是故障不是只有一种。喷油器故障、气门间隙异常、活塞环磨损、增压器失速、轴承磨损、冷却系统异常……每一类故障都有自己的特征。这些故障类别之间的样本数量差异也很悬殊形成长尾分布头部是大量正常样本中间是几个常见的故障类尾部是那些十年都遇不到一次的罕见故障。少数类内部的不平衡往往比正常和故障之间的不平衡更难处理。2.2 失衡让模型悄悄“坏掉”的机制要理解为什么失衡会让模型失效得回到训练的基本机制。深度学习模型大多通过最小化交叉熵损失来学习交叉熵在计算时对每个样本平均。当正常样本占绝对多数时损失函数里绝大多数项由正常样本决定梯度也主要由正常样本贡献。模型学到的最优策略就是把一切输入都判成正常类因为这样做几乎不会让损失上升。最后的决策边界被推到故障类的隔壁少数类的特征空间被完全挤压掉了。这不是理论猜测我在实际复现中见过很多次。有一个项目里故障率大约是4%模型训练完后测试准确率96%看着很漂亮。但把混淆矩阵拉出来一看所有故障样本全被识别成了正常类。准确率是靠“全部输出正常”刷出来的这种模型在运维现场完全没有价值反而会制造虚假安全感。还有一个容易被忽略的问题故障样本少不代表故障样本的噪声就少。恰恰相反工程现场的故障样本往往是在强干扰下录到的机械振动大、环境噪声杂、工况不稳这些都会被模型当成故障特征学进去。样本越多这种噪声可以被平均掉样本越少噪声被学习的比例就越高。2.3 少数类内部的多样性与欠覆盖更麻烦的是同类故障在不同工况下表现可能完全不同。一台船机在低速巡航和高速满载时同样的喷油器磨损在振动信号上呈现的频谱特征可能差别很大。如果某种故障只采集到了低速工况下的样本模型就很难识别高速工况下的同类故障。这种“欠覆盖”问题让少数类学习更加脆弱。有些论文用SMOTE等过采样方法去制造虚拟样本试图缓解样本量不足。但SMOTE的本质是在两个真实样本之间插值如果原始样本本身就集中在某个工况角落插值出来的人工样本也同样集中并没有真正解决覆盖问题。这也是为什么现在的趋势是结合特征空间的信息传播和上下文聚合来补足少数类而不是单纯地堆数据。3. 用图卷积网络建模柴油机测点结构与原理现在进入重点。图卷积网络GCN在故障诊断里不是万能的但它和柴油机多测点监测这个场景的匹配度确实很高。下面我把原理、公式和图构造策略都展开讲。3.1 柴油机监测数据天然可以看成一幅图船舶柴油机的监测系统不是单点测量。常见的布置包括缸盖振动、机体振动、曲轴箱压力、增压器转速、排气温度、冷却水温、燃油压力等。这些测点之间存在明确的物理因果链喷油系统状态影响燃烧过程燃烧过程决定缸内压力缸内压力通过机械结构传导为机体振动同时影响排气温度和增压器工况。测点不是一堆互不相干的独立传感器而是一个有结构的网络。传统方法处理多测点数据最常见的手段是直接拼成长向量喂给全连接网络或者CNN。这样做有一个隐含假设所有测点之间是等距的、无结构的。但实际不是这样缸盖振动和缸内压力关系紧密与冷却水温度的关系相对松散。全连接网络必须靠海量数据自己去学出这种关系结构在数据充足时也许能做到但在故障样本极度稀缺时很难指望它学得会。图结构的意义就在于把这种先验关系显式写进模型。每个测点是图上的一个节点节点之间的边代表相互影响关系。图卷积网络在图上做信息传播一个节点的特征更新时会聚合相邻节点的特征。这等于在进入学习之前模型就已经知道哪些信息应该被关联起来。3.2 GCN的消息传递与少数类“借力”效应下面解释一下图卷积的计算过程。对于图结构每个节点有特征向量邻接矩阵A刻画节点之间的边。为了处理节点自身的信息通常把邻接矩阵加上自环再用度矩阵做归一化。第l层到第l1层的更新公式可以写成[ H^{(l1)} \sigma\left( \tilde{D}^{-1/2} \tilde{A} \tilde{D}^{-1/2} H^{(l)} W^{(l)} \right) ]其中 (\tilde{A} A I)(\tilde{D}) 是 (\tilde{A}) 的度矩阵(W^{(l)}) 是可学习的权重矩阵(\sigma) 是激活函数。用大白话说每一次聚合节点把自己的特征和邻居节点的特征加权求和再经过一次线性变换和非线性激活。层数越多中心节点能聚合到的范围越广一层看到直接邻居两层看到二阶邻居。说到非均衡这里有一个常被忽视的好处少数类节点在做邻居聚合时会从周围的多数类节点以及其他相邻节点接收上下文信息。也就是说当一个故障样本的特征不够强、容易被淹没时它在图中的邻居特征可以帮忙“撑腰”。这种聚合效果等效于给少数类提供了额外的、来自图结构的信息量。尤其在极端样本匮乏时哪怕是来自多数类邻居的上下文信息也能让节点表征更稳定减少对单一样本噪声的敏感。3.3 与其他模型相比GCN适合在哪里这里多说几句为什么不是无脑用GCN而要分析它与场景的匹配。我把常见模型在“多测点少样本强耦合”场景下的表现列成表格方便对照方法擅长在“多测点少样本强耦合”下的问题1D CNN单测点时间序列的局部特征不能自然建模测点间的空间关系LSTM/GRU时间依赖建模对测点间空间结构缺乏显式建模全连接网络任意特征拼接需要海量样本学关系容易过拟合Transformer全局注意力建模数据量小时容易记住少量样本噪声GCN非规则图上的邻居聚合图结构的设计需要专业判断这个对比不是其他方法一无是处。实际工程中很多方案是混合架构LSTM提取时序特征GCN做测点间聚合再输出分类。如果论文里只用一个GCN通常的做法是把每段信号先提取成统计量或特征向量作为节点特征再在节点层面做分类。至于哪种架构最好取决于数据形式实验上应该多试。3.4 图怎么建三种可落地的构造策略图卷积网络需要明确两个问题节点是什么边是什么。节点一般对应测点或者由样本划分出的单元。边的构造则是整个建模过程中最需要功夫的地方常见策略有三种。第一种基于物理结构。如果你手上有柴油机的结构图纸和传感器布置图可以依据机械连接关系来建边。例如同一缸的缸盖振动测点、缸压传感器、燃油压力传感器之间建边不同缸之间建弱一些的边增压器与排气侧测点之间建边。物理图可解释性强不依赖数据但需要领域知识并且故障状态下信号耦合关系和健康状态可能不一样。第二种基于信号相关性。用正常状态下各测点信号的相关矩阵来建边比如计算两两测点之间的皮尔逊相关系数高于某个阈值就建边。这种方式不依赖专家判断完全从数据出发很常用。有一点要注意在正常状态下算出的相关结构不一定完全适用于故障状态。做实验的时候最好在故障样本上也看一眼相关结构如果变化太大就要用第三种方案。第三种基于特征空间相似度的kNN图。每个样本作为图上的一个节点节点特征表示样本的特征向量节点和它最相似的k个节点之间建边。这种方法的好处是图结构不再绑定传感器布局可以用于样本级别的故障诊断。缺点是需要选择距离度量欧氏距离、余弦相似度和k值而且图上节点数量会很大。实际可以在三种方案里各试一组选验证集上效果最好的或者做一个可学习的图结构让注意力机制自己决定边的权重。4. 化解非均衡的三层设计从数据增强到损失函数调整处理不均衡靠一个花哨的trick是不够的通常要三层协同。数据层解决“样本量太少”图结构解决“单点信息不足”损失函数解决“训练偏向多数类”。这三层环环相扣。4.1 数据层过采样、扰动增强与嵌入空间扩充数据增强是最直观的思路。经典的办法有SMOTE和ADASYN前者在少数类样本与近邻样本之间线性插值生成新样本后者根据近邻分布决定生成的数量。对于表格类故障数据这两个方法效果尚可但振动信号是高维、非平稳的直接在原始特征空间做插值风险很大容易生成形态不真实的人工故障样本。更稳妥的做法有几种一是做时域/频域的扰动增强在原信号基础上加幅值调制、微小相位偏移、真实背景噪声这种方法能在保留故障物理特征的前提下扩大样本量二是先训练一个特征提取器可以是GCN的前几层把样本映射到嵌入空间再在嵌入空间做mixup或SMOTE。嵌入空间里的距离相对更有语义插值出来的人工样本也更合理。数据层增强只能部分缓解数量不足不能解决覆盖不足。如果某种故障只在某个工况下出现过再怎么增强也只是在这个工况附近做文章。所以数据层要与其他两层配合。4.2 图模型层邻居聚合、图数据增强与半监督学习GCN本身具备的正则化效应在非均衡场景下很有价值。节点表征取决于自身和邻居的加权组合单点异常对表征的影响被分摊掉了。换句话说模型不会被少数类样本的偶然波动带偏太多。图数据增强在近两年也发展得很快。DropEdge和节点特征掩码是最常用的两种训练时随机丢掉一部分边或掩蔽一部分特征维度让模型学到结构上的冗余信号图扰动结合对比学习把同一个图的两个增强视图视为正样本对拉近它们的表征相当于在没有标签的情况下学习结构的语义。还有一种做法是半监督学习。船舶柴油机数据里大量运行数据其实没有标签但它们包含了设备运行状态的信息。GCN天然支持半监督节点分类把有标签的少数节点故障样本和无标签的节点大量正常/未标注样本放在同一个图里做训练模型在传播标签信息的同时可以利用无标签节点的结构信息来稳定表征。对小样本故障诊断来说这种方案往往比纯监督学习稳健得多。4.3 损失层加权交叉熵、Focal Loss与监督对比损失第三层在损失函数上做文章。最直接的加权交叉熵给每个类一个权重通常取样本量倒数或者平方根倒数让少数类样本对损失的贡献变大。刚才说过权重设得太大会让模型在少数类上过拟合需要仔细调。经验是用验证集上少数类F1来调而不是看总准确率。Focal Loss是另一类常用选择公式为[ L_{FL} -\alpha_t (1-p_t)^\gamma \log p_t ]这里的 (p_t) 是模型对真实类别的预测概率(\gamma) 控制对困难样本的聚焦程度。当模型对某个样本已经很有信心(p_t) 接近1时((1-p_t)^\gamma) 很小损失被压低当样本很难(p_t) 很小时损失被放大。这能缓解多数类简单样本主导损失的状况。如果是多分类故障诊断可以考虑有监督对比损失Supervised Contrastive Loss让同故障类型的节点在嵌入空间中相互靠近不同故障类型的节点尽量远离。这种损失很适合非均衡因为它不受类别样本数量的限制只要同类节点有邻居就能形成有效的约束。配合GCN的消息传递通常可以得到更清晰的分类边界。说到这里我想特别提醒一句这三层不是孤立存在的。数据增强改变了模型的输入分布图结构改变了信息流动路径损失函数改变了梯度方向。只调损失不加图结构等于给一辆没装转向系统的车换一个好引擎效果有限。论文里出现的“非均衡数据的GCN方案”大概率就是这三层设计的某种组合只不过每一层的具体选择会因数据而异。5. 验证实验如何做才可靠指标、对比与消融算法写得好还得实验撑得住。下面专门聊实验设计这部分是很多人读论文时最容易忽略、也最容易翻车的地方。5.1 为什么准确率在非均衡数据下不可靠失衡数据下准确率等于“猜多数类”的成绩。前面说过故障率只有4%时全预测正常也能拿到96%的准确率。这种指标在故障诊断场景里不仅没有意义反而会掩盖模型的实际失效。要看什么故障侧召回率必须优先。船机故障最怕漏报少报一次故障可能让设备带病运行到损坏这比多报几次误报更致命。F1-score能把查准率和查全率综合起来看G-mean可以同时反映正类和负类的识别情况宏平均F1比加权F1更不容易被多数类带跑。下面这张表可以帮你快速对齐各指标的含义指标公式/含义在非均衡下的优势准确率(TPTN)/总数会被多数类主导不建议作为唯一指标查准率 PrecisionTP/(TPFP)关注误报成本查全率 RecallTP/(TPFN)关注漏报成本故障侧特别关键F12PR/(PR)均衡衡量查准与查全G-meansqrt(TPR*TNR)对多数类和少数类同时敏感宏平均F1各类F1均值不受类别样本量影响5.2 对比实验的公平性数据划分是第一道生命线很多非均衡分类论文的指标虚高问题不在模型而在数据划分方式不科学。连续运行的设备数据具有极强的时间相关性相邻时间内采集到的样本工况几乎相同特征分布极其相似。如果随机把样本切进训练集和测试集模型很容易在测试集上见到训练样本的“近亲”性能被大幅高估。正确做法是按时间或按工况划分要么把前几周的数据拿来做训练后面的数据做测试要么把所有样本按工况分成几组训练集和测试集各自覆盖不同组但同类别。这里没有绝对标准但至少要避免同一连续时段的数据被切割到两边。我在这儿说一段自己的亲历整理工业机器人轴承数据时第一版用随机划分故障识别的F1做到了0.92我当时还觉得模型不错。后面换成按实验批次划分F1掉到0.71我才意识到之前的指标是数据泄露带来的幻觉。从那以后我处理工业数据第一件事就是检查数据切分逻辑。没有这个意识后面所有对比实验都是白做。5.3 消融实验与可视化方法有没有用要看增量在哪好的论文一定会有消融实验把图结构、损失函数、数据增强分别拿掉看每一项对最终F1的贡献。这不是为了凑篇幅而是用来证明每个设计都有存在的必要。实验表格一般横向是不同方法纵向是多项指标要看清楚它报告的到底是加权平均还是宏平均这个在比较方法时容易踩坑。可视化方面最重要的三件套特征嵌入的t-SNE、混淆矩阵、传感器节点的重要性分析。t-SNE可以直观看到少数类节点是不是被夹在多数类中间混淆矩阵能定位哪两类故障最容易被混淆节点重要性分析可以告诉我们哪些测点和边对诊断决策贡献大这对工程解释非常重要。如果论文只给一个对比表、一个折线图没有更深入的分析那它对方法的论证力度是不够的。6. 复现与迁移给故障诊断研究者和工程师的落地建议最后来点实惠的。代码怎么跑、坑在哪、怎么把方法迁移到轴承和工业机器人场景这些都是我自己摸过石头之后想说的话。6.1 复现代码时的关键注意事项如果作者开源了代码尽量先跑通原始版本再改数据如果没开源就从零搭建。基于我的经验建议直接用PyG或DGL搭GCN避免自己手写聚合逻辑。下面是一个最小的图卷积分类模型示例结构上足够应对大多数节点级故障诊断任务import torch import torch.nn.functional as F from torch_geometric.nn import GCNConv class GCNClassifier(torch.nn.Module): def __init__(self, in_dim, hidden_dim, num_classes, num_layers2, dropout0.5): super().__init__() self.convs torch.nn.ModuleList() self.convs.append(GCNConv(in_dim, hidden_dim)) for _ in range(num_layers - 1): self.convs.append(GCNConv(hidden_dim, hidden_dim)) self.head torch.nn.Linear(hidden_dim, num_classes) self.dropout dropout def forward(self, x, edge_index): for conv in self.convs[:-1]: x F.relu(conv(x, edge_index)) x F.dropout(x, pself.dropout, trainingself.training) x self.convs[-1](x, edge_index) return self.head(x)在工业数据上跑GCN有几个配置细节很容易影响结果节点特征要先做z-score标准化。振动量级、压力量级、温度量级完全不同直接输入会给量纲大的特征过度权重。注意孤立节点问题。某些故障样本对应的节点如果连边很少信息聚合不充分分类效果往往偏差。可以在建图时使用kNN策略保证每个节点至少有k个邻居。边权重归一化由GCNConv内部完成不需要手动做但如果你自定义图结构记得检查邻接矩阵是否对称、是否加了自环。层数不宜太多。2到3层通常就够再多所有节点特征会趋于一致这种过平滑现象在故障样本少的图上尤其明显。6.2 从船舶柴油机迁移到轴承与工业机器人场景这套方法的适用范围远不止船舶柴油机。在旋转机械领域轴承故障诊断是最常见的落地场景。轴承故障诊断同样面临非均衡问题正常样本多故障样本少严重故障样本多早期故障样本少。传统一维CNN通常只利用单测点振动信号传感器之间缺乏信息交互。如果把轴承座上的多个加速度计、电流信号、温度信号都建模成图节点用GCN做聚合本质上是把多源信息融合和故障诊断合在了一个模型里。对于“加工产线工业机器人内部轴承故障诊断”这类更细分的场景最大的门槛不是模型而是数据。产线上故障发生的概率更低标注成本更高数据往往严重缺失。我的建议是优先采用半监督GCN大量无标签的正常运行数据参与图结构学习少量故障样本只负责提供监督信号。这样做GCN的邻居聚合能力可以发挥更大价值。如果你的数据只有一个振动测点可以把一段信号用不同频率范围分解成若干子带把子带作为图节点构建频带之间的关联图。6.3 论文投稿、数据集与“复现门槛”很多刚入行的同学会关心这类工作该往哪里投。故障诊断方向的研究从方法创新程度和数据工程扎实程度来看经常出现在机械工程、动力工程与可靠性的国际期刊上。比如Mechanical Systems and Signal Processing、Reliability Engineering System Safety、Ocean Engineering、Measurement、Journal of Sound and Vibration等分区从一区到三区都有。具体到某篇论文能被哪一级期刊接受取决于实验的完整性和创新性不能只看方法名。如果你在做船舶方向Ocean Engineering或Journal of Marine Science and Technology都是合适的参考如果偏通用方法MSSP会更有挑战性。投稿前记得去官网看最新的接受范围和分区因为每年分类会有调整。关于数据集工业场景下尤其要重视数据质量而不是数量。故障样本哪怕只有几十条只要采集条件记录完整转速、负荷、温度、采集频率、故障发生的先后过程科研价值就远大于一万条没有工况信息的散数据。需要记录每个样本对应的工况参数以便后续做跨工况测试。标注也应尽量由领域工程师完成或者复核双人独立标注可以有效降低标签噪声。如果能整理成公开数据集或者开源代码对领域整体推进的帮助会非常大。回头看这篇论文我最深的感受是图卷积网络在这里不是炫技而是被非均衡数据和多测点耦合结构自然逼出来的选择。如果你也想在自己的数据上试试这一套我的建议是从一个最简单的图开始先跑通流程再把数据增强、损失函数、图结构一个个加进去观察每次变化的增量。工程里的好方法都是这样一点点调出来的。
返回列表