李子怡 徐怡彤 王梅霞 張培培
(華北理工大學管理學院,河北 唐山 063210)
目前我國居家養(yǎng)老仍處于發(fā)展初期,養(yǎng)老設施建設的緩慢滯后在一定程度上阻礙了居家養(yǎng)老模式的推廣,因此智能服務仍將是健康養(yǎng)老的發(fā)展趨勢。針對老年人的智能服務而言,心跳異常檢測是極為重要的內容,目前,數(shù)據(jù)異值檢測技術層出不窮,其中包括近年來出現(xiàn)的開源可視化工具Grafana中的閾值檢測等,但由于不同人的心跳數(shù)據(jù)不同,這就導致使用Grafana閾值檢測技術來實現(xiàn)異值檢測,很難找到一個公有的閾值。
而基于深度學習的RNN(Recurrent Neural Network,RNN)循環(huán)神經(jīng)網(wǎng)絡技術是一類以序列數(shù)據(jù)為輸入,在序列的演進方向進行遞歸并且所有節(jié)點按鏈式連接的神經(jīng)網(wǎng)絡[1],是目前深度學習常用的算法之一,主要應用在語音識別、機器翻譯等領域,其良好的時間序列分析能力,為分析時間序列數(shù)據(jù)提供了良好的技術手段。本文采用pytorch神經(jīng)網(wǎng)絡擴建實現(xiàn)和優(yōu)化改進RNN模型,并將其應用在醫(yī)學心跳異常監(jiān)測領域,基于深度學習的無監(jiān)督監(jiān)測,相較于閾值監(jiān)測而言,其檢測模式避免了統(tǒng)計監(jiān)測的缺陷,除了常見的心跳異常外,也可以檢測出任何未知的異常。
神經(jīng)網(wǎng)絡包含輸入層、隱藏層、輸出層。基礎的神經(jīng)網(wǎng)絡只在層與層之間建立了權值連接,而RNN循環(huán)神經(jīng)網(wǎng)絡最大的不同之處就是在層之間的神經(jīng)元之間也建立了權值連接,且在隱藏層根據(jù)時序進行定向循環(huán)。
RNN可以對序列進行操作,其支持輸入一個序列、輸出一個序列或者兩者都為一個序列。因此,RNN可支持的操作也十分多樣化,如圖1所示。(a)~(e)五張圖中,(a)代表固定輸入輸出的應用,即一對一模式;(b)代表以序列輸出的應用,即一對多模式;(c)代表以序列輸入的應用,即多對一模式;(d)代表輸入輸出均為序列的應用,即多對多模式。而利用RNN完成的異值檢測是基于(e)圖代表的一種輸入輸出序列同步的應用形式[2]。
循環(huán)神經(jīng)網(wǎng)絡還可用于對序列數(shù)據(jù)的建模過程,其中的隱藏狀態(tài)可用于RNN中攜帶的信息的短期記憶[2],進而對輸入的信息進行有效的處理。在最經(jīng)典的RNN模型中,輸入序列的維度與輸出序列得到維度是一一對應的,即Xt與Ot是一一對應的,但在實際應用中,這種情況很少出現(xiàn),比如,在機器翻譯領域,將中文“我的英語不好”翻譯成英文則是:my English is poor,顯然此時輸入與輸出序列的維度是不一樣的,所以后續(xù)就出現(xiàn)了圖(1)中(b)~(e)所示的輸入與輸出模型。
其中、分別代表輸出層和循環(huán)層的激活函數(shù),U代表輸入層到隱藏層的權重矩陣,S代表隱藏層的值,b、c表示線性關系的偏置,V代表隱藏層到輸出層的權重矩陣,O是最終的輸出值,權重矩陣 W代表隱藏層上一次的值St-1作為這一次的輸入的權重矩陣。通過激活函數(shù)控制輸出,層與層之間通過權值連接。RNN循環(huán)神經(jīng)網(wǎng)絡在t時刻接收到Xt后,通過公式(1)計算得到隱藏層St。由公式可以看出,循環(huán)神經(jīng)網(wǎng)絡區(qū)別于傳統(tǒng)神經(jīng)網(wǎng)絡的是,每次隱藏層St的值不僅取決于Xt,還取決于St-1。再通過公式(2)計算得到輸出值Ot,最終的循環(huán)神經(jīng)網(wǎng)絡的表達式就可以由公式(1)和公式(2)合并計算得到,即為公式(3)。標準的RNN循環(huán)神經(jīng)網(wǎng)絡是權值共享的,如圖1中所示的W、U、V都是完全相同的,且輸入層的任一個輸入值都只會與其對應的線路建立權值連接,不會連接到其他的神經(jīng)元。由于激活函數(shù)是事先確定好的,那么神經(jīng)網(wǎng)絡模型通過訓練學到的東西就蘊含在權值中。每一幀只與相鄰的時間節(jié)點進行關聯(lián),權重矩陣在不同時刻共享參數(shù),即不同時刻的連接權重值相同,同時在模型更新的時候也一起更新[3]。


圖1 RNN循環(huán)神經(jīng)網(wǎng)絡(Recurrent Neural Network,RNN)結構圖
圖2為RNN循環(huán)神經(jīng)網(wǎng)絡前向傳播的展開層,而訓練過程是通過RNN循環(huán)神經(jīng)網(wǎng)絡的反向傳播方式(Back Propagation,BP)實現(xiàn)的,傳播過程中每一幀的輸出值Ot和預測值之間會產(chǎn)生損失值Lt。反向傳播的過程就是將輸出端的損失值反向傳遞的過程,對于需要更新的權重參數(shù),通過計算它們關于損失函數(shù)(常見的損失函數(shù)有交叉熵函數(shù)、平方誤差函數(shù)等)的梯度,進而運用梯度下降的方法不斷迭代,最終更新權重矩陣W、U、V以及偏置c的值。

圖2 RNN循環(huán)神經(jīng)網(wǎng)絡循環(huán)層展開示意圖
Panel heartbeat_c1通 過Grafana中Alertmanager組 件 的Alerting功能實現(xiàn)異常數(shù)據(jù)告警。如圖3所示,當心跳值低于-2時,Grafana將發(fā)送告警郵件到用戶郵箱。
通過觀察圖4中出現(xiàn)異常的心跳數(shù)據(jù)發(fā)現(xiàn),在23:03:20-23:03:25之間的異常數(shù)據(jù)找不到一個合適的最值用于心跳數(shù)據(jù)的異值檢測,此時,圖3中運用到的Grafana中的閾值檢測將不再適用,基于此問題,我們結合RNN循環(huán)神經(jīng)網(wǎng)絡(Recurrent Neural Network,RNN)模式識別來進行心跳數(shù)據(jù)的異值檢測。

圖3 Grafana統(tǒng)計監(jiān)測異常數(shù)據(jù)

圖4 heartbeat_c2
隱藏層內循環(huán)按時間序列展開后如圖5所示。將RNN輸出的每一幀的預測值Ot與目標值Xt+1通過Multivariate Gaussian Distribution model公式(4)計算得出殘差值(Anomoly score),運用RNN循環(huán)神經(jīng)網(wǎng)絡檢測異值的核心就是監(jiān)測殘差值的變化,為此,我們結合可視化工具Grafana達到可視化殘差值的目的。首先在Grafana的dashboard中新建一個panel來圖形化Anomoly score,如圖6所示,在心跳數(shù)據(jù)正常時,殘差值起伏并不大,一旦心跳數(shù)據(jù)出現(xiàn)異常時,下一幀的心跳數(shù)據(jù)(真實值)與通過RNN循環(huán)神經(jīng)網(wǎng)絡計算得出的預測值不相等,而由預測值與真實值計算得出的殘差值將會表現(xiàn)出很大的起伏,由此,便可以結合Grafana閾值檢測的方式來檢測殘差值的起伏變化,每當殘差值高于一定值時,檢測為異常心跳數(shù)據(jù),并結合其內置的Alerting功能向用戶發(fā)送告警郵件。


圖5 RNN檢測異值原理
訓練環(huán)境為Windows10操作系統(tǒng),CPU為Intel(R) Core(TM)i5-1035G1,GPU為NVDIA GeForce MX330,軟件環(huán)境為Python3.9,InfluxDB-1.7.6。
實驗對象約60人,每人約15條心跳數(shù)據(jù),共計866條數(shù)據(jù)作為訓練集進行數(shù)據(jù)模型訓練。訓練集從樣本對象年齡與健康程度兩個維度來訓練RNN模型,整個實驗過程分為數(shù)據(jù)采集與傳輸、數(shù)據(jù)存儲、計算殘差、數(shù)據(jù)展示與告警四個階段。本實驗的智能監(jiān)測終端與云平臺間采用 TCP 協(xié)議進行通信,傳輸數(shù)據(jù)時,TCP server 子模塊通過 3 次握手法與智能監(jiān)測終端建立連接,并開始接收來自智能監(jiān)測中端發(fā)送的十六進制數(shù)據(jù)包,將數(shù)據(jù)幀解碼后發(fā)送至數(shù)據(jù)交互后端 Data back。
(1)數(shù)據(jù)采集。首先每0.004 s采集一次心跳數(shù)據(jù),再通過物聯(lián)網(wǎng)口袋機進行數(shù)據(jù)傳輸。首先打開對應的程序代碼,進行編譯,同時進行硬件部分的連接。由于此類傳感器需要事先預熱,因此在進行測試之前首先需要經(jīng)過一段時間的預熱,等到小燈熄滅之后再進行測試。最終采用HTTP API的格式傳輸?shù)綌?shù)據(jù)庫內進行存儲。
(2)數(shù)據(jù)存儲。對于類似于心跳這種持續(xù)的數(shù)據(jù),我們采用開源分布式時序、事件和指標數(shù)據(jù)庫InfluxDB實現(xiàn)心跳數(shù)據(jù)的存儲。在讀入心跳數(shù)據(jù)后利用InfluxDB的http API功能,將心跳數(shù)據(jù)實時存入InfuxDB。
(3)計算殘差。將老人一天的心跳數(shù)據(jù),批量的定期(如以12 h為單位)進行深度學習的異常監(jiān)測,通過循環(huán)神經(jīng)網(wǎng)絡RNN計算出預測值,再通過將預測值與真實值比較生成殘差。
(4)數(shù)據(jù)展示與告警。采用開源可視化工具Grafana進行數(shù)據(jù)可視化,并利用其內置的告警功能實現(xiàn)發(fā)生異常時,生成圖片報告并在5 s內發(fā)送到醫(yī)生或家屬的郵箱內。
(1)訓練模型。RNN測試模型對于年齡較低、身體素質較為健康的實驗對象檢測效果較為靈敏,如表1所示。

表1 兩個不同維度的訓練RNN效果分析
在樣本數(shù)據(jù)與訓練輪數(shù)不斷增加的情況下,數(shù)據(jù)檢測精確度不斷增長,檢測時間大致呈正態(tài)分布,RNN檢測時間最終分別趨于1.3s,訓練時間大約持續(xù)2h左右,如表2所示。

表2 RNN訓練輪數(shù)與檢測效率分析
(2)測試模型。共計約60名實驗對象中,每名樣本對象進行7次心跳數(shù)據(jù)檢測,作為測試集進行測試。實驗從精確率(Percision,P)、召回率(Recall,R)誤檢率(False alarm,F)和漏檢率(Missing alarm,M)四個維度來評估模型測試結果,其計算公式如公式5~8所示,其中TP、TN、FP、FN分別對應正樣例、負樣例、誤報和漏報數(shù)量。兩個模型精確度如表3所示。共計434條數(shù)據(jù)中,RNN循環(huán)神經(jīng)網(wǎng)絡算法相較于Grafana闕值檢測,精確率同比增長11.02%,召回率同比增長7.96%,誤檢率同比下降7.79%,漏檢率同比下降7.96%,檢測效果良好。同時通過采用基于深度學習的循環(huán)神經(jīng)網(wǎng)絡RNN來實現(xiàn)數(shù)據(jù)分析模塊,可以十分高效地監(jiān)測出心跳異常,在識別速度上達到了毫秒級別。


表3 兩種模型精度比較
通過大量的數(shù)據(jù)訓練,采用循環(huán)神經(jīng)網(wǎng)絡技術的心跳異常檢測實現(xiàn)了不同時段人體心跳信息的監(jiān)測。通過試驗,得出該系統(tǒng)可實現(xiàn)健康信息的實時顯示,自動生成閾值,脈搏數(shù)、心跳等指標超出閾值報警。通過匹配各時段、不同狀態(tài)下人體指標的監(jiān)測與計算,對計算得出的異常信息做出預警和報告,為實現(xiàn)對被監(jiān)測人生命安全的保障提供及時信息傳遞,有效地規(guī)避了傳統(tǒng)的統(tǒng)計監(jiān)測的弊端,對于其他位置的異常有利于在滿足基本生活需求的同時為居家老人提供醫(yī)療服務,進而有利于提高居家養(yǎng)老水平。
但標準的 RNN 循環(huán)神經(jīng)網(wǎng)絡技術在誤差反向傳播過程中仍然會出現(xiàn)梯度消失和爆炸的現(xiàn)象,由于其隱含層的神經(jīng)元的結構簡單,使得RNN循環(huán)神經(jīng)網(wǎng)絡很難對長時間的信息進行記憶[4],針對此類問題,之后我們將使用其變體模型長短時記憶網(wǎng)絡LSTM[5]和門控循環(huán)單元網(wǎng)絡GRU[6],利用LSTM網(wǎng)絡將傳統(tǒng)循環(huán)神經(jīng)網(wǎng)絡中神經(jīng)元節(jié)點替換為具有長短時記憶能力的單元,并且通過自動學習調整每個時間步“保留”和“遺忘”的上一時間步信息的比例的特點,來解決RNN循環(huán)神經(jīng)網(wǎng)絡梯度爆炸和消失的問題,并不斷提升其檢測速度和精度。