(山東大學(xué)工程訓(xùn)練中心 山東 濟(jì)南 250061)
神經(jīng)網(wǎng)絡(luò)是由許多神經(jīng)元構(gòu)成的,單個(gè)神經(jīng)元與其他神經(jīng)元互聯(lián),形成網(wǎng)狀結(jié)構(gòu),各網(wǎng)狀結(jié)構(gòu)相互盤錯(cuò)形成規(guī)模巨大的多層次人工模型,長久以來,相關(guān)人士一直聚焦于提高神經(jīng)網(wǎng)絡(luò)的訓(xùn)練性能。在深度神經(jīng)網(wǎng)絡(luò)上,算法的改進(jìn)和硬件的性能的提高都可以對(duì)訓(xùn)練性能起到很好的加速作用。設(shè)計(jì)更出色的模型進(jìn)行學(xué)習(xí),來降低訓(xùn)練過程中的難度,這是算法優(yōu)化的主要目的和方法。硬件的優(yōu)化是利用GPU或其他硬件硬件來進(jìn)行訓(xùn)練模型的計(jì)算。借助硬件的良好性能,以期達(dá)到越來越好的加速效果。
深度神經(jīng)網(wǎng)絡(luò)模型在網(wǎng)絡(luò)結(jié)構(gòu)中有非常多隱含單元,這些隱含單元又可以稱作隱含層,涉及范圍之廣層次之深,因此被稱為深度神經(jīng)網(wǎng)絡(luò)。
神經(jīng)系統(tǒng)接收某個(gè)向量作為輸入信號(hào),并且經(jīng)過一系列的中間加工過程。類似于人類的神經(jīng)系統(tǒng),隱含層就像神經(jīng)纖維束,無數(shù)神經(jīng)纖維纏繞盤旋糾結(jié)在一起形成纖維束,但是每個(gè)神經(jīng)元又是獨(dú)立存在,不與其它神經(jīng)元共享連接,每個(gè)神經(jīng)元與前面層的隱含層的每個(gè)神經(jīng)元相連接。最終輸出層輸出所識(shí)別對(duì)象的類別結(jié)果,神經(jīng)網(wǎng)絡(luò)模型中的卷積加工過程分兩步走,一個(gè)是子采樣,另一個(gè)就是子卷積。在卷積層進(jìn)行特征提取時(shí),卷積層中的神經(jīng)元相同層的部分神經(jīng)元間的鏈接共享權(quán)值,神經(jīng)元間是非全連接的。得益于有監(jiān)督的學(xué)習(xí),卷積具有兩種特性,這種良好的性能不僅使學(xué)習(xí)過程中神經(jīng)元間共享權(quán)值的數(shù)量大幅減少,而且也簡(jiǎn)化了網(wǎng)絡(luò)模型訓(xùn)練的復(fù)雜過程,降低了數(shù)據(jù)工作的壓力。
卷積神經(jīng)網(wǎng)絡(luò)主要由輸入層、卷積層、池化層和全連接層構(gòu)成。卷積神經(jīng)網(wǎng)絡(luò)模型的工作過程一般是這樣的:首先提取特征,每一次數(shù)據(jù)訓(xùn)練結(jié)束后,每層隱含層會(huì)向后層神經(jīng)元傳播,后層神經(jīng)元接收傳播的信息后,提取出局部特征以及每個(gè)特征與相鄰特征之間的相鄰位置關(guān)系。其次特征映射,而獨(dú)立的神經(jīng)元具有相同的權(quán)值,從而在整個(gè)過程中,不對(duì)物體在圖像中的位置產(chǎn)生影響,多個(gè)映射結(jié)構(gòu)組成一個(gè)模型中的計(jì)算層。第二步,進(jìn)行子采樣。任何一個(gè)卷積層都包含特征提取、特征映射和子采樣三個(gè)操作,在網(wǎng)絡(luò)結(jié)構(gòu)完成卷積計(jì)算之后會(huì)進(jìn)行二次采樣的處理,這樣做是為了減少訓(xùn)練參數(shù)的規(guī)模。在經(jīng)過多層卷積之后,最終構(gòu)成一個(gè)完整的網(wǎng)絡(luò)模型結(jié)構(gòu)。
如果單個(gè)GPU的存儲(chǔ)內(nèi)存可以大到存儲(chǔ)下所有數(shù)據(jù)時(shí),就可以在深度神經(jīng)網(wǎng)絡(luò)的所有層次中對(duì)所有數(shù)據(jù)進(jìn)行并行化處理。此時(shí),每個(gè)GPU只需要對(duì)一個(gè)批次的輸入數(shù)據(jù)進(jìn)行處理,所有GPU同時(shí)處理所有數(shù)據(jù),數(shù)據(jù)處理的效率也就得到大幅提升。在神經(jīng)網(wǎng)絡(luò)的正向反向傳播的過程中,每個(gè)層的梯度和參數(shù)都會(huì)被復(fù)制并傳遞到每個(gè)GPU。所有的GPU在本地訓(xùn)練權(quán)重及數(shù)據(jù)指導(dǎo)下重新計(jì)算梯度,完成后,新的訓(xùn)練權(quán)重會(huì)替代之前的,通過交換學(xué)習(xí),GPU的本地存儲(chǔ)訓(xùn)練權(quán)重也就被更新過一次了。
將全部梯度劃分K部分,每個(gè)GPU負(fù)責(zé)一個(gè)部分,計(jì)算完成時(shí),第K個(gè)GPU對(duì)其他所有GPU上的提督計(jì)算進(jìn)行累計(jì)整合,然后發(fā)送累計(jì)梯度記錄給所有GPU。這是第一種實(shí)現(xiàn)數(shù)據(jù)并行的方法。第二種方法是在數(shù)據(jù)進(jìn)行反向的傳播過程中生成梯度,每一個(gè)GPU就進(jìn)行異步處理,將梯度值傳遞給對(duì)應(yīng)GPU,在需要對(duì)應(yīng)權(quán)重時(shí)進(jìn)行同步處理,這樣最大程度的加大計(jì)算與通信間的重疊。訓(xùn)練模型的大小直接決定著GPU間通信的開銷,而這與GPU的數(shù)目一般是沒有直接關(guān)系的。如果模型存儲(chǔ)在GPU上后,如果仍然存在空閑內(nèi)存,此時(shí)空閑內(nèi)存可用來緩存訓(xùn)練數(shù)據(jù),縮短訓(xùn)練時(shí)間。
當(dāng)前深度神經(jīng)網(wǎng)絡(luò)模型逐漸增大,單個(gè)GPU存儲(chǔ)不下,因此數(shù)據(jù)并行也僅僅適合小模型。此時(shí),模型并行訓(xùn)練機(jī)制就派上用場(chǎng)了。在卷積層中使用仍然使用數(shù)據(jù)并行,在全連接層中,將大模型劃分成多個(gè)部分分別指派到多個(gè)GPU中去,這樣就可以實(shí)現(xiàn)同時(shí)計(jì)算。卷積層和全連接層具有不同特性,僅有小部分?jǐn)?shù)據(jù)時(shí),所有參數(shù)可以同時(shí)存儲(chǔ)在一個(gè)GPU上,每一批需要處理的圖像分配給全部GPU,這種方法很有效果。但是,當(dāng)全連接層的參數(shù)較多時(shí),則需要所有的GPU均等的劃分這些參數(shù)。最后所有的GPU協(xié)助彼此工作,以在必要時(shí)同步全鏈路層計(jì)算中的參數(shù)。
在當(dāng)前使用的框架中,研發(fā)了許多深度學(xué)習(xí)專用的計(jì)算機(jī)型號(hào)。英偉達(dá)公司近年來目光放在深度學(xué)習(xí)計(jì)算機(jī)的研發(fā)上,軟硬件是深度學(xué)習(xí)的基礎(chǔ),一是硬件開發(fā),更高性能的GPU及其他計(jì)算機(jī)硬件可以推動(dòng)深度學(xué)習(xí)訓(xùn)練的加速。二是設(shè)計(jì)更加高效的并行處理框架。顯然,不同的深度學(xué)習(xí)算法在不同架構(gòu)上會(huì)體現(xiàn)出不同的性能。GPU在處理龐大而繁重的計(jì)算時(shí),單個(gè)GPU計(jì)算性能是八核CPU的十倍,性能遠(yuǎn)優(yōu)于CPU。前面提到還有一種辦法是采用多個(gè)GPU進(jìn)行并行協(xié)同計(jì)算,例如在雙GPU上模擬模型并行訓(xùn)練架構(gòu),GPU相互交流學(xué)習(xí)是通過連接線進(jìn)行的。SGD算法是目前常用的訓(xùn)練算法,該算法有很大的計(jì)算密度,在GPU上運(yùn)行SGD算法可以很好的結(jié)合兩者計(jì)算性能優(yōu)勢(shì)。通常當(dāng)GPU的內(nèi)存不能存儲(chǔ)一個(gè)大型模型的數(shù)據(jù)時(shí),將大型模型擴(kuò)展到多個(gè)GPU上進(jìn)行訓(xùn)練是完全可行的。結(jié)合SGD算法的特點(diǎn),在模型訓(xùn)練過程中,盡可能多的連接高帶寬和低延遲,從而最大限度的減少顯卡相互間通信的開銷。使用多GPU與使用單GPU的差異在于,當(dāng)GPU數(shù)目為一時(shí),數(shù)據(jù)必須全部存儲(chǔ)在一個(gè)GPU上,將數(shù)據(jù)分批次處理,如今模型愈來愈大,大多數(shù)情況下不能存在一個(gè)GPU上,這時(shí)候就體現(xiàn)出了多GPU的優(yōu)勢(shì),眾多GPU協(xié)同工作,將大模型擇分成小模型,每個(gè)GPU的計(jì)算壓力減小,且同時(shí)工作,最后,GPU線程調(diào)度程序整合出一個(gè)完整模型,這樣不僅效率高,而且硬件損耗小。
GPU上的深度神經(jīng)網(wǎng)絡(luò)模型并行系統(tǒng)中最主要的問題就是計(jì)算和訓(xùn)練的模型越來越大無法將全部數(shù)據(jù)存儲(chǔ)在同一塊GPU上,這是深度神經(jīng)網(wǎng)絡(luò)模型并行過程中的主要問題,極大的降低了訓(xùn)練效率,它在現(xiàn)實(shí)生活中的具體應(yīng)用就會(huì)受到限制,所以此后的研究人員應(yīng)將部分目光匯聚于此。