读到一篇发表在Advanced Engineering Informatics上的论文,讨论的是机械系统故障诊断中一个非常现实的问题,极度不平衡数据下的故障分类。文章设定了一个相当苛刻的场景:健康样本有400个,每个故障类别却只有5个训练样本。在这种80:1的不平衡比例下,怎么让CNN还能正常工作?
读完之后觉得这个思路很有意思,作者没有盲目堆叠复杂模型,而是回到信号本身,利用小波包分解在频域做文章,设计了一种叫"小波包扭曲"(Wavelet Packet Distortion)的数据增强方法。这篇博客是我的学习笔记,尽量用比较直白的方式把论文的核心思想梳理一遍。
论文信息
标题:Highly imbalanced fault diagnosis of mechanical systems based on wavelet packet distortion and convolutional neural networks
作者:Minghang Zhao, Xuyun Fu, Yongjian Zhang, Linghui Meng, Baoping Tang
期刊:Advanced Engineering Informatics (AEI)
年份:2022
DOI:10.1016/j.aei.2022.101535
一、这个研究要解决什么问题?
1.1 为什么机械故障诊断很重要?
航空液压泵是飞机液压系统的"心脏",起落架收放、舵面操纵、刹车系统都靠它提供动力。论文里提到,这类设备在恶劣环境下同时包含旋转和往复运动部件,故障风险较高。一旦在飞行中出现问题,后果直接关系到飞行安全。
所以,在早期阶段发现故障征兆,是个很有实际价值的研究方向。
1.2 现有方法各有各的难处
论文把已有的故障诊断方法分成了三大类:
第一类:基于物理模型的方法
这类方法根据物理规律建立系统的故障或退化模型,通过模型预测行为。比如用改进的啮合刚度计算模型来模拟齿轮裂纹状态。但问题是,大型机械系统的结构太复杂了,物理模型很难做到真正精确。论文里说,这类方法大多只适用于轴承、齿轮这类简单部件,对整机级别的系统就力不从心了。
第二类:基于信号分析的方法
这类方法试图从监测信号中捕捉故障特征,比如用Hilbert解调、倒谱分析、复数小波变换等来检测故障。但问题在于,监测数据里往往含有大量噪声,而噪声和故障特征都会随工况变化,传统信号分析方法经常"看不出来"故障。
第三类:数据驱动方法
这类方法用历史监测数据训练自动分类模型,然后用训练好的模型去诊断故障。研究者不需要把故障的物理机理搞得特别清楚。近年来,各种数据驱动的故障诊断方法层出不穷。但这类方法有一个前提,需要大量带标签的训练数据。
1.3 核心矛盾:数据不够
这就引出了本文要解决的核心矛盾: 深度学习模型需要大量数据才能训练好。
但关键设备本身就很少出故障,即使出了故障,很多企业也没有好好保存故障数据;
做故障模拟实验成本又太高。
结果就是:健康样本可能有几百上千个,各类故障样本可能只有几个。论文里设定的场景更极端,每个故障类别只给5个训练样本。
在这种极度不平衡的情况下,模型会"学歪",它发现把所有样本都判成健康类就能获得很高的准确率,于是就这么干了。这样一来,故障样本基本就全被漏掉了。
二、已有方法为什么不够用?
既然真实数据不够,自然就想到了"造数据",也就是数据增强。
2.1 传统方法的困境
简单过采样(OS):直接把少数类样本复制几份。问题是,复制出来的样本一模一样,没有任何新信息。论文实验显示,过采样+CNN的F1只有96.03%,虽然比不做处理的89.40%好不少,但仍有提升空间。
简单降采样(DS):从多数类里随机抽取和少数类一样多的样本。这样做的代价是丢弃了大量可能有用的健康样本信息。论文里DS+CNN的F1是92.48%,反而比过采样差。
SMOTE类方法:在少数类样本之间做线性插值生成新样本。但振动信号不像图像特征,两个振动信号之间的欧氏距离很难衡量它们的真实相似性。线性插值很可能生成物理上根本不存在的混合信号。后续研究也验证了,SMOTE在液压泵数据上的表现并不理想。
GAN类方法:生成对抗网络的思路是让生成器学会真实数据的分布,然后采样生成新样本。但在振动信号场景下,GAN有两个大问题:
一是训练不稳定。生成器和判别器之间要保持微妙的平衡,实际操作中经常出问题。
二是生成的信号可能根本不像真实的振动信号。振动信号和机械结构、转速、负载这些物理因素强相关,GAN生成的信号经常被判别器一眼就识别出来是假的。
尤其是当每个故障类别只有5个样本时,GAN几乎必然陷入模式坍塌(mode collapse),生成器只能生成一两种类型的样本,多样性严重不足。
2.2 一个基于物理直觉的关键洞察
作者抓住了两个很关键的点:
第一,故障类别信息和频率成分强相关。这个判断是有物理依据的:
轴承故障会产生特定频率的冲击响应;
齿轮故障会产生啮合频率及其边频带;
液压泵故障会产生轴频、柱塞通过频率等。
第二,既然故障信息主要在频域里,那只要保持频率成分不变,只改变幅值分布,故障类别应该不会变。
这个思路和后来一些研究的方向是一致的,有学者提出"局部小波相似性融合"(LWSF)方法,同样是基于"保持频率特性、在频域做文章"的思路来进行数据增强。
三、本文的核心创新:小波包扭曲(Wavelet Packet Distortion)
3.1 技术路线:三步走
整个流程可以概括为三个步骤:
第一步:小波包分解
把原始振动信号分解到不同频带,得到各频带的小波系数。本文用的是3层小波包分解,小波基选择的是在故障诊断领域应用很广的"DB4"小波。小波包变换可以把信号分解到多个频带,相比于普通小波变换只分解低频部分,小波包变换对高频部分也做了分解,信息保留得更完整。
第二步:随机扭曲
随机挑选一个小波包节点,把该节点的小波系数做非线性扭曲。扭曲公式是:
其中d是从预设范围内随机选取的扭曲系数。如果d接近1,扭曲后的系数和原来差不多;如果d离1越远,变化就越大。
为什么这个设计很巧妙?
关键在于,只改变幅值,不改变频率。小波包分解把信号按频带拆开,只在一个频带上做幅值扩展,其他频带不动。重构后频率成分基本保持住了,但幅值分布变了。这样既保证了故障类别不变,又引入了多样性。
第三步:小波包重构
用扭曲后的系数加上其他没改动的系数一起重构信号。因为频率信息保留在小波系数的位置中,重构后信号的频率成分基本不变。
还有一个细节:作者特意让生成样本的标准差和原始样本保持一致,因为振动信号的标准差和故障状态是密切相关的。
3.2 这个设计精妙在哪里?
我梳理了三个特别妙的地方:
第一,在频域操作,物理意义清晰
不是随便加噪声,不是瞎插值,而是有物理依据的"频率成分不变、幅值变化"。后续的LWSF方法也沿用了这个思路,通过相似性加权融合来扭曲小波包系数,同样是为了"把扭曲控制在合理范围内"。
第二,随机性带来了多样性
d是随机取的,每次生成都不一样。论文测试了不同范围的d值,发现[0.5,1.5)和[0.7,1.3)这两个范围的平均F1都达到了98.14%,显著优于不做扭曲的过采样(97.05%)。
第三,和简单过采样的本质区别
过采样就是复制粘贴,不增加任何新信息。而小波包扭曲生成的每个样本都和原始样本"相似但不同",引入了有意义的多样性,起到了正则化的作用,能有效抑制过拟合。
3.3 训练策略也有讲究
作者还做了一个很有意思的安排:不是一次性生成所有增强样本然后训练,而是每一轮重新生成。具体来说:
-
准备训练集:400个健康样本 + 每类5个故障样本
-
用扭曲方法把故障样本扩到400个,实现类别平衡
-
训练ConvNet 1个epoch
-
如果训练准确率达到100%或到了200个epoch就停止;否则重新生成故障样本,再训练1个epoch
这样做的目的是防止过拟合,每一轮生成的样本都略有不同,相当于变相增加了训练数据的多样性,模型更难"记住"某一个特定样本。
四、实验验证
4.1 非常苛刻的数据设定
实验用了航空液压泵的振动信号数据:
6个类别:1个健康 + 5个故障
每个样本128个数据点
训练集:健康类400个,每个故障类只给5个
测试集:健康类80个,每个故障类475个
这个设定确实够狠,每个故障类5个样本,即便做了数据增强,本质上还是在解决少样本学习问题。
4.2 对比方法
设置了四组对比:
CNN:直接用原始不平衡数据训练
DS+CNN:降采样,健康类也抽5个
OS+CNN:过采样,故障类复制80次
WPD+CNN:本文提出的方法
4.3 定量结果
10次重复实验的平均结果:
|---------------|--------------|--------------|--------------|----------------------|
| 指标 | CNN | DS+CNN | OS+CNN | WPD+CNN |
| F1 (%) | 89.40 ± 3.40 | 92.48 ± 2.95 | 96.03 ± 2.65 | 97.50 ± 1.74 |
| Precision (%) | 91.10 ± 2.73 | 93.40 ± 2.63 | 96.66 ± 1.88 | 97.78 ± 1.27 |
| Recall (%) | 89.52 ± 3.16 | 92.53 ± 2.97 | 96.10 ± 2.51 | 97.54 ± 1.65 |
小波包扭曲+CNN比普通CNN的F1提升了8.10个百分点,比过采样提升了1.47个百分点。这个提升幅度在少样本场景下相当可观了。
4.4 稳定性分析
从标准差来看,小波包扭曲方法的标准差(±1.74)明显小于其他方法(±2.65~±3.40),说明方法的稳定性更好。
但作者也很坦诚地指出了一个问题:小波包扭曲方法并不是每次实验都是第一。10次中有7次第一,3次略逊于OS+CNN。原因是,当随机挑选的那5个训练样本恰好不能代表该类故障的整体特征时,再好的增强方法也无力回天。这说明数据增强解决不了"训练样本本身不具代表性"的问题。
4.5 训练效率
小波包扭曲方法的训练效率也很高,每个epoch只需约8秒(包含数据增强和模型训练),一般在5个epoch左右就收敛了,总训练时间约40秒。相比之下,不做增强的CNN需要30多个epoch才能收敛。原因是增强后的数据集规模更大(2400个样本),信息更丰富,模型收敛更快。
4.6 特征可视化
用t-SNE把卷积神经网络最后一层的高维特征降到2D空间后可以看到:
CNN和DS+CNN里,F1和F2两类样本高度重叠;
OS+CNN有所改善,但仍有错分;
小波包扭曲方法的各类别分布明显更紧凑、类间分离更清晰。
这说明小波包扭曲帮助CNN学到了更有判别性的特征。
4.7 不同扭曲系数范围的对比
论文测试了5种不同的d值范围:
|--------------|-------------------------------|-------------|
| d值范围 | 平均 F 1(%) | 标准差 |
| [0.5, 1.5) | 98.14 | ±1.17 |
| [0.6, 1.4) | 97.92 | ±1.15 |
| [0.7, 1.3) | 98.14 | ±1.12 |
| [0.8, 1.2) | 97.87 | ±1.57 |
| [0.9, 1.1) | 97.47 | ±1.37 |
| None(纯过采样) | 97.05 | ±1.33 |
有意思的是,所有做过扭曲的范围都优于纯过采样。这验证了小波包扭曲引入的多样性确实比简单复制更有用。作者建议在实际应用中准备一个验证集来选择合适的数据增强范围。
五、方法的局限和未来方向
作者在论文最后很坦诚地指出了几个局限:
小波基的选择:本文直接用了"DB4"小波,但并没有严格的理论证明它是最优选择。有些其他小波函数可能更合适。作者提出未来可以研究如何选择或设计合适的小波函数,并给出理论依据。
方法的通用性:虽然作者指出小波包扭曲的思想可以推广到其他机械系统(如风力发电机、燃气轮机、民航发动机)以及其他类型的时间序列信号,但具体的实验验证仍集中在液压泵上。
六、我的思考
第一,领域知识才是真正的竞争力
小波包扭曲不是一个通用的数据增强方法,它是专门为振动信号设计的,有效性建立在"故障信息与频率成分相关"这个物理洞察之上。读这篇论文给我最大的启发是:真正有价值的算法创新,往往不是数学技巧的堆砌,而是对问题领域的深刻理解。如果作者不懂机械故障的物理机理,就不太可能想到"保持频率、只改幅值"这个设计。
第二,什么是好的数据增强?
读完这篇论文,我对数据增强有了更清晰的认识:
好的数据增强 = 保持语义不变 × 引入有效多样性
这两个维度缺一不可。过采样做到了前者但没做到后者,GAN可能做到了后者但很难保证前者。小波包扭曲在两者之间找到了一个很巧妙的平衡。
第三,不一定非要追求"最先进"的方法。
GAN比小波包扭曲"高级"得多,但在本文的场景下(每类只有5个样本),小波包扭曲反而更可靠。这提醒我:工程问题讲究的是可靠、可控、可解释,而不是算法的新潮程度。小波包扭曲每一步都有明确的物理意义,这一点比黑箱式的GAN在工业场景中更有说服力。
参考文献
1 M. Zhao, X. Fu, Y. Zhang, L. Meng, and B. Tang, "Highly imbalanced fault diagnosis of mechanical systems based on wavelet packet distortion and convolutional neural networks," Advanced Engineering Informatics, vol. 52, p. 101535, 2022.