郭敏鋼,宮 鶴
1.吉林農(nóng)業(yè)大學(xué) 信息技術(shù)學(xué)院,長(zhǎng)春130118
2.吉林農(nóng)業(yè)大學(xué) 吉林省智能環(huán)境工程研究中心,長(zhǎng)春130118
3.吉林農(nóng)業(yè)大學(xué) 吉林省農(nóng)業(yè)物聯(lián)網(wǎng)科技協(xié)同創(chuàng)新中心,長(zhǎng)春130118
隨著深度學(xué)習(xí)[1]的不斷發(fā)展,目前的機(jī)器學(xué)習(xí)框架也是層出疊見(jiàn),例如:Tensorflow[2]、Theano、Keras、Caffe、Torch、DeepLearning4J 等等。首選Tensorflow 作為研究機(jī)器學(xué)習(xí)框架的原因,是其在對(duì)比同類(lèi)機(jī)器學(xué)習(xí)框架的可用性、靈活性、效率、支持等方面都有著優(yōu)異的表現(xiàn)。
卷積神經(jīng)網(wǎng)絡(luò)[3-5]作為一種廣泛的深度學(xué)習(xí)方法,在Google 研發(fā)的Alphago[6]以及圖像分類(lèi)、視頻及聲音識(shí)別[7]、目標(biāo)檢測(cè)[8-9]、醫(yī)學(xué)研究[10]等方面都取得了顯著的效果和極高的效率。
卷積神經(jīng)網(wǎng)絡(luò)的優(yōu)秀性能表現(xiàn)不僅需要像Tensorflow這樣的良好的深度學(xué)習(xí)框架支撐,還要依賴(lài)較為出色的計(jì)算設(shè)備支撐。隨著深度學(xué)習(xí)的不斷發(fā)展,卷積神經(jīng)網(wǎng)絡(luò)計(jì)算模型的復(fù)雜度也隨之增加,使得模型訓(xùn)練的難度及耗時(shí)呈指數(shù)倍增長(zhǎng),單CPU 或單GPU 設(shè)備甚至已經(jīng)無(wú)法解決復(fù)雜網(wǎng)絡(luò)模型的訓(xùn)練耗時(shí)問(wèn)題。為此,本文提出了一種異構(gòu)式CPU+GPU的協(xié)同計(jì)算模型,根據(jù)CPU邏輯運(yùn)算強(qiáng)及GPU 費(fèi)邏輯運(yùn)算強(qiáng)的特點(diǎn),將網(wǎng)絡(luò)模型計(jì)算任務(wù)按模塊分配到CPU 與GPU 設(shè)備上運(yùn)行,通過(guò)耗時(shí)對(duì)比分析得出異構(gòu)式CPU+GPU[11-12]的協(xié)同計(jì)算模型要明顯優(yōu)于單CPU或單GPU計(jì)算模型。有效地提高了卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練速度。
激活函數(shù)在卷積神經(jīng)網(wǎng)絡(luò)中扮演著重要的角色,其作用是將神經(jīng)元的輸入映射到輸出端,常見(jiàn)的激活函數(shù)包括Sigmoid、TanHyperbolic(Tanh)、ReLU、PReLU、Softplus、ELU、Softsign、Swish等。其中,早期的Sigmoid激活函數(shù)、TanHyperbolic(Tanh)激活函數(shù)、Softsign激活函數(shù)均為S型非線(xiàn)性飽和函數(shù),在模型訓(xùn)練中極易造成梯度消失現(xiàn)象。Krizhevsky 等人[4]提出的ReLU 激活函數(shù)由于在正向區(qū)間為線(xiàn)性函數(shù),加快了模型訓(xùn)練的收斂速度的同時(shí)也解決了Softsign、TanHyperbolic(Tanh)、Softsign 激活函數(shù)的梯度消失問(wèn)題,但由于ReLU 激活函數(shù)在x <0 時(shí)梯度為0,這樣就導(dǎo)致負(fù)的梯度在這個(gè)ReLU被置零,容易造成“壞死”現(xiàn)象。在此之后,一些研究者相繼提出了ELU、PReLU、Swish等激活函數(shù)用來(lái)降低“壞死”現(xiàn)象出現(xiàn)的概率,但與此同時(shí)也產(chǎn)生了相應(yīng)的梯度消失和收斂速度過(guò)慢的現(xiàn)象。
本文提出了一種新的激活函數(shù)ReLU-Swish。將ReLU激活函數(shù)和Swish激活函數(shù)的正負(fù)x 半軸進(jìn)行分段組合,使Swish激活函數(shù)x 正半軸成為線(xiàn)性函數(shù)。在CIFAR-10 和MNIST 數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果表明,ReLUSwish激活函數(shù)的準(zhǔn)確率及收斂速度上相比Swish激活函數(shù)[13]表現(xiàn)更優(yōu)秀,有效地緩解了“壞死”現(xiàn)象以及收斂速度過(guò)慢的問(wèn)題,起到了優(yōu)化卷積神經(jīng)網(wǎng)絡(luò)的作用。
Tensorflow 基本系統(tǒng)架構(gòu)如圖1 所示,自下而上分別為設(shè)備管理和通信層、API 接口、計(jì)算圖層、應(yīng)用層。通信層主要負(fù)責(zé)設(shè)備管理及通訊管理,主要負(fù)責(zé)卷積神經(jīng)網(wǎng)絡(luò)中算法的計(jì)算和操作,可以實(shí)現(xiàn)CPU 與GPU 異構(gòu)的特性,并依賴(lài)gRPC協(xié)議實(shí)現(xiàn)設(shè)備間的數(shù)據(jù)更新及傳輸;API 接口是對(duì)Tensorflow 各功能模塊的接口進(jìn)行封裝,使其他平臺(tái)便于調(diào)用;計(jì)算圖層用于構(gòu)建分布式子圖,切割計(jì)算任務(wù)分別運(yùn)行在不同的設(shè)備(CPU、GPU)上;應(yīng)用層通過(guò)API接口調(diào)用Tensorflow各種功能并且實(shí)現(xiàn)相關(guān)的設(shè)計(jì)和應(yīng)用。
圖1 Tensorflow基本系統(tǒng)架構(gòu)圖
Tnsorflow是谷歌基于DistBelief研發(fā)的第二代人工智能學(xué)習(xí)系統(tǒng),2017 年2 月,TensorFlow 1.0 版正式發(fā)布,其當(dāng)年的提交數(shù)目就已超過(guò)2.1萬(wàn),其中還有部分外部貢獻(xiàn)者。同時(shí),TensorFlow是跨平臺(tái)的,它幾乎可以運(yùn)行在所有平臺(tái)上,比如GPU、CPU、移動(dòng)和嵌入式平臺(tái),甚至是張量處理單元(Tensor Processing Units,TPUs)。首選Tensorflow作為研究機(jī)器學(xué)習(xí)框架的原因,是其在對(duì)比同類(lèi)機(jī)器學(xué)習(xí)框架的諸多方面都有著優(yōu)異的表現(xiàn)。如表1所示為常見(jiàn)常用的4個(gè)機(jī)器學(xué)習(xí)開(kāi)源框架在GitHub上各類(lèi)屬性的評(píng)分及對(duì)比。
表1 主流深度學(xué)習(xí)框架評(píng)分
其優(yōu)勢(shì)在于以下幾點(diǎn)。
(1)可用性:Tensorflow 相較于MXNet[14]、Caffe[15]、Theano[16]等框架工作流程相對(duì)容易,可直接寫(xiě)Python/C++程序,節(jié)省了大量的編譯時(shí)間且能夠更快的測(cè)試相應(yīng)的迭代想法;接口穩(wěn)定,兼容性較好。
(2)靈活性:Tensorflow 可在各種不同類(lèi)型的設(shè)備上運(yùn)行,不論是嵌入式系統(tǒng)或者是計(jì)算機(jī)服務(wù)器都能夠很好的搭建相關(guān)環(huán)境。其分布式架構(gòu)能夠降低大量的計(jì)算模型所消耗的時(shí)間,并且可以同時(shí)使用CPU+GPU進(jìn)行運(yùn)算。
(3)開(kāi)源:深度學(xué)習(xí)是未來(lái)的新技術(shù),并且研究方面是全球性的,Tensorflow 的目的是為了形成一個(gè)標(biāo)準(zhǔn)化的工具,同時(shí)也是最好用的深度學(xué)習(xí)工具庫(kù)之一,為用戶(hù)直接提供了一個(gè)更優(yōu)質(zhì)的學(xué)習(xí)環(huán)境。
隨著計(jì)算機(jī)科學(xué)技術(shù)的不斷發(fā)展和進(jìn)步,眾多先進(jìn)技術(shù)的應(yīng)用對(duì)計(jì)算機(jī)的計(jì)算性能需求也在不斷攀升。近幾年來(lái),雖然計(jì)算機(jī)硬件技術(shù)也在繼續(xù)發(fā)展,例如,Intel、IBM、AMD 等生產(chǎn)的通用CPU,采用多核集成的方式提高芯片計(jì)算能力,而非改善處理器主頻率來(lái)增強(qiáng)計(jì)算機(jī)性能的傳統(tǒng)概念。即便如此,很多技術(shù)采用了多核CPU 也無(wú)法滿(mǎn)足大多數(shù)算力的需求。因此,如何解決突破計(jì)算機(jī)算力瓶頸這一問(wèn)題成為了眾多研究學(xué)者及生產(chǎn)業(yè)最為關(guān)注的問(wèn)題。
伴隨著GPU 的相關(guān)技術(shù)架構(gòu)的構(gòu)建被提出,從而使得GPU 在計(jì)算機(jī)計(jì)算性能領(lǐng)域被廣泛推廣及發(fā)展。自1999 年到目前為止,GPU 的運(yùn)算能力得到了飛躍式的提升,并且已經(jīng)將GPU 的應(yīng)用范圍不斷的拓展。例如:從圖形領(lǐng)域來(lái)看,醫(yī)學(xué)家借助GPU可以觀察到更細(xì)微的分子;軍事作戰(zhàn)指揮借助GPU 獲得真實(shí)度更高的模擬作戰(zhàn)演習(xí)環(huán)境;影視劇借助GPU 使得特效更加逼真。近些年來(lái),更多的科學(xué)技術(shù)研究發(fā)現(xiàn)GPU 由于其硬件結(jié)構(gòu)特點(diǎn),在大量的高算力浮點(diǎn)吞吐運(yùn)算環(huán)境中能夠起到非常重要的作用,因此,眾多領(lǐng)域已經(jīng)逐漸開(kāi)始使用GPU設(shè)備作為輔助設(shè)備。
隨著深度學(xué)習(xí)的不斷拓展,卷積神經(jīng)網(wǎng)絡(luò)計(jì)算模型的復(fù)雜度也隨之增加,數(shù)據(jù)計(jì)算量伴著卷積神經(jīng)網(wǎng)絡(luò)層的增加以及參數(shù)的增多而增大,使得模型訓(xùn)練的難度及耗時(shí)呈指數(shù)倍增長(zhǎng),單CPU 或單GPU 設(shè)備甚至已經(jīng)無(wú)法解決復(fù)雜網(wǎng)絡(luò)模型的訓(xùn)練耗時(shí)問(wèn)題。
另一方面,不少研究人員針對(duì)耗時(shí)的問(wèn)題也做了很多的工作,較為常見(jiàn)的方法例如:CPU 串行計(jì)算、GPU并行計(jì)算。值得肯定的是不論CPU串行計(jì)算或是GPU并行計(jì)算都能夠有效地解決復(fù)雜卷積神經(jīng)網(wǎng)絡(luò)耗時(shí)較長(zhǎng)的問(wèn)題,但由于單一計(jì)算模型主要是將卷積神經(jīng)網(wǎng)絡(luò)模型運(yùn)算任務(wù)調(diào)度在CPU 或GPU 設(shè)備上進(jìn)行計(jì)算,這樣容易使得部分設(shè)備(CPU 或GPU)處于空閑狀態(tài),造成資源浪費(fèi),導(dǎo)致性耗比降低。
針對(duì)如何能夠使性耗比提升,提出了異構(gòu)式CPU+GPU協(xié)同計(jì)算模型如圖2所示,在理論上講CPU與GPU兩者的相同點(diǎn)都有總線(xiàn)、緩存體系、數(shù)字和邏輯運(yùn)算單元。但CPU 更適合處理邏輯控制密集的計(jì)算任務(wù),例如:分布式計(jì)算、物理模擬、人工智能等計(jì)算步驟相對(duì)復(fù)雜的任務(wù);而GPU適合處理數(shù)據(jù)密集的計(jì)算任務(wù),例如:數(shù)據(jù)分析、數(shù)據(jù)處理、圖像處理等大量吞吐量設(shè)計(jì)的任務(wù)中。另一方面在SIMD Unit(Single Instruction Multiple Data,單指令多數(shù)據(jù)流,同步同指令)GPU性能要遠(yuǎn)大于CPU,Threads線(xiàn)程數(shù)方面GPU也遠(yuǎn)大于CPU。
圖2 異構(gòu)式CPU+GPU計(jì)算模型
在這個(gè)模型中,CPU 與GPU 協(xié)同工作,各司其職。CPU 負(fù)責(zé)進(jìn)行邏輯性強(qiáng)的事物處理和串行計(jì)算,GPU則專(zhuān)注于執(zhí)行高度線(xiàn)程化的并行處理任務(wù)。
實(shí)驗(yàn)步驟:編寫(xiě)Tensorflow模型訓(xùn)練應(yīng)用程序,Client組件創(chuàng)建Session會(huì)話(huà)并通過(guò)序列化技術(shù)發(fā)送圖定義到Distributed Master組件,Distributed Master會(huì)根據(jù)定義好的三種訓(xùn)練模型(單CPU、單GPU、異構(gòu)式CPU+GPU)參數(shù)進(jìn)行任務(wù)切割,并調(diào)度到指定設(shè)備。其中/job:worker/task:0負(fù)責(zé)模型的訓(xùn)練和推理;/job:ps/task:0負(fù)責(zé)模型參數(shù)的存儲(chǔ)和更新,如圖3所示。
圖3 任務(wù)切割分配圖
圖4 異構(gòu)式CPU+GPU計(jì)算模型與單CPU計(jì)算模型測(cè)試對(duì)比
圖5 異構(gòu)式CPU+GPU計(jì)算模型與單GPU計(jì)算模型測(cè)試對(duì)比
三種訓(xùn)練模型分配方法如下。單CPU:
with tf.device(’/cpu:0’):
w=tf.get_varibale(…)
b=tf.get_varibale(…)
with tf.device(’/cpu:0’):
ad=w+b mu=w*b
單GPU:
with tf.device(’/gpu:0’):
w=tf.get_varibale(…)
b=tf.get_varibale(…)
with tf.device(’/gpu:0’):
ad=w+b
mu=w*b
異構(gòu)式CPU+GPU:
with tf.device(’/cpu:0’):
w=tf.get_varibale(…)
b=tf.get_varibale(…)
with tf.device(’/gpu:0’):
ad=w+b
mu=w*b
實(shí)驗(yàn)測(cè)試:選用三臺(tái)相同型號(hào)及配置的服務(wù)器,其中一臺(tái)做測(cè)試服務(wù)器task1,另兩臺(tái)做對(duì)比測(cè)試服務(wù)器task2、task3,分別在三臺(tái)服務(wù)器上定義sever,并且在task1 上制定job_model1(異構(gòu)式CUP+GPU 訓(xùn)練模型),取兩次測(cè)試結(jié)果的平均值做實(shí)驗(yàn)對(duì)比,在task2、task3上制定job_model2(單CPU、單GPU訓(xùn)練模型),并取task2 與task3 測(cè)試結(jié)果的平均值做實(shí)驗(yàn)對(duì)比,所得結(jié)果如圖4、5 所示。異構(gòu)式CPU+GPU 計(jì)算模型兩次對(duì)比測(cè)試實(shí)驗(yàn)結(jié)果分別為:133.132 362 883 237 8 s、134.860 072 175 262 76 s,而單CPU計(jì)算模型測(cè)試結(jié)果為:189.031 933 339 740 60 s、189.954 021 626 453 37 s;單GPU計(jì)算模型測(cè)試實(shí)現(xiàn)演過(guò)分別為:170.143 887 107 263 25 s、167.609 163 142 034 05 s。測(cè)試實(shí)驗(yàn)結(jié)果的平均值如表2所示。
表2 單CPU、單GPU、異構(gòu)式CPU+GPU測(cè)試實(shí)驗(yàn)結(jié)果平均值
通過(guò)實(shí)驗(yàn)結(jié)果分析可以看出,卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練模型的準(zhǔn)確率幾乎并未改變,而在模型訓(xùn)練耗時(shí)上異構(gòu)式CPU+GPU 模型的時(shí)耗明顯低于單CPU 或單GPU 模型。同時(shí)由于改變了模型訓(xùn)練的任務(wù)調(diào)度,使CPU 和GPU同時(shí)作業(yè),有效地避免了設(shè)備閑置問(wèn)題,從而在性耗比上得到了很好的提升,使卷積神經(jīng)網(wǎng)絡(luò)在模型計(jì)算上得到了很好的優(yōu)化。
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)通俗講是卷積結(jié)構(gòu)的深度神經(jīng)網(wǎng)絡(luò),并且也是一種結(jié)構(gòu)層級(jí)較多的監(jiān)督型學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)。在圖像分類(lèi)、目標(biāo)檢測(cè)、聲音識(shí)別等方面表現(xiàn)出了極高的效率,幾乎接近人類(lèi)所能達(dá)到的認(rèn)知標(biāo)準(zhǔn)和抽象的表達(dá)。卷積神經(jīng)網(wǎng)絡(luò)雖然結(jié)構(gòu)層級(jí)較多,但其占用的內(nèi)存較少,網(wǎng)絡(luò)參數(shù)的個(gè)數(shù)也相對(duì)其他神經(jīng)網(wǎng)絡(luò)相對(duì)較少,這樣便極大的緩解了神經(jīng)網(wǎng)絡(luò)中過(guò)擬合的問(wèn)題。
2012年,Krizhevsky等[4]提出的深度卷積神經(jīng)網(wǎng)絡(luò),總共包含8 層,其中有5 個(gè)卷積層和3 個(gè)全連接層,有60 M 個(gè)參數(shù),神經(jīng)元個(gè)數(shù)為650 k,分類(lèi)數(shù)目為1 000,LRN層出現(xiàn)在第一個(gè)和第二個(gè)卷積層后面,最大池化層出現(xiàn)在兩個(gè)LRN 層及最后一個(gè)卷積層后。AlexNet 卷積神經(jīng)網(wǎng)絡(luò)極大地減少了模型訓(xùn)練時(shí)間,并使用線(xiàn)性ReLU激活函數(shù)加快訓(xùn)練速度。
不論是傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)模型還是當(dāng)下熱門(mén)的深度學(xué)習(xí),激活函數(shù)與神經(jīng)網(wǎng)絡(luò)都密不可分,其作用是將神經(jīng)元的輸入映射到輸出端。神經(jīng)網(wǎng)絡(luò)中的每個(gè)神經(jīng)元節(jié)點(diǎn)接受上一層神經(jīng)元的輸出值作為原神經(jīng)元的輸入值,并將輸入值傳遞給下一層,輸入層神經(jīng)元節(jié)點(diǎn)將輸入屬性值直接傳遞給下一層(隱藏層或輸出層)。在上層節(jié)點(diǎn)的輸出和下層節(jié)點(diǎn)的輸入之間具有一個(gè)函數(shù)關(guān)系,這個(gè)函數(shù)稱(chēng)為激活函數(shù)(又稱(chēng)激勵(lì)函數(shù))。常見(jiàn)的激活函數(shù)包括Sigmoid、TanHyperbolic(Tanh)、ReLU、PReLU、Softplus、ELU、Softsign、Swish等。
4.2.1 ReLU激活函數(shù)
線(xiàn)性整流函數(shù)(Rectified Linear Unit,ReLU)[17-18],又稱(chēng)修正線(xiàn)性單元,如圖6所示。
圖6 ReLU激活函數(shù)
ReLU激活函數(shù)的優(yōu)點(diǎn):
(1)解決了在正區(qū)間梯度消失問(wèn)題。
(2)計(jì)算速度非常快,只需要判斷輸入是否大于0,收斂速度遠(yuǎn)快于Sigmoid 和Tanh(Sigmoid 和Tanh 的梯度在飽和區(qū)域變大非常平緩,接近于0,這就容易造成梯度消失,減緩收斂速度。而ReLU 的梯度是一個(gè)常數(shù),有助于解決深度網(wǎng)絡(luò)的收斂問(wèn)題)。
ReLU函數(shù)的缺點(diǎn):
壞死,ReLU 強(qiáng)制的稀疏處理會(huì)減少模型的有效容量(即特征屏蔽太多,導(dǎo)致模型無(wú)法學(xué)習(xí)到有效特征)。由于ReLU在x <0 時(shí)梯度為0,這樣就導(dǎo)致負(fù)的梯度在這個(gè)ReLU被置零,而且這個(gè)神經(jīng)元有可能再也不會(huì)被任何數(shù)據(jù)激活。
4.2.2 PReLU激活函數(shù)
PReLU(Parametric Rectified Linear Unit)如圖7所示,顧名思義為帶參數(shù)的ReLU。
圖7 PReLU激活函數(shù)
如果ai=0,那么PReLU退化為ReLU。
PReLU函數(shù)的優(yōu)點(diǎn):
相比ReLU 激活函數(shù)PReLU 激活函數(shù)只增加了極少量的參數(shù),也就意味著網(wǎng)絡(luò)的計(jì)算量以及過(guò)擬合的危險(xiǎn)性都只增加了一點(diǎn)點(diǎn)。特別的,當(dāng)不同channels使用相同的ai時(shí),參數(shù)就更少了。
在文獻(xiàn)[19]中,對(duì)比了PReLUu 激活函數(shù)和ReLU激活函數(shù)在ImageNet model A 的訓(xùn)練效果,如8 所示,相對(duì)ReLU激活函數(shù)極大的降低了錯(cuò)誤率。
PReLU激活函數(shù)的缺點(diǎn):
PReLU激活函數(shù)雖然有負(fù)值存在,但是不能確保是一個(gè)噪聲穩(wěn)定的去激活狀態(tài)。
圖8 PReLU與ReLU激活函數(shù)對(duì)比
4.2.3 ELU激活函數(shù)
指數(shù)線(xiàn)性單元(Exponential Linear Unit,ELU)[20]如圖9所示。
圖9 ELU激活函數(shù)
ELU激活函數(shù)函數(shù)的優(yōu)點(diǎn):
(1)ELU由于其正值特性,可以像ReLU激活函數(shù),PReLU激活函數(shù)一樣緩解梯度消失問(wèn)題,如圖10所示。
圖10 ReLU、ELU、PReLU激活函數(shù)
(2)相比ReLU 激活函數(shù),ELU 與PReLU 一樣存在負(fù)值,可以將激活單元的輸出均值往0 推近,減少了計(jì)算量(輸出均值接近0可以減少偏移效應(yīng)進(jìn)而使梯度接近于自然梯度)。
(3)相比PReLU激活函數(shù),ELU在有負(fù)值存在的時(shí)候是一個(gè)指數(shù)函數(shù),對(duì)于輸入來(lái)說(shuō)只定性不定量。
ElU激活函數(shù)函數(shù)的缺點(diǎn):
雖然相對(duì)ReLU 激活函數(shù)降低了壞死率,在x <0時(shí)梯度不為0,保證了部分神經(jīng)元仍然能夠被激活,但與PReLU激活函數(shù)相似,網(wǎng)絡(luò)的計(jì)算量以及過(guò)擬合的危險(xiǎn)仍然很大。
4.2.4 Swish激活函數(shù)
Swish 也被稱(chēng)為self-gated(自門(mén)控)激活函數(shù)如圖11 所示,由谷歌研究人員發(fā)布。Swish 的數(shù)學(xué)表達(dá)為:
圖11 Swish激活函數(shù)
Swish 函數(shù)的優(yōu)點(diǎn):自門(mén)控的優(yōu)勢(shì)是它僅需要一個(gè)簡(jiǎn)單的標(biāo)量輸入,而正常的門(mén)控需要多個(gè)標(biāo)量輸入。Swish激活函數(shù)的表現(xiàn)比ReLU更好,原因在于Swish激活函數(shù)在x 軸的負(fù)區(qū)域內(nèi)末端的圖像形狀與ReLU、PReLU、ELU 激活函數(shù)是不同的,如圖12 所示,這是因?yàn)閟wich 激活函數(shù)即使輸入的值在增加,它的輸出也可以減少。大部分的激活函數(shù)都是單調(diào)的,即它們的輸出值在輸入增加的時(shí)候是不會(huì)減少的。Swish在0點(diǎn)具有單邊有界性,平滑且不單調(diào)。
圖12 ReLU、ELU、PReLU、Swish激活函數(shù)
谷歌測(cè)試證明,在AlexNet 上用MNIST 和Fashion-MNIST數(shù)據(jù)集對(duì)ReLU激活函數(shù)與Swish激活函數(shù)進(jìn)行對(duì)比測(cè)試,結(jié)果如表3所示。
表3 Swish激活函數(shù)谷歌測(cè)試結(jié)果
在3、10、45 三種不同的全連接層上不斷地增加測(cè)試集的難度所得結(jié)果顯示,Swish 激活函數(shù)的測(cè)試結(jié)果明顯優(yōu)于ReLU激活函數(shù)的測(cè)試結(jié)果。
但在收斂性上,Swish 激活函數(shù)較ReLU 激活函數(shù)卻相差很多。
4.2.5 ReLU-Swish激活函數(shù)
針對(duì)Swish 激活函數(shù)的特性提出的ReLU-Swish 激活函數(shù)由兩個(gè)分段函數(shù)組成,如圖13 所示,表達(dá)公式為:f
圖13 ReLU-Swish激活函數(shù)
ReLU-Swish激活函數(shù)與Swish激活函數(shù)對(duì)比,如圖14所示。
圖14 ReLU-Swish、Swish激活函數(shù)對(duì)比
ReLU-Swish在保持Swish原有特性的基礎(chǔ)上,一方面,是為了克服Swish激活函數(shù)在反向傳播求誤差梯度時(shí)涉及參數(shù)較多導(dǎo)致的計(jì)算量較大的問(wèn)題,這樣就可以使得輸出運(yùn)算節(jié)省大量的時(shí)間;另一方面,正是因?yàn)榫W(wǎng)絡(luò)模型在運(yùn)算時(shí)往往需要大量的時(shí)間來(lái)處理大量的數(shù)據(jù),模型的收斂速度成為了極為關(guān)鍵的因素。由于Swish 激活函數(shù)在模型收斂速度上不如ReLU 激活函數(shù),因此將正區(qū)間上的這一段Swish 函數(shù)用ReLU 激活函數(shù)來(lái)替代,從而解決了Swish激活函數(shù)由于模型訓(xùn)練運(yùn)算中參數(shù)過(guò)多而導(dǎo)致的收斂速度過(guò)慢的問(wèn)題。由于ReLU-Swish 激活函數(shù)與Swish 激活函數(shù)在特征性能方面保持著高度的相近性,并且ReLU激活函數(shù)在網(wǎng)絡(luò)模型結(jié)構(gòu)層數(shù)較多時(shí)測(cè)試準(zhǔn)確率較高的優(yōu)勢(shì),所以ReLUSwish激活函數(shù)在提高準(zhǔn)確率及收斂效率上有著明顯的提高。
如圖15,16 所示,在測(cè)試中可以明顯得出ReLUSwish激活函數(shù)的收斂速度相較于Swish激活函數(shù)的收斂速度更快。在準(zhǔn)確率上,在卷積核為10 的小型卷積神經(jīng)網(wǎng)絡(luò)測(cè)試模型下,取3次CIFAR-10、MNIST訓(xùn)練集訓(xùn)練模型結(jié)果的平均accuracy 的結(jié)果如表4、5 所示,ReLU-Swish 激活函數(shù)的準(zhǔn)確率為97.52%,而Swish 激活函數(shù)的準(zhǔn)確率為96.7%,所以在準(zhǔn)確率上ReLU-Swish激活函數(shù)也有所提升。
圖15 ReLU-Swish、Swish激活函數(shù)收斂性對(duì)比
圖16 ReLU-Swish、Swish激活函數(shù)準(zhǔn)確率對(duì)比
表4 ReLU-Swish激活函數(shù)CIFAR-10、MNIST測(cè)試
表5 Swish激活函數(shù)CIFAR-10、MNIST測(cè)試
本文通過(guò)分析研究卷積神經(jīng)網(wǎng)絡(luò)在性耗比上的不足,提出了一種異構(gòu)式CPU+GPU 協(xié)同計(jì)算模型,在性耗比上比單CPU計(jì)算或單GPU計(jì)算的效果更優(yōu)異。本文還通過(guò)分析研究Swish激活函數(shù)以及ReLU在卷積神經(jīng)網(wǎng)絡(luò)中存在的問(wèn)題,提出了一種新的ReLU-Swish 激活函數(shù)。經(jīng)過(guò)測(cè)試實(shí)驗(yàn)驗(yàn)證了ReLU-Swish激活函數(shù)在收斂性及準(zhǔn)確率上都有所提高,在模型訓(xùn)練中表現(xiàn)的更優(yōu)異,達(dá)到了很好的預(yù)期效果,同時(shí)也為卷積神經(jīng)網(wǎng)絡(luò)的研究提供了一種新的方法及思路。