- 基于機(jī)器學(xué)習(xí)的數(shù)據(jù)缺失值填補(bǔ):理論與方法
- 賴曉晨 張立勇 劉輝 吳霞
- 4332字
- 2020-09-24 10:12:27
3.2.3 基于神經(jīng)網(wǎng)絡(luò)的填補(bǔ)方法
人工神經(jīng)網(wǎng)絡(luò)(Artif icial Neural Network,ANN),簡稱神經(jīng)網(wǎng)絡(luò),是指由大量簡單的處理單元按一定規(guī)則相互連接而構(gòu)成的網(wǎng)絡(luò)模型。它是在現(xiàn)代神經(jīng)生物學(xué)基礎(chǔ)上提出的數(shù)學(xué)模型,通過對(duì)人腦神經(jīng)系統(tǒng)的抽象、簡化和模擬,實(shí)現(xiàn)復(fù)雜信息的處理。
圖3-5 典型的神經(jīng)元模型
神經(jīng)網(wǎng)絡(luò)中的基礎(chǔ)結(jié)構(gòu)為神經(jīng)元,也可稱作處理單元或者節(jié)點(diǎn)。圖3-5以網(wǎng)絡(luò)模型中第k個(gè)神經(jīng)元為例,介紹其典型結(jié)構(gòu)。圖3-5中所有指向神經(jīng)元的線以及從神經(jīng)元射出的線表示該神經(jīng)元與其他神經(jīng)元間的連接,與輸入端相連的神經(jīng)元借助連接向圖中神經(jīng)元傳遞輸入值,與輸出端相連的神經(jīng)元借助連接獲取圖中神經(jīng)元的輸出值。假設(shè)某一時(shí)刻神經(jīng)元的輸入為xi=[xi1,xi2,…,xis]T(i=1,2,…,n),s表示在輸入端的神經(jīng)元數(shù)目,xij(j=1,2,…,s)表示來自輸入端第j個(gè)神經(jīng)元的輸入,則神經(jīng)元的數(shù)學(xué)描述如式(3-62)所示:
式(3-62)中,?(·)表示神經(jīng)元的激活函數(shù);wjk(j=1,2,…,s)表示輸入端第j個(gè)神經(jīng)元與圖中神經(jīng)元的連接權(quán)重,簡稱權(quán)重,用于模擬不同神經(jīng)元的連接強(qiáng)度;bk表示神經(jīng)元的閾值;netik表示神經(jīng)元輸出。
激活函數(shù)的作用是對(duì)輸入、權(quán)重和閾值計(jì)算而來的數(shù)值進(jìn)行縮放,從而為模型引入非線性因素,并提高其擬合能力。神經(jīng)網(wǎng)絡(luò)理論發(fā)展至今,已存在諸多類型的激活函數(shù),例如修正線性單元(Rectif ied Linear Unit,ReLU)、S型函數(shù)(Sigmoid Function)、雙曲正切函數(shù)(Hyperbolic Tangent Function,Tanh Function)、Softplus函數(shù)(Softplus Function)、線性函數(shù)(Linear Function)以及階躍函數(shù)(Step Function)。這些函數(shù)的形式和數(shù)學(xué)描述如圖3-6所示。
圖3-6 典型的激活函數(shù)示意圖
各類激活函數(shù)具備不同的特點(diǎn),例如,Sigmoid函數(shù)、Tanh函數(shù)曲線平滑,能夠?qū)θ≈捣秶^大的自變量x實(shí)施“擠壓”,并將其分別映射到指定范圍[0,1]、[-1,1]。階躍函數(shù)能夠?qū)⒆宰兞縳映射到集合{0,1}中,適用于二分類問題。ReLU函數(shù)將小于0的自變量映射為0,將大于0的自變量映射為自身取值,函數(shù)的運(yùn)算簡單高效,但在零點(diǎn)不可導(dǎo)。Softplus函數(shù)和ReLU函數(shù)的曲線形式十分相似,并且曲線平滑,處處可導(dǎo)。線性函數(shù)不對(duì)自變量x進(jìn)行任何變換,故因變量和自變量的取值完全相同。
針對(duì)不同場景和具體問題,需選取適合的激活函數(shù)以提高建模精度和效率。通常情況下,隱藏層神經(jīng)元的激活函數(shù)可選用ReLU函數(shù)、Sigmoid函數(shù)、Tanh函數(shù),而輸出層神經(jīng)元的激活函數(shù)一般為線性函數(shù)。
前饋神經(jīng)網(wǎng)絡(luò)是一類典型的神經(jīng)網(wǎng)絡(luò)模型,在此類網(wǎng)絡(luò)中,信息傳遞與處理的方向從輸入層到各隱藏層再到輸出層逐層展開,故取名為前饋。前饋神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)如圖3-7所示。圖3-7中若干個(gè)神經(jīng)元依次排列成層次型結(jié)構(gòu),上層中的神經(jīng)元與下層中的神經(jīng)元之間存在連接。根據(jù)功能的不同,可將各層分為輸入層、隱藏層和輸出層。輸入層負(fù)責(zé)接收外界輸入并傳遞至隱藏層;隱藏層是神經(jīng)網(wǎng)絡(luò)內(nèi)部的信息處理層,負(fù)責(zé)對(duì)輸入數(shù)據(jù)進(jìn)行整合處理,根據(jù)實(shí)際需要可設(shè)置一個(gè)或者多個(gè)隱藏層;輸出層負(fù)責(zé)對(duì)隱藏層傳入的數(shù)據(jù)進(jìn)一步處理,并向外界輸出運(yùn)算結(jié)果。
圖3-7 前饋神經(jīng)網(wǎng)絡(luò)
在前饋神經(jīng)網(wǎng)絡(luò)中,每個(gè)神經(jīng)元均代表以其輸入為自變量的局部非線性函數(shù),若干個(gè)神經(jīng)元的并行與串聯(lián)可看作是對(duì)多個(gè)局部非線性函數(shù)的組合。由此,基于前饋神經(jīng)網(wǎng)絡(luò)能夠建立關(guān)于網(wǎng)絡(luò)輸入的非線性模型,而神經(jīng)元的權(quán)重和閾值構(gòu)成了模型的未知參數(shù)。通過對(duì)模型參數(shù)的學(xué)習(xí)與求解,前饋神經(jīng)網(wǎng)絡(luò)能夠擬合任意復(fù)雜度的非線性函數(shù)。
神經(jīng)網(wǎng)絡(luò)模型能夠?qū)崿F(xiàn)不完整數(shù)據(jù)的有效填補(bǔ)。一方面,正如3.2.1節(jié)和3.2.2節(jié)所述,基于線性回歸的填補(bǔ)方法難以適用于屬性間存在非線性關(guān)系的數(shù)據(jù)集,而傳統(tǒng)基于非線性回歸填補(bǔ)方法的建模過程相對(duì)復(fù)雜。鑒于神經(jīng)網(wǎng)絡(luò)強(qiáng)大的非線性映射能力,其能夠合理挖掘不完整數(shù)據(jù)屬性內(nèi)復(fù)雜的關(guān)聯(lián)關(guān)系,以此進(jìn)行缺失值填補(bǔ)。另一方面,傳統(tǒng)的線性模型和非線性模型僅能擬合單個(gè)不完整屬性,而神經(jīng)網(wǎng)絡(luò)是多入多出(Multi-input-multi-output,MIMO)型的結(jié)構(gòu),即網(wǎng)絡(luò)既可接收多個(gè)輸入,也能向外界傳出多個(gè)輸出。因此,神經(jīng)網(wǎng)絡(luò)能夠同時(shí)對(duì)多個(gè)不完整屬性進(jìn)行擬合,具備更加高效的結(jié)構(gòu)。
基于神經(jīng)網(wǎng)絡(luò)的填補(bǔ)方法首先建立關(guān)于不完整屬性的非線性模型,利用現(xiàn)有數(shù)據(jù)求解模型參數(shù),從而挖掘不完整數(shù)據(jù)屬性間的關(guān)聯(lián)關(guān)系。接著,根據(jù)不完整樣本中的已知信息計(jì)算網(wǎng)絡(luò)輸出,并以該網(wǎng)絡(luò)輸出來填補(bǔ)缺失值。
多層感知機(jī)是前饋神經(jīng)網(wǎng)絡(luò)的一類經(jīng)典模型,其結(jié)構(gòu)和圖3-7所示的網(wǎng)絡(luò)結(jié)構(gòu)完全相同。下面以多層感知機(jī)模型為例,介紹一種基于神經(jīng)網(wǎng)絡(luò)的填補(bǔ)方法。
令X表示樣本數(shù)量為n,屬性個(gè)數(shù)為s的不完整數(shù)據(jù)集,xi=[xi1,xi2,…,xis]T(i=1,2,…,n)表示第i個(gè)樣本,Jco表示完整屬性的下標(biāo)集合,Jin表示不完整屬性的下標(biāo)集合。針對(duì)數(shù)據(jù)集X,構(gòu)建以完整屬性為輸入屬性、不完整屬性為目標(biāo)屬性,并且各層神經(jīng)元數(shù)量分別為|Jco|、n(1)、|Jin|的3層網(wǎng)絡(luò)模型。將完整樣本集合Xco作為訓(xùn)練集,樣本中與完整屬性集合Jco對(duì)應(yīng)的數(shù)值作為網(wǎng)絡(luò)輸入,與不完整屬性集合Jin對(duì)應(yīng)的數(shù)值作為期望輸出。
首先,將樣本xi∈Xco中與完整屬性集合Jco對(duì)應(yīng)的屬性值輸入網(wǎng)絡(luò),根據(jù)式(3-63)求解隱藏層神經(jīng)元的輸出netik(1):
式(3-63)中,?(·)表示隱藏層神經(jīng)元的激活函數(shù);wlk(1)表示第l個(gè)輸入層神經(jīng)元與第k個(gè)隱藏層神經(jīng)元的連接權(quán)重;Jco(l)表示集合Jco中第l個(gè)元素,用于提取樣本中與完整屬性集合Jco對(duì)應(yīng)的屬性值;bk(1)表示第k個(gè)隱藏層神經(jīng)元的閾值。
接著,利用式(3-64)計(jì)算輸出層神經(jīng)元的輸出,即最終的網(wǎng)絡(luò)輸出:
式(3-64)中,表示輸出層的激活函數(shù),wkj(2)表示第k個(gè)隱藏層神經(jīng)元與第j個(gè)輸出層神經(jīng)元的連接權(quán)重,bj(2)表示第j個(gè)輸出層神經(jīng)元的閾值。
以上是針對(duì)不完整數(shù)據(jù)集X所構(gòu)建的多層感知機(jī)填補(bǔ)模型,模型中的權(quán)重與閾值是未知參數(shù),需進(jìn)一步展開求解。模型參數(shù)的計(jì)算過程一般稱為訓(xùn)練過程或?qū)W習(xí)過程。
代價(jià)函數(shù)通常是指由網(wǎng)絡(luò)輸出與期望輸出間的誤差構(gòu)成的函數(shù)。由于網(wǎng)絡(luò)輸出隨著模型參數(shù)的調(diào)整而變化,因此代價(jià)函數(shù)也可看作是以模型參數(shù)為自變量的函數(shù)。在基于神經(jīng)網(wǎng)絡(luò)的填補(bǔ)方法中,一般可根據(jù)所有完整樣本在目標(biāo)屬性的擬合誤差平方和建立代價(jià)函數(shù),如式(3-65)所示:
式(3-65)中,Jin(l)表示集合Jin中的第l個(gè)元素,用于提取樣本中不完整屬性集合Jin所對(duì)應(yīng)的屬性值并將其作為期望輸出。
網(wǎng)絡(luò)訓(xùn)練實(shí)際上是對(duì)代價(jià)函數(shù)進(jìn)行優(yōu)化的過程,即尋找到一組模型參數(shù),使代價(jià)函數(shù)在該參數(shù)下的取值最小。而代價(jià)函數(shù)取值最小,就意味著網(wǎng)絡(luò)輸出與期望輸出間的誤差達(dá)到最小值,由此網(wǎng)絡(luò)模型能夠?qū)崿F(xiàn)對(duì)期望輸出的高精度建模。由最小化代價(jià)函數(shù)求解最佳模型參數(shù)的方法可稱為優(yōu)化算法(Optimization Algorithm)。梯度下降(Gradient Descent,GD)算法是十分經(jīng)典的優(yōu)化算法,其基本思路是將模型參數(shù)的求解視為一個(gè)迭代式的計(jì)算過程,在此過程中模型參數(shù)沿著梯度的負(fù)方向不斷調(diào)整,從而使代價(jià)函數(shù)的取值逐漸減小并最終穩(wěn)定。
下面介紹梯度下降算法的原理,由于該算法需反復(fù)求解并更新模型參數(shù),不妨令Wt表示第t次迭代所得模型參數(shù)構(gòu)成的向量,Wt+1表示第t+1迭代中待求解模型參數(shù)構(gòu)成的向量,L(W)表示以模型參數(shù)為自變量的代價(jià)函數(shù)。對(duì)L(Wt+1)在Wt處做一階泰勒公式展開,可得式(3-66):
式(3-66)中,?L(Wt)表示代價(jià)函數(shù)在Wt處的梯度,Wt+1可進(jìn)一步表示為Wt+ηp,η為較小的常數(shù)值,p為單位向量。Wt+1=Wt+ηp表明本次迭代中待求解的Wt+1將在Wt的基礎(chǔ)上進(jìn)行細(xì)微調(diào)整。由此,式(3-66)可進(jìn)一步推導(dǎo)出式(3-67)。
式(3-67)中,L(Wt)、η、|p|和|?L(Wt)|均為常量,cos(p,?L(Wt))∈[-1,1],該值可根據(jù)單位向量p的方向確定。為了使本次迭代中的代價(jià)函數(shù)L(Wt+ηp)取值最小,cos(p,?L(Wt))需取最小值。根據(jù)余弦函數(shù)的性質(zhì),當(dāng)向量p與?L(Wt)的方向完全相反時(shí),cos(p,?L(Wt))取最小值-1。因此,在每次更新參數(shù)時(shí)梯度下降算法令模型參數(shù)沿梯度的負(fù)方向不斷調(diào)整,直至最終收斂。
目前,在梯度下降算法的基礎(chǔ)上演變出各種版本的改進(jìn)算法,例如,傳統(tǒng)的梯度下降算法在參數(shù)更新時(shí)需利用所有訓(xùn)練樣本計(jì)算代價(jià)函數(shù),而樣本數(shù)量一旦過大,參數(shù)更新將變得緩慢,進(jìn)而使訓(xùn)練過程耗時(shí)。針對(duì)該問題,隨機(jī)梯度下降(Stochastic Gradient Descent,SGD)算法根據(jù)任意樣本在目標(biāo)屬性的擬合誤差更新參數(shù),即每向網(wǎng)絡(luò)中輸入一個(gè)樣本就進(jìn)行一次參數(shù)調(diào)整。SGD算法能夠使模型訓(xùn)練變得高效,但由于每次僅根據(jù)一個(gè)樣本調(diào)整參數(shù),在迭代中模型參數(shù)往往不會(huì)始終向著整體最優(yōu)方向調(diào)整,而是會(huì)以一定的波動(dòng)大體上朝最優(yōu)方向移動(dòng)。小批量梯度下降(Mini Batch Gradient Descent,MBGD)算法是GD和SGD算法的折中,每次利用數(shù)據(jù)集中一小批樣本進(jìn)行參數(shù)更新,既能加快網(wǎng)絡(luò)模型的訓(xùn)練過程,又能夠保證訓(xùn)練平穩(wěn)進(jìn)行以及最終所得參數(shù)的準(zhǔn)確性。此外,諸如自適應(yīng)梯度下降(Adaptive Gradient Descent,AdaGrad)算法在訓(xùn)練期間自適應(yīng)調(diào)整學(xué)習(xí)率,以此實(shí)現(xiàn)對(duì)梯度下降算法的改進(jìn)。
反向傳播(Back Propagation,BP)算法是應(yīng)用于網(wǎng)絡(luò)訓(xùn)練的重要方法,基于BP算法的學(xué)習(xí)過程,包含前向傳播和反向傳播兩部分。前向傳播是指數(shù)據(jù)輸入網(wǎng)絡(luò)后,經(jīng)隱藏層和輸出層的計(jì)算處理后得到網(wǎng)絡(luò)輸出的過程。反向傳播是指將網(wǎng)絡(luò)輸出與期望輸出間的誤差按照由輸出層到輸入層的方向逐層傳播,以此指導(dǎo)模型參數(shù)調(diào)整的過程。BP算法通過迭代式開展前向傳播與反向傳播,不斷地調(diào)整模型參數(shù),使所建模型的誤差逐漸降低并最終穩(wěn)定。
在基于BP算法的訓(xùn)練過程中,首先根據(jù)式(3-64)計(jì)算網(wǎng)絡(luò)輸出yij(j=1,2,…,|Jin|),接著求解代價(jià)函數(shù),并采用梯度下降等優(yōu)化算法調(diào)整模型參數(shù)。模型參數(shù)的調(diào)整規(guī)則如式(3-68)所示:
式(3-68)中,t表示迭代次數(shù);η表示學(xué)習(xí)率;表示代價(jià)函數(shù)關(guān)于每個(gè)模型參數(shù)的偏導(dǎo)數(shù),取值如式(3-69)至式(3-73)所示。
式(3-69)中,?'表示激活函數(shù)?(·)關(guān)于函數(shù)輸入的導(dǎo)數(shù),若?(·)為線性函數(shù),則?'=1。
式(3-71)中,?'表示激活函數(shù)?(·)關(guān)于函數(shù)輸入的導(dǎo)數(shù),若?(·)為Sigmoid函數(shù),則?'的計(jì)算規(guī)則如式(3-72)所示。
填補(bǔ)模型訓(xùn)練完畢后,可應(yīng)用所得模型填補(bǔ)缺失值。針對(duì)不完整樣本xi,根據(jù)式(3-64)計(jì)算網(wǎng)絡(luò)輸出,與樣本缺失值相應(yīng)的網(wǎng)絡(luò)輸出將作為填補(bǔ)值。
上述神經(jīng)網(wǎng)絡(luò)填補(bǔ)方法僅借助一個(gè)多層感知機(jī)即可填補(bǔ)數(shù)據(jù)集中所有的缺失值,盡管建模高效,但對(duì)現(xiàn)有數(shù)據(jù)的利用可能并不充分。考慮以下場景,當(dāng)數(shù)據(jù)集中存在眾多不完整屬性樣本,完整屬性樣本相對(duì)較少時(shí),利用少數(shù)完整屬性擬合多數(shù)不完整屬性的過程可能存在較大誤差。若不完整屬性樣本僅存在一個(gè)缺失值,那么將數(shù)據(jù)集中完整屬性樣本相應(yīng)部分的現(xiàn)有值作為輸入,并參與缺失值求解,而那些未能輸入網(wǎng)絡(luò)的現(xiàn)有值無法被有效利用,則會(huì)導(dǎo)致已知信息的浪費(fèi)。
為了合理利用不完整數(shù)據(jù)集中的現(xiàn)有值,可考慮構(gòu)建多個(gè)網(wǎng)絡(luò)模型,并采用模型集群的方式實(shí)行缺失值填補(bǔ)?;谀P图旱纳窠?jīng)網(wǎng)絡(luò)填補(bǔ)方法將在4.3節(jié)展開詳細(xì)討論。除此之外,第4章探討了多種面向不完整數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò)填補(bǔ)法,包括基于自組織映射網(wǎng)絡(luò)的填補(bǔ)方法、基于單層感知機(jī)的填補(bǔ)方法、基于多層感知機(jī)的填補(bǔ)方法、基于自編碼器及其變體的填補(bǔ)方法,以及面向不完整數(shù)據(jù)的屬性關(guān)聯(lián)性神經(jīng)元建模及填補(bǔ)方法。在這些填補(bǔ)方法中,除自組織映射網(wǎng)絡(luò)與單層感知機(jī)外,其他網(wǎng)絡(luò)模型均采用屬性間相關(guān)性填補(bǔ)缺失值。
總體而言,神經(jīng)網(wǎng)絡(luò)模型構(gòu)造簡單靈活,并且具備強(qiáng)大的非線性映射能力?;谏窠?jīng)網(wǎng)絡(luò)的填補(bǔ)方法通過不完整數(shù)據(jù)的回歸建模合理挖掘數(shù)據(jù)屬性間的非線性關(guān)系,從而提高填補(bǔ)精度。
- 知識(shí)圖譜從0到1:原理與Python實(shí)戰(zhàn)
- 工業(yè)人工智能
- 深度學(xué)習(xí)與計(jì)算機(jī)視覺:項(xiàng)目式教材
- 人工智能通識(shí)
- 不會(huì)被機(jī)器替代的人:智能時(shí)代的生存策略
- 賢二機(jī)器僧漫游人工智能
- 新智元:機(jī)器+人類=超智能時(shí)代
- PVCBOT零基礎(chǔ)機(jī)器人制作
- 基于信息增強(qiáng)的圖神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)方法研究
- PyTorch神經(jīng)網(wǎng)絡(luò)實(shí)戰(zhàn):移動(dòng)端圖像處理
- 自己動(dòng)手制作無人機(jī)
- 豆包:人人都能上手的AI工具
- 深度學(xué)習(xí)入門與實(shí)踐
- 深度學(xué)習(xí)之TensorFlow:入門、原理與進(jìn)階實(shí)戰(zhàn)
- 深度學(xué)習(xí):卷積神經(jīng)網(wǎng)絡(luò)從入門到精通