馬曉星
(四川大學(xué)計(jì)算機(jī)學(xué)院,成都610065)
BP(Back Propagation),即反向傳播算法,常用于訓(xùn)練前饋神經(jīng)網(wǎng)絡(luò),進(jìn)行監(jiān)督式學(xué)習(xí)。BP 神經(jīng)網(wǎng)絡(luò)是近年來(lái)應(yīng)用最廣泛的神經(jīng)網(wǎng)絡(luò),常見的神經(jīng)網(wǎng)絡(luò)有循環(huán)神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)、逆向圖網(wǎng)絡(luò)等。反向傳播這一術(shù)語(yǔ)在神經(jīng)網(wǎng)絡(luò)中廣為人知是于1986 年由兩位科學(xué)家宣布的,之后這一技術(shù)被獨(dú)立發(fā)現(xiàn)了很多次,且有很多研究甚至可以追溯到20 世紀(jì)60 年代,在結(jié)構(gòu)上分為輸入層、隱藏層和輸出層。它的基本思想是梯度下降法。在擬合神經(jīng)網(wǎng)絡(luò)時(shí),基于梯度搜索技術(shù),通過反向傳播計(jì)算損失函數(shù)及其梯度,調(diào)整網(wǎng)絡(luò)權(quán)值使損失下降到最小。BP 算法通過鏈?zhǔn)椒▌t計(jì)算損失函數(shù)對(duì)每個(gè)權(quán)值的梯度,從最后一層向前迭代,每次計(jì)算一層。
基本的BP 算法包括兩個(gè)過程。從輸入到輸出的方向,計(jì)算網(wǎng)絡(luò)誤差,從輸出到輸入的方向,調(diào)整網(wǎng)絡(luò)的權(quán)值和閾值。向前傳播時(shí),信號(hào)從輸入端,經(jīng)過非線性映射到達(dá)輸出端,若輸出信號(hào)與預(yù)期值的均方差沒有達(dá)到期待值,則轉(zhuǎn)為誤差反向傳播過程。反向傳播時(shí),誤差從輸出端開始逐層傳遞,經(jīng)過隱含層到達(dá)輸入端,各層的權(quán)值都會(huì)以誤差為依據(jù)得到調(diào)整。通過網(wǎng)絡(luò)權(quán)值和閾值的調(diào)整,使得誤差沿著梯度方向下降,經(jīng)過反復(fù)的訓(xùn)練,直到達(dá)到最大迭代次數(shù)或誤差達(dá)到期待值,訓(xùn)練結(jié)束。此時(shí)的網(wǎng)絡(luò)參數(shù),即訓(xùn)練好的BP 神經(jīng)網(wǎng)絡(luò)模型,若將類似樣本作為輸入信息,網(wǎng)絡(luò)經(jīng)過自行計(jì)算,得到預(yù)測(cè)輸出。
BP 神經(jīng)網(wǎng)絡(luò)應(yīng)用非常廣泛,于安雷等人[1]使用BP神經(jīng)網(wǎng)絡(luò)做軟件模型的缺陷預(yù)測(cè),郝海霞等人[2]使用PSO 改進(jìn)的BP 神經(jīng)網(wǎng)絡(luò)做函數(shù)擬合,陳立君等人[3]使用BP 神經(jīng)網(wǎng)絡(luò)做木材紋理分類研究,傅建平等人[4]基于BP 神經(jīng)網(wǎng)絡(luò)訓(xùn)練出發(fā)動(dòng)機(jī)磨損模式識(shí)別模型。林泉等人[5]基于BP 神經(jīng)網(wǎng)絡(luò)對(duì)心電數(shù)據(jù)進(jìn)行壓縮,解決了現(xiàn)有的心電數(shù)據(jù)壓縮方法開支較大、難以在實(shí)際工程應(yīng)用中發(fā)揮作用等問題。
人口普查由國(guó)家出一套統(tǒng)一的標(biāo)準(zhǔn)和規(guī)定,對(duì)全國(guó)現(xiàn)有人口挨家挨戶的進(jìn)行一次全面登記調(diào)查。它是當(dāng)前采集人口信息的一種最基本最科學(xué)的方法,其重點(diǎn)是了解當(dāng)?shù)厝丝谧兓桶l(fā)展、性別占比、出生占比等,是提供人口數(shù)據(jù)信息的重要來(lái)源。本文使用的人口普查數(shù)據(jù)集來(lái)自1994 年,主要調(diào)查數(shù)據(jù)包括年齡、教育程度、工作類別、國(guó)籍、性別等多項(xiàng)屬性,基于BP神經(jīng)網(wǎng)絡(luò)分析主要特征值,預(yù)測(cè)個(gè)人收入是否超過$50K/年。
神經(jīng)元是神經(jīng)網(wǎng)絡(luò)最基本的單元。圖1 給出了神經(jīng)元的一般模型。BP 神經(jīng)網(wǎng)絡(luò)中常用的激活函數(shù)有雙曲正切函數(shù)、閾值函數(shù)和s 型函數(shù)。
圖1 神經(jīng)元模型
前向傳播時(shí),信號(hào)從輸入層進(jìn)入,經(jīng)過隱藏層,到達(dá)輸出層。神經(jīng)元的輸出為:
神經(jīng)網(wǎng)絡(luò)是將多個(gè)神經(jīng)元按一定規(guī)則聯(lián)結(jié)在一起而形成的網(wǎng)絡(luò),其輸入神經(jīng)元的個(gè)數(shù)等于輸入樣本的數(shù)據(jù)維度,輸出神經(jīng)元個(gè)數(shù)與等于需要預(yù)測(cè)的分類數(shù)。通常使用的是三層神經(jīng)網(wǎng)絡(luò),即隱藏層的層數(shù)為一層。
若為二分類問題,BP 網(wǎng)絡(luò)使用Sigmoid 作為傳遞函數(shù),它的特點(diǎn)是函數(shù)導(dǎo)數(shù)和其本身都是連續(xù)的,Sigmoid 函數(shù)有多種定義,其單極性函數(shù)定義如下:
若為多輸出神經(jīng)元,通常采用Softmax 函數(shù),它是二分類Sigmoid 函數(shù)在多分類上的擴(kuò)展,Softmax 能將多分類結(jié)果以概率的方式展示出來(lái)。
采用損失函數(shù)來(lái)衡量輸出值和預(yù)期值之間的誤差,損失函數(shù)值越小,代表擬合程度越好,計(jì)算公式為:
BP 神經(jīng)網(wǎng)絡(luò)采用梯度下降法訓(xùn)練模型,調(diào)整網(wǎng)絡(luò)參數(shù)使模型在訓(xùn)練過程中的損失函數(shù)值下降到最小。
本文使用一個(gè)隱含層,其節(jié)點(diǎn)數(shù)基于經(jīng)驗(yàn)公式確定,公式為:
如果BP 網(wǎng)絡(luò)的初始權(quán)值設(shè)置不合適,BP 網(wǎng)絡(luò)易陷進(jìn)局部極小值。BP 網(wǎng)絡(luò)采用梯度下降技術(shù)來(lái)調(diào)整網(wǎng)絡(luò)的權(quán)值和閾值,這使得網(wǎng)絡(luò)只會(huì)“下坡”而不會(huì)“爬坡”?;谔荻认陆档腂P 算法,其固有缺陷難以克服。BP 的梯度下降不能保證能找到誤差函數(shù)的整體最小值,可能陷入誤差曲面的局部極小值后難以沖出。這些參數(shù)需要不斷地訓(xùn)練才能逐步固定,而過度的訓(xùn)練會(huì)造成過擬合現(xiàn)象,即擬合誤差減少而預(yù)測(cè)誤差增大。
PSO 粒子群算法是優(yōu)化BP 神經(jīng)網(wǎng)絡(luò)最常見的算法之一?;赑SO 算法來(lái)調(diào)整BP 神經(jīng)網(wǎng)絡(luò)權(quán)值的過程是:使用PSO 粒子群算法替換BP 算法中的梯度下降法,優(yōu)化BP 神經(jīng)網(wǎng)絡(luò)模型的權(quán)值和閾值,直到其適應(yīng)度不再有意義地降低。得到初始權(quán)值后,再使用BP算法對(duì)網(wǎng)絡(luò)參數(shù)進(jìn)一步迭代優(yōu)化,得到更精確的解,直到網(wǎng)絡(luò)參數(shù)滿足預(yù)期誤差,即可得到精確的最優(yōu)權(quán)值和閾值組合。PSO 算法與BP 算法的融合主要體現(xiàn)在兩個(gè)方面,首先PSO 算法中粒子的位置向量對(duì)應(yīng)BP算法的全部連接權(quán)值和閾值,PSO 算法通過適應(yīng)度函數(shù)尋找最優(yōu)位置,也就是在尋找BP 網(wǎng)絡(luò)的最優(yōu)權(quán)值和閾值。其適應(yīng)度函數(shù)的定義對(duì)應(yīng)于BP 算法均方誤差,粒子的適應(yīng)度采用BP 算法的前向傳播來(lái)計(jì)算。
人口普查數(shù)據(jù)集的數(shù)據(jù)復(fù)雜,數(shù)據(jù)維度高,為了更好地適應(yīng)BP 神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,需要對(duì)數(shù)據(jù)進(jìn)行特征選擇,嘗試剔除數(shù)據(jù)中的噪聲,選擇出對(duì)于預(yù)測(cè)模型而言的重要特征?;陔S機(jī)森林的特征選擇能夠計(jì)算單個(gè)變量的特征重要性并對(duì)特征進(jìn)行重要性排序,進(jìn)而實(shí)現(xiàn)從所有特征中選出重要性靠前的特征。
基于隨機(jī)森林計(jì)算特征M 重要性步驟如下:
(1)對(duì)每一顆決策樹,選取對(duì)應(yīng)的袋外數(shù)據(jù)(Out Of Bag,OOB)來(lái)計(jì)算袋外數(shù)據(jù)誤差。袋外數(shù)據(jù)就是對(duì)數(shù)據(jù)集進(jìn)行多次抽樣得到子數(shù)據(jù)集,用于訓(xùn)練決策樹。剩余沒有參與決策樹訓(xùn)練的數(shù)據(jù)用于計(jì)算模型的錯(cuò)誤率,對(duì)決策樹進(jìn)行性能評(píng)估,即袋外數(shù)據(jù)誤差err1。
(2)隨機(jī)改變樣本數(shù)據(jù)的特征值M,即對(duì)OOB 所有樣本的特征M 隨機(jī)加入噪聲干擾,重新計(jì)算其袋外誤差err2。
(3)假設(shè)隨機(jī)森林有N 顆數(shù),則特征M 的重要性I 為:
若加入隨機(jī)噪聲后,計(jì)算得到OOB 準(zhǔn)確率嚴(yán)重下降,則說明特征M 對(duì)分類結(jié)果影響度很高,即特征M重要程度比較高。
對(duì)類別特征,需要進(jìn)行One-Hot 編碼(獨(dú)熱編碼),即利用0 和1 表示某些參數(shù),使用N 位狀態(tài)寄存器來(lái)對(duì)N 個(gè)狀態(tài)進(jìn)行編碼。例如輸出值工資,分為>=50k和<=50k,編碼分別表示為[0,1]和[1,0];若特征值婚姻狀況分為已婚、未婚、離婚、喪偶,則未婚狀態(tài)的編碼為[0,1,0,0]。獨(dú)熱編碼能處理非連續(xù)性特征,使得特征矩陣的數(shù)據(jù)變得稀疏,在一定程度上也起到了擴(kuò)充特征的作用。
表1
將處理過的數(shù)據(jù)集按照3:7 分割為測(cè)試集和訓(xùn)練集,首先將訓(xùn)練集輸入BP 神經(jīng)網(wǎng)絡(luò),經(jīng)過反復(fù)迭代,調(diào)整網(wǎng)絡(luò)權(quán)值和閾值,得到收入預(yù)測(cè)模型。然后將測(cè)試集輸入預(yù)測(cè)模型中進(jìn)行測(cè)試,計(jì)算網(wǎng)絡(luò)損失和準(zhǔn)確率,最后得到可視化結(jié)果。
神經(jīng)網(wǎng)絡(luò)輸入神經(jīng)元個(gè)數(shù)即特征值在預(yù)處理和獨(dú)熱編碼后的個(gè)數(shù),在本次實(shí)驗(yàn)中input_n=95,設(shè)輸出神經(jīng)元個(gè)數(shù)output_n=2,設(shè)置訓(xùn)練網(wǎng)絡(luò)的學(xué)習(xí)率為0.01,數(shù)據(jù)集規(guī)模為32561 個(gè)樣本。實(shí)驗(yàn)采用的計(jì)算機(jī)配置如表2。
表2
基于以上實(shí)驗(yàn)環(huán)境和參數(shù)訓(xùn)練BP 神經(jīng)網(wǎng)絡(luò),得到收入預(yù)測(cè)模型的訓(xùn)練和測(cè)試損失如圖2。每次批處理的樣本規(guī)模為64,迭代次數(shù)為20,訓(xùn)練損失和測(cè)試損失在epoch=10 以前隨著迭代次數(shù)增加急速下降,當(dāng)epoch 超過30 時(shí),損失函數(shù)開始收斂,實(shí)驗(yàn)證明基于BP 神經(jīng)網(wǎng)絡(luò)的個(gè)人收入預(yù)測(cè)模型具有較高的收斂速度。
圖2 訓(xùn)練和測(cè)試損失
圖3 分類準(zhǔn)確率
神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)準(zhǔn)確率公式如下:
訓(xùn)練得到分類準(zhǔn)確率如圖3。當(dāng)epoch>15 時(shí),分類準(zhǔn)確率達(dá)到百分之百。實(shí)驗(yàn)證明基于BP 神經(jīng)網(wǎng)絡(luò)的個(gè)人收入預(yù)測(cè)模型具有較高的準(zhǔn)確率。
本文基于人口普查數(shù)據(jù)集,訓(xùn)練出了基于BP 神經(jīng)網(wǎng)絡(luò)的個(gè)人收入預(yù)測(cè)模型,并經(jīng)過真實(shí)的實(shí)驗(yàn),證明了該模型具有較高的收斂速度和準(zhǔn)確率。近年來(lái)研究學(xué)者們探討了很多基于BP 神經(jīng)網(wǎng)絡(luò)的優(yōu)化算法,例如將BP 神經(jīng)網(wǎng)絡(luò)與遺傳算法或PSO 粒子群算法結(jié)合,提高了收斂速度,避免其陷入局部極小值。
然而隨著數(shù)據(jù)規(guī)模越來(lái)越大,BP 神經(jīng)網(wǎng)絡(luò)在處理大數(shù)據(jù)樣本時(shí)暴露出了較明顯的缺陷,例如收斂速度慢,準(zhǔn)確率下降等。我們?cè)诮酉聛?lái)的工作中,也將聚焦于數(shù)據(jù)并行化訓(xùn)練算法,研究集成學(xué)習(xí)算法與BP 神經(jīng)網(wǎng)絡(luò)的結(jié)合方式,并且基于Hadoop 或Spark 等大數(shù)據(jù)平臺(tái),使BP 神經(jīng)網(wǎng)絡(luò)適應(yīng)大數(shù)據(jù)場(chǎng)景,表現(xiàn)出更好的訓(xùn)練效果。