胡清禮,胡建強(qiáng),余小燕
1(廈門理工學(xué)院 計(jì)算機(jī)與信息工程學(xué)院,廈門 361024)
2(上海工程技術(shù)大學(xué) 電子電氣工程學(xué)院,上海 201620)
糖尿病是一個(gè)日益嚴(yán)重的全球問題,對患者的日常生活和身體健康影響巨大,甚至威脅患者的生命.近年來,糖尿病的患病率愈來愈高,根據(jù)國際糖尿病聯(lián)盟最新數(shù)據(jù)指出,2017年全球約4.25 億成人患糖尿病,若按照當(dāng)前趨勢持續(xù)下去,預(yù)計(jì)到2045年,糖尿病患病人數(shù)將達(dá)到6.29 億[1].早期發(fā)現(xiàn)糖尿病,盡早進(jìn)行強(qiáng)化治療,可以使接近50%的患者病情緩解,早期發(fā)現(xiàn)便可通過運(yùn)動(dòng)飲食將血糖控制在正常范圍.
糖尿病誘發(fā)的病因病理復(fù)雜,醫(yī)學(xué)界尚未建立統(tǒng)一的預(yù)測模型,可以完全科學(xué)的早期發(fā)現(xiàn)、診斷糖尿病.國內(nèi)外許多研究者圍繞糖尿病的早期預(yù)測展開許多有益的工作.具體包括:
文獻(xiàn)[2]采用樸素貝葉斯、支向量機(jī)和決策樹等算法,在PIMA 測試集上獲得76.3%的準(zhǔn)確率.文獻(xiàn)[3]提出基于支持向量機(jī)的糖尿病預(yù)測模型,采用徑向基作為核函數(shù),通過三折交叉驗(yàn)證和網(wǎng)格搜索確定最優(yōu)懲罰參數(shù)和核參數(shù),在PIMA 測試集上獲得78.39%的準(zhǔn)確率.文獻(xiàn)[4]提出基于奇異值(Singular Value Decomposition,SVD)和Boosting 級聯(lián)學(xué)習(xí)的糖尿病風(fēng)險(xiǎn)分級模型,提高預(yù)測的智能性和準(zhǔn)確率.文獻(xiàn)[5]提出結(jié)合遺傳算法和樸素貝葉斯算法的糖尿病預(yù)測模型,即利用遺傳算法進(jìn)行特征選擇,樸素貝葉斯進(jìn)行分類決策,在PIMA 數(shù)據(jù)集上獲得了78.7%的準(zhǔn)確率.上述模型由于精度較低,很難滿足實(shí)際的需求.
文獻(xiàn)[6]提出概率人工神經(jīng)網(wǎng)絡(luò)方法(PNN)診斷2 型糖尿病,即一個(gè)隱藏層,神經(jīng)元數(shù)量與訓(xùn)練數(shù)據(jù)集數(shù)量相等,該方法的預(yù)測精度略有提高,但泛化能力低,影響模型精度提升.文獻(xiàn)[7]使用多層感知機(jī)(MLP)模型,由于層數(shù)或神經(jīng)元的個(gè)數(shù)過多反而更容易產(chǎn)生過擬合現(xiàn)象,泛化能力不足,在PIMA 數(shù)據(jù)集上測試精度不高.過擬合使得模型對未知數(shù)據(jù)擬合效果差,導(dǎo)致泛化能力下降,影響整個(gè)模型的精度.文獻(xiàn)[8]采用Dropout方法解決多層感知機(jī)過擬合問題,該方法根據(jù)設(shè)置的失活率使神經(jīng)元隨機(jī)失活,減少神經(jīng)元參加訓(xùn)練,以此來降低過擬合問題,該方法在一定程度上抑制了過擬合,提高了模型的精度.為了保證模型具有較高的精度,需要能夠?qū)W習(xí)到更多的特征,勢必會(huì)增加網(wǎng)絡(luò)的層數(shù)和神經(jīng)元個(gè)數(shù),導(dǎo)致整個(gè)網(wǎng)絡(luò)訓(xùn)練速度變慢,即收斂速度慢.
多層感知機(jī)的隱藏層能夠分析并學(xué)習(xí)數(shù)據(jù)的特征,通常其層數(shù)越多或?qū)由仙窠?jīng)元個(gè)數(shù)越多,該網(wǎng)絡(luò)表征數(shù)據(jù)特征的能力就越強(qiáng),但事實(shí)上并非如此,其層數(shù)或神經(jīng)元的個(gè)數(shù)過多反而更容易產(chǎn)生過擬合現(xiàn)象,使得模型對未知數(shù)據(jù)擬合效果非常差.因此,在保證能夠充分學(xué)習(xí)到數(shù)據(jù)特征的前提下,解決多層感知機(jī)的過擬合現(xiàn)象是一個(gè)重要問題.此外,隨著多層感知機(jī)的層數(shù)增加,每一層的參數(shù)更新會(huì)導(dǎo)致數(shù)據(jù)分布在輸入和輸出時(shí)發(fā)生變化,經(jīng)過多個(gè)隱藏層后,最后面的隱藏層的輸入數(shù)據(jù)分布會(huì)發(fā)生劇烈的變化,這就使得靠后的隱藏層需要不斷去重新適應(yīng)靠前的隱藏層的參數(shù)更新,這會(huì)嚴(yán)重影響模型的收斂速度,甚至由于數(shù)據(jù)分布不一致從而導(dǎo)致模型泛化能力不足.
針對上述問題,本文將批歸一化算法與多層感知機(jī)結(jié)合,構(gòu)建新的多層感知機(jī)深度神經(jīng)網(wǎng)絡(luò)模型,該模型在每個(gè)隱藏層后面增加一個(gè)批歸一化層,該批歸一化層對前一層的輸出進(jìn)行歸一化處理并學(xué)習(xí)其分布特性,保證模型中數(shù)據(jù)分布的一致性.經(jīng)過實(shí)驗(yàn)驗(yàn)證,結(jié)合批歸一化算法的多層感知機(jī)深度神經(jīng)網(wǎng)絡(luò)模型不僅具有較好的泛化能力,而且收斂速度快,同時(shí)其準(zhǔn)確率較上述方法有明顯提高.
為解決多層感知機(jī)的過擬合問題和數(shù)據(jù)分布不一致帶來的負(fù)面影響,將批歸一化算法與多層感知機(jī)結(jié)合,解決多層感知機(jī)在訓(xùn)練過程中的過擬合問題,同時(shí)減小數(shù)據(jù)分布不一致帶來的不利影響,提高模型在訓(xùn)練過程中的收斂速度.批歸一化算法最初由Ioffe 等[9]提出,該算法能夠?qū)斎霐?shù)據(jù)的分布狀況進(jìn)行學(xué)習(xí),保證數(shù)據(jù)分布的一致性,減小數(shù)據(jù)分布改變對訓(xùn)練的影響,加快訓(xùn)練速度[10].此外,該算法能夠在一定程度上消除使用Dropout 的情況,即降低過擬合,提高模型的泛化能力[11].
結(jié)合批歸一化算法的多層感知機(jī)模型如圖1所示.對數(shù)據(jù)集進(jìn)行預(yù)處理,使模型學(xué)習(xí)效果更好.采用zscore 方法將數(shù)據(jù)轉(zhuǎn)換為均值為0,方差為1 的正態(tài)分布;然后將預(yù)處理后的數(shù)據(jù)送至網(wǎng)絡(luò)的輸入層,依次通過3 個(gè)隱藏層,對數(shù)據(jù)的特征進(jìn)行提取,每個(gè)隱藏層后面都有一個(gè)批歸一化層,對每個(gè)隱藏層輸出的分布進(jìn)行學(xué)習(xí)和調(diào)整,最后在輸出層進(jìn)行分類決策得出結(jié)果.
圖1 結(jié)合批歸一化算法的深度神經(jīng)網(wǎng)絡(luò)模型
批歸一化算法單獨(dú)地對每一個(gè)神經(jīng)元的特征進(jìn)行批歸一化處理,并且每次只在一個(gè)訓(xùn)練用的mini-batch上計(jì)算均值和方差,對數(shù)據(jù)歸一化的處理就是讓數(shù)據(jù)的均值為0,方差為1,計(jì)算公式如式(1)所示.
其中,x=(x(1),···,x(d))是輸入數(shù)據(jù),是對應(yīng)的x(k)批歸一化處理后的數(shù)據(jù).輸出在經(jīng)過歸一化處理后會(huì)改變學(xué)習(xí)到的特征分布,批歸一化算法引入的可學(xué)習(xí)的重構(gòu)參數(shù) γ、β,通過重構(gòu)變換恢復(fù)出原始學(xué)到的特征,其表達(dá)式如(2)所示.
結(jié)合批歸一化算法的多層感知機(jī)網(wǎng)絡(luò)結(jié)構(gòu)在每個(gè)隱藏層后有一個(gè)批歸一化層,對隱藏層的輸出進(jìn)行處理,可將其與隱藏層看成一個(gè)結(jié)合層.其結(jié)構(gòu)如圖2所示.
圖2 結(jié)合批歸一化算法的多層感知機(jī)網(wǎng)絡(luò)結(jié)構(gòu)
假設(shè)一個(gè)mini-batch 有m個(gè) 數(shù)據(jù),第l層經(jīng)過一個(gè)mini-batch 后,該層的第i個(gè)神經(jīng)元有m個(gè)輸出,則對應(yīng)的均值、方差以及歸一化處理如式(3)、式(4)以及式(5)所示.
其中,Yil為第l層 第i個(gè)神經(jīng)元經(jīng)過批歸一化層后的輸出,γli和βli分別為第l層第i個(gè)神經(jīng)元的兩個(gè)重構(gòu)參數(shù),每一個(gè)神經(jīng)元都有一對這樣的參數(shù),且這些參數(shù)可以根據(jù)前一層輸出的分布特點(diǎn)進(jìn)行學(xué)習(xí),通過這兩個(gè)參數(shù),使得輸出經(jīng)過歸一化處理后,依然能夠恢復(fù)原先的分布.
隱藏層與批歸一化層形成的結(jié)合層輸出為:
最后一層輸出層y為:
式中,g為輸出層的激活函數(shù),用于決策最終的類別.
使用結(jié)合批歸一化算法的多層感知機(jī)建立糖尿病診斷模型,該模型搭建及訓(xùn)練所用電腦的CPU 配置為Intel Core i7-8750H@2.20 GHz,16 GB 內(nèi)存,模型采用Keras[12],sklearn[13]進(jìn)行實(shí)現(xiàn),并且使用Tensorflow GPU 加速訓(xùn)練.整個(gè)模型建立流程圖如圖3所示.
圖3 糖尿病診斷模型建立流程圖
糖尿病診斷模型建立流程:
(1)定義網(wǎng)絡(luò)隱藏層個(gè)數(shù)及神經(jīng)元個(gè)數(shù).給定網(wǎng)絡(luò)的初始隱層層數(shù)和神經(jīng)元個(gè)數(shù),通過后續(xù)的訓(xùn)練和測試效果,對隱層層數(shù)和神經(jīng)元個(gè)數(shù)做加減,使得模型效果好.
(2)開始訓(xùn)練過程,反復(fù)訓(xùn)練,直到符合要求.將前期劃分出來的訓(xùn)練集輸入網(wǎng)絡(luò)中,并在訓(xùn)練集中劃分0.1 作為驗(yàn)證集微調(diào)模型的超參數(shù),直到訓(xùn)練誤差達(dá)到最小值或誤差不再變化,訓(xùn)練結(jié)束.
(3)將符合要求的網(wǎng)絡(luò)及訓(xùn)練參數(shù)保存下來,用于測試集.對第(2)步中訓(xùn)練好的網(wǎng)絡(luò),保存下來,使用測試集評估網(wǎng)絡(luò)的性能.
(4)重復(fù)(1)到(3)尋找最優(yōu)參數(shù)組合.
本文建立的模型采用PIMA 印第安糖尿病數(shù)據(jù)集(PIDD)[14]進(jìn)行訓(xùn)練.該數(shù)據(jù)集中共有768 條數(shù)據(jù),9 個(gè)屬性,數(shù)據(jù)集屬性如表1所示.該數(shù)據(jù)集中的第9 個(gè)屬性是分類標(biāo)簽,其值為0 和1,0 表示沒有糖尿病,1 表示患有糖尿病.標(biāo)簽為0 的有500 個(gè),為1 的有268 個(gè).前8 個(gè)屬性是每個(gè)樣本的特征.
表1 PIDD 屬性
為了提升模型的訓(xùn)練效果,對該數(shù)據(jù)集進(jìn)行一些預(yù)處理.通過pandas 中的describe 函數(shù)對整個(gè)數(shù)據(jù)集進(jìn)行描述,如表2所示.可以看出數(shù)據(jù)集中各屬性的取值范圍較大.而且該數(shù)據(jù)集屬性量綱不統(tǒng)一,對模型的訓(xùn)練影響較大.因此,本文采用sklean 框架中StandardScaler標(biāo)準(zhǔn)化方法,其通過刪除均值和縮放到單位方差來標(biāo)準(zhǔn)化特征,原理公式為:
其中,z為標(biāo)準(zhǔn)化后的值,s為方差,x為樣本特征值,u為平均值.
表2 PIDD 的描述信息
箱型圖[15]是目前最受歡迎的數(shù)據(jù)分析圖之一,如圖4所示,該圖能夠直觀表示數(shù)據(jù)離散分布狀況,上四分位數(shù)和下四分位數(shù)的間距越小,說明分布越集中,否則越分散.箱型圖的一個(gè)優(yōu)點(diǎn)就是基本不受異常值的影響,因此常用來判斷數(shù)據(jù)集中是否存在異常值.
圖4 箱型圖
對PIDD 應(yīng)用箱型圖,其結(jié)果如圖5所示,可以直觀的看出數(shù)據(jù)的分布狀況,雖然箱型圖對數(shù)據(jù)分析比較客觀,但是同樣需要結(jié)合實(shí)際情況對箱型圖給出的異常值進(jìn)行判斷,比如懷孕次數(shù)中的3 個(gè)異常值是符合實(shí)際的,還有皮脂厚度、遺傳系數(shù)以及年齡等,考慮到實(shí)際情況,這些數(shù)據(jù)不予處理.綜合箱型圖和實(shí)際情況,對數(shù)據(jù)進(jìn)行處理,因?yàn)镻ID 樣本量比較小,若將包含異常樣本的數(shù)據(jù)刪除,將會(huì)丟失其他特征信息.因此,在本文中,對異常值按照缺失值處理,即使用平均值來替換異常值.除了異常值,該數(shù)據(jù)集中同樣包含許多缺失值,對這些缺失值用該列的平均值進(jìn)行替換.
圖5 PIDD 中前8 個(gè)屬性的箱型圖
將處理后的數(shù)據(jù)按照9:1 比例劃分為訓(xùn)練集和測試集,即訓(xùn)練集有691 個(gè)樣本,測試集有77 個(gè)樣本.將訓(xùn)練集送至本文搭建好的神經(jīng)網(wǎng)絡(luò)中進(jìn)行訓(xùn)練,訓(xùn)練過程中劃分0.1 的訓(xùn)練集做驗(yàn)證集,調(diào)整網(wǎng)絡(luò)超參數(shù).經(jīng)過多次實(shí)驗(yàn)調(diào)參,選擇最優(yōu)模型,即3 個(gè)隱藏層,各層神經(jīng)元個(gè)數(shù)分別是16、32、8,輸出層僅有1 個(gè)神經(jīng)元.隱藏層的激活函數(shù)選用Relu 激活函數(shù),該激活函數(shù)能夠使得輸出的均值更接近于0,輸出層的激活函數(shù)選用Softplus 激活函數(shù),該激活函數(shù)更接近生物學(xué)的模型且具有一定的稀疏能力,可進(jìn)一步優(yōu)化網(wǎng)絡(luò)性能[16].采用均方誤差作為損失函數(shù),優(yōu)化器采用Adadelta 優(yōu)化算法.
本文共做了3 組實(shí)驗(yàn),分別是(a)、(b)和(c).(a)組實(shí)驗(yàn)即為本文建立的糖尿病診斷模型;(b)組實(shí)驗(yàn)采用文獻(xiàn)[8]中提出的模型;(c)組實(shí)驗(yàn)將(a)組中所有批歸一化層去除,其他參數(shù)不變,作為一個(gè)MLP.3 組實(shí)驗(yàn)的數(shù)據(jù)集以及預(yù)處理都相同.
3 組實(shí)驗(yàn)訓(xùn)練過程中訓(xùn)練和驗(yàn)證的準(zhǔn)確率與損失值的變化如圖6所示.圖6(a)中訓(xùn)練和驗(yàn)證的損失值在175 輪訓(xùn)練時(shí)趨于穩(wěn)定,且兩者基本重合,網(wǎng)絡(luò)擬合效果好;圖6(b)中訓(xùn)練和驗(yàn)證的損失值在300~350 輪之間已經(jīng)穩(wěn)定,較(a)組收斂稍慢;圖6(c)中很明顯的可以看出,其訓(xùn)練的收斂速度遠(yuǎn)遠(yuǎn)慢于(a)組,說明結(jié)合批歸一化算法的多層感知機(jī)建立的糖尿病診斷模型收斂速度顯著提高.
由圖6中的點(diǎn)虛線和粗實(shí)線(即訓(xùn)練準(zhǔn)確率和驗(yàn)證準(zhǔn)確率)可以看出,(c)組實(shí)驗(yàn)訓(xùn)練集準(zhǔn)確率遠(yuǎn)遠(yuǎn)高于驗(yàn)證集,即模型對訓(xùn)練集過度擬合,泛化能力最差;(a)組和(b)組兩者之間誤差較小,泛化能力好,說明批歸一化算法能夠在一定程度上消除使用Dropout 的情況,提高模型的泛化能力.
3 組實(shí)驗(yàn)的實(shí)驗(yàn)結(jié)果如表3所示,分別記錄各組實(shí)驗(yàn)的訓(xùn)練準(zhǔn)確率、測試準(zhǔn)確率以及AUC 值.由表中數(shù)據(jù)可知,(a)組實(shí)驗(yàn)效果最好.
綜上所述,本文建立的糖尿病診斷模型的使用批歸一化算法,提高了模型的收斂速度,同時(shí)其泛化性能有明顯提高.
本文主要研究多層感知機(jī)在構(gòu)建糖尿病診斷模型中出現(xiàn)的過擬合導(dǎo)致的泛化能力不足以及收斂速度慢等問題,提出將批歸一化算法運(yùn)用到多層感知機(jī)中,利用批歸一化算法能夠?qū)W習(xí)數(shù)據(jù)分布,提高訓(xùn)練速度等優(yōu)點(diǎn),重新構(gòu)建新的多層感知機(jī)深度神經(jīng)網(wǎng)絡(luò)模型.批歸一化算法通過對隱藏層的輸出數(shù)據(jù)進(jìn)行批歸一化處理,并能夠?qū)W習(xí)數(shù)據(jù)的分布,保證了網(wǎng)絡(luò)每次輸出的分布一致,加快收斂速度,并在一定程度上能夠緩解過擬合問題.本文通過對比實(shí)驗(yàn),在PIMA 數(shù)據(jù)集上驗(yàn)證,提出的神經(jīng)網(wǎng)絡(luò)模型在訓(xùn)練集和測試集分別達(dá)到了88.28%和92.21%的準(zhǔn)確率,泛化能力好且收斂速度比其他兩組實(shí)驗(yàn)快,可見基于批歸一化算法改進(jìn)的多層感知機(jī)神經(jīng)網(wǎng)絡(luò)不僅能夠有效降低神經(jīng)網(wǎng)絡(luò)的過擬合問題,提高模型的泛化能力.同時(shí),改進(jìn)的多層感知機(jī)神經(jīng)網(wǎng)絡(luò)模型相比較其他方法在精度上有所提高.下一步工作將利用本文建立的糖尿病診斷模型與實(shí)際應(yīng)用結(jié)合起來,對模型的適用性作進(jìn)一步探究.
圖6 3 組實(shí)驗(yàn)訓(xùn)練過程中訓(xùn)練和驗(yàn)證的準(zhǔn)確率和損失值的變化
表3 3 組實(shí)驗(yàn)的實(shí)驗(yàn)結(jié)果記錄