機器學習

什麼時候停止訓練?

  • September 15, 2019

我已經建立了一個基於深度強化學習的投資組合優化代理。在高層次上,它使用宏觀經濟數據、資產估值和一些技術指標作為特徵。策略網路是一個帶注意力的時間卷積網路。政策網路的輸出是投資組合分配。代理是情節的,情節長度為 365 天。該事件在 365 天結束時或投資組合縮水達到 30% 時終止。在這些條件下,我已經對代理進行了 10 年的數據訓練。我面臨的問題是確定何時停止訓練代理。每次迭代後,損失等所有指標都會繼續改善。在大約 100 次迭代後,樣本外的性能會在一個窄帶內波動,這表明它可能是模型可以提供的最佳結果。

訓練損失

模式的漸變

在此處輸入圖像描述

樣本外驗證返回

樣本外驗證損失

從這些圖中可以看出,人們無法根據訓練損失來決定何時停止訓練。並且任何決定都不能基於樣本外驗證數據集做出。有什麼建議麼 ?

交叉驗證的標準方法是使用三個數據集

  • 訓練集,
  • 驗證集,
  • 測試集。

您在訓練集上進行訓練(不足為奇),並使用驗證集來決定您的超參數。然後你重新訓練,在測試集上進行測試(再次不足為奇),就完成了。

我的建議是考慮訓練的 epoch 數量是一個超參數:因此選擇它以很好地概括你的訓練集。然後用它重新訓練它就完成了。

另一個細節:當我們談論時間序列時,將歷史分成集合併不是一件容易的事。你應該採取“連續塊”;如果你有10年(這很短,而且你的歷史上沒有2008年的危機!

  • 6年的培訓,
  • 1.5 年驗證
  • 考試的最後 1.5 年(這很短……)

您可以使用K 折交叉驗證來嘗試獲得更穩健的結果:通過旋轉您保留用於驗證的 1.5 年來對您的 7.5 年進行 k 折。多虧了這一點,您將有 5 個驗證集可供查看。

一種選擇可能是使用早期停止機制,例如當驗證集上每集的平均獎勵停止增加時停止。在實踐中,我發現這是一個壞主意,因為在使用日常數據(除了測試集)時,您通常沒有足夠的數據來支付驗證集。如果您每天處理頻率更高的數據,情況可能會有所不同。

第二種選擇是使用沒有足夠容量過擬合的簡單策略網路(例如線性回歸),因此您可以訓練直到訓練集上的獎勵停止增加。

第三種選擇是訓練足夠長的時間(即直到獎勵停止增加或直到你有信心進入過擬合區域),同時在訓練期間檢查代理。然後使用視覺化來檢查代理在訓練期間的行為(例如,夏普比率或營業額作為訓練步數的函式)。這是定性的,它不會告訴您何時停止,但它確實提供了見解/讓人類判斷什麼可能是一個不錯的停止點(例如,經過一定次數的迭代後,營業額可能會變得太高)

此外,這個問題應該在前向優化的背景下進行評估,只是為了給這個已經很困難的問題增加另一個維度。

引用自:https://quant.stackexchange.com/questions/45026