李子怡 徐怡彤 王梅霞 張培培
(華北理工大學(xué)管理學(xué)院,河北 唐山 063210)
目前我國(guó)居家養(yǎng)老仍處于發(fā)展初期,養(yǎng)老設(shè)施建設(shè)的緩慢滯后在一定程度上阻礙了居家養(yǎng)老模式的推廣,因此智能服務(wù)仍將是健康養(yǎng)老的發(fā)展趨勢(shì)。針對(duì)老年人的智能服務(wù)而言,心跳異常檢測(cè)是極為重要的內(nèi)容,目前,數(shù)據(jù)異值檢測(cè)技術(shù)層出不窮,其中包括近年來(lái)出現(xiàn)的開源可視化工具Grafana中的閾值檢測(cè)等,但由于不同人的心跳數(shù)據(jù)不同,這就導(dǎo)致使用Grafana閾值檢測(cè)技術(shù)來(lái)實(shí)現(xiàn)異值檢測(cè),很難找到一個(gè)公有的閾值。
而基于深度學(xué)習(xí)的RNN(Recurrent Neural Network,RNN)循環(huán)神經(jīng)網(wǎng)絡(luò)技術(shù)是一類以序列數(shù)據(jù)為輸入,在序列的演進(jìn)方向進(jìn)行遞歸并且所有節(jié)點(diǎn)按鏈?zhǔn)竭B接的神經(jīng)網(wǎng)絡(luò)[1],是目前深度學(xué)習(xí)常用的算法之一,主要應(yīng)用在語(yǔ)音識(shí)別、機(jī)器翻譯等領(lǐng)域,其良好的時(shí)間序列分析能力,為分析時(shí)間序列數(shù)據(jù)提供了良好的技術(shù)手段。本文采用pytorch神經(jīng)網(wǎng)絡(luò)擴(kuò)建實(shí)現(xiàn)和優(yōu)化改進(jìn)RNN模型,并將其應(yīng)用在醫(yī)學(xué)心跳異常監(jiān)測(cè)領(lǐng)域,基于深度學(xué)習(xí)的無(wú)監(jiān)督監(jiān)測(cè),相較于閾值監(jiān)測(cè)而言,其檢測(cè)模式避免了統(tǒng)計(jì)監(jiān)測(cè)的缺陷,除了常見的心跳異常外,也可以檢測(cè)出任何未知的異常。
神經(jīng)網(wǎng)絡(luò)包含輸入層、隱藏層、輸出層?;A(chǔ)的神經(jīng)網(wǎng)絡(luò)只在層與層之間建立了權(quán)值連接,而RNN循環(huán)神經(jīng)網(wǎng)絡(luò)最大的不同之處就是在層之間的神經(jīng)元之間也建立了權(quán)值連接,且在隱藏層根據(jù)時(shí)序進(jìn)行定向循環(huán)。
RNN可以對(duì)序列進(jìn)行操作,其支持輸入一個(gè)序列、輸出一個(gè)序列或者兩者都為一個(gè)序列。因此,RNN可支持的操作也十分多樣化,如圖1所示。(a)~(e)五張圖中,(a)代表固定輸入輸出的應(yīng)用,即一對(duì)一模式;(b)代表以序列輸出的應(yīng)用,即一對(duì)多模式;(c)代表以序列輸入的應(yīng)用,即多對(duì)一模式;(d)代表輸入輸出均為序列的應(yīng)用,即多對(duì)多模式。而利用RNN完成的異值檢測(cè)是基于(e)圖代表的一種輸入輸出序列同步的應(yīng)用形式[2]。
循環(huán)神經(jīng)網(wǎng)絡(luò)還可用于對(duì)序列數(shù)據(jù)的建模過(guò)程,其中的隱藏狀態(tài)可用于RNN中攜帶的信息的短期記憶[2],進(jìn)而對(duì)輸入的信息進(jìn)行有效的處理。在最經(jīng)典的RNN模型中,輸入序列的維度與輸出序列得到維度是一一對(duì)應(yīng)的,即Xt與Ot是一一對(duì)應(yīng)的,但在實(shí)際應(yīng)用中,這種情況很少出現(xiàn),比如,在機(jī)器翻譯領(lǐng)域,將中文“我的英語(yǔ)不好”翻譯成英文則是:my English is poor,顯然此時(shí)輸入與輸出序列的維度是不一樣的,所以后續(xù)就出現(xiàn)了圖(1)中(b)~(e)所示的輸入與輸出模型。
其中、分別代表輸出層和循環(huán)層的激活函數(shù),U代表輸入層到隱藏層的權(quán)重矩陣,S代表隱藏層的值,b、c表示線性關(guān)系的偏置,V代表隱藏層到輸出層的權(quán)重矩陣,O是最終的輸出值,權(quán)重矩陣 W代表隱藏層上一次的值St-1作為這一次的輸入的權(quán)重矩陣。通過(guò)激活函數(shù)控制輸出,層與層之間通過(guò)權(quán)值連接。RNN循環(huán)神經(jīng)網(wǎng)絡(luò)在t時(shí)刻接收到Xt后,通過(guò)公式(1)計(jì)算得到隱藏層St。由公式可以看出,循環(huán)神經(jīng)網(wǎng)絡(luò)區(qū)別于傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的是,每次隱藏層St的值不僅取決于Xt,還取決于St-1。再通過(guò)公式(2)計(jì)算得到輸出值Ot,最終的循環(huán)神經(jīng)網(wǎng)絡(luò)的表達(dá)式就可以由公式(1)和公式(2)合并計(jì)算得到,即為公式(3)。標(biāo)準(zhǔn)的RNN循環(huán)神經(jīng)網(wǎng)絡(luò)是權(quán)值共享的,如圖1中所示的W、U、V都是完全相同的,且輸入層的任一個(gè)輸入值都只會(huì)與其對(duì)應(yīng)的線路建立權(quán)值連接,不會(huì)連接到其他的神經(jīng)元。由于激活函數(shù)是事先確定好的,那么神經(jīng)網(wǎng)絡(luò)模型通過(guò)訓(xùn)練學(xué)到的東西就蘊(yùn)含在權(quán)值中。每一幀只與相鄰的時(shí)間節(jié)點(diǎn)進(jìn)行關(guān)聯(lián),權(quán)重矩陣在不同時(shí)刻共享參數(shù),即不同時(shí)刻的連接權(quán)重值相同,同時(shí)在模型更新的時(shí)候也一起更新[3]。
圖1 RNN循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)結(jié)構(gòu)圖
圖2為RNN循環(huán)神經(jīng)網(wǎng)絡(luò)前向傳播的展開層,而訓(xùn)練過(guò)程是通過(guò)RNN循環(huán)神經(jīng)網(wǎng)絡(luò)的反向傳播方式(Back Propagation,BP)實(shí)現(xiàn)的,傳播過(guò)程中每一幀的輸出值Ot和預(yù)測(cè)值之間會(huì)產(chǎn)生損失值Lt。反向傳播的過(guò)程就是將輸出端的損失值反向傳遞的過(guò)程,對(duì)于需要更新的權(quán)重參數(shù),通過(guò)計(jì)算它們關(guān)于損失函數(shù)(常見的損失函數(shù)有交叉熵函數(shù)、平方誤差函數(shù)等)的梯度,進(jìn)而運(yùn)用梯度下降的方法不斷迭代,最終更新權(quán)重矩陣W、U、V以及偏置c的值。
圖2 RNN循環(huán)神經(jīng)網(wǎng)絡(luò)循環(huán)層展開示意圖
Panel heartbeat_c1通 過(guò)Grafana中Alertmanager組 件 的Alerting功能實(shí)現(xiàn)異常數(shù)據(jù)告警。如圖3所示,當(dāng)心跳值低于-2時(shí),Grafana將發(fā)送告警郵件到用戶郵箱。
通過(guò)觀察圖4中出現(xiàn)異常的心跳數(shù)據(jù)發(fā)現(xiàn),在23:03:20-23:03:25之間的異常數(shù)據(jù)找不到一個(gè)合適的最值用于心跳數(shù)據(jù)的異值檢測(cè),此時(shí),圖3中運(yùn)用到的Grafana中的閾值檢測(cè)將不再適用,基于此問(wèn)題,我們結(jié)合RNN循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)模式識(shí)別來(lái)進(jìn)行心跳數(shù)據(jù)的異值檢測(cè)。
圖3 Grafana統(tǒng)計(jì)監(jiān)測(cè)異常數(shù)據(jù)
圖4 heartbeat_c2
隱藏層內(nèi)循環(huán)按時(shí)間序列展開后如圖5所示。將RNN輸出的每一幀的預(yù)測(cè)值Ot與目標(biāo)值Xt+1通過(guò)Multivariate Gaussian Distribution model公式(4)計(jì)算得出殘差值(Anomoly score),運(yùn)用RNN循環(huán)神經(jīng)網(wǎng)絡(luò)檢測(cè)異值的核心就是監(jiān)測(cè)殘差值的變化,為此,我們結(jié)合可視化工具Grafana達(dá)到可視化殘差值的目的。首先在Grafana的dashboard中新建一個(gè)panel來(lái)圖形化Anomoly score,如圖6所示,在心跳數(shù)據(jù)正常時(shí),殘差值起伏并不大,一旦心跳數(shù)據(jù)出現(xiàn)異常時(shí),下一幀的心跳數(shù)據(jù)(真實(shí)值)與通過(guò)RNN循環(huán)神經(jīng)網(wǎng)絡(luò)計(jì)算得出的預(yù)測(cè)值不相等,而由預(yù)測(cè)值與真實(shí)值計(jì)算得出的殘差值將會(huì)表現(xiàn)出很大的起伏,由此,便可以結(jié)合Grafana閾值檢測(cè)的方式來(lái)檢測(cè)殘差值的起伏變化,每當(dāng)殘差值高于一定值時(shí),檢測(cè)為異常心跳數(shù)據(jù),并結(jié)合其內(nèi)置的Alerting功能向用戶發(fā)送告警郵件。
圖5 RNN檢測(cè)異值原理
訓(xùn)練環(huán)境為Windows10操作系統(tǒng),CPU為Intel(R) Core(TM)i5-1035G1,GPU為NVDIA GeForce MX330,軟件環(huán)境為Python3.9,InfluxDB-1.7.6。
實(shí)驗(yàn)對(duì)象約60人,每人約15條心跳數(shù)據(jù),共計(jì)866條數(shù)據(jù)作為訓(xùn)練集進(jìn)行數(shù)據(jù)模型訓(xùn)練。訓(xùn)練集從樣本對(duì)象年齡與健康程度兩個(gè)維度來(lái)訓(xùn)練RNN模型,整個(gè)實(shí)驗(yàn)過(guò)程分為數(shù)據(jù)采集與傳輸、數(shù)據(jù)存儲(chǔ)、計(jì)算殘差、數(shù)據(jù)展示與告警四個(gè)階段。本實(shí)驗(yàn)的智能監(jiān)測(cè)終端與云平臺(tái)間采用 TCP 協(xié)議進(jìn)行通信,傳輸數(shù)據(jù)時(shí),TCP server 子模塊通過(guò) 3 次握手法與智能監(jiān)測(cè)終端建立連接,并開始接收來(lái)自智能監(jiān)測(cè)中端發(fā)送的十六進(jìn)制數(shù)據(jù)包,將數(shù)據(jù)幀解碼后發(fā)送至數(shù)據(jù)交互后端 Data back。
(1)數(shù)據(jù)采集。首先每0.004 s采集一次心跳數(shù)據(jù),再通過(guò)物聯(lián)網(wǎng)口袋機(jī)進(jìn)行數(shù)據(jù)傳輸。首先打開對(duì)應(yīng)的程序代碼,進(jìn)行編譯,同時(shí)進(jìn)行硬件部分的連接。由于此類傳感器需要事先預(yù)熱,因此在進(jìn)行測(cè)試之前首先需要經(jīng)過(guò)一段時(shí)間的預(yù)熱,等到小燈熄滅之后再進(jìn)行測(cè)試。最終采用HTTP API的格式傳輸?shù)綌?shù)據(jù)庫(kù)內(nèi)進(jìn)行存儲(chǔ)。
(2)數(shù)據(jù)存儲(chǔ)。對(duì)于類似于心跳這種持續(xù)的數(shù)據(jù),我們采用開源分布式時(shí)序、事件和指標(biāo)數(shù)據(jù)庫(kù)InfluxDB實(shí)現(xiàn)心跳數(shù)據(jù)的存儲(chǔ)。在讀入心跳數(shù)據(jù)后利用InfluxDB的http API功能,將心跳數(shù)據(jù)實(shí)時(shí)存入InfuxDB。
(3)計(jì)算殘差。將老人一天的心跳數(shù)據(jù),批量的定期(如以12 h為單位)進(jìn)行深度學(xué)習(xí)的異常監(jiān)測(cè),通過(guò)循環(huán)神經(jīng)網(wǎng)絡(luò)RNN計(jì)算出預(yù)測(cè)值,再通過(guò)將預(yù)測(cè)值與真實(shí)值比較生成殘差。
(4)數(shù)據(jù)展示與告警。采用開源可視化工具Grafana進(jìn)行數(shù)據(jù)可視化,并利用其內(nèi)置的告警功能實(shí)現(xiàn)發(fā)生異常時(shí),生成圖片報(bào)告并在5 s內(nèi)發(fā)送到醫(yī)生或家屬的郵箱內(nèi)。
(1)訓(xùn)練模型。RNN測(cè)試模型對(duì)于年齡較低、身體素質(zhì)較為健康的實(shí)驗(yàn)對(duì)象檢測(cè)效果較為靈敏,如表1所示。
表1 兩個(gè)不同維度的訓(xùn)練RNN效果分析
在樣本數(shù)據(jù)與訓(xùn)練輪數(shù)不斷增加的情況下,數(shù)據(jù)檢測(cè)精確度不斷增長(zhǎng),檢測(cè)時(shí)間大致呈正態(tài)分布,RNN檢測(cè)時(shí)間最終分別趨于1.3s,訓(xùn)練時(shí)間大約持續(xù)2h左右,如表2所示。
表2 RNN訓(xùn)練輪數(shù)與檢測(cè)效率分析
(2)測(cè)試模型。共計(jì)約60名實(shí)驗(yàn)對(duì)象中,每名樣本對(duì)象進(jìn)行7次心跳數(shù)據(jù)檢測(cè),作為測(cè)試集進(jìn)行測(cè)試。實(shí)驗(yàn)從精確率(Percision,P)、召回率(Recall,R)誤檢率(False alarm,F)和漏檢率(Missing alarm,M)四個(gè)維度來(lái)評(píng)估模型測(cè)試結(jié)果,其計(jì)算公式如公式5~8所示,其中TP、TN、FP、FN分別對(duì)應(yīng)正樣例、負(fù)樣例、誤報(bào)和漏報(bào)數(shù)量。兩個(gè)模型精確度如表3所示。共計(jì)434條數(shù)據(jù)中,RNN循環(huán)神經(jīng)網(wǎng)絡(luò)算法相較于Grafana闕值檢測(cè),精確率同比增長(zhǎng)11.02%,召回率同比增長(zhǎng)7.96%,誤檢率同比下降7.79%,漏檢率同比下降7.96%,檢測(cè)效果良好。同時(shí)通過(guò)采用基于深度學(xué)習(xí)的循環(huán)神經(jīng)網(wǎng)絡(luò)RNN來(lái)實(shí)現(xiàn)數(shù)據(jù)分析模塊,可以十分高效地監(jiān)測(cè)出心跳異常,在識(shí)別速度上達(dá)到了毫秒級(jí)別。
表3 兩種模型精度比較
通過(guò)大量的數(shù)據(jù)訓(xùn)練,采用循環(huán)神經(jīng)網(wǎng)絡(luò)技術(shù)的心跳異常檢測(cè)實(shí)現(xiàn)了不同時(shí)段人體心跳信息的監(jiān)測(cè)。通過(guò)試驗(yàn),得出該系統(tǒng)可實(shí)現(xiàn)健康信息的實(shí)時(shí)顯示,自動(dòng)生成閾值,脈搏數(shù)、心跳等指標(biāo)超出閾值報(bào)警。通過(guò)匹配各時(shí)段、不同狀態(tài)下人體指標(biāo)的監(jiān)測(cè)與計(jì)算,對(duì)計(jì)算得出的異常信息做出預(yù)警和報(bào)告,為實(shí)現(xiàn)對(duì)被監(jiān)測(cè)人生命安全的保障提供及時(shí)信息傳遞,有效地規(guī)避了傳統(tǒng)的統(tǒng)計(jì)監(jiān)測(cè)的弊端,對(duì)于其他位置的異常有利于在滿足基本生活需求的同時(shí)為居家老人提供醫(yī)療服務(wù),進(jìn)而有利于提高居家養(yǎng)老水平。
但標(biāo)準(zhǔn)的 RNN 循環(huán)神經(jīng)網(wǎng)絡(luò)技術(shù)在誤差反向傳播過(guò)程中仍然會(huì)出現(xiàn)梯度消失和爆炸的現(xiàn)象,由于其隱含層的神經(jīng)元的結(jié)構(gòu)簡(jiǎn)單,使得RNN循環(huán)神經(jīng)網(wǎng)絡(luò)很難對(duì)長(zhǎng)時(shí)間的信息進(jìn)行記憶[4],針對(duì)此類問(wèn)題,之后我們將使用其變體模型長(zhǎng)短時(shí)記憶網(wǎng)絡(luò)LSTM[5]和門控循環(huán)單元網(wǎng)絡(luò)GRU[6],利用LSTM網(wǎng)絡(luò)將傳統(tǒng)循環(huán)神經(jīng)網(wǎng)絡(luò)中神經(jīng)元節(jié)點(diǎn)替換為具有長(zhǎng)短時(shí)記憶能力的單元,并且通過(guò)自動(dòng)學(xué)習(xí)調(diào)整每個(gè)時(shí)間步“保留”和“遺忘”的上一時(shí)間步信息的比例的特點(diǎn),來(lái)解決RNN循環(huán)神經(jīng)網(wǎng)絡(luò)梯度爆炸和消失的問(wèn)題,并不斷提升其檢測(cè)速度和精度。