宋旭東,梁師齊,王雪梅
(1.大連交通大學 軟件學院,遼寧 大連 116028;2.阜新高等專科學校,遼寧 阜新 123000) *
循環神經網絡是一種深度學習模型,RNN內部的隱含層神經元節點之間相互連接,使其具有強大的序列建模功能,是一種處理股票價格、機票價格、風電功率等時間序列數據的理想模型,傳統RNN存在收斂速度慢、易于陷入局部最優的問題.當前針對RNN的研究主要分為兩類:①對RNN網絡自身結構的改進增強;②RNN的參數優化.
根據以往的研究,RNN的參數優化研究雖在一定程度上克服了RNN存在的問題,但是由于優化算法自身存在一定缺陷,使得RNN的優化還有很大的進步空間.為此本文在現有研究[1-10]的基礎上,提出了一種自適應調整的動態粒子群優化算法(ADPSO),然后構建基于ADPSO優化的RNN模型.
1995年,Eberhart和Kennedy提出了粒子群優化算法(PSO).對于種群粒子,主要根據式(1)、(2)對自身位置、速度進行實時調整,一直到符合收斂終止條件為止.
(1)
(2)

在常規RNN中將一個輸入層序列、隱含層的矢量序列和輸出層矢量序列分別用X、H和Y表示,輸入層序列X=(x1,x2,…,xT),隱含層序列H=(h1,h2,…,hT),輸出層序列Y=(y1,y2,…,yT).RNN的訓練公式如下:
ht=σsig(Wxhxt+Whhht-1+bh)
(3)
yt=Whyht+by
(4)
其中,Wxh、Whh、Why分別為輸入層節點與隱含層節點、隱含層節點與隱含層節點、隱含層節點與輸出層節點之間的權重矩陣;xt為t時刻的輸入數據;ht是t時刻的隱含層節點狀態;bh、by是常數.σsig是sigmoid,激活函數,用來激活控制門.sigmoid函數的表達式為:
(5)
粒子群算法在具體應用過程中,存在著收斂速度過快、容易陷入局部最優值的問題.本文基于此提出了一種能夠自適應調整參數的動態粒子群算法(ADPSO).
(1)動態粒子群算法
(6)
其中,t表示粒子當前的迭代次數,tmax是允許的最大迭代次數.
由式(6)知,隨著t的增大,ln(e+t/tmax-1)也在增大,但其值始終不會大于1,導致式(6)中粒子的位置的變化速度變慢,并且式(6)中對數函數的引入使得每個粒子的位置獲得了振蕩,達到了動態地調整粒子的搜索空間的目的.
(2)動態粒子群算法中參數的自適應調整
①隨機慣性權值的設置
為使算法有更好的搜索能力,應該控制算法的搜索狀態,使其在前期的時候搜索能力較強,增加其搜索的速度,后期時應該精細地選擇,增加其搜索的精度.所以慣性權值采用下式:
(7)
其中,ωstart、ωend分別表示慣性權值初始值和終止值,t、tmax與式(6)中含義相同.
根據式(1)、式(7)式可知,粒子群迭代前期,w較大,便于快速地展開搜尋,而在搜索后期,w較小,粒子群可以更仔細地搜索,利于其尋找最優.
②自動調節的學習因子
如果采用固定的學習因子,就容易使粒子陷入局部極值而跳不出來,因此引入一種自動調節的學習因子,具體調整方式為:
(8)
(9)
其中,cstart分別表示學習因子c1,c2的初始值,cend分別表示學習因子c1,c2的終止值,v=-ω,ω為式(7)中的慣性權值.

該算法的主要思想是通過ADPSO算法優化RNN的連接權值和閾值,改善RNN的性能.
ADPSO優化的RNN模型的具體步驟如下:
Step1:通過恰當的方式對粒子群、RNN參數進行初始化,粒子群參數包括迭代次數、種群規模、學習因子等.RNN參數主要包含隱含層的層數、神經網絡各層的神經元個數.
Step2:對種群中各粒子的適應度值進行運算,式(10)表示粒子的適應度函數:
(10)
式中,n表示種群規模,Yi為神經網絡實驗數據樣本預測值,yi為數據樣本實際值.
Step3:計算每個粒子的適應度值.
Step4:根據式(7)對粒子慣性權值進行調節,然后參照式(8)、(9)對粒子的學習因子進行適當調整,同時,根據式(1)、(6)對粒子位置、粒子速度進行及時更新.
Step5:若迭代結束條件完全滿足,那么模型訓練將會立即結束,反之,將會自動跳轉至Step2,再次進行迭代.
為了更全面、更深入的對ADPSO、ADPSO-RNN模型進行驗證,本文進行以下兩個仿真實驗:
(1)把ADPSO、PSO兩種算法對基準函數Ackley、Griewank分別進行優化,然后對優化結果進行深入對比與分析;
(2)以某股票收盤價格歷史數據為實驗數據,將ADPSO-RNN與RNN、PSO優化的RNN分別對其進行預測,通過預測結果的對比驗證其性能.
為證明ADPSO算法的性能,將ADPSO與標準粒子群算法(PSO)、在經典測試函數Ackley和Griewank上進行精度、維度、收斂速度的對比試驗.
根據實驗需要,對相關參數進行合理化設定,具體為:測試函數Ackley的解空間為[-32,32],最小值mmin=0;測試函數Griewank的解空間為[-600,600],最小值為mmin=0;群體規模為40;在PSO中,慣性因子、學習因子分別為2.0、1.5;在ADPSO之中,慣性因子從2.5非線性減到0.5,cstart=2,cend=0.5;對于三種算法而言,最大迭代次數完全相同,均為1000;維度均依次設為5、20、40.
由于測試結果精度非常高,并且不同優化方法的穩定值都會在數量級(這里的數量級取10-1為一級)內大范圍變化,所以本本文采用數量級評價準則.公式如下:
value=-log10f(x)
(11)
其中f(x)為測試函數函數值.在這里value就可以直觀表示測試函數的精度,value值越大,說明測試函數的精度越高.
表1為兩種算法在不同維度下對Ackley和Griewank的優化結果.從表中可以得知,無論維度如何,ADPSO算法的優化結果相對于PSO而言均為最優.
圖1為PSO算法與ADPSO算法分別在5維、20維、40維時優化Ackley函數過程中的適應度值曲線圖.分析可知,越低維度所達到精度越高,但在越高維達到穩定值所用的迭代次數越少.
圖2為兩種優化算法在三種維度下優化Griewank函數過程中的適應度值曲線圖,在ADPSO優化過程中發現了一個有趣的現象,即在高維的情況下對函數優化結果反而精確.這說明ADPSO算法在某種場景下更適合維度更高的情況.

表1 函數優化結果

(a) PSO算法 (b) ADPSO算法圖1 函數Ackley圖像及適應度值進化曲線

(a) PSO算法 (b) ADPSO算法圖2 函數Griewank圖像及適應度值進化曲線
(1)實驗數據
本章對浦發銀行股票從2013年1月4日~2019年3月14日的股票價格數據進行實驗,實驗取的是根據當日股票收盤價作為該日的成交價格,實驗數據總計1481組.本文的實驗目的是用前1200組的股票成交價格數據來預測后續281組股票價 格 數 據, 故 在 實 驗中將該路段前1 200組數據作為訓練樣本,后281組數據為檢測樣本.

圖3 股票價格變化曲線
圖3給出了實驗數據.
(2)評價指標
在進行仿真實驗的過程中,本文利用RNN、基于PSO優化的RNN與基于ADPSO優化的RNN分別進行股票價格預測,并將預測效果進行對比.輸出三組預測實驗結果,利用評價指標進行數據分析.對于預測結果的指標選取如下:
(12)
(13)

(3)預測結果對比分析
圖4為三種算法預測結果對比曲線.表2為三種算法的預測誤差結果對比統計.從中可以看出:基于ADPSO優化的RNN在預測指標MAPE及MSE上相對于RNN降低了6.014%和33.1867,相對于基于PSO優化的RNN降低了1.895 4%和6.625 1,預測結果的準確性得到明顯提高;這主要是因為ADPSO算法相對于PSO在進行參數尋優的時候具有更好的尋優性能和搜索效率,能夠更快、更好的找到最優結果,使得RNN在進行股票價格預測時具有更高的預測精度、預測效率及泛化性能.

圖4 三種算法預測結果對比曲線

表2 預測誤差結果對比
本文首先提出了一種PSO改進算法—ADPSO,該算法使PSO全局尋優能力、收斂速度得到提高;然后將ADPSO用于RNN初始權值和閾值參數的優化,構建基于ADPSO優化的RNN模型,該模型克服了傳統RNN參數選取不精確的缺點,提升RNN的泛化性能.在實驗中,一方面分別將ADPSO與PSO對基準測試函數進行優化,結果表明ADPSO具有較好的優化性能;另一方面將ADPSO-RNN與RNN、PSO-RNN模型分別對某股票數據進行預測,通過對比可以看出,基于ADPSO-RNN模型在對股票價格進行預測時能夠更好的進行數據擬合.