化VMD與CNN-BILSTM的軸承故障診斷方法與實(shí)踐)
1. 項(xiàng)目概述與核心思路軸承故障診斷這事做設(shè)備健康管理的人都不陌生。絕大多數(shù)旋轉(zhuǎn)機(jī)械的停機(jī)事故根源都能追溯到軸承。但真正動(dòng)手做診斷時(shí)才會(huì)發(fā)現(xiàn)現(xiàn)場(chǎng)振動(dòng)信號(hào)遠(yuǎn)比課本上講的復(fù)雜背景噪聲大、故障特征微弱、工況變化快單純靠頻譜分析往往看不出來問題。這幾年深度學(xué)習(xí)的路子流行起來CNN、LSTM這類模型確實(shí)能自動(dòng)提特征可前提是你得喂給它一組像樣的輸入。這就是本項(xiàng)目的切入點(diǎn)先用信號(hào)分解算法把原始振動(dòng)信號(hào)里的故障成分剝離出來再用一個(gè)優(yōu)化算法把分解參數(shù)、模型超參數(shù)都調(diào)到合適的范圍最后交給CNN和BILSTM組成的網(wǎng)絡(luò)去完成故障分類。整個(gè)鏈路從數(shù)據(jù)預(yù)處理到模式識(shí)別是全通的。標(biāo)題里的這套組合本質(zhì)上是在解決一個(gè)很實(shí)際的痛點(diǎn)單一算法都有明顯短板。VMD分解效果好但模態(tài)數(shù)和懲罰因子這兩個(gè)參數(shù)要靠人肉試錯(cuò)麻雀搜索算法收斂快但前期容易扎堆、后期容易掉進(jìn)局部最優(yōu)CNN擅長(zhǎng)抓局部特征卻照顧不到振動(dòng)信號(hào)在時(shí)間維度的前后依賴關(guān)系BILSTM正好補(bǔ)上時(shí)序建模這塊但參數(shù)又多又敏感。于是就有了融合魚鷹策略和柯西變異的麻雀算法OCSSA——用它去優(yōu)化VMD的參數(shù)再把分解后的分量整理成適合網(wǎng)絡(luò)訓(xùn)練的特征輸入同時(shí)把CNN-BILSTM的超參數(shù)也一并尋優(yōu)。這套流水線放在公開的標(biāo)準(zhǔn)軸承故障數(shù)據(jù)集上驗(yàn)證Matlab實(shí)現(xiàn)單機(jī)就能跑復(fù)現(xiàn)門檻不高。適合誰來參考兩類人。一類是做故障診斷、設(shè)備狀態(tài)監(jiān)測(cè)的研究者或工程師想找個(gè)能落地的完整框架而不是只看論文里的公式推導(dǎo)。另一類是剛接觸智能診斷的學(xué)生需要一個(gè)從信號(hào)處理到深度學(xué)習(xí)無縫銜接的示例程序搞清楚每個(gè)模塊到底在干什么、參數(shù)怎么聯(lián)動(dòng)。這篇內(nèi)容不適合那種只想一步到位、跑通就萬事大吉的人因?yàn)橹虚g任何一個(gè)環(huán)節(jié)沒對(duì)齊結(jié)果都可能差出幾個(gè)百分點(diǎn)。2. 整體架構(gòu)與控制變量設(shè)計(jì)2.1 為什么是“優(yōu)化VMD CNN-BILSTM”而不是別的組合先聊VMD。VMD的全稱是變分模態(tài)分解它和EMD最大的區(qū)別是EMD是遞歸篩選VMD是整體求解約束變分問題能把信號(hào)分解成指定數(shù)量的有限帶寬模態(tài)。它的兩個(gè)核心參數(shù)——模態(tài)分解數(shù)K和懲罰因子alpha——直接決定分解效果。K取小了多個(gè)頻率成分?jǐn)D在一個(gè)模態(tài)里故障特征混在一起K取大了模態(tài)過于破碎分解出虛假分量白噪聲被拆成好幾條。alpha控制帶寬alpha越大模態(tài)帶寬越窄反之越寬。這兩個(gè)參數(shù)如果靠人工試一組信號(hào)還好辦遇到幾十組不同負(fù)載、不同故障類型的樣本試到懷疑人生。再說分類網(wǎng)絡(luò)。純CNN能提取局部特征但振動(dòng)信號(hào)是時(shí)間序列故障沖擊在時(shí)序上是有先后關(guān)聯(lián)的。BILSTM從兩個(gè)方向捕捉時(shí)間依賴比單向LSTM的信息利用更充分。把CNN當(dāng)作特征前置提取器把BILSTM當(dāng)作時(shí)序推理器再用全連接層輸出分類概率這個(gè)搭配在軸承故障診斷里已經(jīng)是被反復(fù)驗(yàn)證有效的組合。那為什么不直接用端到端的深度學(xué)習(xí)讓網(wǎng)絡(luò)自己從原始波形里學(xué)理論上可以但實(shí)際工程里有個(gè)問題原始信號(hào)里大量能量集中在工頻和噪聲上故障特征頻帶的能量占比很低網(wǎng)絡(luò)很容易學(xué)偏。先用VMD把信號(hào)按頻帶拆開等于先做了一次物理意義上的特征增強(qiáng)把微弱故障成分從強(qiáng)背景里撈出來再交給網(wǎng)絡(luò)去學(xué)收斂難度和樣本需求量都會(huì)明顯下降。2.2 OCSSA優(yōu)化器在整個(gè)流程中的位置這套方法里優(yōu)化器扮演兩個(gè)角色。第一個(gè)角色是VMD參數(shù)尋優(yōu)用OCSSA搜索K和alpha的最優(yōu)組合適應(yīng)度函數(shù)一般選包絡(luò)熵、排列熵或者兩者的組合。包絡(luò)熵越小說明分解出來的模態(tài)周期性沖擊越明顯、噪聲越少拿它當(dāng)優(yōu)化目標(biāo)很直觀。第二個(gè)角色是CNN-BILSTM超參數(shù)尋優(yōu)包括卷積核數(shù)量、池化方式、LSTM隱藏單元數(shù)、學(xué)習(xí)率、正則化系數(shù)等。這里有個(gè)容易踩坑的點(diǎn)很多人把VMD參數(shù)優(yōu)化和網(wǎng)絡(luò)超參優(yōu)化混在一起做試圖用一個(gè)優(yōu)化器一把梭。實(shí)際效果往往不好。因?yàn)閂MD的適應(yīng)度評(píng)價(jià)是信號(hào)處理層面的一次評(píng)價(jià)只要幾毫秒到幾十毫秒而網(wǎng)絡(luò)超參的適應(yīng)度評(píng)價(jià)要完整訓(xùn)練一個(gè)模型動(dòng)輒幾十秒甚至幾分鐘。把兩類問題放在同一個(gè)搜索空間里尺度完全不對(duì)等優(yōu)化器很容易被某個(gè)維度帶偏。所以項(xiàng)目里比較穩(wěn)妥的做法是分兩個(gè)階段先固定網(wǎng)絡(luò)結(jié)構(gòu)優(yōu)化VMD參數(shù)確定好信號(hào)分解方案再固定VMD參數(shù)把精力放在網(wǎng)絡(luò)超參尋優(yōu)上。2.3 融合魚鷹策略與柯西變異的改進(jìn)邏輯麻雀搜索算法SSA是2020年前后提出的一種群智能優(yōu)化算法把種群分為發(fā)現(xiàn)者、加入者和警戒者三種角色。發(fā)現(xiàn)者負(fù)責(zé)全局探索加入者跟隨發(fā)現(xiàn)者覓食警戒者負(fù)責(zé)發(fā)現(xiàn)危險(xiǎn)并發(fā)出預(yù)警。這個(gè)分工機(jī)制在不少優(yōu)化問題里表現(xiàn)不錯(cuò)但有兩個(gè)毛病一是在迭代早期容易陷入“過度聚集”所有麻雀迅速朝某個(gè)局部最優(yōu)區(qū)域靠攏種群多樣性崩得很快二是后期收斂到局部最優(yōu)時(shí)缺乏有效的逃逸機(jī)制一旦跳不出來精度就鎖死了。魚鷹優(yōu)化策略借鑒的是魚鷹捕魚時(shí)的俯沖行為簡(jiǎn)單說就是在迭代中給個(gè)體增加一個(gè)“大范圍跳躍搜索”的機(jī)會(huì)類似于在當(dāng)前位置附近重新做一次更廣的鄰域探索。把這種機(jī)制融合進(jìn)麻雀算法的發(fā)現(xiàn)者更新公式里可以在前期保持更好的種群多樣性減少早熟收斂的概率??挛髯儺悇t是經(jīng)典的擾動(dòng)手段??挛鞣植急雀咚狗植几芭治病币簿褪钦f它有更大的概率產(chǎn)生偏離均值較遠(yuǎn)的隨機(jī)數(shù)。當(dāng)麻雀?jìng)€(gè)體陷入局部最優(yōu)時(shí)用柯西變異去沖擊當(dāng)前位置相當(dāng)于給搜索方向加一個(gè)“重踢”動(dòng)作踢得好就能越出局部陷阱。兩者配合下來的實(shí)際效果就是在收斂速度和尋優(yōu)精度之間找到一個(gè)更好的平衡點(diǎn)這也是為什么標(biāo)題里稱它為OCSSA。注意改進(jìn)優(yōu)化算法在學(xué)術(shù)研究里很討巧但工程落地上要清醒一點(diǎn)。OCSSA的收益主要體現(xiàn)在VMD參數(shù)尋優(yōu)這類低維問題上維度越高、評(píng)價(jià)越貴改進(jìn)帶來的增益越不明顯。放到本項(xiàng)目里它的核心價(jià)值是讓整套流程能夠自動(dòng)跑通而不是換來一個(gè)驚艷的精度數(shù)字。3. 數(shù)據(jù)準(zhǔn)備與信號(hào)預(yù)處理細(xì)節(jié)3.1 標(biāo)準(zhǔn)軸承數(shù)據(jù)集的使用口徑項(xiàng)目驗(yàn)證用的是行業(yè)內(nèi)廣泛采用的標(biāo)準(zhǔn)軸承故障數(shù)據(jù)通常由電機(jī)驅(qū)動(dòng)端和風(fēng)扇端的加速度傳感器采集覆蓋正常、滾動(dòng)體故障、內(nèi)圈故障、外圈故障等典型狀態(tài)每種狀態(tài)下又細(xì)分不同損傷直徑和不同負(fù)載工況。需要說明的是公開數(shù)據(jù)的原始格式是mat文件每個(gè)文件對(duì)應(yīng)一個(gè)采樣工況采樣頻率常見的有12k和48k兩個(gè)檔位。使用前要先把文件按故障類型和損傷尺寸分類整理建立標(biāo)簽。這里有一個(gè)經(jīng)常被忽略的細(xì)節(jié)不同負(fù)載下采集的數(shù)據(jù)信噪比差異很大。如果簡(jiǎn)單地把所有負(fù)載的數(shù)據(jù)混在一起訓(xùn)練模型會(huì)學(xué)到負(fù)載信息而非故障信息如果只用單一負(fù)載泛化能力又差。合理做法是選擇同一負(fù)載下的數(shù)據(jù)進(jìn)行訓(xùn)練與測(cè)試或者采用跨負(fù)載的遷移驗(yàn)證方案。在實(shí)際項(xiàng)目中建議先做一次數(shù)據(jù)可視化把原始波形和頻譜打印出來看一眼確認(rèn)數(shù)據(jù)本身質(zhì)量再進(jìn)入后續(xù)流程。3.2 樣本切片、歸一化與訓(xùn)練集劃分原始振動(dòng)信號(hào)是連續(xù)的長(zhǎng)序列不能直接整段丟給網(wǎng)絡(luò)訓(xùn)練。常見的做法是滑窗切片設(shè)置窗口長(zhǎng)度和步長(zhǎng)從每段連續(xù)信號(hào)中切出若干樣本。窗口長(zhǎng)度怎么定要覆蓋至少幾個(gè)故障沖擊周期。以常用的軸承數(shù)據(jù)為例轉(zhuǎn)速約1730轉(zhuǎn)/分時(shí)滾動(dòng)體通過頻率在幾十到一百赫茲左右采樣率12k下一個(gè)沖擊周期大約對(duì)應(yīng)120到300個(gè)采樣點(diǎn)窗口長(zhǎng)度取1024或2048都比較合理。步長(zhǎng)一般取窗口的一半保證相鄰樣本間有一定的重疊提升樣本數(shù)量同時(shí)保留時(shí)序相關(guān)性。切片之后要做歸一化。振動(dòng)信號(hào)幅值在不同工況下波動(dòng)很大不歸一化的話網(wǎng)絡(luò)訓(xùn)練很容易被大數(shù)值樣本主導(dǎo)。常用的方式是Z-score歸一化即減去均值、除以標(biāo)準(zhǔn)差把每個(gè)樣本映射到零均值、單位方差的分布上。這里要特別留意歸一化參數(shù)必須在訓(xùn)練集上計(jì)算然后沿用同樣的參數(shù)處理驗(yàn)證集和測(cè)試集。如果對(duì)整個(gè)數(shù)據(jù)集統(tǒng)一做歸一化會(huì)把測(cè)試集信息泄露給訓(xùn)練過程得到的測(cè)試指標(biāo)是虛高的。訓(xùn)練集和測(cè)試集的劃分也不能隨意。因?yàn)榛瑒?dòng)切片會(huì)引入相鄰樣本的高度相似性如果劃分時(shí)不做任何處理訓(xùn)練集和測(cè)試集里很可能出現(xiàn)來自同一時(shí)間段的樣本模型等于提前見過答案。穩(wěn)妥的做法是先按數(shù)據(jù)文件劃分每個(gè)文件里的樣本要么全在訓(xùn)練集要么全在測(cè)試集再按故障類型保持類別比例均衡。項(xiàng)目里常用8:2的比例或者按不同負(fù)載做跨工況驗(yàn)證。4. OCSSA-VMD核心環(huán)節(jié)的實(shí)現(xiàn)4.1 適應(yīng)度函數(shù)的選擇邏輯OCSSA在搜索VMD參數(shù)時(shí)適應(yīng)度函數(shù)的選擇直接決定了優(yōu)化方向。前面提到包絡(luò)熵這里展開說一下。包絡(luò)熵的計(jì)算流程是對(duì)某個(gè)模態(tài)信號(hào)做希爾伯特變換得到解析信號(hào)的幅值包絡(luò)把包絡(luò)歸一化后計(jì)算信息熵。如果包絡(luò)是平坦的、雜亂無章的熵值就高如果包絡(luò)呈現(xiàn)明顯的沖擊脈沖形態(tài)熵值就低。故障軸承的振動(dòng)信號(hào)經(jīng)過合適的VMD分解后故障相關(guān)的模態(tài)應(yīng)當(dāng)表現(xiàn)出清晰的沖擊特征所以包絡(luò)熵可以作為衡量分解質(zhì)量的有效指標(biāo)。實(shí)際應(yīng)用中直接對(duì)全部模態(tài)的包絡(luò)熵求和作為適應(yīng)度有時(shí)會(huì)有問題某個(gè)模態(tài)包絡(luò)熵很低但其他模態(tài)熵很高總分可能被平均化。作者們常用的改進(jìn)做法是取所有模態(tài)包絡(luò)熵的最小值或者按能量權(quán)重加權(quán)求和。另一種思路是引入峭度指標(biāo)沖擊成分越明顯峭度越高可以和包絡(luò)熵做一個(gè)復(fù)合適應(yīng)度函數(shù)。這個(gè)選擇沒有絕對(duì)標(biāo)準(zhǔn)關(guān)鍵是和你要提取的故障特征對(duì)齊。如果目標(biāo)是提取沖擊特征包絡(luò)熵和峭度組合就很合適如果目標(biāo)是分解后信號(hào)的平穩(wěn)性排列熵更合適。實(shí)操中建議做一個(gè)小腳本把OCSSA每一代的適應(yīng)度變化曲線打印出來。這條曲線如果在前10代就斷崖式下降說明搜索空間定義或者參數(shù)邊界設(shè)置有問題如果一直平坦不下探說明初始種群分布太集中需要調(diào)大種群規(guī)?;虺跏挤秶?.2 OCSSA優(yōu)化VMD參數(shù)的具體實(shí)施步驟在Matlab里實(shí)現(xiàn)時(shí)整個(gè)過程可以拆成五個(gè)步驟。第一步初始化OCSSA參數(shù)。種群規(guī)模N取20到30最大迭代次數(shù)T取30到50問題維度是2維對(duì)應(yīng)K和alpha。K的搜索范圍建議取[2, 10]alpha的搜索范圍取[100, 3000]注意這里alpha是連續(xù)變量K是整數(shù)變量在位置更新后要做取整處理。第二步初始化種群。在搜索范圍內(nèi)隨機(jī)生成N組(K, alpha)候選解每組候選解都要執(zhí)行一次VMD分解和適應(yīng)度評(píng)估記錄全局最優(yōu)位置和適應(yīng)度。這里每執(zhí)行一次VMD都要調(diào)用一次vmd函數(shù)Matlab內(nèi)置函數(shù)在R2019a之后就能直接使用老版本需要自己寫實(shí)現(xiàn)。VMD的輸入除了信號(hào)和參數(shù)外還有噪聲容差tau和DC分量條件一般不需要優(yōu)化保持默認(rèn)即可。第三步按照OCSSA的更新機(jī)制迭代。這一步是核心差異點(diǎn)。麻雀發(fā)現(xiàn)者的位置更新在標(biāo)準(zhǔn)SSA中是一個(gè)指數(shù)衰減的公式OCSSA在保留這一機(jī)制的同時(shí)對(duì)部分個(gè)體引入魚鷹策略的鄰域跳躍以當(dāng)前個(gè)體為中心在給定半徑內(nèi)隨機(jī)生成新位置如果適應(yīng)度更優(yōu)則替換。同時(shí)當(dāng)某個(gè)個(gè)體的適應(yīng)度連續(xù)若干代沒有改善時(shí)用柯西分布生成一個(gè)隨機(jī)擾動(dòng)向量疊加到當(dāng)前位置上擾動(dòng)幅度隨迭代次數(shù)遞減。這樣可以保證后期仍有逃脫局部最優(yōu)的能力。第四步收斂判斷。如果達(dá)到最大迭代次數(shù)或者全局最優(yōu)適應(yīng)度在連續(xù)多代內(nèi)變化小于設(shè)定閾值就停止搜索。輸出最優(yōu)K和alpha。第五步確定VMD參數(shù)后跑一次最終分解保存各模態(tài)分量同時(shí)把分解后的信號(hào)和原始信號(hào)的頻譜對(duì)比圖輸出用于人工核驗(yàn)分解效果。4.3 VMD分解后特征怎么組織優(yōu)化得到最優(yōu)K和alpha后對(duì)每段原始樣本做VMD分解會(huì)得到K個(gè)IMF分量。這里面臨一個(gè)選擇是全部K個(gè)分量都送入網(wǎng)絡(luò)還是挑選部分分量如果全部送入輸入通道數(shù)變成K會(huì)把噪聲模態(tài)也一起喂給模型增加干擾。更常見的方案是按峭度和相關(guān)系數(shù)挑選出最能代表故障特征的兩個(gè)或三個(gè)分量。相關(guān)系數(shù)是模態(tài)與原始信號(hào)的線性相關(guān)度峭度衡量沖擊性。比如選峭度最大的前2個(gè)分量加上能量占比最高的1個(gè)分量組合成一個(gè)多通道輸入。多通道輸入怎么組織因?yàn)镃NN的輸入要求是三維張量形狀是(樣本數(shù), 特征長(zhǎng)度, 通道數(shù))。把選出的分量按時(shí)間對(duì)齊每個(gè)分量的長(zhǎng)度等于樣本長(zhǎng)度通道維度放不同的分量。這樣CNN的卷積核可以同時(shí)跨通道提取特征相當(dāng)于把不同頻帶的信息做了一次融合。這個(gè)做法的好處是保留了不同模態(tài)間的互補(bǔ)信息比單純拼接成一維長(zhǎng)向量更利于CNN捕捉頻帶間的相關(guān)模式。5. CNN-BILSTM模型結(jié)構(gòu)與Matlab實(shí)現(xiàn)要點(diǎn)5.1 網(wǎng)絡(luò)各層的作用與參數(shù)選擇整個(gè)網(wǎng)絡(luò)按照“卷積特征提取—雙向時(shí)序建?!B接分類”的路線組織。第一塊是CNN部分。建議先用兩層卷積第一層卷積核尺寸大一點(diǎn)比如32或64用于捕捉振動(dòng)波形中的局部沖擊形態(tài)第二層卷積核尺寸小一點(diǎn)比如3或5用于在第一層特征基礎(chǔ)上做細(xì)粒度的模式提取。每層卷積后接BatchNorm和ReLU再接一個(gè)最大池化。池化窗口大小取2或4步子別邁太大否則會(huì)丟失時(shí)序分辨率。卷積核數(shù)量不需要貪多64到128就夠用了數(shù)據(jù)量不大時(shí)卷積核過多反而容易過擬合。第二塊是BILSTM部分。把CNN輸出的特征圖展平成一維特征序列然后送入雙向LSTM層。BILSTM的核心思想是每個(gè)時(shí)間步同時(shí)從前向和后向兩個(gè)方向讀取信息輸出的隱狀態(tài)是兩個(gè)方向的拼接。隱藏單元數(shù)一般在32到128之間太小記不住長(zhǎng)距離依賴太大訓(xùn)練成本高且容易過擬合。bidirectionalLSTM層在Matlab里直接用bidirectionalLSTM(numHiddenUnits)創(chuàng)建OutputMode選sequence這樣每個(gè)時(shí)間步都輸出后續(xù)可以再接一層LSTM或直接做全局池化。第三塊是全連接分類部分。BILSTM的輸出經(jīng)過一個(gè)全連接層映射到類別數(shù)Softmax層做概率輸出。分類層用classificationLayer。為防止過擬合在全連接層前加Dropout層丟棄率取0.3到0.5。LSTM層內(nèi)部其實(shí)也可以用dropout參數(shù)控制但Matlab的bidirectionalLSTM不支持顯式指定dropout需要手動(dòng)在層間加dropoutLayer。5.2 訓(xùn)練選項(xiàng)與優(yōu)化器設(shè)置訓(xùn)練階段有幾個(gè)參數(shù)需要特別重視。最大輪數(shù)epochs一般取30到60。數(shù)據(jù)量不大時(shí)輪數(shù)太多容易過擬合太少則收斂不徹底。初始學(xué)習(xí)率取0.001到0.01優(yōu)化器用Adam。MiniBatchSize取32或64太大內(nèi)存壓力大且收斂方向不穩(wěn)定太小則梯度噪聲大。這里有個(gè)工程細(xì)節(jié)驗(yàn)證集在訓(xùn)練過程中的損失曲線是判斷是否過擬合的第一手證據(jù)。訓(xùn)練損失持續(xù)下降、驗(yàn)證損失卻掉頭上升說明模型開始背訓(xùn)練集了。此時(shí)應(yīng)該提前停止或者調(diào)低學(xué)習(xí)率。在Matlab里可以通過trainingOptions設(shè)置ValidationPatience參數(shù)連續(xù)若干個(gè)輪次驗(yàn)證損失不下降就自動(dòng)停止訓(xùn)練。剛跑實(shí)驗(yàn)時(shí)別急著上大網(wǎng)絡(luò)。先用一個(gè)小規(guī)模的快速實(shí)驗(yàn)比如把CNN層數(shù)減半、把隱藏單元降到16跑通整個(gè)數(shù)據(jù)流確認(rèn)維度匹配、類別標(biāo)簽沒有問題再逐步放大模型。這一步能省下大量調(diào)試時(shí)間。5.3 特征可視化與中間輸出檢查代碼寫完后先別急著看最終準(zhǔn)確率。把模型在中間層的輸出可視化出來往往能發(fā)現(xiàn)隱藏問題。比如把第一層卷積輸出的特征圖畫出來如果所有樣本的特征圖長(zhǎng)得幾乎一樣說明卷積核沒有有效激活通常是學(xué)習(xí)率太大或者輸入歸一化出了問題。再把BILSTM某個(gè)時(shí)間步的隱狀態(tài)畫出來看不同故障類別是否有可分性。這些檢查看起來麻煩但實(shí)際價(jià)值很大比盲目調(diào)參高效得多。6. 實(shí)驗(yàn)驗(yàn)證與結(jié)果分析方向6.1 實(shí)驗(yàn)方案設(shè)計(jì)項(xiàng)目采用公開的標(biāo)準(zhǔn)軸承故障數(shù)據(jù)集做驗(yàn)證。數(shù)據(jù)包含正常、內(nèi)圈故障、外圈故障、滾動(dòng)體故障四種狀態(tài)每種狀態(tài)再按損傷程度細(xì)分類別總數(shù)一般為10類左右。每個(gè)類別取足夠樣本量例如每類樣本數(shù)在200到500之間保證訓(xùn)練與測(cè)試的類別均衡。整體流程按前面章節(jié)描述的“OCSSA優(yōu)化VMD—特征構(gòu)建—CNN-BILSTM訓(xùn)練”執(zhí)行。實(shí)驗(yàn)設(shè)計(jì)上建議做三組對(duì)比第一組是標(biāo)準(zhǔn)SSA優(yōu)化VMD CNN-BILSTM用來驗(yàn)證魚鷹和柯西變異帶來的改進(jìn)效果第二組是固定VMD參數(shù) CNN-BILSTM用來驗(yàn)證參數(shù)優(yōu)化的價(jià)值第三組是完整OCSSA-VMD-CNN-BILSTM作為最終方案。三組實(shí)驗(yàn)保持網(wǎng)絡(luò)結(jié)構(gòu)和訓(xùn)練選項(xiàng)完全一致只改變前置環(huán)節(jié)這樣對(duì)比結(jié)果才干凈。除了分類準(zhǔn)確率還要關(guān)注幾個(gè)輔助指標(biāo)精確率、召回率、F1值以及混淆矩陣。準(zhǔn)確率在類別均衡時(shí)還能說明問題但如果是故障程度細(xì)分的小類別分類樣本不均衡幾乎是必然的只看準(zhǔn)確率容易被高樣本量的類別帶跑。F1值和混淆矩陣能暴露模型到底在哪些容易混淆的對(duì)子上犯錯(cuò)——通常是輕度故障和正常狀態(tài)之間或者滾動(dòng)體故障和內(nèi)外圈故障之間。6.2 預(yù)期結(jié)果與敏感性分析完整的OCSSA-VMD-CNN-BILSTM方案在標(biāo)準(zhǔn)軸承數(shù)據(jù)上分類準(zhǔn)確率一般能夠達(dá)到99%以上。這個(gè)數(shù)字看著漂亮但要提醒一句這類公開數(shù)據(jù)集的實(shí)驗(yàn)環(huán)境相對(duì)干凈樣本差異主要來自故障類型本身所以深度學(xué)習(xí)模型很容易學(xué)到強(qiáng)判別特征。真正到了現(xiàn)場(chǎng)數(shù)據(jù)信噪比低、工況復(fù)雜、故障類型混合準(zhǔn)確率通常會(huì)明顯下滑。項(xiàng)目里能做到99%以上說明框架本身沒有問題但不要把這個(gè)數(shù)字當(dāng)作工業(yè)落地的直接預(yù)期。敏感性分析是一個(gè)容易被忽視的加分項(xiàng)。做法是固定其他條件單獨(dú)改變某個(gè)參數(shù)觀察結(jié)果的變化幅度。比如把VMD的K參數(shù)在最優(yōu)值附近上下各取幾個(gè)值把CNN卷積核數(shù)量做增減記錄測(cè)試準(zhǔn)確率。如果結(jié)果波動(dòng)很小說明方案魯棒如果準(zhǔn)確率劇烈抖動(dòng)說明當(dāng)前配置處于一個(gè)很陡峭的參數(shù)區(qū)域需要引起注意。這部分分析雖然會(huì)多花半天時(shí)間但能讓研究結(jié)論的底氣足很多。7. 常見問題與排查技巧實(shí)錄7.1 VMD分解結(jié)果異常怎么辦VMD分解結(jié)果不對(duì)勁的表現(xiàn)通常有三種一是分解出的模態(tài)嚴(yán)重重疊幾個(gè)分量頻率范圍高度重合二是某個(gè)模態(tài)變成了純?cè)肼暱床怀鋈魏挝锢砗x三是模態(tài)數(shù)量小于設(shè)置的K值出現(xiàn)空模態(tài)。第一種情況多半是alpha值設(shè)得太小帶寬過寬導(dǎo)致相鄰模態(tài)中心頻率互相侵占。解決辦法是加大alpha搜索范圍上限或者在OCSSA適應(yīng)度函數(shù)里增加模態(tài)重疊懲罰項(xiàng)。第二種情況通常發(fā)生在K值設(shè)置大于信號(hào)有效成分個(gè)數(shù)時(shí)多出來的模態(tài)會(huì)去擬合噪聲。如果OCSSA優(yōu)化出來的K偏大查看一下是不是柯西變異的擾動(dòng)幅度過大導(dǎo)致搜索過程不穩(wěn)定。第三種情況是VMD已知的退化現(xiàn)象通常表現(xiàn)為兩個(gè)模態(tài)中心頻率最終收斂到了同一個(gè)值附近實(shí)際有效模態(tài)減少。此時(shí)除了調(diào)整參數(shù)外可以適當(dāng)調(diào)大噪聲容差tau或者減少輸入信號(hào)的直流分量。7.2 訓(xùn)練過程中損失不下降或梯度爆炸Loss一直不降最優(yōu)先排查的是學(xué)習(xí)率過大導(dǎo)致震蕩不收斂過小導(dǎo)致更新緩慢看起來就像沒學(xué)。其次檢查輸入數(shù)據(jù)特征值范圍是否過大、標(biāo)簽是否從1開始且連續(xù)、訓(xùn)練集和驗(yàn)證集是否發(fā)生了數(shù)據(jù)泄露。還有一個(gè)在日常復(fù)盤里多次遇到的原因就是樣本里混入了空值或者NaN導(dǎo)致梯度傳播中斷。建議在數(shù)據(jù)預(yù)處理后加一條斷言語句檢查輸入張量中是否存在非有限值。梯度爆炸在LSTM類模型里更常見表現(xiàn)為loss突然跳到Inf或者NaN。常見原因是序列長(zhǎng)度過長(zhǎng)、梯度累積過大而BILSTM由于前后向疊加梯度幅值比單向LSTM更大。解決辦法在訓(xùn)練選項(xiàng)里設(shè)置梯度閾值GradientThreshold為1或2這是最簡(jiǎn)單有效的保護(hù)機(jī)制同時(shí)檢查學(xué)習(xí)率是否需要調(diào)低。7.3 模型準(zhǔn)確率高但實(shí)際測(cè)試效果差這是最隱蔽也最讓人頭疼的問題。準(zhǔn)確率高說明模型在測(cè)試集上記憶良好實(shí)際效果差說明模型沒有學(xué)到可泛化的故障特征。排查思路按優(yōu)先級(jí)排列第一檢查數(shù)據(jù)劃分是否合理。前面提到的“按文件劃分”一定要落實(shí)哪怕測(cè)試集損失0.5個(gè)百分點(diǎn)的準(zhǔn)確率也比虛假的99.9%有價(jià)值。第二檢查VMD分解參數(shù)是否針對(duì)訓(xùn)練數(shù)據(jù)過擬合。OCSSA是在訓(xùn)練樣本上優(yōu)化出來的參數(shù)如果訓(xùn)練樣本和測(cè)試樣本來自不同工況或不同時(shí)刻最優(yōu)參數(shù)可能并不匹配測(cè)試數(shù)據(jù)。跨工況驗(yàn)證時(shí)這一點(diǎn)經(jīng)常暴露無遺。第三看模型在混淆矩陣上的犯錯(cuò)模式。如果錯(cuò)誤集中在某一對(duì)故障類型之間而且和人工頻譜分析看到的現(xiàn)象一致說明模型學(xué)到的是物理上真實(shí)存在的相似性這個(gè)結(jié)果是可信的。8. 從實(shí)驗(yàn)到落地的個(gè)人體會(huì)整套代碼跑通之后我個(gè)人的體會(huì)是這類“優(yōu)化算法信號(hào)分解深度學(xué)習(xí)”的組合框架核心難點(diǎn)不在于某個(gè)單獨(dú)模塊的實(shí)現(xiàn)而在于工程鏈路的銜接。VMD的參數(shù)空間、樣本切片的長(zhǎng)度、網(wǎng)絡(luò)的結(jié)構(gòu)深度三者之間是環(huán)環(huán)相扣的關(guān)系。VMD分解質(zhì)量差網(wǎng)絡(luò)再怎么調(diào)也白搭網(wǎng)絡(luò)結(jié)構(gòu)不合適VMD分解得再漂亮也體現(xiàn)不出來。所以調(diào)試順序建議從前往后先用固定參數(shù)跑通全流程再引入OCSSA逐步優(yōu)化每一層改動(dòng)都做一次對(duì)比實(shí)驗(yàn)。還有一個(gè)心得想分享。很多人看到“優(yōu)化算法”就覺得越復(fù)雜越好恨不得把各種改進(jìn)策略全塞進(jìn)去。實(shí)際上OCSSA里魚鷹策略和柯西變異的引入是在標(biāo)準(zhǔn)麻雀算法的兩個(gè)缺陷處做針對(duì)性修補(bǔ)有明確的目的性而不是為了炫技。做這類研究如果改進(jìn)策略說不出是針對(duì)哪個(gè)具體缺陷那這個(gè)改進(jìn)大概率沒有實(shí)際價(jià)值。最后說一句關(guān)于Matlab的版本問題。代碼里用到了vmd函數(shù)、bidirectionalLSTM層、trainingOptions中的ValidationPatience這些功能在不同版本里接口略有差異。建議在代碼頭部加一個(gè)版本判斷或者至少在注釋里標(biāo)明版本信息。遇到過不止一次因?yàn)榘姹窘涌诓患嫒輰?dǎo)致的報(bào)錯(cuò)不是算法問題純粹是環(huán)境問題在這個(gè)坑上摔過的人應(yīng)該都有印象。整套方案跑完從數(shù)據(jù)輸入到分類輸出每個(gè)環(huán)節(jié)的代碼和參數(shù)我都建議順手記錄在一個(gè)說明文檔里。這不是給誰看的形式工作而是隔兩個(gè)月再回頭看這套代碼時(shí)能快速想起當(dāng)初為什么把a(bǔ)lpha范圍設(shè)為[100, 3000]、為什么BILSTM隱藏單元取64。這種過程記錄在科研和工程里都是最值錢的沉淀。