程 浩,孫 妮
神經(jīng)網(wǎng)絡(luò)具有極強(qiáng)的非線性逼近能力,自學(xué)習(xí)自適應(yīng)能力以及泛化能力的優(yōu)點(diǎn),在股指短期預(yù)測中得到了充分的應(yīng)用,取得了一些成果,但神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)訓(xùn)練前網(wǎng)絡(luò)權(quán)值通常未做優(yōu)化,導(dǎo)致網(wǎng)絡(luò)收斂速度慢并且容易陷入局部最小值.
針對BP神經(jīng)網(wǎng)絡(luò)自身的缺陷,本文利用遺傳算法較強(qiáng)的全局搜索能力初始化網(wǎng)絡(luò)權(quán)值和閾值,對BP神經(jīng)網(wǎng)絡(luò)權(quán)值調(diào)整過程進(jìn)行改進(jìn),逐層循環(huán)對權(quán)值進(jìn)行調(diào)整,根據(jù)網(wǎng)絡(luò)輸出總誤差變化對學(xué)習(xí)率進(jìn)行動態(tài)調(diào)整,并運(yùn)用改進(jìn)的神經(jīng)網(wǎng)絡(luò)模型對上證指數(shù)預(yù)測進(jìn)行實證研究.
BP神經(jīng)網(wǎng)絡(luò)是以反向傳播算法為學(xué)習(xí)算法的多層前饋式神經(jīng)網(wǎng)絡(luò),通常具有3層或3層以上的網(wǎng)絡(luò)結(jié)構(gòu),其拓?fù)浣Y(jié)構(gòu)可分為:輸入層、隱含層和輸出層.各層神經(jīng)元通過相應(yīng)的網(wǎng)絡(luò)權(quán)值即兩個神經(jīng)元之間的連接強(qiáng)度來連接,而同一層的神經(jīng)元間無連接.BP神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)過程主要采用最速下降法對網(wǎng)絡(luò)權(quán)值進(jìn)行反復(fù)調(diào)整,最終使誤差函數(shù)取得極小值.
以四層結(jié)構(gòu)的BP神經(jīng)網(wǎng)絡(luò)為例.令輸入層、第一隱含層、第二隱含層以及輸出層節(jié)點(diǎn)數(shù)量分別為I、M、N、O,相應(yīng)的某個節(jié)點(diǎn)分別用 i、m、n、o表示,W、U、V分別表示輸入層到第一隱含層的權(quán)重系數(shù)矩陣,兩隱含層連接權(quán)重系數(shù)矩陣以及第二隱含層到輸出層的權(quán)重系數(shù)矩陣,層間連接權(quán)重分別用Wim、Umn、Vno表示.用 θm、Фn、ψo(hù)分別表示后三層網(wǎng)絡(luò)閾值,Sm、Tn、Co分別表示兩隱含層以及輸出層相應(yīng)節(jié)點(diǎn)的輸入,用Do表示第o個輸出節(jié)點(diǎn)的預(yù)計輸出.假設(shè)訓(xùn)練數(shù)據(jù)集為X=[X1,X2,…,Xk,…,Xp],第k個樣本對應(yīng)的實際輸出為Yk=[Ok1,Ok1,…,Ok1],期望輸出為Dk=[Dk1,Dk1,…,Dk1].
對所有樣本的輸入輸出值進(jìn)行計算,得到了所有樣本的網(wǎng)絡(luò)輸出總誤差,BP算法根據(jù)網(wǎng)絡(luò)輸出誤差對所有的網(wǎng)絡(luò)權(quán)值進(jìn)行調(diào)整,完成一次網(wǎng)絡(luò)循環(huán)過程,重復(fù)操作,多次調(diào)整所有的權(quán)值,使網(wǎng)絡(luò)達(dá)到目標(biāo)輸出誤差從而完成訓(xùn)練.
權(quán)值調(diào)整過程中,誤差信號由后往前傳遞,逐層修改網(wǎng)絡(luò)權(quán)值,第二隱含層到輸出層權(quán)值修正為ΔVno(n+1)=(1-mc)ΔV'no(n)+mcΔVno(n),梯度下降對權(quán)值的修正量為[1-Oko(n)][Dko(n)-Oko(n)]Nkn.其中mc表示動量因子,η1表示第二個隱含層與輸出層的學(xué)習(xí)率,n是網(wǎng)絡(luò)迭代次數(shù),△Vno(n)表示上次權(quán)值調(diào)整量,△V'no(n)表示本次梯度下降法對權(quán)值的調(diào)整量.
通過上述的BP神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)算法,就可實現(xiàn)樣本數(shù)據(jù)的學(xué)習(xí)訓(xùn)練.可以看出,各層的連接權(quán)值和閾值的選取對于BP神經(jīng)網(wǎng)絡(luò)的訓(xùn)練非常重要,在使用中經(jīng)常出現(xiàn)設(shè)置不合理導(dǎo)致網(wǎng)絡(luò)的收斂速度慢并且不易得到最優(yōu)解的現(xiàn)象,如何優(yōu)化初始權(quán)閾值是BP神經(jīng)網(wǎng)絡(luò)研究的重點(diǎn)問題.
針對BP神經(jīng)網(wǎng)絡(luò)容易陷入局部最小值以及網(wǎng)絡(luò)收斂速率緩慢等問題,利用遺傳算法較強(qiáng)的全局搜索能力初始化網(wǎng)絡(luò)權(quán)值,對BP神經(jīng)網(wǎng)絡(luò)權(quán)值調(diào)整過程進(jìn)行改進(jìn),使每層連接權(quán)值采用同一個學(xué)習(xí)率,逐層循環(huán)對權(quán)值進(jìn)行調(diào)整,根據(jù)網(wǎng)絡(luò)輸出總誤差額變化對學(xué)習(xí)率進(jìn)行動態(tài)調(diào)整,加快網(wǎng)絡(luò)收斂速率并有效減少網(wǎng)絡(luò)震蕩次數(shù).
1.2.1 動態(tài)學(xué)習(xí)率的調(diào)整策略
采用差異學(xué)習(xí)率調(diào)整策略,使學(xué)習(xí)率分層進(jìn)行調(diào)整,調(diào)整方向為從后向前,每層調(diào)整時采用不同的學(xué)習(xí)率,并且使每層網(wǎng)絡(luò)權(quán)值優(yōu)化到一定程度之后再繼續(xù)調(diào)整上一層權(quán)值.為了加快網(wǎng)絡(luò)收斂速度,在調(diào)整過程中采用動態(tài)學(xué)習(xí)率調(diào)整,使每層的學(xué)習(xí)率根據(jù)網(wǎng)絡(luò)輸出總誤差的變化動態(tài)改變.改進(jìn)算法將經(jīng)典算法單循環(huán)過程分為一個大循環(huán)多個小循環(huán)過程,大循環(huán)依照小循環(huán)的網(wǎng)絡(luò)輸出總誤差增減情況不斷改變學(xué)習(xí)率的值,大循環(huán)的權(quán)值不受小循環(huán)權(quán)值改變量的影響.
1.2.2 遺傳算法優(yōu)化的網(wǎng)絡(luò)權(quán)值調(diào)整
利用遺傳算法全局搜索能力較強(qiáng)的特性對BP神經(jīng)網(wǎng)絡(luò)所有權(quán)值和閾值進(jìn)行初始化與初步優(yōu)化,當(dāng)網(wǎng)絡(luò)輸出總誤差下降到一定程度之后,再將最優(yōu)的染色體帶入BP網(wǎng)絡(luò)中進(jìn)一步優(yōu)化,直到網(wǎng)絡(luò)輸出總誤差達(dá)到預(yù)期值.具體算法的實現(xiàn)過程如下:
(1)染色體編碼設(shè)計.采用實數(shù)編碼的方式,將BP神經(jīng)網(wǎng)絡(luò)所有權(quán)值和閾值按一定順序排列組成一個染色體.用rowW表示要輸入層到第一隱含層權(quán)重矩陣W的行展開矩陣,rowU表示第一隱含層到第二隱含層權(quán)重矩陣的行展開矩陣,rowV表示第二隱含層到輸出層權(quán)重矩陣V的行展開矩陣.當(dāng)遺傳算法迭代到一定程度之后,需要將最優(yōu)染色體中的權(quán)值和閾值賦值給BP網(wǎng)絡(luò),由于BP網(wǎng)絡(luò)按逆序方向調(diào)整權(quán)值,因此需要計算T的逆序矩陣T=[rowW,rowU,rowV],將逆序矩陣的權(quán)值和閾值代入BP網(wǎng)絡(luò)繼續(xù)優(yōu)化,直到達(dá)到預(yù)期網(wǎng)絡(luò)輸出總誤差.
(2)適應(yīng)度函數(shù)設(shè)計.遺傳算法根據(jù)適應(yīng)度函數(shù)對染色體進(jìn)行優(yōu)良選擇,適應(yīng)度函數(shù)和BP網(wǎng)絡(luò)的網(wǎng)絡(luò)輸出總誤差呈反比關(guān)系,網(wǎng)絡(luò)輸出總誤差越大,染色體的適應(yīng)能力越小,適應(yīng)度函數(shù)相應(yīng)較小.本文采用網(wǎng)絡(luò)輸出總誤差的倒數(shù)加一來表示適應(yīng)度函數(shù).
(3)選擇算子.遺傳算法選擇算子使用輪盤賭選擇方法進(jìn)行選擇操作.遺傳算法根據(jù)適應(yīng)度函數(shù)值選擇個體不斷進(jìn)化的過程對應(yīng)于BP神經(jīng)網(wǎng)絡(luò)不斷優(yōu)化網(wǎng)絡(luò)權(quán)值,使網(wǎng)絡(luò)輸出誤差不斷減小.
(4)交叉算子.使用多點(diǎn)交叉方式,使適應(yīng)度值較大的染色體遺傳到下一代的概率相對較大.
(5)變異算子.使用多點(diǎn)變異策略,通過改變權(quán)值或閾值的數(shù)值來獲得網(wǎng)絡(luò)輸出總誤差更小的權(quán)值閾值組合.
(6)遺傳算法優(yōu)化的連接權(quán)值和閾值作為初始值,代入模型進(jìn)行訓(xùn)練和學(xué)習(xí),進(jìn)而完成預(yù)測.
實驗數(shù)據(jù)選取同花順和通達(dá)信軟件提供的2014年1月至2015年3月的上證指數(shù)數(shù)據(jù),實驗前需要將數(shù)據(jù)進(jìn)行預(yù)處理,使各指標(biāo)數(shù)據(jù)分別歸一化到[0,1]區(qū)間,再代入網(wǎng)絡(luò)進(jìn)行計算.
根據(jù)多次實驗結(jié)果,BP網(wǎng)絡(luò)輸入層節(jié)點(diǎn)數(shù)量為6,對應(yīng)某日開盤價、收盤價、成交量、振幅、10日和60日均線,輸出為第二天的收盤價.設(shè)定遺傳算法種群個數(shù)20,染色體權(quán)值從前往后依次對應(yīng)輸入層到網(wǎng)絡(luò)三層權(quán)值矩陣行展開數(shù)值.遺傳算法交叉點(diǎn)和變異點(diǎn)個數(shù)均設(shè)置為3,最大迭代次數(shù)100.BP神經(jīng)網(wǎng)絡(luò)所有學(xué)習(xí)率的初始值均設(shè)置為0.01.在修正權(quán)值迭代過程中,設(shè)定當(dāng)網(wǎng)絡(luò)輸出誤差增大時調(diào)整學(xué)習(xí)率的誤差相對增量閾值1.2,學(xué)習(xí)率變化率0.98;設(shè)定當(dāng)網(wǎng)絡(luò)輸出誤差減小時調(diào)整學(xué)習(xí)率的誤差相對增量閾值0.8,學(xué)習(xí)率變化率1.02,動量因子0.4.
實驗時分別使用三層結(jié)構(gòu)和四層結(jié)構(gòu)的BP神經(jīng)網(wǎng)絡(luò)對股指數(shù)據(jù)進(jìn)行預(yù)測,通過實驗分析隱含層個數(shù)對改進(jìn)BP算法預(yù)測性能的影響.
(1)遺傳算法的BP網(wǎng)絡(luò)權(quán)值優(yōu)化
選取上證指數(shù)2014年1月至2014年12月的日數(shù)據(jù)作為訓(xùn)練集,2015年1月至3月的日數(shù)據(jù)作為測試集進(jìn)行大量重復(fù)實驗,網(wǎng)絡(luò)迭代次數(shù)設(shè)為300次,實驗結(jié)果如圖1所示.
圖1 遺傳算法對網(wǎng)絡(luò)收斂性能的影響
用遺傳算法對網(wǎng)絡(luò)權(quán)值進(jìn)行初步優(yōu)化后網(wǎng)絡(luò)收斂速度較快,收斂性更好,網(wǎng)絡(luò)輸出總誤差較小,網(wǎng)絡(luò)預(yù)測準(zhǔn)確度更高.
(2)不同結(jié)構(gòu)實驗對比
本文對四層結(jié)構(gòu)網(wǎng)絡(luò)即雙隱含層網(wǎng)絡(luò)進(jìn)行了探索,并通過實驗對三層結(jié)構(gòu)網(wǎng)絡(luò)和四層結(jié)構(gòu)網(wǎng)絡(luò)進(jìn)行對比,對四層結(jié)構(gòu)網(wǎng)絡(luò)的收斂性能以及預(yù)測準(zhǔn)確度進(jìn)行驗證.對比實驗結(jié)果如圖2所示.
圖2 不同結(jié)構(gòu)網(wǎng)絡(luò)的收斂性能
實驗結(jié)果表明三層結(jié)構(gòu)網(wǎng)絡(luò)與四層結(jié)構(gòu)網(wǎng)絡(luò)預(yù)測性能相差不大,三層結(jié)構(gòu)網(wǎng)絡(luò)的收斂速度相對較快,但當(dāng)網(wǎng)絡(luò)迭代超過157次之后四層結(jié)構(gòu)的網(wǎng)絡(luò)輸出總誤差小于三層結(jié)構(gòu)網(wǎng)絡(luò),,說明四層網(wǎng)絡(luò)經(jīng)過多次訓(xùn)練后也能達(dá)到較高的預(yù)測精度甚至預(yù)測準(zhǔn)確度較高,適合于對預(yù)測精度要求較高的股指預(yù)測.
(3)預(yù)測結(jié)果對比
將本文改進(jìn)BP算法、經(jīng)典BP算法運(yùn)用于上證指數(shù)預(yù)測,預(yù)測結(jié)果分別與真實股指數(shù)據(jù)進(jìn)行擬合,如圖3所示.
圖3 股指數(shù)據(jù)擬合曲線
相比經(jīng)典BP算法,改進(jìn)BP算法預(yù)測值與真實值擬合效果更好,預(yù)測值與真實值更貼近,隨著真實值的波動作出相同方向變動,變動強(qiáng)度比較明顯.
本文在分析傳統(tǒng)BP神經(jīng)網(wǎng)絡(luò)局限性的基礎(chǔ)上,利用遺傳算法對BP神經(jīng)網(wǎng)絡(luò)進(jìn)行優(yōu)化,根據(jù)網(wǎng)絡(luò)輸出總誤差變化對學(xué)習(xí)率進(jìn)行動態(tài)調(diào)整,建立基于改進(jìn)神經(jīng)網(wǎng)絡(luò)的股指預(yù)測模型,并運(yùn)用模型對上證指數(shù)進(jìn)行預(yù)測分析.預(yù)測結(jié)果表明:改進(jìn)BP算法的收斂效率較好,預(yù)測精度更高,可以更好地用于股指預(yù)測.