LSTMネットワーク​が過学習を起こしてい​るときの対応

62 views (last 30 days)
健太郎 藤本
健太郎 藤本 on 24 Nov 2022
Answered: Hiro Yoshino on 25 Nov 2022
LSTMネットワークを用いて為替市場の時系列データを学習させ予測させているのですが、予測時に予測値が一方方向に飛んで行ってしまい学習時に学習を初めてすぐに損失値が0.2あたりまで下がりその後ずっと横ばいだったことから過学習を起こしているのではないかと推測しました。そこでどのようにすれば過学習の対策が出来るのかご教授いただきたいです。学習データの個数は5000なのでデータ不足による過学習の可能性は少ないかなと思っています。

Answers (2)

Hiroshi Miyagawa
Hiroshi Miyagawa on 25 Nov 2022
LSTMネットワークの過学習を抑制する方法は色々なページで紹介されていますので、「LSTM」「過学習」「防ぐ」などのキーワードで調べていただくとして、
過学習を抑制する方法の一つとして「ドロップアウト」があります。MATLAB の Deep Learning Toolbox の lstmLayer をお使いであるならば以下のページが参考になると思います。
いくつか載っている「例」のうち「深い LSTM ネットワーク」をご確認ください。
本当に過学習なのか?という検証はおいといてます。

Hiro Yoshino
Hiro Yoshino on 25 Nov 2022
<< 過学習について>>
過学習というのは、"ここにあるように" 訓練誤差が小さくなって行き、汎化誤差が大きくなっていっている状態を指します。状況について一般的な解釈をここではさせていただきます:
  • 損失値が小さくなり、その後横ばい: 学習が進んでいません。過学習では有りません
  • データ不足: 過学習とは直接関係有りません。少ないデータが理由で、学習回数がデータに対して過多である場合に過学習になります
過学習かどうかは、テストデータを使って評価する必要が有ります。一般に、訓練誤差に対して汎化誤差が大きい時に"過学習"、訓練誤差&汎化誤差の両者が大きい場合は訓練不足 or モデルが適当でないと解釈します。
<< 解決案>>
[1] 汎化誤差を評価する
訓練誤差との乖離が確認できれば、”過学習”状態です
  • Epoc 数を少なくし、汎化誤差が大きくなる直前に学習を打ち切ります
  • 上記のドロップアウト等の、正則化のテクニックを使います。これは色々あるのでご自身で調べてください
乖離が確認出来ない場合、精度を向上させる予知が有ります
  • ネットワークの学習率を小さくして、Epoc 数を増やします
  • モデルをもっと複雑にして、表現力を上げます(おのずと学習時間は伸びます)
[2] 予測値が飛んで行ってしまい....
恐らく、学習率の設定が適切では無いです。もう少し小さい値からスタートしてみてください。このあたりは、trainingOptions で設定できるかと思います。

Categories

Find more on 時系列、シーケンス、およびテキストを使用した深層学習 in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!