宋旭東,梁師齊,王雪梅
(1.大連交通大學(xué) 軟件學(xué)院,遼寧 大連 116028;2.阜新高等??茖W(xué)校,遼寧 阜新 123000) *
循環(huán)神經(jīng)網(wǎng)絡(luò)是一種深度學(xué)習(xí)模型,RNN內(nèi)部的隱含層神經(jīng)元節(jié)點(diǎn)之間相互連接,使其具有強(qiáng)大的序列建模功能,是一種處理股票價(jià)格、機(jī)票價(jià)格、風(fēng)電功率等時(shí)間序列數(shù)據(jù)的理想模型,傳統(tǒng)RNN存在收斂速度慢、易于陷入局部最優(yōu)的問(wèn)題.當(dāng)前針對(duì)RNN的研究主要分為兩類:①對(duì)RNN網(wǎng)絡(luò)自身結(jié)構(gòu)的改進(jìn)增強(qiáng);②RNN的參數(shù)優(yōu)化.
根據(jù)以往的研究,RNN的參數(shù)優(yōu)化研究雖在一定程度上克服了RNN存在的問(wèn)題,但是由于優(yōu)化算法自身存在一定缺陷,使得RNN的優(yōu)化還有很大的進(jìn)步空間.為此本文在現(xiàn)有研究[1-10]的基礎(chǔ)上,提出了一種自適應(yīng)調(diào)整的動(dòng)態(tài)粒子群優(yōu)化算法(ADPSO),然后構(gòu)建基于ADPSO優(yōu)化的RNN模型.
1995年,Eberhart和Kennedy提出了粒子群優(yōu)化算法(PSO).對(duì)于種群粒子,主要根據(jù)式(1)、(2)對(duì)自身位置、速度進(jìn)行實(shí)時(shí)調(diào)整,一直到符合收斂終止條件為止.
(1)
(2)
在常規(guī)RNN中將一個(gè)輸入層序列、隱含層的矢量序列和輸出層矢量序列分別用X、H和Y表示,輸入層序列X=(x1,x2,…,xT),隱含層序列H=(h1,h2,…,hT),輸出層序列Y=(y1,y2,…,yT).RNN的訓(xùn)練公式如下:
ht=σsig(Wxhxt+Whhht-1+bh)
(3)
yt=Whyht+by
(4)
其中,Wxh、Whh、Why分別為輸入層節(jié)點(diǎn)與隱含層節(jié)點(diǎn)、隱含層節(jié)點(diǎn)與隱含層節(jié)點(diǎn)、隱含層節(jié)點(diǎn)與輸出層節(jié)點(diǎn)之間的權(quán)重矩陣;xt為t時(shí)刻的輸入數(shù)據(jù);ht是t時(shí)刻的隱含層節(jié)點(diǎn)狀態(tài);bh、by是常數(shù).σsig是sigmoid,激活函數(shù),用來(lái)激活控制門.sigmoid函數(shù)的表達(dá)式為:
(5)
粒子群算法在具體應(yīng)用過(guò)程中,存在著收斂速度過(guò)快、容易陷入局部最優(yōu)值的問(wèn)題.本文基于此提出了一種能夠自適應(yīng)調(diào)整參數(shù)的動(dòng)態(tài)粒子群算法(ADPSO).
(1)動(dòng)態(tài)粒子群算法
(6)
其中,t表示粒子當(dāng)前的迭代次數(shù),tmax是允許的最大迭代次數(shù).
由式(6)知,隨著t的增大,ln(e+t/tmax-1)也在增大,但其值始終不會(huì)大于1,導(dǎo)致式(6)中粒子的位置的變化速度變慢,并且式(6)中對(duì)數(shù)函數(shù)的引入使得每個(gè)粒子的位置獲得了振蕩,達(dá)到了動(dòng)態(tài)地調(diào)整粒子的搜索空間的目的.
(2)動(dòng)態(tài)粒子群算法中參數(shù)的自適應(yīng)調(diào)整
①隨機(jī)慣性權(quán)值的設(shè)置
為使算法有更好的搜索能力,應(yīng)該控制算法的搜索狀態(tài),使其在前期的時(shí)候搜索能力較強(qiáng),增加其搜索的速度,后期時(shí)應(yīng)該精細(xì)地選擇,增加其搜索的精度.所以慣性權(quán)值采用下式:
(7)
其中,ωstart、ωend分別表示慣性權(quán)值初始值和終止值,t、tmax與式(6)中含義相同.
根據(jù)式(1)、式(7)式可知,粒子群迭代前期,w較大,便于快速地展開(kāi)搜尋,而在搜索后期,w較小,粒子群可以更仔細(xì)地搜索,利于其尋找最優(yōu).
②自動(dòng)調(diào)節(jié)的學(xué)習(xí)因子
如果采用固定的學(xué)習(xí)因子,就容易使粒子陷入局部極值而跳不出來(lái),因此引入一種自動(dòng)調(diào)節(jié)的學(xué)習(xí)因子,具體調(diào)整方式為:
(8)
(9)
其中,cstart分別表示學(xué)習(xí)因子c1,c2的初始值,cend分別表示學(xué)習(xí)因子c1,c2的終止值,v=-ω,ω為式(7)中的慣性權(quán)值.
該算法的主要思想是通過(guò)ADPSO算法優(yōu)化RNN的連接權(quán)值和閾值,改善RNN的性能.
ADPSO優(yōu)化的RNN模型的具體步驟如下:
Step1:通過(guò)恰當(dāng)?shù)姆绞綄?duì)粒子群、RNN參數(shù)進(jìn)行初始化,粒子群參數(shù)包括迭代次數(shù)、種群規(guī)模、學(xué)習(xí)因子等.RNN參數(shù)主要包含隱含層的層數(shù)、神經(jīng)網(wǎng)絡(luò)各層的神經(jīng)元個(gè)數(shù).
Step2:對(duì)種群中各粒子的適應(yīng)度值進(jìn)行運(yùn)算,式(10)表示粒子的適應(yīng)度函數(shù):
(10)
式中,n表示種群規(guī)模,Yi為神經(jīng)網(wǎng)絡(luò)實(shí)驗(yàn)數(shù)據(jù)樣本預(yù)測(cè)值,yi為數(shù)據(jù)樣本實(shí)際值.
Step3:計(jì)算每個(gè)粒子的適應(yīng)度值.
Step4:根據(jù)式(7)對(duì)粒子慣性權(quán)值進(jìn)行調(diào)節(jié),然后參照式(8)、(9)對(duì)粒子的學(xué)習(xí)因子進(jìn)行適當(dāng)調(diào)整,同時(shí),根據(jù)式(1)、(6)對(duì)粒子位置、粒子速度進(jìn)行及時(shí)更新.
Step5:若迭代結(jié)束條件完全滿足,那么模型訓(xùn)練將會(huì)立即結(jié)束,反之,將會(huì)自動(dòng)跳轉(zhuǎn)至Step2,再次進(jìn)行迭代.
為了更全面、更深入的對(duì)ADPSO、ADPSO-RNN模型進(jìn)行驗(yàn)證,本文進(jìn)行以下兩個(gè)仿真實(shí)驗(yàn):
(1)把ADPSO、PSO兩種算法對(duì)基準(zhǔn)函數(shù)Ackley、Griewank分別進(jìn)行優(yōu)化,然后對(duì)優(yōu)化結(jié)果進(jìn)行深入對(duì)比與分析;
(2)以某股票收盤價(jià)格歷史數(shù)據(jù)為實(shí)驗(yàn)數(shù)據(jù),將ADPSO-RNN與RNN、PSO優(yōu)化的RNN分別對(duì)其進(jìn)行預(yù)測(cè),通過(guò)預(yù)測(cè)結(jié)果的對(duì)比驗(yàn)證其性能.
為證明ADPSO算法的性能,將ADPSO與標(biāo)準(zhǔn)粒子群算法(PSO)、在經(jīng)典測(cè)試函數(shù)Ackley和Griewank上進(jìn)行精度、維度、收斂速度的對(duì)比試驗(yàn).
根據(jù)實(shí)驗(yàn)需要,對(duì)相關(guān)參數(shù)進(jìn)行合理化設(shè)定,具體為:測(cè)試函數(shù)Ackley的解空間為[-32,32],最小值mmin=0;測(cè)試函數(shù)Griewank的解空間為[-600,600],最小值為mmin=0;群體規(guī)模為40;在PSO中,慣性因子、學(xué)習(xí)因子分別為2.0、1.5;在ADPSO之中,慣性因子從2.5非線性減到0.5,cstart=2,cend=0.5;對(duì)于三種算法而言,最大迭代次數(shù)完全相同,均為1000;維度均依次設(shè)為5、20、40.
由于測(cè)試結(jié)果精度非常高,并且不同優(yōu)化方法的穩(wěn)定值都會(huì)在數(shù)量級(jí)(這里的數(shù)量級(jí)取10-1為一級(jí))內(nèi)大范圍變化,所以本本文采用數(shù)量級(jí)評(píng)價(jià)準(zhǔn)則.公式如下:
value=-log10f(x)
(11)
其中f(x)為測(cè)試函數(shù)函數(shù)值.在這里value就可以直觀表示測(cè)試函數(shù)的精度,value值越大,說(shuō)明測(cè)試函數(shù)的精度越高.
表1為兩種算法在不同維度下對(duì)Ackley和Griewank的優(yōu)化結(jié)果.從表中可以得知,無(wú)論維度如何,ADPSO算法的優(yōu)化結(jié)果相對(duì)于PSO而言均為最優(yōu).
圖1為PSO算法與ADPSO算法分別在5維、20維、40維時(shí)優(yōu)化Ackley函數(shù)過(guò)程中的適應(yīng)度值曲線圖.分析可知,越低維度所達(dá)到精度越高,但在越高維達(dá)到穩(wěn)定值所用的迭代次數(shù)越少.
圖2為兩種優(yōu)化算法在三種維度下優(yōu)化Griewank函數(shù)過(guò)程中的適應(yīng)度值曲線圖,在ADPSO優(yōu)化過(guò)程中發(fā)現(xiàn)了一個(gè)有趣的現(xiàn)象,即在高維的情況下對(duì)函數(shù)優(yōu)化結(jié)果反而精確.這說(shuō)明ADPSO算法在某種場(chǎng)景下更適合維度更高的情況.
表1 函數(shù)優(yōu)化結(jié)果
(a) PSO算法 (b) ADPSO算法圖1 函數(shù)Ackley圖像及適應(yīng)度值進(jìn)化曲線
(a) PSO算法 (b) ADPSO算法圖2 函數(shù)Griewank圖像及適應(yīng)度值進(jìn)化曲線
(1)實(shí)驗(yàn)數(shù)據(jù)
本章對(duì)浦發(fā)銀行股票從2013年1月4日~2019年3月14日的股票價(jià)格數(shù)據(jù)進(jìn)行實(shí)驗(yàn),實(shí)驗(yàn)取的是根據(jù)當(dāng)日股票收盤價(jià)作為該日的成交價(jià)格,實(shí)驗(yàn)數(shù)據(jù)總計(jì)1481組.本文的實(shí)驗(yàn)?zāi)康氖怯们?200組的股票成交價(jià)格數(shù)據(jù)來(lái)預(yù)測(cè)后續(xù)281組股票價(jià) 格 數(shù) 據(jù), 故 在 實(shí) 驗(yàn)中將該路段前1 200組數(shù)據(jù)作為訓(xùn)練樣本,后281組數(shù)據(jù)為檢測(cè)樣本.
圖3 股票價(jià)格變化曲線
圖3給出了實(shí)驗(yàn)數(shù)據(jù).
(2)評(píng)價(jià)指標(biāo)
在進(jìn)行仿真實(shí)驗(yàn)的過(guò)程中,本文利用RNN、基于PSO優(yōu)化的RNN與基于ADPSO優(yōu)化的RNN分別進(jìn)行股票價(jià)格預(yù)測(cè),并將預(yù)測(cè)效果進(jìn)行對(duì)比.輸出三組預(yù)測(cè)實(shí)驗(yàn)結(jié)果,利用評(píng)價(jià)指標(biāo)進(jìn)行數(shù)據(jù)分析.對(duì)于預(yù)測(cè)結(jié)果的指標(biāo)選取如下:
(12)
(13)
(3)預(yù)測(cè)結(jié)果對(duì)比分析
圖4為三種算法預(yù)測(cè)結(jié)果對(duì)比曲線.表2為三種算法的預(yù)測(cè)誤差結(jié)果對(duì)比統(tǒng)計(jì).從中可以看出:基于ADPSO優(yōu)化的RNN在預(yù)測(cè)指標(biāo)MAPE及MSE上相對(duì)于RNN降低了6.014%和33.1867,相對(duì)于基于PSO優(yōu)化的RNN降低了1.895 4%和6.625 1,預(yù)測(cè)結(jié)果的準(zhǔn)確性得到明顯提高;這主要是因?yàn)锳DPSO算法相對(duì)于PSO在進(jìn)行參數(shù)尋優(yōu)的時(shí)候具有更好的尋優(yōu)性能和搜索效率,能夠更快、更好的找到最優(yōu)結(jié)果,使得RNN在進(jìn)行股票價(jià)格預(yù)測(cè)時(shí)具有更高的預(yù)測(cè)精度、預(yù)測(cè)效率及泛化性能.
圖4 三種算法預(yù)測(cè)結(jié)果對(duì)比曲線
表2 預(yù)測(cè)誤差結(jié)果對(duì)比
本文首先提出了一種PSO改進(jìn)算法—ADPSO,該算法使PSO全局尋優(yōu)能力、收斂速度得到提高;然后將ADPSO用于RNN初始權(quán)值和閾值參數(shù)的優(yōu)化,構(gòu)建基于ADPSO優(yōu)化的RNN模型,該模型克服了傳統(tǒng)RNN參數(shù)選取不精確的缺點(diǎn),提升RNN的泛化性能.在實(shí)驗(yàn)中,一方面分別將ADPSO與PSO對(duì)基準(zhǔn)測(cè)試函數(shù)進(jìn)行優(yōu)化,結(jié)果表明ADPSO具有較好的優(yōu)化性能;另一方面將ADPSO-RNN與RNN、PSO-RNN模型分別對(duì)某股票數(shù)據(jù)進(jìn)行預(yù)測(cè),通過(guò)對(duì)比可以看出,基于ADPSO-RNN模型在對(duì)股票價(jià)格進(jìn)行預(yù)測(cè)時(shí)能夠更好的進(jìn)行數(shù)據(jù)擬合.