閔騰飛, 臧天儀
(哈爾濱工業大學 計算機科學與技術學院, 哈爾濱 150001)
癲癇是一種長期性的神經系統疾病,病癥發作時癲癇抽搐,俗稱羊角風。目前癲癇疾病不能治愈,對于多數患者,抽搐發作可由足夠劑量的藥物控制;如果藥物無法控制,只能通過外科手術切除引起癲癇的組織。但是仍有許多患者雖已接受了最好的治療方法,卻還會面臨間發性的癲癇抽搐發作病癥。即使癲癇發作不會經常發生,也將導致癲癇患者由于可能發生的癲癇發作而經歷持續的焦慮[1]。
通常,癲癇可由連續的腦電圖監測確診,但以前腦電圖只能在住院治療的環境下才能獲得。近些年來,隨著便攜式腦電圖系統的推出,腦電圖記錄變得非常普遍。然而,患者雖然獲得了與住院治療監控一樣的腦電圖,但如何利用記錄的大量腦電圖在癲癇發作之前提供可靠的預警信號成為非常有價值的研究問題[2]。
越來越多的人認識到,通過采用癲癇發作預警的閉環治療策略,可以在一定程度上控制癲癇的發作[3]。早期癲癇發作預警系統還可以幫助患者尋求安全的環境,提醒患者避免駕駛或游泳等潛在的危險活動,從而降低傷害風險以及由看似不可預測的癲癇發作導致的無助感。通過這種早期癲癇發作自動預警系統,可以以速效藥的形式觸發藥物干預,只有在需要預防即將出現的癲癇發作時才可以使用藥物,從而減少總體副作用[4]。為了使基于EEG的癲癇發作預警系統能夠有效地運行與工作,利用預測算法可靠地識別癲癇發作可能性增加的時期則將尤其顯出其現實關鍵研究意義。
隨著近些年數據量的急劇增長,計算機硬件設備GPU、CPU、存儲設備的快速發展,以及現實世界中實際問題與日俱增的精度和復雜度的需求,深度學習持續成功地應用于越來越廣泛的實際問題中。在許多計算機應用領域,如計算機視覺、語音和音頻處理、自然語言處理、計算機技術、生物信息學和化學、電子游戲、搜索引擎和推薦、網絡廣告和金融,深度學習方法都取得了進步與突破[5]。
因此,利用深度學習方法分析處理巨量的腦電波數據是非常值得嘗試的研究方向。本文的研究內容是把深度學習模型應用于癲癇發作預測問題上,探索基于深度學習的癲癇發作預測算法的設計,以及仿真測試其最終實驗效果。
經過國內外文獻調研發現,有不少研究學者基于深度學習方法已相繼發表了不同的癲癇檢測算法。例如Vidyaratne等人[6]提出了深度雙向遞歸神經網絡方法進行癲癇發作檢測。Turner等人[7]提出利用深度信念網分層學習方法分析高分辨率多通道腦電圖數據來檢測癲癇發作。Ye等人[8]利用快速傅里葉變換預處理腦電波(EGG)提取多個特征利用深度學習方法進行癲癇發作檢測。
本文采用Kaggle上美國癲癇協會癲癇預測競賽的數據集及評估模型的標準,應用線性判別分析作為基線模型,提出基于CNN和GRU的深度學習模型解決癲癇預測問題。另外在此競賽最后提交的結果中,并沒有找到基于遞歸神經網絡的模型,然而前人的不少研究表明,遞歸神經網絡區分EGG數據片段是有效的;因而探索遞歸網絡對癲癇預測問題是否有效是很有必要的。為此,本文將展開研究論述如下。
線性判別分析(Linear Discriminant Analysis,LDA),是一種監督學習方法。其原理是將給定的數據集投影到一條直線上,使得同類之間的距離盡可能地小,不同類之間的距離盡可能地大。
一種良好的投影方式就是利用不同類別的數據的中心來代表這類樣本在空間中的位置。考慮一個兩分類問題,兩類的均值向量為:
(1)
同時保證讓投影之后的中心距離盡可能地大,也就是:
(2)
盡可能大,其中,
(3)



圖1 LDA最大化問題
左圖為最大間隔度量的降維結果,從圖1中可以看出在原始數據空間,2類數據可以被完美分開,但是以2類數據的均值連線的垂直方向投影,會產生一定程度的重疊。因此,Fisher提出的LDA的優化目標為:最大化一個函數,這個函數能夠讓類均值的投影分開得較大,同時讓每個類別內部的方差較小,從而最小化了類別的重疊(圖1中右的結果)。這也是LDA的中心思想,即:最大化類間距離,最小化類內距離。
卷積神經網絡的基礎結構如圖2所示。從圖2中可以看出,二維矩陣或者三維矩陣作為輸入數據送入卷積神經網絡,通過卷積神經網絡的卷積和池化自動提取數據特征,再用全連接層和Softmax進行分類[5]。卷積層和池化層的輸出代表了輸入傳感器數據的高級特征,全連接層的目的就是用這些特征進行分類。全連接層(Fully Connected Layer)通常使用softmax激活函數作為輸出層的多層感知機(Multi-Layer Perceptron), Softmax函數把任意實值的向量轉變成元素取值0-1、且和為1的向量。

圖2 卷積網絡的基本結構
卷積和池化提取高維度的數據特征主要依靠4個特性,分別為:局部連接、權值共享、非線性、池化。如圖3所示,圖3中左側表示卷積網絡的局部連接的特性,輸入數據為6*6的矩陣,利用3*3的卷積核經過步長為1的移動后,提取特征獲得4*4的特征圖。圖3中右側表示每次當卷積核掃描到神經網絡的神經元時,每個神經網絡邊上的權值和偏移量是共享的。卷積網絡的非線性就是在每個卷積操作之后,都有一個ReLU的附加操作。ReLU的全稱是糾正線性單元(Rectified Linear Unit)。ReLU是以像素為單位生效的,可將所有負值像素替換為0。池化,也稱為下采樣,降低了每個特征映射的維度,但是保留了最重要的信息。池化可以有多種形式:最大(Max)、平均(Average)、求和(Sum)等等。目前,最大池化用得最多、也最廣泛。池化的功能在于逐步減少輸入特征的空間尺寸,從而減少網絡中的參數與計算數量,并抑制過擬合[5]。

圖3 卷積網絡的局部連接和權值共享
Fig. 3 Local connection and weight sharing of Convolutional Neural Network
如圖4所示,左側是時間維度展開前,回路方式表達方式的遞歸神經網絡,其中x表示輸入層,s表示隱藏層,o表示輸出層。右側為按照時間線展開后,可以看到當前時刻的St并不僅僅取決于當前時刻的輸入xt,同時與上一時刻的St-1也存在某種相關,St同樣也由xt經U的變化后的信息決定,此外這里包含另一份信息W·St-1,該信息是從上一時刻的隱藏狀態St-1經過一個不同的W變換后得出的。遞歸神經網絡(RNN)的計算公式為:
St=f(U·xt+W·St-1),Ot=g(V·St),
(4)
其中,f與g表示神經網絡的激活函數。

圖4 遞歸神經網絡(RNN)基本結構
但是普通的RNN結構卻很難以傳遞相隔較遠的信息。例如圖4中的部分,研究只考慮黑色箭頭的線性的傳遞過程,不考慮非線性部分,由此就會將式(4)簡化為:
St=W·St-1,
(5)
如果將起始時刻的隱藏狀態信息S0向t時刻傳遞,就會得到式(6):
St=Wt·S0,
(6)
此時,當W<1時,不斷相乘的結果是Wt向0衰減;當W>1時,不斷相乘的結果是Wt向∞擴增,導致S0中的信息會被覆蓋掉,無法向t時刻傳遞。尤其對于某些復雜的問題,可能需要更早的一些信息,甚至是時間序列的初始的信息,但間隔太遠的輸入信息,RNN是難以記憶的[5]。因此,遞歸神經網絡需要通過門(gates)控制,使不斷相乘的梯度保持在接近1的數值是非常重要的。
如圖5所示,LSTM的內部結構相比RNN更復雜,設計上包括了4層神經網絡,其中小圓圈是point-wise的操作,比如向量加法、點乘等,而小矩形表示一層可學習參數的神經網絡。LSTM單元上面的那條直線表示了LSTM的狀態state,并且會貫穿所有串聯在一起的LSTM單元,從第一個LSTM單元一直流向最后一個LSTM單元。狀態state在這條通道中傳遞時,LSTM單元可以對其添加或刪除信息,相應的對信息流的修改操作由LSTM中的gates控制。這些gates中包含了一個Sigmoid層和一個向量點乘的操作,繼而研究可知Sigmoid層的輸出是0~1之間的值,該值將直接控制信息傳遞的比例。因此在LSTM中,網絡首先構建了3個gates,即(it,ft,Ot)來控制信息的流通量。對此設計可分述如下。

圖5 遞歸神經網絡(RNN)與長短時記憶網絡(LSTM)基本結構
Fig. 5 The basic structure of Recurrent Neural Network (RNN) and long short term memory network(LSTM)
(1)輸入門it:控制有多少信息可以流入memory cell,即如下方公式(10)求得的Ct。
(2)遺忘門ft:控制有多少上一時刻的memory cell中的信息可以累積到當前時刻的memory cell中。
(3)輸出門Ot:控制有多少當前時刻的memory cell中的信息可以流入當前隱藏狀態ht中。
研究中擬將用到的數學公式可表述如下:
it=Sigmoid(WxiXt+Whiht-1+bi);
(7)
ft=Sigmoid(WxfXt+Whfht-1+bf);
(8)
Ot=Sigmoid(WxoXt+Whoht-1+bo);
(9)
Ct=ft*Ct-1+it*tanh(WxcXt+Whcht-1+bc);
(10)
St=Ot*tanh(Ct).
(11)
但LSTM也因為引入了很多內容,使得參數增多,訓練難度也因此加大了很多。故而很多時候研究中常會使用效果與LSTM相當、但參數更少的GRU來構建大訓練量的模型。對此可解析得到如下數學公式:
zt=σ(Wz·[ht-1,xt]);
(12)
rt=σ(Wr·[ht-1,xt]);
(13)
(14)
(15)
如圖6所示,首先是GRU的2個門,分別是update gate(zt)和reset gate(rt),計算方法和LSTM中門的計算方法一致,方法公式具體如下:
zt=σ(Wz·[ht-1,xt]),
(16)
rt=σ(Wr·[ht-1,xt]).
(17)

圖6 門控循環單元(GRU)基本結構
(18)

Kaggle競賽美國癲癇協會癲癇預測競賽的顱內腦電圖(iEEG)記錄,采集自5條患有癲癇癥的狗和2個接受iEEG 監測的人。狗的iEEG 記錄以400 Hz通過16個電極采樣得到,記錄每組電極電壓組的平均值。這些iEEG數據記錄有的延至數月,有的長達一年,并且在一些狗的記錄中有多達100次的癲癇發作。研究中基于植入裝置(A)的癲癇警告系統如圖7所示。通過植入裝置(A),獲得16個電極上的iEEG數據(B);并將數據無線傳輸到個人警告系統設備上;個人警告系統設備將其存儲在閃存驅動器中,再通過互聯網每周上傳到中央數據存儲服務器上。(C)展示了癲癇發作的時間和閾值分布,該閾值定義了癲癇發作概率增加時期(發作前狀態)。當預測的概率超過定義的閾值時,會觸發警告[9]。

圖7 患癲癇病犬的癲癇發作預警系統
除了狗的數據外,此次競賽數據集還包括有,2位人類癲癇患者少于一周的顱內腦電圖監測,其以5 000Hz頻率進行采樣,記錄的電壓來自大腦外部的電極的電壓值。
眾所周知,癲癇發作會聚集在一起,或者以組的形式出現。通常具有癲癇發作集群的患者從預測后續癲癇發作中獲益甚微,而區分出癲癇發作前狀態,就能為患者做出及時預警以及適當治療。此競賽的挑戰是區分前1 h的10 min長的數據片段和發作間活動的10 min iEEG片段。在這次競賽中,定義癲癇發作前為癲癇發作開始前的4 h,發作間為任何癲癇發作之前或之后至少4 h[10]。
數據集中每條數據為10 min長的EGG時序數據片段,來自癲癇對象的發作前或者發作后時期。訓練數據中1 h的數據片段將按照編號順序存儲,測試數據片段則是隨機的。如圖8所示,1 h發作前片段定義為癲癇發作前1:05至0:05,這即確保了可以預測癲癇發作時間足夠長,以允許快速作用下優選用藥。

圖8 癲癇發作前1 h的5個電極上的EEG信號
Fig. 8 EEG signals on 5 electrodes which are 1 hour before seizure
對于每一個10 min的EGG腦電圖數據片段,一些特定的特征從每個電極上的時域電壓值中提取。主要的提取數據特征方法可參考文獻[9,11],方法步驟詳見如下。

(2)過濾。使用巴特沃斯帶通濾波器過濾掉低頻(小于0.1 Hz)和高頻(高于180 Hz)的采樣點數據。這一步可運用scipy包中的signal模塊的butter和lfilter來實現。
(3)離散傅里葉變換(DFT)。:每10 min的數據片段被分割為20個不重疊的30 s的小片段,每個小片段應用離散傅里葉變換從時域信號變成頻域信號。傅里葉變換的公式為:
(19)
(4)劃分頻率帶。每個10 min的數據片段被分割成20個小片段的頻域信號后,把頻域從0.1 Hz至180 Hz劃分為8個互不相交的頻率帶,這些區間分別是:delta(0.1 Hz~4 Hz)、theta(4 Hz~8 Hz)、alpha(8 Hz~12 Hz)、beta(12 Hz~30 Hz)、low-gamma-0(30 Hz~50 Hz)、low-gamma-1(50 Hz~70 Hz)、high-gamma-0(70 Hz~100 Hz)、high-gamma-1(100 Hz~180 Hz)。


圖9 數據預處理后的幅度譜
(5)正則化。本實驗一共有2種標準化方法,一種是把每個數據片段上每個電極的頻率譜上8×20特征矩陣壓縮成一維,進行標準化;另一種是把每個8×20的頻率譜特征矩陣,視為20個樣例的8個特征,開始對這20個長度為8的向量進行標準化。這2種標準化中,前者考慮到了特征在時域和頻域的位置,而后者沒有考慮時域。
綜合前述的數據預處理步驟提取信息,數據集大小從最開始競賽提供的總共111 G,增長至當下191 M的數據量,從而為后續實驗減少了許多訓練模型的時間。
本文的實驗任務是區分出測試集中給定的數據片段是屬于發作前、還是屬于發作中。由于癲癇病的特性,癲癇發作間隔時間長,即使得數據集中屬于發作中的片段占據了大多數。對此,研究使用ROC曲線下的面積AUC來評估,并且是在所有7個對象測試數據集的預測概率的ROC曲線下的面積AUC來評估各模型的運行性能,而這同時也是競賽的評判打分排名標準。
基于線性判別分析的方法,在數據預處理中與2.2節探討的不同之處就在于,窗口大小為60 s,步長為30 s,這樣10 min的數據被劃分成了19個60 s的有重疊的小片段數據,那么每個60 s的片段共有N×8個數據特征,其中N代表電極的數目。模型結構如圖10所示,模型用所有片段的19個小片段進行線性判別分析訓練,選取這19個小片段的預測平均值作為整個片段的預測值,在如前描述的數據預處理條件下,研究得到了最好的結果是整體的AUC為0.747 66。

圖10 基于LDA的預測模型
在EGG數據采集的過程中,由于腦電信號非常不平穩,在整個10 min的片段中或許并不存在發作前活動的跡象。這可能是因為發作前特征出現在片段的開頭或者最后,也有可能發作前的癲癇患者許多位置的電極和平常一樣,根本沒有癲癇預警癥狀。為了使本文設計的模型盡可能多地掌握患者腦部各處電壓的異樣,研究考慮先合并所有電極上的處理后的頻域信息,而后合并不同時間片段的信息。研究中可通過卷積神經網絡實現這一設計。設計的網絡通過時間執行一維卷積,從而分別從每個時間片段中提取相同類型的特征,繼而在較高層中跨時間軸來組合有關信息。此外,在Mirowski等人[12]的研究中提出腦電圖各電極上的信息之間的關系對癲癇的預測非常重要;在此競賽中也有不少參賽者,把這個特征擴展到了各自的數據集中。在本文研發的網絡中,研究旨在運用第一個卷積層中的濾波器在相同的時間片段內看到所有電極上的數據特征信息,這樣可使其學習彼此之間的互相關關系。基于此,下面將給出本文網絡結構設計詳述如下。
如圖11所示,研究把數據分成了20個小片段以及8個頻率帶,其第一層卷積C1在相同時間幀上的所有電極的頻帶上執行卷積,第一層為16個過濾器的大小為(8·N)×1的卷積核,一共有(16·8·N+16)個參數。通過第一層得到了16×20的矩陣;第二層卷積C2是32個過濾器大小為16×12的卷積核,一共有(32·16·12+32)=6 176個參數;第三層是全連接層F3,通過2個卷積層提取32×9的特征矩陣與F3的512個神經元全連接,把所有特征信息提取到512個神經單元中用來分類,共32×9×512+512=147 968個參數;最后一層是一個邏輯回歸單元。由此計算可得模型的總參數共有15萬個,巨量的參數給后續模型的參數尋找帶來了很大的困難,因此必須盡可能在此結構上加以優化,從而降低模型的參數總量。

圖11 基于CNN的模型
為了減少參數的數量,研究即在C2與F3直接引入全連接池化層GP3,如圖12所示,池化層在C2層得到的1×9矩陣上計算了均值、最大、最小、方差、L2正則化值、幾何平均值,這樣得到32個1×6的矩陣與具有512個單元的全連接層連接。如此一來池化層和全連接層只有(192·512+512)=98 816個。由于加入的池化層,參數在數目上就大約減少了5萬個。

圖12 卷積和池化的CNN模型
研究中又設置了不同的數據預處理參數,并對預測的原始結果,分別進行了Softmax、minmax、median標準化,應用此模型得到的結果見表1。
表1 不同數據預處理參數下模型的結果
Tab. 1 Results of the model under different data preprocessing parameters

數據AUCSoftmax AUCMinmax AUCMedian AUC6頻率帶30 s窗口0.770 60.770 70.781 10.769 56頻率帶120 s窗口0.763 20.786 00.775 20.753 48頻率帶30 s窗口0.766 80.743 70.773 70.780 8
由表1可以看出,經過如上的標準化處理對最終的預測結果有一定的修正,但是尚未確定哪種標準化處理會得到比原始預測更好的收益;同時,也可以看出本模型效果明顯超出基線模型大約3%左右,并且最好的結果能在504個隊伍的競賽排行榜上取得排名第11位的成績,可以說基于卷積深度學習方法對于癲癇前期癥狀的預測是有用的。
腦電波(EGG)原始數據是時序的,可以直接利用RNN網絡的持續性和記憶性特點直接處理,但通過前面提及的預處理步驟將使所得的信息既有時間特性、又有頻率大小的位置特性,因此本次研究擬嘗試運用卷積神經網絡解決發作前預測問題。
首先,研究對數據應用基礎的RNN、LSTM、GRU模型,探索其性能,其中GRU結構如圖13所示,輸入數據先通過一層20個節點的GRU單元,其上各單元以0.2隨機失活,再全連接到一個邏輯回歸單元上輸出預測值。在其它基礎的遞歸神經網絡模型的結構中只有第一層的GRU不同,分別為LSTM、SimpleRNN。

圖13 簡單的GRU模型
這些簡單模型在頻率帶為8,窗口長度為30 s,步長為30 s數據預處理設置下,得到的結果見表2。

表2 不同RNN模型的結果
由表2可知,此時得到的結果遠遠低于LDA的基線模型,甚至比隨機猜得的效果更差。這一仿真結果表明:雖然基于RNN的方法在癲癇發作片段的診斷上效果明顯,但在預測發作前片段的任務上,效果并不好。
本文以LDA為基線模型,探索了基于CNN和RNN的模型,對 EGG數據預測癲癇發作前狀態概率的問題進行了實驗性的研究。本文發現EGG數據從時域信號轉換到頻率信號后,利用卷積神經網絡提取整合特征的能力,能較成功地預測癲癇發作前的數據片段。雖然基于RNN的模型在EGG數據片段屬于癲癇發作、非癲癇發作和健康人的分類問題上得到了好的效果,但在癲癇發作前的預測問題上效果并未臻至理想,當然這也許是本文的RNN實驗模型偏于基礎簡單,參數設置或者數據預處理也有待進一步改善的原因。后續工作可以考慮直接對原始的EGG數據,按照電極上采樣數據量平均劃分為n個時間步,以每個時間步的采樣數據作為RNN的輸入,或許在這樣的情況下RNN就能提取出有效的特征信息。
本文討論了癲癇發作前片段預測任務的背景及意義,并基于具體的數據集說明了任務評估標準。研究即以LDA為基線模型,探討了基本RNN模型對此任務的有效性,并提出了基于CNN模型的深度學習方法,較為成功地對癲癇發作前片段進行了預測。