[蘇蕾 岳勝]
近些年,深度學(xué)習(xí)成為許多信息領(lǐng)域中的重要方法,比如視覺識別、自然語言處理以及生物信息學(xué)[1,2]。深度學(xué)習(xí)是一個強(qiáng)有力的處理海量數(shù)據(jù)的工具。而在物聯(lián)網(wǎng)領(lǐng)域中,每天都產(chǎn)生大量的真實的物聯(lián)網(wǎng)絡(luò)數(shù)據(jù),而傳統(tǒng)的機(jī)器學(xué)習(xí)技術(shù)不能有效地處理這些帶噪聲的、復(fù)雜背景的數(shù)據(jù)。然而深度學(xué)習(xí)被認(rèn)為是最有希望解決這類問題的方法[3]。深度學(xué)習(xí)也應(yīng)用被廣泛地引入到物聯(lián)網(wǎng)以及智能手機(jī)等相關(guān)的應(yīng)用中,并取得了令人鼓舞的成績。例如,利用智能電表所收集的數(shù)據(jù),深度學(xué)習(xí)能準(zhǔn)確地預(yù)測家庭用電量,這個技術(shù)可以提高智能電網(wǎng)的供電調(diào)節(jié)效率[4]。由于深度學(xué)習(xí)能高效處理復(fù)雜數(shù)據(jù),因此深度學(xué)習(xí)將在未來的物聯(lián)網(wǎng)設(shè)備中扮演很重要的角色。
邊緣計算是物聯(lián)網(wǎng)服務(wù)中很重要的技術(shù)[5~7]。由于數(shù)據(jù)傳輸?shù)木W(wǎng)絡(luò)性能有限,集中式云計算結(jié)構(gòu)對處理和分析從物聯(lián)網(wǎng)設(shè)備收集的大量數(shù)據(jù)的效率越來越低[8,9]。隨著邊緣計算將計算任務(wù)從集中式的中心云端轉(zhuǎn)到接近物聯(lián)網(wǎng)設(shè)備的邊緣側(cè),通過預(yù)處理能極大減小需要傳輸?shù)臄?shù)據(jù)量。當(dāng)中間數(shù)據(jù)尺度比輸入數(shù)據(jù)要小時,邊緣計算表現(xiàn)非常好。
一個典型的深度學(xué)習(xí)模型通常有許多神經(jīng)網(wǎng)絡(luò)層。為了能更好地描述數(shù)據(jù),我們可以不斷增加網(wǎng)絡(luò)的層數(shù)直到網(wǎng)絡(luò)表達(dá)能力足夠,同時可以利用網(wǎng)絡(luò)學(xué)習(xí)更低維的中間數(shù)據(jù)。因此,深度學(xué)習(xí)非常適應(yīng)邊緣計算的環(huán)境,首先將原始數(shù)據(jù),利用深度學(xué)習(xí)網(wǎng)絡(luò),在邊緣設(shè)備上計算數(shù)據(jù)一個更低維的中間數(shù)據(jù),然后將低維的數(shù)據(jù)處理結(jié)果傳輸?shù)胶诵牡脑品?wù)。
深度學(xué)習(xí)在邊緣計算的另外一個優(yōu)勢是,傳輸中間的低維數(shù)據(jù)能更好地隱私保護(hù)。與之相比,傳統(tǒng)的大數(shù)據(jù)系統(tǒng),比如,MapReduce 或者Spark,由于它們處理的數(shù)據(jù)具有數(shù)據(jù)的語義信息,因此它們產(chǎn)生的中間數(shù)據(jù)含有用戶的隱私。然而,對于深度學(xué)習(xí)模型,它們產(chǎn)生的中間數(shù)據(jù)與原始數(shù)據(jù)相比,具有不同的語義。例如,對于卷積神經(jīng)網(wǎng)絡(luò)來說,從卷積神經(jīng)網(wǎng)絡(luò)的中間層,我們很難由它提取的特征來理解原始數(shù)據(jù)。
因此,在本文中,我們介紹一個將深度學(xué)習(xí)應(yīng)用在物聯(lián)網(wǎng)設(shè)備中,并將其引入到邊緣計算的環(huán)境中,以提高模型的性能并減少數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸。我們提出了一個彈性的模型,它可以適應(yīng)不同的深度學(xué)習(xí)模型。
這篇論文的主要貢獻(xiàn)可以總結(jié)為以下幾點(diǎn)。第一,我們將針對物聯(lián)網(wǎng)應(yīng)用的深度學(xué)習(xí)引入到邊緣計算環(huán)境中。我們提出了一個彈性的模型,它能適應(yīng)各種深度學(xué)習(xí)模型的邊緣計算。
對于物聯(lián)網(wǎng)應(yīng)用及系統(tǒng),深度學(xué)習(xí)是一項新興技術(shù),越來越受到大家的關(guān)注。許多物聯(lián)網(wǎng)的應(yīng)用中,產(chǎn)生了大量的數(shù)據(jù)亟需處理,而與傳統(tǒng)的機(jī)器學(xué)習(xí)方法相比,深度學(xué)習(xí)最大的好處是能處理大數(shù)據(jù),并取得更好的性能。另一個好處是深度學(xué)習(xí)是端對端的算法,不需要手動提取特征,能針對不同的問題,自動從數(shù)據(jù)中提取特征。在處理多媒體信息方面,傳統(tǒng)的機(jī)器學(xué)習(xí)算法的性能依賴于手動提取的特征的正確性。因為深度學(xué)習(xí)能精準(zhǔn)地學(xué)習(xí)更高層次的特征,比如,圖片中的人臉,一段對話中的單詞,因此深度學(xué)習(xí)能提高處理多媒體信息的效率。與此同時,與傳統(tǒng)機(jī)器學(xué)習(xí)方法相比,深度學(xué)習(xí)需要更少的推斷時間。
因此,隨著物聯(lián)網(wǎng)設(shè)備以及技術(shù)的快速發(fā)展,給復(fù)雜的深度學(xué)習(xí)任務(wù)創(chuàng)造了條件。深度學(xué)習(xí)運(yùn)行在物聯(lián)網(wǎng)設(shè)備上時,會受到計算能力以及資源的限制的問題。通常,商業(yè)應(yīng)用的硬件和軟件都不能很好地支持高并行的深度學(xué)習(xí)任務(wù)。文獻(xiàn)[10]提出一個新的加速引擎,比如DeepEar 和DeepX,它能支持不同的深度學(xué)習(xí)應(yīng)用運(yùn)行在潛入最新移動系統(tǒng)的芯片上。實驗結(jié)果表明,帶有高速運(yùn)行的芯片的移動物聯(lián)網(wǎng)設(shè)備能支持部分的學(xué)習(xí)過程。
另外一個重要的研究問題是將深度學(xué)習(xí)部署在更多的物聯(lián)網(wǎng)設(shè)備上[11]。在許多重要的物聯(lián)網(wǎng)應(yīng)用中,已經(jīng)評估了物聯(lián)網(wǎng)深度學(xué)習(xí)的效率。例如,一些研究著重于將可穿戴式物聯(lián)網(wǎng)設(shè)備的應(yīng)用部署在動態(tài)和復(fù)雜環(huán)境中,在這些情況下,傳統(tǒng)的機(jī)器學(xué)習(xí)方法常常感到無能為力。文獻(xiàn)[12]提出一個針對可穿戴設(shè)備的新深度學(xué)習(xí)模型,它可以提高語音識別的準(zhǔn)確率。
大多數(shù)深度學(xué)習(xí)應(yīng)用,比如語音識別,仍然需要云端設(shè)備的支持。文獻(xiàn)[13]提出一個框架,它能將深度學(xué)習(xí)算法和Apache Spark 結(jié)合起來用于物聯(lián)網(wǎng)數(shù)據(jù)分析。推理階段在移動設(shè)備上運(yùn)行,同時Apache Spark 部署在云端,用于支持模型的訓(xùn)練。這種兩層的設(shè)計非常類似于邊緣計算。而邊緣計算顯示,它能將一些處理任務(wù)從后端云測移植到前端的邊緣設(shè)備上。
邊緣計算就是將中心云服務(wù)器的計算能力分配到離用戶近的邊緣節(jié)點(diǎn)上。與當(dāng)前的云計算相比,邊緣計算帶來兩個重要的提高。第一,邊緣節(jié)點(diǎn)可以在將大量數(shù)據(jù)先進(jìn)行預(yù)處理,然后傳輸?shù)胶蠖说脑品?wù)器上。另一個是通過賦予邊緣節(jié)點(diǎn)設(shè)備計算能力可以提高云服務(wù)器的使用效率,優(yōu)化云資源[14]。由于邊緣計算巨大的潛力,云框架的前述問題可以得到很好地解決。
文獻(xiàn)[15]是第一個將深度學(xué)習(xí)應(yīng)用在邊緣計算環(huán)境中。他們提出一個基于深度學(xué)習(xí)的食品識別應(yīng)用,這個應(yīng)用是利用邊緣計算服務(wù)框架。他們的工作顯示邊緣計算通過降低響應(yīng)時間和更低的能耗來提高深度學(xué)習(xí)應(yīng)用的表現(xiàn)。然而,這個工作將移動手機(jī)作為邊緣計算節(jié)點(diǎn),然而這個對于物聯(lián)網(wǎng)設(shè)備來說是不合理的,因為大多數(shù)物聯(lián)網(wǎng)設(shè)備都只是配備低運(yùn)算速度的芯片。因為我們主要關(guān)注通用的物聯(lián)網(wǎng)設(shè)備,它們都沒有較高的能耗以及高速運(yùn)行的芯片。邊緣服務(wù)都部署在物聯(lián)網(wǎng)網(wǎng)關(guān)上,它們擁有足夠的能力運(yùn)行深度學(xué)習(xí)算法。
傳統(tǒng)的方法是將物聯(lián)網(wǎng)設(shè)備端產(chǎn)生的大量數(shù)據(jù)傳送到后端的云服務(wù)器進(jìn)行處理。這些數(shù)據(jù)包括多媒體信息,比如視頻、圖片、聲音或者結(jié)構(gòu)化數(shù)據(jù),例如,溫度數(shù)據(jù)、振動數(shù)據(jù)以及光通量信息。我們現(xiàn)有很多成熟的處理結(jié)構(gòu)化數(shù)據(jù)的方法,然后控制物聯(lián)網(wǎng)設(shè)備。但是傳統(tǒng)的多媒體處理技術(shù)需要復(fù)雜的計算,并不適用于物聯(lián)網(wǎng)設(shè)備。因為深度學(xué)習(xí)可以極大提高處理多媒體信息的效率,越來越多的研究將深度學(xué)習(xí)引入到多媒體物聯(lián)網(wǎng)設(shè)備上。
影像感測是一個很重要的物聯(lián)網(wǎng)應(yīng)用,它能在物聯(lián)網(wǎng)網(wǎng)絡(luò)中融合圖像處理和計算機(jī)視覺。但是從物聯(lián)網(wǎng)設(shè)備中恢復(fù)出來的低質(zhì)量視頻數(shù)據(jù)中識別物體仍然是一個研究難點(diǎn)。由于深度學(xué)習(xí)在視頻識別領(lǐng)域表現(xiàn)出優(yōu)異的性能,我們考慮一個深度學(xué)習(xí)在物聯(lián)網(wǎng)中的典型應(yīng)用,如圖1 所示,我們以視頻識別的物聯(lián)網(wǎng)應(yīng)用作為一個例子講解將深度學(xué)習(xí)引入到物聯(lián)網(wǎng)中來。
圖1 基于深度學(xué)習(xí)的視頻識別
在現(xiàn)實生活中,存在許多無線的視頻攝像頭時刻監(jiān)控環(huán)境并不斷地識別對象。這些無線攝像頭以3 000 kbit/s 的比特率收集720p 的視頻數(shù)據(jù)。接著,終端攝像頭通過已連接的wifi 將收集到的數(shù)據(jù)傳送到物聯(lián)網(wǎng)網(wǎng)關(guān)。物聯(lián)網(wǎng)網(wǎng)關(guān)在對收集到的原始視頻數(shù)據(jù)進(jìn)行編碼和壓縮之后,它通過互聯(lián)網(wǎng)通信將所有收集到的數(shù)據(jù)轉(zhuǎn)發(fā)到后端的云服務(wù)器上。最終,云服務(wù)器通過一個深層神經(jīng)網(wǎng)絡(luò)模型識別收集到的視頻數(shù)據(jù)中的對象。
通常,一個神經(jīng)網(wǎng)絡(luò)模型是多層結(jié)構(gòu)。輸入數(shù)據(jù)將會被這些層的網(wǎng)絡(luò)處理。每一層網(wǎng)絡(luò)都是處理上一層處理后得到的中間特征并得到新的特征。最后,最后一層神經(jīng)網(wǎng)絡(luò)處理得到的特征將被送入一個分類器處理并將識別結(jié)果輸出。在神經(jīng)網(wǎng)絡(luò)中,我們將接近輸入數(shù)據(jù)的網(wǎng)絡(luò)層稱為底層,其他被稱為高層。
在例子中,我們利用AlexNet 識別收集到的視頻數(shù)據(jù)中的對象。AlexNet 總共有8 層,其中前五層是卷基層,后面接三層全聯(lián)接層。
我們首先利用kaggle上的公開數(shù)據(jù)集訓(xùn)練神經(jīng)網(wǎng)絡(luò)。這個數(shù)據(jù)集包含25,000 張貓狗圖片。這個深度學(xué)習(xí)應(yīng)用的主要目的是感知視頻數(shù)據(jù)中的動物。我們利用遷移學(xué)習(xí)技術(shù)建立分類器,處理完所有提取出來的特征后,最后將識別結(jié)果以文本“貓”或者“狗”的形式輸出。
不同于傳統(tǒng)的復(fù)雜預(yù)處理,深度學(xué)習(xí)通過多層神經(jīng)網(wǎng)絡(luò)提取特征,它能提高物聯(lián)網(wǎng)設(shè)備處理多媒體數(shù)據(jù)的效率。但是,提供數(shù)據(jù)處理效率的最大瓶頸是各物聯(lián)網(wǎng)設(shè)備之間的通信。由于收集到的多媒體數(shù)據(jù)的尺度遠(yuǎn)大于傳統(tǒng)的結(jié)構(gòu)數(shù)據(jù),但是從終端物聯(lián)網(wǎng)設(shè)備上收集到的數(shù)據(jù)傳輸?shù)胶蠖说脑品?wù)器上是很難提高網(wǎng)絡(luò)的表現(xiàn)。在這個例子中,每個攝像頭需要3 Mbit/s 的帶寬以便將拍攝的視頻上傳到后端,同時物聯(lián)網(wǎng)網(wǎng)關(guān)需要9 Mbit/s 的帶寬。
為了解決將終端物聯(lián)網(wǎng)設(shè)備收集到的數(shù)據(jù)傳送到后端的云上,邊緣計算是一個可行的解決方案。在物聯(lián)網(wǎng)的網(wǎng)絡(luò)中,有兩層網(wǎng)絡(luò),第一層是邊緣設(shè)備層,另外就是后端云服務(wù)層。邊緣設(shè)備層通常包括物聯(lián)網(wǎng)設(shè)備、一個物聯(lián)網(wǎng)網(wǎng)關(guān)和局部區(qū)域網(wǎng)絡(luò)的網(wǎng)絡(luò)接入點(diǎn)。后端的云端層包括網(wǎng)絡(luò)鏈接設(shè)備以及云服務(wù)器。邊緣計算就是將數(shù)據(jù)處理放在邊緣設(shè)備層而不是后端的云服務(wù)層。在邊緣計算環(huán)境中,因為只有中間處理數(shù)據(jù)或者最后的結(jié)果需要從邊緣設(shè)備傳送到云端的云上,因此,傳送的數(shù)據(jù)量大為減少,這使得網(wǎng)絡(luò)的負(fù)擔(dān)減輕。
邊緣計算非常適合中間處理數(shù)據(jù)的尺寸小于原始輸入數(shù)據(jù)的尺度的任務(wù)。由于深度學(xué)習(xí)網(wǎng)絡(luò)通過卷積濾波器提將輸入數(shù)據(jù)的尺寸降低,使得提取的中間數(shù)據(jù)尺度小于原始的數(shù)據(jù)尺寸,故邊緣計算非常適合深度學(xué)習(xí)任務(wù)。在我們的例子中,如果需要識別每幀數(shù)據(jù),通過第一層卷積網(wǎng)絡(luò),中間數(shù)據(jù)的尺寸是134x89x1B 每幀和2 300 kbit/s。如果我們只想處理視頻數(shù)據(jù)中的關(guān)鍵幀,那么深度網(wǎng)絡(luò)產(chǎn)生的中間數(shù)據(jù)只有95 kbit/s。
如圖2 所示,我們?yōu)槲锫?lián)網(wǎng)應(yīng)用的深度學(xué)習(xí)任務(wù)設(shè)計了一個邊緣計算結(jié)構(gòu)。這個機(jī)構(gòu)是一個典型的邊緣計算結(jié)構(gòu),包含兩層。在邊緣設(shè)別層,邊緣服務(wù)部署在物聯(lián)網(wǎng)網(wǎng)關(guān)上,邊緣服務(wù)可以處理收集到的數(shù)據(jù)。我們首先在后端云服務(wù)上訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)模型。
圖2 針對物聯(lián)網(wǎng)設(shè)備的深度學(xué)習(xí)的邊緣計算框架
模型訓(xùn)練好以后,我們將網(wǎng)絡(luò)分成兩個部分。第一部分包含一些接近輸入數(shù)據(jù)的低層神經(jīng)網(wǎng)絡(luò)層,同時另外一部分是由更接近輸出數(shù)據(jù)的高層神經(jīng)網(wǎng)絡(luò)層。我們將低層神經(jīng)網(wǎng)絡(luò)層部署在邊緣服務(wù)器上,多層神經(jīng)網(wǎng)絡(luò)層部署在云端用于后臺處理。因此,收集到的數(shù)據(jù)輸入到邊緣服務(wù)的第一層神經(jīng)網(wǎng)絡(luò)中。邊緣服務(wù)加載經(jīng)過低層神經(jīng)網(wǎng)絡(luò)層處理的中間數(shù)據(jù),然后將中間數(shù)據(jù)傳輸?shù)皆贫瞬⒆鳛楦邔由窠?jīng)網(wǎng)絡(luò)的輸入。在我們的例子中,我們將第一層部署在物聯(lián)網(wǎng)網(wǎng)關(guān)上,中間數(shù)據(jù)是以134x89x1B/s 被送到云服務(wù)中,進(jìn)行后面的處理。
現(xiàn)在有一個問題就是怎樣將多層神經(jīng)網(wǎng)絡(luò)拆分。通常,高層神經(jīng)網(wǎng)絡(luò)層產(chǎn)生的中間數(shù)據(jù)尺寸要小于低層圣經(jīng)網(wǎng)絡(luò)產(chǎn)生的中間數(shù)據(jù)尺寸。
因此,部署更多層在邊緣服務(wù)上可以降低更多的網(wǎng)絡(luò)通訊。但是,與后端的云服務(wù)相比,前段的邊緣服務(wù)的計算能力有限。因此,邊緣服務(wù)不可能處理無限的任務(wù)。深度學(xué)習(xí)網(wǎng)絡(luò)的每一層都會給服務(wù)帶來額外的計算負(fù)擔(dān)。因此,我們只能部署神經(jīng)網(wǎng)絡(luò)的部分層在邊緣服務(wù)上。
在實驗中,我們有兩個環(huán)境,第一個是從深度學(xué)習(xí)任務(wù)中收集數(shù)據(jù),另外一個是模擬仿真。為了執(zhí)行深度學(xué)習(xí)應(yīng)用,我們使用了一個配有Intel Core I7 7770CPU和NVIDA Geforce GTX 1080 顯卡的服務(wù)器。同時,利用Caffe 搭建CNN 框架并定義了10 個不同的卷積神經(jīng)網(wǎng)絡(luò)。我們執(zhí)行了10 個不同的卷積神經(jīng)網(wǎng)絡(luò)任務(wù)并記錄了操作算子的綜述以及每個卷積網(wǎng)絡(luò)層的中間數(shù)據(jù)。
如圖3 所示,我們選擇兩個卷積神經(jīng)網(wǎng)絡(luò),記為CNN1 和CNN2,作為例子闡述數(shù)據(jù)尺度的縮小比例(藍(lán)色線條)和計算負(fù)荷(紅色線條)。這兩個深度學(xué)習(xí)模型分別有含有五層神經(jīng)網(wǎng)絡(luò),但是網(wǎng)絡(luò)的設(shè)置不同。從圖中可以看出,輸入數(shù)據(jù)可以被深度學(xué)習(xí)網(wǎng)絡(luò)縮小尺寸,同時低層網(wǎng)絡(luò)產(chǎn)生的數(shù)據(jù)相比原始數(shù)據(jù),縮小數(shù)據(jù)尺寸的比例更大。與此同時,計算的負(fù)擔(dān)隨著層數(shù)增加迅速下降。
圖3 深度學(xué)習(xí)網(wǎng)絡(luò)的每層對應(yīng)的數(shù)據(jù)尺寸縮小比例和操作數(shù)
在本文中,我們先介紹了深度學(xué)習(xí)以及邊緣計算的相關(guān)文獻(xiàn)工作,接著將深度學(xué)習(xí)部署在邊緣計算框架下,為了降低數(shù)據(jù)在網(wǎng)絡(luò)中傳輸?shù)牧浚瑢⒕W(wǎng)絡(luò)設(shè)為兩層,第一層為邊緣設(shè)備層,主要進(jìn)行數(shù)據(jù)的收集以及將深度學(xué)習(xí)網(wǎng)絡(luò)的低層網(wǎng)絡(luò)部署在邊緣服務(wù)器上,這樣數(shù)據(jù)可以經(jīng)過深度學(xué)習(xí)的初步處理得到中間數(shù)據(jù),有效降低數(shù)據(jù)量,然后通過物聯(lián)網(wǎng)網(wǎng)關(guān)將這些中間數(shù)據(jù)都傳送到后端的云服務(wù)器上,并進(jìn)行匯總以及送到深度學(xué)習(xí)網(wǎng)絡(luò)的高層網(wǎng)絡(luò)進(jìn)行后續(xù)處理,最后得到最終的結(jié)果。通過這種高效的分布式結(jié)構(gòu),各個邊緣設(shè)備協(xié)同工作,優(yōu)化了深度學(xué)習(xí)網(wǎng)絡(luò)推斷速度,為深度學(xué)習(xí)應(yīng)用部署在邊緣設(shè)備上提供了很好的經(jīng)驗。
當(dāng)然本文只是簡單地探討,后續(xù)需要做更多的實驗,同時對于深度學(xué)習(xí)任務(wù)和設(shè)備之間的調(diào)配需要設(shè)計相關(guān)的算法進(jìn)行優(yōu)化。