過学習とネットワークを作る目安について

426 views
Skip to first unread message

ハチワレ

unread,
Jan 7, 2021, 1:33:08 AM1/7/21
to Neural Network Console Users (JP)
ネットワークを作る際の目安について、質問させてください。

添付(3.jpg)の通り、約6000日のtrainingデータ、約400日のvalidationデータを学習させています。
作りたいものは40指標×5日分のデータを使い、翌日の売り上げが上がる・そのまま・下がるを予想する3分類です。

NNC動画は一通り拝見して
・過学習を防ぐにはbatch normalizationが有効
・dropoutも有効
・reluよりswishが優秀
・逆三角形になるようにニューロン数を減らしていくべし
という指標から、見よう見真似で添付のネットワークを作っています。

cost, trainging errorは減っていくのですが、
validation errorが減っていかず、いわゆる過学習と呼ばれる状態になっているのかと考えています。

ネットワーク作りに正解はないのは重々承知しているのですが、
データの規模から大体のニューロン数や段数の設定目安などは、ございませんでしょうか?
また利用してるブロックが正しいかどうかについても、ご指摘頂けますと大変助かります。
1.jpg
2.jpg
3.jpg

ハチワレ

unread,
Jan 8, 2021, 11:48:01 PM1/8/21
to Neural Network Console Users (JP)
まだ解決はしていないのですが、
・入力するデータを-1.0~1.0に正規化する
・40指標のデータを個別に評価して過学習っぽい動きをするデータを使うのをやめ、6指標に絞る
・5日分を10日分にする
という対応を入れました。

ネットワークを小さくしてもvalidation errorが昇っていくことはなくなったのですが、
epochが進んでも上下するだけで、収束していかないという状況になっています。

ご覧頂き何か使い方がおかしいなど、気になる点がございましたら
ご指摘頂けますと大変助かります。


2021年1月7日木曜日 15:33:08 UTC+9 ハチワレ:
3改.jpg
1改.jpg
2改.jpg

小林由幸

unread,
Jun 4, 2021, 2:42:57 AM6/4/21
to Neural Network Console Users (JP)
6000データからの学習としては、ニューロン数がまだ相当多いように見えます。
ひとまずInputの後すぐに最後のAffine、Softmax、CategoricalCrossEntropyの1層のネットワークで学習し、1層ずつ増やしていくと良いのではないでしょうか。
3層以下や、LSTMを使わない条件で最も高い性能が得られる可能性もあります。
また、LSTMを用いる場合は最後の時刻の情報のみをSliceレイヤーを用いて切り出されると良いかと思います。

例えば上記ネットワークの10時刻、100次元のLSTM出力(10,100)のうち最後の時刻のデータだけを取り出すには
SliceレイヤーのStartに9.0、Stopに10,100、Stepに1,1を指定します。

2021年1月9日土曜日 13:48:01 UTC+9 ハチワレ:
Reply all
Reply to author
Forward
0 new messages