許鄧艷,盧民榮
(1.福建工程學(xué)院 應(yīng)用技術(shù)學(xué)院,福建 福州 350118;2.福建江夏學(xué)院 會(huì)計(jì)學(xué)院,福建 福州 350108;3.福建省社科研究基地財(cái)務(wù)與會(huì)計(jì)研究中心,福建 福州 350108)
近年來,神經(jīng)網(wǎng)絡(luò)的算法、模型及研究內(nèi)容相當(dāng)廣泛,反映出多學(xué)科交叉技術(shù)領(lǐng)域的特點(diǎn)。以人工智能的應(yīng)用為代表,如專家系統(tǒng)、機(jī)器人等應(yīng)用系統(tǒng),已經(jīng)具備機(jī)器學(xué)習(xí)的特性[1-2]?;谏窠?jīng)網(wǎng)絡(luò)算法的深度學(xué)習(xí),能夠讓機(jī)器自我學(xué)習(xí)以及模式識(shí)別,相關(guān)學(xué)習(xí)算法不僅受學(xué)者關(guān)注,也吸引了IBM、Google、Baidu等IT公司投入大量應(yīng)用研發(fā)。隨著機(jī)器學(xué)習(xí)、深度學(xué)習(xí)的發(fā)展,學(xué)習(xí)網(wǎng)絡(luò)規(guī)模越來越大、復(fù)雜度越來越高,學(xué)習(xí)效率問題成為算法最關(guān)鍵的也是最難的研究熱點(diǎn)[3-4]。從1986年提出BP神經(jīng)網(wǎng)絡(luò)(back propagation, BP)至今,BP仍是目前研究和應(yīng)用最廣泛的模型[5],受網(wǎng)絡(luò)的中間層數(shù)、各層的神經(jīng)元個(gè)數(shù)的影響,全連接神經(jīng)網(wǎng)絡(luò)規(guī)模通常都比較大,因此網(wǎng)絡(luò)的學(xué)習(xí)速度慢和容易陷入局部極小值[6-7]。以卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks, CNN)為典型代表的局部連接網(wǎng)絡(luò),通過池化、卷積可以大幅降低網(wǎng)絡(luò)的規(guī)模,有效提升訓(xùn)練效率,然而卷積感受野過大就會(huì)影響感知效率,另外隨著網(wǎng)絡(luò)深度的增加,不斷加深抽象層級(jí)也會(huì)影響計(jì)算效率[8]。循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network, RNN,也稱遞歸神經(jīng)網(wǎng)絡(luò))和在RNN基礎(chǔ)上延伸出來的長短期記憶人工神經(jīng)網(wǎng)絡(luò)(long-short term memory, LSTM),主要是通過全連接網(wǎng)絡(luò)中的數(shù)據(jù)集局部隨機(jī)訓(xùn)練,在效率和準(zhǔn)確率上比BP有明顯優(yōu)勢。另一些學(xué)者是通過適當(dāng)?shù)牡椭纫蜃觼硪瞥疃壬窠?jīng)網(wǎng)絡(luò)卷積核中的冗余參數(shù)來降低網(wǎng)絡(luò)規(guī)模,也有基于參數(shù)共享和 Huffman 編碼來壓縮網(wǎng)絡(luò)的規(guī)模,從而實(shí)現(xiàn)比較高的壓縮率[9-11]。近年,運(yùn)用深度神經(jīng)網(wǎng)絡(luò)連接權(quán)重稀疏和對(duì)濾波器進(jìn)行譜聚類后修剪等大幅提升了網(wǎng)絡(luò)的效率[7,12]。綜上,CNN網(wǎng)絡(luò)通過數(shù)據(jù)特征卷積(再卷積)的局部網(wǎng)絡(luò)逐層縮小后,效率大幅提升,而RNN和LSTM則是訓(xùn)練數(shù)據(jù)的局部化(隨機(jī)性)縮小訓(xùn)練規(guī)模,以及基于這些模型提出的快速學(xué)習(xí)由于不具有圖靈完備性而導(dǎo)致學(xué)習(xí)能力也低于全連接網(wǎng)絡(luò),考慮了效率則損失了準(zhǔn)確率。因此,我們有必要從“局部連接”回到“全連接”的神經(jīng)網(wǎng)絡(luò)進(jìn)行連接優(yōu)化[13],從而在保證準(zhǔn)確率的情況下提升效率。
針對(duì)神經(jīng)網(wǎng)絡(luò)的效率問題,本研究提出一種基于反向隨機(jī)局部投影的神經(jīng)網(wǎng)絡(luò)效率改進(jìn)算法,引入連接縮小參數(shù)降低除倒數(shù)第2層至輸出層外的其它網(wǎng)絡(luò)規(guī)模,同時(shí)運(yùn)用縮減集合解決傳統(tǒng)基于隨機(jī)取數(shù)存在一定信息丟失的概率問題,倒數(shù)第2層至輸出層仍然保留“全連接”,從而實(shí)現(xiàn)從“局部連接”回到“全連接”神經(jīng)網(wǎng)絡(luò)的連接優(yōu)化。最后通過26字母發(fā)音數(shù)據(jù)集ISOLET不同參數(shù)、不同網(wǎng)絡(luò)層數(shù)的測試,來論證在保證不降低準(zhǔn)確率的情況下,基于反向隨機(jī)局部投影的網(wǎng)絡(luò)在語音識(shí)別上的效率有較大提升。
以典型的3層神經(jīng)網(wǎng)絡(luò)為例,網(wǎng)絡(luò)實(shí)現(xiàn)主要分為前向網(wǎng)絡(luò)和反向網(wǎng)絡(luò),神經(jīng)網(wǎng)絡(luò)的節(jié)點(diǎn)與權(quán)重的工作原理基本雷同,具體步驟如下[5-7]:
第一步:各層節(jié)點(diǎn)準(zhǔn)備,設(shè)置網(wǎng)絡(luò)的迭代次數(shù)。
第二步:初始化各層全連接權(quán)重,第一次需要初始化,后面根據(jù)誤差反向傳播進(jìn)行更新。
第1至2層:0到1之間隨機(jī)生成n×h權(quán)重矩陣,用W1表示;同理生成第2至3層權(quán)重h×m,用W2表示。
第三步:第1層到第2層前向信息傳輸。
首先,把第1層的輸入轉(zhuǎn)為第1層的輸出即O1=X,再與W1計(jì)算獲得第2層的輸入(公式1),然后對(duì)第2層的輸入進(jìn)行激活,生成第2層的輸出(公式2)。
(1)
式中,O1i表示第1層的第i個(gè)節(jié)點(diǎn)(神經(jīng)元)的輸出,X′j表示第2層的第j個(gè)節(jié)點(diǎn)的輸入。
O2=σ(X′j)
(2)
第四步:重復(fù)第二至第三步(對(duì)于多層神經(jīng)網(wǎng)絡(luò),重復(fù)至輸出層即結(jié)束前向網(wǎng)絡(luò)),將矩陣計(jì)算換成W2,輸出激活后為O3,然后判斷網(wǎng)絡(luò)的輸出O3和實(shí)際輸出的Y的誤差。
第五步:計(jì)算總誤差,并進(jìn)行反向傳播。
首先把網(wǎng)絡(luò)的輸出O3和實(shí)際輸出的Y進(jìn)行相差比較,獲得總誤差E,計(jì)算如公式3示。
(3)
然后進(jìn)行反向傳播第3層(也叫輸出層、最終層、結(jié)果層等,示例為3層網(wǎng)絡(luò))到第2層,由于矩陣運(yùn)算的原因,需要對(duì)第2至3層權(quán)重h×m,W2進(jìn)行轉(zhuǎn)置即W2T=W(m×h),進(jìn)行計(jì)算誤差平攤即每個(gè)節(jié)點(diǎn)的誤差ΔE,如公式4示。
(4)
式中,ΔE2表示第2層節(jié)點(diǎn)輸出的平均誤差,?為學(xué)習(xí)率,不同應(yīng)用則網(wǎng)絡(luò)設(shè)定的權(quán)值不一樣,因?yàn)樵O(shè)置過高會(huì)使梯度下降時(shí)找不到最優(yōu)解,設(shè)置過低又容易讓網(wǎng)絡(luò)效率變低。
第六步:更新權(quán)重,這也是網(wǎng)絡(luò)的核心。
根據(jù)上述公式(3)、(4)推導(dǎo),把平均誤差計(jì)算出來分?jǐn)傊粮鱾€(gè)連接的權(quán)重進(jìn)行調(diào)節(jié),如公式5。
ΔW2=?×E3×σ(O3)×(1-σ(O3))·O3T
(5)
式中,ΔW2更新后的第2層權(quán)重,?為學(xué)習(xí)率,σ表示激活函數(shù),O3T表示O3的轉(zhuǎn)置。
第七步:重復(fù)第五至第六步(對(duì)于多層神經(jīng)網(wǎng)絡(luò),重復(fù)至輸入層即結(jié)束反向網(wǎng)絡(luò)),計(jì)算誤碼差和權(quán)重矩陣的更新,即完成W1的更新。
第八步:繼續(xù)前向網(wǎng)絡(luò)、反向網(wǎng)絡(luò)即第二到第七步,直至整個(gè)網(wǎng)絡(luò)迭代結(jié)束。
權(quán)重是神經(jīng)網(wǎng)絡(luò)的核心部分[13],其計(jì)算量也是最大的部分,前向網(wǎng)絡(luò)中需要同神經(jīng)元進(jìn)行矩陣相乘運(yùn)算,在反向網(wǎng)絡(luò)中需要轉(zhuǎn)置后與誤差進(jìn)行矩陣相乘運(yùn)算,再根據(jù)學(xué)習(xí)率修正權(quán)重矩陣的值,因此,我們可以在現(xiàn)行網(wǎng)絡(luò)結(jié)構(gòu)和工作原理不變的情況下,用降低權(quán)重矩陣思路優(yōu)化局部連接,提升網(wǎng)絡(luò)的效率(本方法也稱為局部網(wǎng)絡(luò)模型),另一方面,為了讓輸出層與輸入層有較為直接的連接則讓第2至3層網(wǎng)絡(luò)連接(最后一層的網(wǎng)絡(luò)連接)仍然使用全連接方式,具體改進(jìn)后的網(wǎng)絡(luò)示意圖如圖1。
圖1 改進(jìn)連接后的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
基于改進(jìn)的權(quán)重連接主要是通過輸出端(相對(duì)上一層網(wǎng)絡(luò)的輸入,圖1中的右側(cè)數(shù)字節(jié)點(diǎn))反向局部投影到輸入端(相對(duì)下一層網(wǎng)絡(luò)的輸出,圖1中的右側(cè)非數(shù)字節(jié)點(diǎn)),為方便表達(dá),仍然使用上述經(jīng)典的3層網(wǎng)絡(luò),變量的定義同上述說明,具體平均分布投影過程如下:
第一步:根據(jù)縮小參數(shù)計(jì)算連接數(shù)公式(6)和輸入端節(jié)點(diǎn)平均輸出公式(7)。
(6)
(7)
式中,[]表示取整,如果有小數(shù)直接去除,Omin表示輸入端節(jié)點(diǎn)平均最少輸出。而Omin+1則為平均最多輸出Omax。
第二步:反向隨機(jī)局部投影連接,反向投影具體做法:
(1)從輸出端第一節(jié)點(diǎn)開始,從輸入端節(jié)點(diǎn)1至n(輸入端集合用I表示)中隨機(jī)取局部連接數(shù)Oceil,被取出的節(jié)點(diǎn)設(shè)置該節(jié)點(diǎn)隨機(jī)權(quán)重W(Oceil×h)并記入輸入端節(jié)點(diǎn)號(hào);
(2)對(duì)已經(jīng)反向投影的局部連接節(jié)點(diǎn)進(jìn)行記數(shù)Oc(從1開始),為保證所有輸入節(jié)點(diǎn)信息都能被傳遞到輸出端,在輸入端集合I中隨機(jī)去除Oc中記數(shù)最高的至縮減集合R中。
(3)改進(jìn)隨機(jī)局部連接算法,部分研究表明隨機(jī)局部連接算法確實(shí)有效,但傳統(tǒng)基于概率的隨機(jī)取數(shù)存在一定信息丟失的概率問題[13,16-17]。改進(jìn)方法為如果I的數(shù)量小于Oceil,則從R中再還原至少I的數(shù)量和Oceil數(shù)量差,還原規(guī)則為Oc最小優(yōu)先,如已經(jīng)達(dá)到輸入端節(jié)點(diǎn)最多輸出(Oavg+1)則不再被還原,具體I、R、Oceil等集合的出入棧結(jié)構(gòu)如圖2示。
(4)繼續(xù)輸出端下一節(jié)點(diǎn)的投影,重復(fù)(1)-(3),直至輸出端節(jié)點(diǎn)結(jié)束。
第三步:如果為多層網(wǎng)絡(luò),重復(fù)第一、二步,直到倒數(shù)第2層。
第四步:從“局部連接”再到全連接。
在倒數(shù)第2層到最后1層,采用全連接輸出,不要再使用局部投影,以免前期輸入到最終輸出產(chǎn)生丟失。
在3層網(wǎng)絡(luò)中,第2至3層仍為全連接網(wǎng)絡(luò),因此算法主要以網(wǎng)絡(luò)中第2層(輸出端)到第1層(輸入端)反向隨機(jī)局部投影連接算法進(jìn)行設(shè)計(jì),具體實(shí)現(xiàn)的過程如下:
Inputs: input_nodes: 輸入端,hidden_nodes:輸出端,reduce: 連接縮小參數(shù).Outputs: weights: 局部投影的權(quán)重.n, h←len(input_nodes),len(hidden_nodes) #輸入與輸出端節(jié)點(diǎn)數(shù)oceil,omin,omax←ceil(n/reduce) , int(oceil *h/n), omin +1#節(jié)點(diǎn)連接數(shù) oc,weights←[(0*2) for i in range(h)] #實(shí)始化節(jié)點(diǎn)取數(shù)和權(quán)重矩陣I,T,R←[(i*1) for i in range(h)],[],[]#初始化輸入端、臨時(shí)和縮減集合for i in range(hidden_nodes):#輸出端節(jié)點(diǎn)迭代I←I-R#排除縮減集合for j in range(oceil): #隨機(jī)取數(shù),個(gè)數(shù)為oceil則停止t←random.randint(I)T.add(t),I.pop(t)#臨時(shí)入棧和出棧oc[t]←oc[t]+1#計(jì)數(shù)累加weights.append([t,random(0,1)])#隨機(jī)權(quán)重oc←sort(oc,1)#按計(jì)數(shù)排序R←random(I,oc, random.randint(I)) #隨機(jī)去除if(len(I)< oceil ):#防止去除過多I←oc[i]<= omaxΔ random(R,oc, random.randint(R)):pass#超限則不再被還原 return weights
實(shí)驗(yàn)硬件為聯(lián)想Thinkserver RD350服務(wù)器,操作系統(tǒng)為Windows Server 2008 R2。在軟件配置上需要Python3.7及相應(yīng)的運(yùn)行包安裝,開發(fā)環(huán)境使用MyEclipse 2017 CI開發(fā)工具。在實(shí)驗(yàn)中,采用BP網(wǎng)絡(luò)和本算法針對(duì)同一標(biāo)準(zhǔn)數(shù)據(jù)集進(jìn)行比較。
為了方便實(shí)驗(yàn)對(duì)比,采用標(biāo)準(zhǔn)的數(shù)據(jù)集ISOLET(訓(xùn)練集和測試集各26組數(shù)據(jù),表2)進(jìn)行不同側(cè)面的準(zhǔn)確率、效率對(duì)比分析,以論證反向隨機(jī)局部投影的改進(jìn)情況?;贐P神經(jīng)網(wǎng)絡(luò)的局部連接網(wǎng)絡(luò)參數(shù)(主要設(shè)置了縮減參數(shù))配置如表1示。
表1 局部連接網(wǎng)絡(luò)模型的參數(shù)配置
表2 ISOLET數(shù)據(jù)集
反向隨機(jī)局部投影的神經(jīng)網(wǎng)絡(luò)規(guī)模隨著縮減參數(shù)的增加而增少,其模型效率提升,但準(zhǔn)確率也會(huì)下降,反之也成立,當(dāng)縮減參數(shù)為1.0時(shí)則模型和全連接網(wǎng)絡(luò)一致?;谏窠?jīng)網(wǎng)絡(luò)的深度學(xué)習(xí)模型中,隨著迭代次數(shù)增加(也稱“學(xué)習(xí)深入”),網(wǎng)絡(luò)訓(xùn)練結(jié)果準(zhǔn)確率逐步提高,但時(shí)間消耗也增加(也稱“學(xué)習(xí)效率”)[18],實(shí)驗(yàn)以準(zhǔn)確率能達(dá)到90%左右效果為基準(zhǔn),取迭代20次,分別調(diào)整縮減參數(shù)為:1.4、1.6、1.8、2.0、2.5、3.0進(jìn)行實(shí)驗(yàn),準(zhǔn)確率、效率實(shí)驗(yàn)效果如圖3、圖4所示。
在圖3中,由于全連接網(wǎng)絡(luò)是沒有縮減參數(shù)調(diào)節(jié),因此其準(zhǔn)確率是一條固定的直線,在實(shí)驗(yàn)的數(shù)據(jù)集中縮減參數(shù)在1.8、2.0時(shí)基本和全網(wǎng)絡(luò)接近,而設(shè)置為1.4、1.6時(shí)則優(yōu)于傳統(tǒng)全連接網(wǎng)絡(luò)。不過縮減參數(shù)設(shè)置較大,如取3.0時(shí)其準(zhǔn)確率下降較多,因此,ISOLET數(shù)據(jù)集不宜設(shè)置過高的縮減參數(shù)。
圖3 準(zhǔn)確率調(diào)節(jié)比較(迭代20次)
注:準(zhǔn)確率顯示在時(shí)間柱上.%圖4 效率調(diào)節(jié)效果(迭代20次)
圖4為不同縮減參數(shù)的效率比較,為方便比較將全連接網(wǎng)絡(luò)時(shí)間柱放在1.0處(BP全連接網(wǎng)絡(luò)無此調(diào)節(jié)參數(shù)),從圖中可以看出全連接網(wǎng)絡(luò)時(shí)間消耗很大,而且準(zhǔn)確率也沒有明顯優(yōu)勢。當(dāng)反向隨機(jī)局部投影的神經(jīng)網(wǎng)絡(luò)的縮減參數(shù)設(shè)置為1.4時(shí)準(zhǔn)確率則優(yōu)于傳統(tǒng)全連接網(wǎng)絡(luò)2.61%,效率上卻大幅提升了272.78%;設(shè)置為1.6、1.8接近全連接網(wǎng)絡(luò),而效率更進(jìn)一步提升。
為了方便不同網(wǎng)絡(luò)規(guī)模的定性比較,以下各實(shí)驗(yàn)的對(duì)比分析采用準(zhǔn)確率接近全網(wǎng)絡(luò)的縮減參數(shù),定為1.8。在實(shí)驗(yàn)中,以測試集的分類準(zhǔn)確率來比較模型的準(zhǔn)確率,使用兩種模型不同迭代的曲線圖進(jìn)行對(duì)比,如圖5所示,以數(shù)據(jù)集訓(xùn)練和測試時(shí)間的總和進(jìn)行評(píng)價(jià)模型的效率,如圖6所示。
在圖5中,反向隨機(jī)局部投影的算法在迭代次數(shù)比較低的情況下,學(xué)習(xí)效果不全面,因此準(zhǔn)確率不理想。隨著學(xué)習(xí)的深入(迭代的增加)學(xué)習(xí)效果明顯提升,在迭代20次的時(shí)候已經(jīng)處于比較穩(wěn)定的效果和接近全網(wǎng)絡(luò)模型。
圖5 準(zhǔn)確率比較(不同迭代)
在圖6中,在相同的迭代的情況下效率,可看出傳統(tǒng)的全連接網(wǎng)絡(luò)效率低下,在迭代20次的時(shí)候,兩種網(wǎng)絡(luò)的準(zhǔn)確率基本一致的情況下,本文方法時(shí)間消耗卻能節(jié)省353.8%。在時(shí)間消耗上,本文方法迭代100次比全連接網(wǎng)絡(luò)迭代20次還低,準(zhǔn)確率從91.2%(全連接網(wǎng)絡(luò)迭代100次)提升到96.4%(本方法迭代20次)。隨著迭代的增加,本文方法所體現(xiàn)出來的效率優(yōu)勢越來越明顯,時(shí)間差距也越來越大。
圖6 效率比較(不同迭代)
實(shí)驗(yàn)表明,迭代20次以上時(shí),本方法和全連接網(wǎng)絡(luò)準(zhǔn)確率已經(jīng)基本接近,而本方法的效率卻大幅提升,在同等時(shí)間消耗情況下遠(yuǎn)優(yōu)于傳統(tǒng)全連接網(wǎng)絡(luò)訓(xùn)練準(zhǔn)確率。以局部網(wǎng)絡(luò)迭代20次為例,其準(zhǔn)確率已經(jīng)達(dá)到90%以上,超過了全連接網(wǎng)絡(luò)的迭代6、10次的效果,時(shí)間卻節(jié)約了一半,以迭代20、50次為例對(duì)性能提升詳細(xì)比較如表3所示。
從表3可見,反向隨機(jī)局部投影算法的平均準(zhǔn)確率雖然只提升3.48%,但平均效率提升卻十分明顯,具有明顯的效率優(yōu)勢,而且在保證準(zhǔn)確率的同時(shí),效率提升有效。另外,本算法可以根據(jù)不同數(shù)據(jù)集進(jìn)行參數(shù)調(diào)優(yōu),進(jìn)一步體現(xiàn)了算法的伸縮性。
1)本研究提出的反向隨機(jī)局部投影,可以按縮減參數(shù)調(diào)節(jié)網(wǎng)絡(luò)規(guī)模,隨著縮減參數(shù)的增加而增少,其模型效率提升,但準(zhǔn)確率也會(huì)下降,反之也成立,當(dāng)縮減參數(shù)為1.0時(shí)則模型和全連接網(wǎng)絡(luò)一致。
2)隨機(jī)局部連接算法是基于BP神經(jīng)網(wǎng)絡(luò)模型中的全連接網(wǎng)絡(luò)基礎(chǔ)上,在改進(jìn)效率的同時(shí)保證了準(zhǔn)確率。實(shí)驗(yàn)中,算法充分體現(xiàn)了其性能的優(yōu)越性,準(zhǔn)確率、效率分別平均提升了3.48%和105.21%,縮減參數(shù)同時(shí)提升了模型的可適應(yīng)性。
3)模型與數(shù)據(jù)集可以在訓(xùn)練中尋找縮減參數(shù)最佳值,但局部網(wǎng)絡(luò)普遍存在信息丟失問題,與全連接網(wǎng)絡(luò)的準(zhǔn)確率仍然有細(xì)微差距,后期研究還需要通過對(duì)數(shù)據(jù)集進(jìn)行降維、去噪等預(yù)處理,從而更進(jìn)一步提升算法的準(zhǔn)確率。