股票量化軟件:赫茲量化神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)率實驗
在早前的文章中,我們曾研究過操作原理,以及完全連接感知器、卷積和遞歸網(wǎng)絡(luò)的方法實現(xiàn)。 我們利用梯度下降來訓(xùn)練所有網(wǎng)絡(luò)。 根據(jù)這種方法,我們判斷每個步驟的網(wǎng)絡(luò)預(yù)測誤差,并調(diào)整權(quán)重來減少誤差。 然而,我們并沒有完全消除每一步的誤差,而只是調(diào)整權(quán)重來減少誤差。 如此,我們正在嘗試找到這樣的權(quán)重,并沿其整體長度緊密地重復(fù)訓(xùn)練集。 學(xué)習(xí)率負責在每步中將誤差最小化。
1. 問題
選擇學(xué)習(xí)率有什么問題? 我們來概括與學(xué)習(xí)率選擇有關(guān)的基本問題。
1. 為什么我們不能使用等于 “1”(或接近值)的比率來立即補償誤差? 在這種情況下,我們將針對最后一種情形對神經(jīng)網(wǎng)絡(luò)進行過度訓(xùn)練。 結(jié)果則為,忽略歷史記錄,僅基于最新數(shù)據(jù)做出進一步的決策。
2. 已知的較小速率允許對整個樣本進行平均計算,這樣會帶來什么問題? 該方法的第一個問題是神經(jīng)網(wǎng)絡(luò)的訓(xùn)練周期。 如果步幅太小,則需要大量的步驟。 而這需要時間和資源。
該方法的第二個問題是,通往目標的道路并不總是一帆風順的。 也許會有山谷和丘陵。 如果我們以太小的步幅移動,我們可能會被其中一個值卡住,從而錯誤地將其確定為全局最小值。 在這種情況下,我們將永遠無法實現(xiàn)目標。 這可通過在權(quán)重更新公式中使用動量來部分解決此問題,但問題仍然存在。
出于便捷起見,我們將 CNeuronBaseOCL 類中的 eta 變量設(shè)為全局變量。
double ? eta=0.01; #include "NeuroNet.mqh"
且
class CNeuronBaseOCL ? ?: ?public CObject ?{ protected: ? ........ ? ........ //--- ? //const double ? ? ?eta;
現(xiàn)在,以不同學(xué)習(xí)率參數(shù)(0,1; 0,01; 0,001)創(chuàng)建智能交易系統(tǒng)的三個副本。 另外,創(chuàng)建第四個 EA,將初始學(xué)習(xí)率設(shè)置為 0.01,并每經(jīng)過 10 個周期將其降低 10 倍。 為此,將以下代碼添加到 “Train” 函數(shù)的訓(xùn)練循環(huán)中。
? ? ? ? if(discount>0) ? ? ? ? ? ?discount--; ? ? ? ? else ? ? ? ? ? { ? ? ? ? ? ?eta*=0.1; ? ? ? ? ? ?discount=10; ? ? ? ? ? }
所有四個 EA 在一個終端中同時啟動。 在此實驗中,我采用早前 EA 測試中的參數(shù):品種 EURUSD,時間幀 H1,連續(xù) 20 根燭條的數(shù)據(jù)輸入到網(wǎng)絡(luò)中,并用最近兩年的歷史記錄進行訓(xùn)練。 訓(xùn)練樣本約為 1.24 萬根柱線。
所有 EA 均以 -1 到 1 的隨機權(quán)重進行初始化(不包括零值)。
不幸的是,學(xué)習(xí)率等于 0.1 的 EA 誤差接近 1,因此未在圖表中顯示。 以下圖表顯示了其他 EA 的學(xué)習(xí)動態(tài)。
5 個迭代之后,所有 EA 的誤差均達到 0.42 的水平,而在其余時間內(nèi),該誤差會繼續(xù)波動。 學(xué)習(xí)率等于 0.001 的 EA 誤差略低。 差異出現(xiàn)在小數(shù)點后第三位(其他兩個 EA 的 0.420 對比 0.422)。
實驗 2
在第一個實驗中,神經(jīng)網(wǎng)絡(luò)權(quán)重矩陣以隨機方式初始化。 并因此,所有 EA 都有不同的初始狀態(tài)。 為了消除隨機性對實驗結(jié)果的影響,采用之前實驗中學(xué)習(xí)速率等于 0.01 的 EA 的權(quán)重矩陣,將其加載到所有三個 EA 中,并繼續(xù)訓(xùn)練額外的 30 個迭代。
新的訓(xùn)練過程證實了早前獲得的結(jié)果。 我們看到所有三個 EA 的平均誤差約為 0.42。 最低學(xué)習(xí)率(0.001)的 EA 再次得到較小的誤差(相同差值 0.0018)。 學(xué)習(xí)率逐漸降低的影響實踐當中等于 0。