romAI検証コーナー(その5)ニューロン数・レイヤー数
シンプルなモデルを使用して、romAIの機能をチェックしていきます。第5回はニューラルネットのニューロン数・レイヤー数の影響を確認します。
問題設定
第4回と同様インパクト関数によるモデルです。ニューラルネットのニューロン数・レイヤー数の違いによる再現性の違いを確認します。
romAIの設定
romAIの設定を行います。
入出力
第1~4回と同様に、静的ROMとしてInputs、Outputsのみを指定します。
関数
第4回の検証で精度の良かったnon linear: reluを使用して、ニューロン数・レイヤー数を変化させたモデルを作成します。
レイヤー数1を固定して、ニューロン数を1~20の5ケース
ニューロン数を5に固定して、レイヤー数を1~4の4ケースの合計8ケース実施しました。
- [1]
- [3]
- [5]
- [10]
- [20]
- [5,5]
- [5,5,5]
- [5,5,5,5]
トレーニングパラメータの設定
第1~4回と同様に、Early Stoppingを使用します。Cross-Validationデータのlossの変化が見られなくなった段階でトレーニング終了とします。変化量は1e-7としました。
Epochsが上限に達してもトレーニングが終了するため、大きめの値1000としておきました。
Regulation Coefficientは急峻なカーブを表現できるよう0としています。詳しくは第3回をご確認ください。
romAIの精度確認
romAIの結果をインパクト関数と比較しました。
レイヤー数1
- [1]
Epoch数:27
romAIの出力は定数となっており、インパクト関数を表現できていません。
- [3]
Epoch数:397
ニューロン数を増やすことで、インパクト関数が表現できるようになってきました。
- [5]
Epoch数:760
- [10]
Epoch数:323
- [20]
Epoch数:318
立ち上がりも含めインパクト関数を表現できています。
ニューロン数5
- [5,5]
Epoch数:255
- [5,5,5]
Epoch数:191
レイヤー数を増やすことで、インパクト関数に漸近していきます。
- [5,5,5,5]
Epoch数:169
立ち上がりも含めインパクト関数を表現できています。
y=-1~1と拡大した場合のフラット領域も綺麗に表現できています。第4回で実施した[20,20]はフラット部に多少凹凸があり、ニューロン数が過剰だった可能性があります。
まとめ
インパクト関数を題材とした非線形回帰問題に対して、romAIのニューロン数・レイヤー数の影響を調査し、ニューロン数・レイヤー数を増やすと、インパクト関数の再現性が高まることを確認しました。
一般的に、ニューロン数・レイヤー数を増やしすぎると過学習・過剰適合の問題がありますので、ご注意ください。
また、今回のテストでニューロン数・レイヤー数が少ないと収束までに多くのEpochを要する傾向がありました。ニューロン数・レイヤー数が不十分だと、lossがじわじわ低下していき、結果としてEpoch数が多くなる。一方、ニューロン数・レイヤー数が十分だと、あるEpochで一気にlossが低下し、その後変化がなくなり、少ないEpoch数で収束する傾向が見られました。ニューロン数・レイヤー数を設定する参考になるかもしれませんので、一度類似の問題でお試しください。
Comments
-
本ブログで使用したモデルとその解説動画は下記よりご利用いただけます。
パラメータを変えていろいろお試しください。
https://community.altair.com/community/?id=kb_article_view&sysparm_article=KB0121934
0