趙永翼, 王 菲, 申 瑩
(1. 沈陽師范大學 軟件學院, 沈陽 110034; 2. 沈陽市藝術幼兒師范學校, 沈陽 110000)
2020年伊始,新冠狀病毒席卷全球,新冠狀病毒通過空氣與人體器官嘴、眼皮、鼻腔和口腔中的粘膜接觸,釋放病毒遺傳物質RNA單鏈作為信使RNA繞過細胞核糖體合成RNA復制酶[1]。RNA復制酶根據(jù)病毒RNA生成RNA負鏈繼續(xù)和復制酶生成RNA片段、RNA正鏈,不同RNA片段與核糖體生成更多病毒蛋白質結構,蛋白質外殼與RNA組合生成新冠狀病毒顆粒通過高爾基體分泌至細胞外以感染新的細胞[2],以上就是新冠狀病毒感染患者的生物傳播過程[3]。由于新冠狀病毒極容易在空氣中通過飛沫傳播,截止到2020年7月13日全球疫情數(shù)據(jù):現(xiàn)存確診5 344 825例,累計確診12 846 242例,累計死亡567 976例,累計治愈6 933 441例。其中美國新冠肺炎病亡人數(shù)超過13萬,全球居首[4]。本文采取國外疫情數(shù)據(jù)作為數(shù)據(jù)本集。在模型的選擇上,機器學習主張機器自己從數(shù)據(jù)中學習知識,需要人工提取特征,常見的算法有線性回歸、分類、聚類算法等如SVM、決策樹、Adaboost、PCA降維等。而深度學習實質是人工神經網(wǎng)絡,可看作是一種層數(shù)較深的人工神經網(wǎng)絡,常見的有CNN、RNN。為了能實現(xiàn)疫情數(shù)據(jù)的序列化預測,實驗選擇深度學習模型RNN循環(huán)神經網(wǎng)絡變體長短期記憶網(wǎng)絡LSTM長短期記憶網(wǎng)絡模型對國外疫情數(shù)據(jù)進行序列預測[5]。
人工神經網(wǎng)絡(Artificial Neural Network,ANN)模型,簡稱神經網(wǎng)絡或類神經網(wǎng)絡。在機器學習科學領域是一種模仿生物中樞神經系統(tǒng)的結構(如圖1所示),神經網(wǎng)絡由大量的人工神經元聯(lián)結進行計算[6],人工神經網(wǎng)絡在外界信息的基礎上改變內部結構,具備自身學習功能的自適應系統(tǒng)[7]?,F(xiàn)代神經網(wǎng)絡是一種非線性統(tǒng)計性數(shù)據(jù)建模人工神經網(wǎng)絡, 通過一個基于數(shù)學統(tǒng)計學類型的學習方法得以優(yōu)化。以多層感知機、卷及神經網(wǎng)絡CNN為例,ANN是用來處理靜態(tài)數(shù)據(jù),對向量進行加權求和求偏值[8]。
圖1 ANN結構Fig.1 ANN structure
圖2 循環(huán)神經網(wǎng)絡Fig.2 Recurrent neural network
人工神經網(wǎng)絡處理靜態(tài)數(shù)據(jù),靜態(tài)數(shù)據(jù)樣本數(shù)據(jù)之間互相獨立,沒有依賴關系,通過輸入向量進行數(shù)學模型訓練,得出結果再進行反向傳播,以糾正權重[9]。循環(huán)神經網(wǎng)絡(Recurrent Neural Network,RNN)是深度學習領域中一類特殊的內部存在自連接的神經網(wǎng)絡。如圖2所示,RNN由3個層次構成,從下至上:輸入層xt、隱藏層A、輸出層ht。其中隱藏層含多層結構。
靜態(tài)數(shù)據(jù)與序列數(shù)據(jù)不同,靜態(tài)數(shù)據(jù)類比用相同方式訓練不同數(shù)據(jù),數(shù)據(jù)之間沒有依賴關系。序列數(shù)據(jù)更強調相互關聯(lián)性,以固定timestep(時間步)要求輸入和輸出序列必須是等長[10]。當t=0時輸出,再依次向后計算,每個時間步的輸出值與前面時間步的輸出相關且相等。
圖3 循環(huán)神經網(wǎng)絡基本單元Fig.3 Basic unit of Recurrent neural network
圖3是RNN循環(huán)神經網(wǎng)絡基本單元cell:所有的遞歸神經網(wǎng)絡都是由重復神經網(wǎng)絡模塊構成的一條鏈,處理層由一個tanh層激活函數(shù)組成,通過當前輸入及上一時刻的輸出來得到當前輸出。 數(shù)據(jù)流向通過xt作為向量輸入到A隱藏層,經過計算一部分輸出到輸出層進行計算,另一部分流入下一個時序的隱藏層[11],在下一個時序的隱藏層接受來自上一個時序輸出的數(shù)據(jù)和本時序的輸入數(shù)據(jù),2個數(shù)據(jù)通過concat函數(shù)連接,合并2個輸入,且維度等于隱藏層的神經元維度,2個合并數(shù)據(jù)作為整體向隱藏層輸入,在隱藏層進行加權求和。
RNN循環(huán)神經網(wǎng)絡正向傳播機制:輸入數(shù)據(jù)輸入有2個,當前時刻的輸入和上一時刻的狀態(tài)。 cell處理公式:ftanh(wx+b),結果一個拷貝傳給下一時刻(之間有權值連接),一個傳給輸出層,作為其輸入cell的輸出作為輸出層的輸入[12],進行全連接操作。
假設:輸入向量的維度為x,狀態(tài)的維度為h, 拼接輸入向量維度為x+h, 循環(huán)體的參數(shù)為(x+h)*h+h, 假設輸出向量的維度為y,輸出層的參數(shù)為h*y+y。
RNN循環(huán)神經網(wǎng)絡的反向傳播BPTT(back propagation through time)的鏈式求導算法來反向傳播。
反向傳播權重的反推公式:
反向傳播利用對輸出層的參數(shù)求導再對輸入層和隱藏層求導,分別不依賴時間和依賴時間。
長時間以來的RNN循環(huán)神經網(wǎng)絡序列問題未能及時處理問題時,容易出現(xiàn)梯度消失或梯度爆炸。
圖4是短時間序列問題: 相關的信息和預測的詞位置之間的間隔是非常小的, RNN可以學會使用先前的信息[13]。
圖5是長時間序列問題: 相關信息和當前預測位置之間的間隔比較大,需要“記憶”先前提到的離當前位置很遠的上下文內容。
圖4 短時間序列問題Fig.4 Short time series problem
圖5 長時間序列問題Fig.5 Long time series problem
為處理長序列依賴問題,Greff Klaus等[14]提出的LSTM(long short-term memory)模型,它能夠有效克服RNN中存在的梯度消失問題,尤其在長距離依賴的任務中的表現(xiàn)遠優(yōu)于RNN[15]。圖6中矩形為神經網(wǎng)絡層,帶有權重和偏值用于加權運算。圓形部分為線形運算,進行簡單線性運算。雙箭頭融合是指向量拼接,當輸入神經元輸入一維向量,上一個時序的輸出到該時序二維向量,此時拼接后的向量為三維向量[16]。箭頭分離為向量拷貝,指把一個向量值分別傳給2個流向,到下一個時序以及輸出到此時序的輸出神經元。
圖6 LSTM模型結構Fig.6 LSTM model structure
圖7 單元結構Fig.7 Cell state
圖7是LSTM模型的核心元素單元結構,是該模型中的傳送帶,在系統(tǒng)中呈一條長直鏈,僅存儲線性關系。信息往下一級傳遞且不會改變。在模型中用于存儲記憶,跨時間步鏈接,cell state決定該模型中的數(shù)據(jù)拋棄什么,傳輸什么。被拋棄的數(shù)據(jù)在矩陣運算時用0加權。
遺忘門的作用(如圖8所示):決定舊的信息哪些信息丟掉,哪些保留cell state。該門讀取當前的輸入xt和t-1時刻神經元狀態(tài)信息ht-1作為輸入,做加權求和,再經過sigmoid激活函數(shù)轉換,輸出一個在0~1之間的數(shù)值給Ct-1[17]。輸出結果1表示“完全保留”,0表示“完全舍棄”。
輸入門作用:決定哪些新的信息將被加入cell state 。
輸入門分為2個部分:
1) 一部分由Sigmoid激活層構成,它決定哪些值要更新;
2) 另一部分由Tanh函數(shù)層構成,新候選的向量生成器。
圖8 遺忘門、輸入門、輸出門Fig.8 Forget gate,input gate,output gate
狀態(tài)更新:t-1時刻的狀態(tài)乘“遺忘門”的輸出,加上新的候選信息,組成當前的cell state。
輸出門作用: 決定最后的輸出結果。
首先運行一個sigmoid層來確定cell state的哪個部分將輸出出去。接著把cell state通過tanh進行處理(得到一個-1~1之間的值)并將它和sigmoid門的輸出相乘,得到最后輸出[18]。
LSTM通過“遺忘門” 控制之前的信息的輸入程度,通過“輸入門”控制當前信息的輸入程度,通過 “輸出門”控制最終的輸出以解決LSTM模型的長期依賴問題[19],同時選擇sigmoid激活函數(shù)作為選擇工具,用0~1來做權重的二次分配,并且用tanh函數(shù)作為變化工具。當前的單元信息是通過輸入門控制之后疊加來解決梯度消失問題。
使用框架搭建網(wǎng)絡,實驗中Keras框 架由純 Python編寫的基于Tensorflow為后端。Keras是一個高層神經網(wǎng)絡的API,可以迅速地將想法轉換為結果,允許簡單而快速的原型設計,更適配卷積神經網(wǎng)絡,模型庫中含有很多經典的模型使得深度學習的建模與算法設計較為方便[20]。實驗硬件平臺組成是: 處理器為3.1 GHz Intel Core i5,內存為8 GB 2133 MHZ LPDDR3,圖形卡為Intel Iris Plus Graphics 650 1556 M。
表1 實驗中用到的庫Table 1 The library used in the experiment
1) 分析實驗任務:疫情預測任務是一個時序預測任務,根據(jù)前3天預測第4天累計確診人數(shù),實驗選擇RNN循環(huán)神經網(wǎng)絡變體LSTM模型。
2) 分析原始數(shù)據(jù),篩選需要數(shù)據(jù):實驗采用的數(shù)據(jù)集為國外某國家在2020年2月22日—2020年7月13日期間爆發(fā)的新型冠狀病毒(COVID-19)肺炎中新增確診人數(shù)、現(xiàn)有確診人數(shù)、治愈、死亡、累計確診人數(shù)。由于國內疫情數(shù)據(jù)干擾因素較多,規(guī)律不可循,因此使用國外疫情數(shù)據(jù)。數(shù)據(jù)集中新增確診人數(shù)、現(xiàn)有確診人數(shù)、治愈、死亡為輸入元素X,累計確診人數(shù)為輸出元素Y。其中訓練集110條,測試集19條。
圖9 數(shù)據(jù)集Fig.9 Data set
3) 數(shù)據(jù)預處理,并制成數(shù)據(jù)集(如圖9所示):篩選數(shù)據(jù)集中必要數(shù)據(jù),剔除干擾元素。
4) 對必要數(shù)據(jù)進行歸一化處理:
x=normalized_train_data[i:i+time_step,:4]
y=normalized_train_data[i+time_step:i+1+time_step,13,np.newaxis]
5) 用原始值減去數(shù)據(jù)均值除以標準差,用numpy對訓練數(shù)據(jù)進行減均值操作。
6) 模型搭建:根據(jù)數(shù)據(jù)和任務,分析輸入和輸出節(jié)點如何設定,模型具體使用什么結構。
根據(jù)疫情數(shù)據(jù)中新增確診人數(shù)、現(xiàn)有確診人數(shù)、治愈、死亡、累計確診人數(shù)等元素對下一日累計確診人數(shù)預測。RNN層在輸入后的線性轉換步驟添加隨機失活,在循環(huán)階段的線性轉換也添加隨機失活,失活概率都為0.2。
表2 關鍵代碼Table 2 Key codes
圖10 實驗結果Fig.10 Experimental results
在進行實驗時,首先打開數(shù)據(jù)集,讀取數(shù)據(jù)的1~5列。在第二條語句中樣本序列長度(time step)為14,每個數(shù)據(jù)輸入維度4,全連接層的dropout為0.2,循環(huán)體中的dropout比例為0.2。定義損失函數(shù)為交叉熵,優(yōu)化方法為Adam,模型評價標準為分類正確率。實驗設定Batch size=500,epoch=500。在圖10中樣本集的折線為深色,測試集的折線為淺色??梢钥闯鰧嶒灲Y果與真實數(shù)據(jù)匹配度較高,實驗沒有出現(xiàn)梯度消失以及梯度爆炸等問題。LSTM模型適合用于做疫情序列問題預測模型。
本文在Bengio等[8]提出標準RNN循環(huán)神經網(wǎng)絡的基礎上,將Greff Klaus等[14]提出的長短期記憶網(wǎng)絡模型應用在長序列疫情預測,實驗結果與真實數(shù)據(jù)高精度匹配,說明LSTM較長短期記憶網(wǎng)絡模型適用于做長序列預測,在以后的疫情實驗中可做進一步的研究和討論。