張 鵬,李 志,邸希元
(哈爾濱理工大學 自動化學院,哈爾濱 150080)
近年來,無線傳感器網絡(WSN,wireless sensor networks)作為一種數據采集與數據處理的技術被廣泛應用[1]。WSN應用在各種復雜或者不方便工作人員進入的環境中,如核輻射環境中的安全監測系統、大規模農業應用、森林火災預警系統等。由于工作環境的復雜性以及網絡拓撲結構的動態變化,在工作過程中受到外界的干擾也更嚴重,而且WSN中的傳感器節點會受到自身體積、功耗、成本以及有限能量的限制,容易出現故障,并且單個節點的故障可能會給整個網絡性能帶來影響[2]。
在WSN中節點發生的故障大致分為兩種:第一種是硬故障,由于長時間的工作導致節點硬件部分出現故障或者硬件出廠時本就存在缺陷,導致采集到的數據屬性部分丟失或者無數據;第二種是軟故障,包括瞬時故障和永久軟故障,產生原因是節點本身能量不足或外界環境干擾,導致監測數據與正常數據存在偏差,也就是數據失真。不精確的感知數據會影響整個網絡的監測結果,如果監測信息不可靠,就無法得知監測對象的狀態,對相關研究工作產生影響[3-4]。
當網絡中的節點出現故障時需要對節點進行修復才能使節點恢復正常工作,所以準確快速的發現節點的故障并確定故障類型對保持WSN的正常工作非常重要。因此本文提出一種深度森林算法對WSN故障分類問題進行研究,并對深度森林算法進行優化以解決隨著級聯層數的加深,該算法每一層的輸入維數都會不斷增加,形成“維數災難”的問題,提高深度森林模型的分類準確率[5-6]。
深度森林是基于森林的集成學習方法[7]。受到深度學習理論和DNNs的啟發,該算法的輸入是多維特征向量,特征向量將由其兩個主要組成部分進行處理,分別是多粒度掃描和級聯森林,多粒度掃描通過處理數據之間的關系來增強數據表示的能力,級聯森林用于分類或預測。
多粒度掃描是深度森林中處理數據特征關系的結構,最重要的部分是滑動窗口[8]?;瑒哟翱谟糜趻呙柙继卣鞑⑼诰蛐蛄袛祿捻樞蜿P系,在多粒度掃描中,滑動窗口的每一步都會產生一個包含該滑動窗口中所有元素的特征子映射,并將被用于下一步的訓練,如圖1所示。

圖1 多粒度掃描結構圖
假設我們的數據有D個特征,滑動窗口大小為K(根據經驗選取可能為D/4,D/8,D/16等),每次滑動的步長為S(一般為1),滑動窗口采樣結束共可得到K維特征子樣本向量的個數P為:
P=(D-K)/S+1
(1)
接下來將上一步得到的每個子樣本都作為兩個隨機森林的輸入(包括一個普通隨機森林和一個完全隨機森林),每個森林都會輸出一個長度為C的類向量,最后將兩個森林生成的類向量進行拼接得到了本層輸出為:
M=2×((D-K)/S+1)×C
(2)
為了提高特征的有效性,使用級聯森林對多粒度掃描得出的向量進行處理最終得到結果[9]。級聯森林由許多層森林組成,每一層森林都包括不同種類的隨機森林(普通隨機森林和完全隨機森林),被用于逐層處理數據特征。級聯森林的整體多層結構如圖2所示。

圖2 級聯森林結構圖
在級聯森林中,第一層森林將多粒度掃描的輸出作為輸入,之后的每一層輸入都是由前一層處理后得到的特征向量和原始輸入(即第一層的輸入)結合構成。級聯森林中得每一層都會產生一個類向量作為其輸出。在級聯森林中每顆子樹預測樣本x屬于c類的概率可以表示為:
(3)
式中,t∈T,T是級聯森林中每一層的決策樹數量。
每個森林根據公式(4)得到樣本x的類向量:
(4)
式中,m∈M,M是級聯森林中每一層的森林數量。
根據公式(5)得到該層森林中所有森林的輸出:
(5)
式中,z∈Z,Z是級聯森林中級別的數量。根據公式(6)得到樣本x在該層森林的預測:
y(x)=max(ave(VZ(x)))
(6)
式中,max代表最大值;ave代表平均值。
產生的類向量將與多粒度掃描輸出的結果也就是原始特征向量拼接,作為下一層的輸入,表示為:
xZ←(x,VZ-1(x))
(7)
這個過程一直持續到達到終止條件,終止條件可以是達到預期精度或達到最大層數。在每次擴展一個新的級別時,使用測試集來驗證整個級聯森林的性能,如果精度沒有顯著增加,則訓練將終止。這時會得到最終的類向量,計算各種可能性的平均值,并選擇值最大的類別作為最終的分類結果。由于這一特性,級聯中的級數是自適應的,不同于許多深層神經網絡復雜而固定的模型結構,因此在不同規模的數據集下都能被廣泛應用[10]。
根據對深度森林原理的分析和式(4)以及式(5)可以得知,深度森林的每一級的輸入向量是通過將森林的前一級的類分布輸出的估計向量和初始特征向量連接起來而形成的。隨著森林層次的增加,特征向量攜帶的文本信息會不斷退化,導致分類結果不穩定。文獻[11]提出通過將每一層的輸入向量變為之前所有層輸出類的分布向量來拼接初始特征向量來解決,但是,隨著級聯層數的加深,改進后的方法每一層的輸入維數都會不斷增加,形成“維數災難”。
因此,本文提出了一種改進的深度森林方法IGcForest,并將其應用在WSN的故障分類中。降低了每一層輸入向量特征的維數,同時保持各級森林之間的連通性,即:
1)將級聯森林中每一層森林包含的兩類森林輸出的類向量分別求平均值得到減半的輸出向量,降低了每一級輸入向量特征的維數。
2)在級聯森林中的每一層向下輸出之前都先縫合之前每一層森林輸出的平均值,充分利用每一級森林的輸出結果。
改進后的深度森林分類過程如圖3所示,其中Ave代表求均值:

圖3 深度森林算法流程
改進后的深度森林分類的步驟如下:
1)將原始數據轉換為特征向量。
2)使用多粒度掃描對特征向量進行處理。通過滑動窗口得到所有特征子映射,這些子樣本都通過完全隨機森林與普通隨機森林輸出為類向量,將所有類向量拼接。
3)使用級聯森林對上一步輸出的類向量進行處理。每一層森林也包括若干普通隨機森林和完全隨機森林,在級聯的過程中每一層森林都根據之前森林的輸出結果繼續訓練,將本層的結果繼續向下傳遞,直到滿足終止條件輸出最后的分類結果。
改進后的方法綜合考慮了前一級森林分類結果的影響,既降低了每一級輸入特征的維數,又保留了每一級分類結果和初始特征向量的特征信息,接下來通過實驗驗證該改進的算法是否有效。
在Ubuntu16.04下使用Ns-3.28對WSN進行仿真模擬收集了20個節點工作三天的數據,每個普通傳感器節點間隔5分鐘采集并發送一次數據,合計15 552條數據,設置傳感器節點收集的數據屬性包括溫度、濕度以及自身電量等。仿真結束后生成.xml文件和.pacp文件,通過Netanim-3.108可以得到每個傳感器節點在運行過程中的地理位置變化、電量變化以及發送數據記錄等,通過Wireshark查看最終發送到0號和1號的數據包的具體內容,從中取出收集的數據包含溫度、濕度,如圖4~5所示。

圖4 傳感器節點數據圖

圖5 傳感器節點發送數據圖
接下來將兩部分數據進行合并得到了研究用的數據集,包括節點序號、節點地理位置、節點采集數據(時間、溫度、濕度)、節點電量共7類屬性。從中截取了一部分數據如表1所示。

表1 傳感器節點部分監測數據
我們將普通傳感器節點可能產生的故障進行分類,主要包括電源模塊、通信模塊、傳感器模塊三部分的故障:
1)當電源模塊出現了問題,便不再能保證硬件設備的正常工作,如果是低電量會導致收集的監測數據與真實數據存在偏差,如果是電源損壞會導致收集不到該序號傳感器節點的監測數據。
2)當通信模塊出現了問題,會導致監測數據未按照設定的頻率進行發送或接收,可能幾個周期內只有一次數據成功傳輸,可以表示為:

(8)
式中,da代表源節點/目的節點在單個采樣周期下正常的發送/接收數據量;db代表目的節點/源節點在單個采樣周期下實際的發送/接收數據量;D代表節點在采樣周期i到j內da與db的比值,如果大于1證明存在通信問題。
3)當傳感器模塊出現了問題,會導致采集的數據不準確或丟失,將其分為硬故障和軟故障,并轉換為數學模型。
將WSN中節點收集的數據表示為:
f(t)′=x+η
(9)
式中,f(t)表示節點在時間t處的感測值;η是即使在理想狀態下也會存在的噪聲;x為傳感器的正常讀數。
將包含故障的廣義模型表示為:
f(t)′=α+βχ+η
(10)
式中,α表示偏移值;β表示增益值。
硬故障意味著傳感器無法收集數據,例如損壞故障,影響了節點正常工作。該故障可以表示為:
f(t)′=φ,t>τ
(11)
式中,τ是發生硬故障的時間,φ為一個零集。
軟故障是指傳感器節點的數據采集和通訊功能可以正常運行,但監測數據與真實值之間存在一定誤差,軟故障又可以分為:偏移故障、恒偏差故障、停滯故障、漂移故障等,可能是瞬時故障,也可能是永久軟故障,都影響了數據準確性。傳感器模塊軟故障特征圖如圖6所示。

圖6 傳感器模塊軟故障特征圖
1)偏移故障:此故障主要是由于外界環境干擾導致的感測數據在真實數據附近波動,該故障可以表示為:
|f(t)′-f(t)|>λ
(12)
式中,λ表示感測數據的正常變化范圍最大值。
2)恒偏差故障:感測數據超出了正常范圍,這是由于傳感器單元的錯誤校準而將常數添加到預期數據導致的,該故障可以表示為:
f(t)′=a+x+η
(13)
3)停滯故障:感測數據在一定時間段內變化為零,是由于攜帶的傳感器產生故障導致的,該故障可以表示為:
f(t)′=a
(14)
4)漂移故障:感測數據與實際數據存在偏差,并且隨著時間偏差增大,該故障可以表示為:
|f(t)′-f(t)|=random(a)×(t-t0)
(15)
式中,t0表示開始出現故障的時間,增益為隨機數。
將WSN普通傳感器節點可能出現的故障分為電源低電量故障、電源損壞故障、通信故障、偏移故障、恒偏差故障、停滯故障以及漂移故障共7類故障,根據數學模型將其添加至數據集中。以2號節點收集的溫度為例,故障數據結果如圖7所示。

圖7 正常樣本與故障樣本對比圖(溫度)
為了測試算法的改進效果,將改進后的算法與原始算法進行比較,對數據進行訓練并測試。原始輸入的特征向量是7維,包括傳感器節點編號、坐標以及收集的幾種數據等,從中取出連續時間內的500條數據作為測試。算法中多粒度掃描的滑動窗口大小分別設置為2、4、6,采樣距離為1,在多粒度掃描中使用隨機森林與完全隨機森林進行訓練,每個森林包含100棵決策樹;級聯森林設置每一層包括4個森林,兩個隨機森林和兩個完全隨機森林,每個森林包含100棵決策樹;如果兩次分類精度沒有0.1%以上的提高就終止級聯森林的繼續擴展。故障分類結果如圖8所示。

圖8 故障分類實驗結果圖
可以看出本故障分類模型對WSN的分類比較準確,準確率達到了97.8%,接下來從數據集中抽取不同時間段的數據實驗10次取平均值,將改進過的算法(IGcForest)與原始算法(GcForest)進行比較如表2所示。

表2 故障分類性能
可以看出,在優化過深度森林中的級聯森林部分之后,算法的分類準確性有了提高,算法的改進有效。由于在實際應用中可能存在訓練量少的情況,測試了本故障診斷模型在不同訓練集占比下的故障診斷能力,得到結果如圖9所示。

圖9 訓練集占比不同情況下的結果圖
由圖9可知,本故障分類模型對電源故障、損壞故障、停止故障、恒偏差故障這幾類故障在訓練集占比低時依然能保持準確分類,在通信故障方面,隨著訓練集占比的降低分類準確率有一些下降,在電源故障和漂移故障兩種故障中也有影響,這是由于在最開始出現故障時的表現不明顯,綜合多種故障的檢測結果,可以看出IGcForest算法在WSN故障分類問題上的平均結果在90%以上,因此適合于解決WSN故障分類問題。
完整的故障診斷過程包括故障的檢測和故障的分類,在WSN的故障檢測方法中隨機森林算法可以準確的檢測出發生故障的節點[12-13]。在已完成的工作中我們對隨機森林的投票方式進行改進,減少分類能力差的決策樹對整個模型輸出結果的影響,并通過烏鴉搜索算法對參數進行調優。再結合本文提出的改進后的深度森林算法提出一種基于隨機森林與深度森林的故障診斷模型。本WSN故障診斷模型包括故障檢測與故障分類兩部分,故障診斷流程如圖10所示。

圖10 WSN故障診斷流程圖
本WSN故障診斷模型主要包括以下步驟。
1)模型訓練:
由于匯聚節點具有較強的計算能力,可以使用復雜的檢測結構,第一步是訓練匯聚節點處的隨機森林分類器,對普通傳感器節點傳來的數據進行初步分析,如果檢測到異常數據就對數據進行標記上傳到基站。第二步是基站對數據進行分析,基站可以進行高強度的計算和數據的存儲,采用深度森林對故障數據進行分類,如果檢測結果達不到預期則通過調整參數來適當提高。
2)模型測試:
在故障診斷模型建立完成之后,使用第三章得到的數據集來進行測試,如果滿足需求則不在進行訓練,結束過程,否則繼續訓練過程直到滿足要求。
為了充分利用匯聚節點有一定的計算能力的優點,在匯聚節點處應用改進的隨機森林模型[16-18],在基站應用改進的深度森林模型,使用分層式的方法提高模型的分類準確度[19-20]。本故障診斷模型對WSN的故障分類性能如圖11所示。

圖11 故障診斷模型實驗結果圖
可以看出在對WSN的故障診斷中本故障診斷模型的準確度為98.6%,相比于單獨的故障分類本模型得到的準確度更高,能夠有效地區分所發生故障的故障類型。
由于在WSN的實際應用中可能沒有足夠的時間進行數據的累積,存在訓練量少的情況,因此測試了本故障診斷模型在不同訓練集占比下的故障診斷能力,如圖12所示。

圖12 故障診斷模型結果圖
可以看出,本章提出的WSN故障診斷模型對WSN可能出現的故障分類精度都在96%以上,綜合平均精度在98.4%。相比于直接對故障數據進行分類本方法在準確率上有較大提升。
將本算法與在WSN故障診斷效果較好的DNN和SVM算法進行對比,在DNN算法的實驗中,建立的DNN模型由輸入層、輸出層和一層隱藏層組成,其中輸入層有8個節點,分別是傳感器節點編號、數據采集時間、傳感器節點二維平面下的地理位置(x、y)、傳感器節點采集的數據(溫度、濕度、光照強度以及自身剩余電量)。輸出層有7個節點,分別代表了傳感器節點可能產生的故障類型。在訓練中損失函數選擇categorical_crossentropy,優化器選擇RMSprop,將dropout應用于輸入來防止過擬合的產生,最終將隱藏層神經元數量設置為128得到了最佳的故障診斷結果。
在SVM算法的實驗中,輸入與輸出和DNN的輸入輸出相同,在核函數的選擇中從線性核函數、多項式核函數以及徑向基核函數中分別進行訓練,最終選擇徑向基函數,在懲罰系數設定為0.1,核函數系數設定為1時故障診斷效果最佳。算法分類精度對比如圖13所示。

圖13 算法分類精度對比圖
由圖13可知,本章提出的WSN故障診斷模型可以準確判斷大多數故障,在對故障分類時也可以準確的識別出不同的故障類型,在損壞故障和電源故障的識別達到了最高精度,對偏移故障、漂移故障和通信故障的識別略低于CNN算法,但綜合訓練時間、參數調節來看,本故障診斷模型更適用于WSN故障診斷。
本文對無線傳感器網絡故障分類算法進行了研究,首先提出了一種改進的深度森林算法,解決了隨著級聯層數的加深,每一層的輸入維數都會不斷增加,形成“維數災難”的問題。再使用改進的隨機森林算法實現對故障節點的檢測,提出了一種分層式的故障診斷方法。通過實驗證明了本故障診斷方法診斷準確率相比于單獨的深度森林方法有了提升,達到了預期的效果。在WSN故障診斷的研究上,除了提升算法的檢測與分類的準確度以外,還需要提高檢測速度以及減少能耗,這也是未來在WSN故障診斷的研究中需要著重研究的方向。