孟 哲,余 粟
(上海工程技術(shù)大學(xué) 電子電氣工程學(xué)院,上海 200000)
BP神經(jīng)網(wǎng)絡(luò)是目前使用最廣泛的深度學(xué)習(xí)算法之一,其模型原理使它在理論上有逼近任何函數(shù)的能力,它結(jié)構(gòu)靈活,易擴(kuò)展,有強(qiáng)大的自學(xué)習(xí)能力,被廣泛地用于預(yù)測行為,但是它在面對大數(shù)據(jù)集時會出現(xiàn)收斂速度過慢的情況,而Hadoop的出現(xiàn)及時地解決了這一問題。圍繞著Hadoop搭建的集群可以使計算任務(wù)并行運行在集群內(nèi)的每一個工作節(jié)點的計算框架上,針對Hadoop相關(guān)平臺的各種研究開始層出不窮。
針對目前我國存在的出租車調(diào)度問題,圍繞Hadoop搭建了一個打車需求量預(yù)測系統(tǒng)。并且針對上述提到的BP神經(jīng)網(wǎng)絡(luò)的缺點,提出了一種用MapReduce實現(xiàn)的并行BP神經(jīng)網(wǎng)絡(luò)將其用于系統(tǒng)的預(yù)測功能。通過實驗可知并行BP神經(jīng)網(wǎng)絡(luò)比傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)的收斂速度快得多并且訓(xùn)練效果也有提升。
接下來介紹本文作搭建的預(yù)測系統(tǒng)的核心技術(shù)Hadoop和核心算法BP神經(jīng)網(wǎng)絡(luò)。
Hadoop是一個由Apache基金會開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu),它的出現(xiàn)解決了大數(shù)據(jù)時代下海量數(shù)據(jù)的存儲和分析計算問題。且自Hadoop2.x版本推出以后,Hadoop的核心組件有三個,分別是: HDFS(Hadoop分布式存儲文件系統(tǒng))、MapReduce以及Yarn。
HDFS是Hadoop中的分布式文件系統(tǒng),它位于Hadoop生態(tài)圈的最底層,負(fù)責(zé)Hadoop中的存儲工作,其中NameNode負(fù)責(zé)管理整個HDFS,DataNode是具體的工作節(jié)點,進(jìn)行存儲工作并接收和執(zhí)行來自NameNode的命令。
MapReduce是Hadoop中的分布式計算框架,負(fù)責(zé)處理Hadoop的所有計算任務(wù)。它分為map和reduce兩個階段,它將用戶編寫的業(yè)務(wù)邏輯代碼和自帶默認(rèn)組件整合成一個完整的分布式運算程序,然后并發(fā)的運行在一個Hadoop集群上。
Yarn是一個資源調(diào)度框架,它像整個Hadoop集群的大腦一樣負(fù)責(zé)集群內(nèi)部所有的資源管理和調(diào)度,它的存在讓Hadoop集群中的各個組件更加協(xié)調(diào)地工作。
BP神經(jīng)網(wǎng)絡(luò)分為三部分:輸入層、隱含層和輸出層。輸入層負(fù)責(zé)向整個網(wǎng)絡(luò)輸入數(shù)據(jù),輸出層負(fù)責(zé)輸出網(wǎng)絡(luò)的計算結(jié)果,隱含層負(fù)責(zé)網(wǎng)絡(luò)中間的一系列計算。
BP神經(jīng)網(wǎng)絡(luò)的核心原理就是通過輸入層傳入隱含層,隱含層進(jìn)行層層傳遞和計算,最后傳入輸出層輸出結(jié)果。之后對結(jié)果和給定值進(jìn)行誤差分析,然后結(jié)合梯度下降法以及鏈?zhǔn)椒▌t層層進(jìn)行反向傳播以更新網(wǎng)絡(luò)內(nèi)部的參數(shù)。不斷循環(huán)上述過程最后得到一個理想的網(wǎng)絡(luò)模型就是BP神經(jīng)網(wǎng)絡(luò)的核心思想。
BP神經(jīng)網(wǎng)絡(luò)雖然有著優(yōu)秀的自學(xué)習(xí)能力并且理論上能逼近任何函數(shù),但是在數(shù)據(jù)量大的情況仍然存在著收斂速度過慢的問題,為了緩解這一問題,本文提出了基于MapReduce的并行BP神經(jīng)網(wǎng)絡(luò)來對打車需求量進(jìn)行預(yù)測,并用Hadoop搭建了一個打車需求量的預(yù)測系統(tǒng)。
MapReduce在進(jìn)行神經(jīng)網(wǎng)絡(luò)的訓(xùn)練時有優(yōu)勢,也有劣勢,優(yōu)勢在于MapReduce是一個基于Hadoop集群的并行計算框架,多個工作節(jié)點能同時進(jìn)行計算來加快網(wǎng)絡(luò)的訓(xùn)練過程。劣勢在于MapReduce不擅長迭代計算,每一次任務(wù)結(jié)束都要進(jìn)行落盤操作,這就會造成大量的I/O操作。
為了充分利用MapReduce的并行計算優(yōu)勢并降低其劣勢的負(fù)面影響,本文提出的并行BP神經(jīng)網(wǎng)絡(luò)算法流程如圖1所示。
圖1 并行BP神經(jīng)網(wǎng)絡(luò)流程圖
(1)首先將待訓(xùn)練數(shù)據(jù)集進(jìn)行隨機(jī)劃分,每個工作節(jié)點都讀取訓(xùn)練數(shù)據(jù)集隨機(jī)劃分的35%的數(shù)據(jù),并將其傳入map端。
(2)節(jié)點在map端對這35%的訓(xùn)練數(shù)據(jù)進(jìn)行網(wǎng)絡(luò)的迭代訓(xùn)練,每個節(jié)點都在HDFS中有一個唯一的路徑文件,用于存儲本節(jié)點訓(xùn)練過程中的網(wǎng)絡(luò)參數(shù)的變化,節(jié)點在訓(xùn)練過程中會不斷地對其進(jìn)行覆蓋更新,在訓(xùn)練完成之后將節(jié)點自身唯一的編號封裝為key,把訓(xùn)練之后以String形式存儲的網(wǎng)絡(luò)內(nèi)部參數(shù)以及對應(yīng)的誤差封裝為value,然后將
(3)在reduce端相同的key會傳入同一個reduce方法中,在此方法中找出誤差最小的一組參數(shù)即為一個節(jié)點此次訓(xùn)練效果最好的一次,同理找出所有節(jié)點下訓(xùn)練效果最好的一組,并將它們之間再進(jìn)行比較找出所有節(jié)點之間訓(xùn)練效果最好的一組并將其保存到HDFS中,上述過程即為一次MapReduce對BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練的過程。
(4)再次訓(xùn)練時,在map端將HDFS中上次訓(xùn)練得到的網(wǎng)絡(luò)參數(shù)讀入網(wǎng)絡(luò)內(nèi)部并繼續(xù)訓(xùn)練即可。
上述即為本文提出的BP神經(jīng)網(wǎng)絡(luò)在MapReduce實現(xiàn)并行的原理和流程。
為了證明提出的并行BP神經(jīng)網(wǎng)絡(luò)的有效性,搭建了Hadoop集群并進(jìn)行了一系列實驗
基于Hadoop搭建了一個打車需求量預(yù)測系統(tǒng),其中整體框架為包含4個節(jié)點的Hadoop集群,核心的預(yù)測模型為本文提出的并行BP神經(jīng)網(wǎng)絡(luò)。
集群4個節(jié)點的操作系統(tǒng)皆為Centos7.5,并安裝了Hadoop3.2.0以及JDK1.8,它們各自的硬件配置如下:
節(jié)點一:Intel(R) Core(TM) i7-10510U CPU 1.80 GHz 2.30 GHz,8 GB RAM, 8-core 處理器
節(jié)點二:Intel(R) Core(TM) i7-10510U CPU 1.80 GHz 2.30 GHz,6 GB RAM, 6-core 處理器
節(jié)點三:Intel(R) Core(TM) i7-10510U CPU 1.80 GHz 2.30 GHz,4 GB RAM, 4-core 處理器
節(jié)點四:Intel(R) Core(TM) i7-10510U CPU 1.80 GHz 2.30 GHz,4 GB RAM, 4-core 處理器
針對4個節(jié)點各自的硬件配置,為它們分配的集群角色以及工作如表1所示。
表1 4個節(jié)點在集群中扮演的角色
3.1.1 數(shù)據(jù)預(yù)處理
打車需求量預(yù)測系統(tǒng)所用數(shù)據(jù)來源于紐約TLC機(jī)構(gòu),其官網(wǎng)公開了其機(jī)構(gòu)下的三種出租車每年載客的詳細(xì)數(shù)據(jù),包括載客時間、載客地點、卸客地點等,數(shù)據(jù)形式是以月為單位存儲的csv文件,每個文件都包含了上述提到的總共17個字段。
選用黃色種類出租車2017年和2018年兩年的數(shù)據(jù)作為系統(tǒng)預(yù)測模型的訓(xùn)練數(shù)據(jù),用黃色種類出租車2019年的數(shù)據(jù)作為驗證數(shù)據(jù)對訓(xùn)練過后的模型進(jìn)行預(yù)測并對比檢驗。
而由于原始數(shù)據(jù)包含了很多系統(tǒng)用不到的無用字段并且缺少一些影響打車需求量的關(guān)鍵因素,所以需要對原始數(shù)據(jù)進(jìn)行預(yù)處理。
通過分析,推測影響打車需求量的因素包括天氣、溫度、風(fēng)力大小、以及節(jié)假日等。通過查找資料以及歷史數(shù)據(jù)的方式,將相應(yīng)的字段以數(shù)字的表示方式并且以日期為單位單獨寫入一組文件中并存入HDFS。之后將原始數(shù)據(jù)也存入HDFS中,然后通過MapReduce以日期為單位將剔除無用數(shù)據(jù)后的原始數(shù)據(jù)和對應(yīng)日期的上述數(shù)據(jù)合并得到預(yù)處理后的數(shù)據(jù)文件。此時預(yù)處理后的數(shù)據(jù)即可用于系統(tǒng)模型的訓(xùn)練即預(yù)測。
3.1.2 系統(tǒng)架構(gòu)
搭建的打車需求量系統(tǒng)整體架構(gòu)如圖2所示。
圖2 打車需求量系統(tǒng)架構(gòu)圖
(1)所有原始數(shù)據(jù)會先存入HDFS中。
(2)使用MapReduce對原始數(shù)據(jù)進(jìn)行預(yù)處理,并將處理后的結(jié)果再次存入HDFS中。
(3)經(jīng)過預(yù)處理的數(shù)據(jù)即為樣本數(shù)據(jù)集,運行系統(tǒng)的并行BP神經(jīng)網(wǎng)絡(luò)模型對數(shù)據(jù)進(jìn)行訓(xùn)練。
(4)訓(xùn)練完成之后進(jìn)行預(yù)測驗證,輸出結(jié)果。
提出的并行BP神經(jīng)網(wǎng)絡(luò)模型的打車需求量的預(yù)測實驗基于3.1節(jié)搭建的系統(tǒng)環(huán)境,同時將原始BP神經(jīng)網(wǎng)絡(luò)用相同的數(shù)據(jù)集進(jìn)行對比實驗。
圖3展示了兩種模型的迭代訓(xùn)練次數(shù)以及相應(yīng)的預(yù)測精確度,可以很清楚地看出并行BP神經(jīng)網(wǎng)絡(luò)最后收斂時預(yù)測的精度為76.2%要高于傳統(tǒng)模型的66.2%,并且其收斂速度要快于傳統(tǒng)模型。而且圖4清晰地展現(xiàn)出并行BP神經(jīng)網(wǎng)絡(luò)的迭代計算速度要遠(yuǎn)快于傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò),在完成40000次的迭代計算時,傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)耗時25.3 h,而本文提出的并行BP神經(jīng)網(wǎng)絡(luò)僅花費16.9 h,大大提高了訓(xùn)練速度。
圖3 并行BP神經(jīng)網(wǎng)絡(luò)與傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)的訓(xùn)練效果
圖4 并行BP神經(jīng)網(wǎng)絡(luò)與傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)的訓(xùn)練速度
為了進(jìn)一步驗證并行BP神經(jīng)網(wǎng)絡(luò)的有效性,將驗證數(shù)據(jù)隨機(jī)分為10組并分別用并行BP神經(jīng)網(wǎng)絡(luò)和傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)進(jìn)行預(yù)測,并將兩種模型得到結(jié)果的平均絕對誤差和平均絕對百分比誤差進(jìn)行比較。如圖5所示,并行BP神經(jīng)網(wǎng)絡(luò)在對10組數(shù)據(jù)進(jìn)行單日某區(qū)域的出租車需求量預(yù)測時的平均絕對誤差都在180以內(nèi),并且穩(wěn)定性較好。而傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)的平均絕對誤差大都超過了270,并且波動較大。圖6為兩種模型的平均絕對百分比誤差對比,可以明顯看出傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)的平均絕對百分比誤差比并行BP神經(jīng)網(wǎng)絡(luò)高很多,在29.8%~40.2%之間并且波動較大,而后者的平均絕對百分比誤差在20.3%~26.7%之間。
圖5 并行BP神經(jīng)網(wǎng)絡(luò)與傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)的平均絕對誤差對比
圖6 并行BP神經(jīng)網(wǎng)絡(luò)與傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)的平均絕對百分比誤差對比
上述兩組實驗可以充分證明本文提出的并行BP神經(jīng)網(wǎng)絡(luò)的有效性,其比傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)有更快的收斂速度,并且訓(xùn)練效果更好,擁有更高的預(yù)測精度和更小的誤差,能較好地完成出租車需求量預(yù)測的任務(wù)。
提出了基于MapReduce的并行BP神經(jīng)網(wǎng)絡(luò),與傳統(tǒng)BP網(wǎng)絡(luò)相比,其收斂速度加快并且訓(xùn)練效果更好,同時訓(xùn)練速度大大提高。并且針對我國目前存在的出租車調(diào)度問題,搭建了一個打車需求量預(yù)測系統(tǒng),以并行BP神經(jīng)網(wǎng)絡(luò)作為本系統(tǒng)的預(yù)測模型。通過對TLC的公開數(shù)據(jù)進(jìn)行訓(xùn)練和預(yù)測驗證可知系統(tǒng)能較好地完成打車需求量預(yù)測的任務(wù),給交通系統(tǒng)和出租車公司對出租車調(diào)度提供幫助和參考。
未來的工作主要有以下兩個方面:一方面,優(yōu)化并行BP神經(jīng)網(wǎng)絡(luò)的細(xì)節(jié),找到更優(yōu)的用MapReduce實現(xiàn)并行BP神經(jīng)網(wǎng)絡(luò)的方法。另一方面,優(yōu)化Hadoop系統(tǒng)的搭建,包括數(shù)據(jù)的傳輸、預(yù)測結(jié)果的展示等。