romAI検証コーナー(その5)ニューロン数・レイヤー数

Kosuke_IKEDA
Kosuke_IKEDA
Altair Employee

シンプルなモデルを使用して、romAIの機能をチェックしていきます。第5回はニューラルネットのニューロン数・レイヤー数の影響を確認します。

 

問題設定

第4回と同様インパクト関数によるモデルです。ニューラルネットのニューロン数・レイヤー数の違いによる再現性の違いを確認します。

 

 

romAIの設定

romAIの設定を行います。

入出力

第1~4回と同様に、静的ROMとしてInputs、Outputsのみを指定します。

image

 

関数

第4回の検証で精度の良かったnon linear: reluを使用して、ニューロン数・レイヤー数を変化させたモデルを作成します。

image

image

レイヤー数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の出力は定数となっており、インパクト関数を表現できていません。

image

  • [3]

Epoch数:397

ニューロン数を増やすことで、インパクト関数が表現できるようになってきました。

image

  • [5]

Epoch数:760

image

  • [10]

Epoch数:323

image

  • [20]

Epoch数:318

立ち上がりも含めインパクト関数を表現できています。

image

ニューロン数5

  • [5,5]

Epoch数:255

image

  • [5,5,5]

Epoch数:191

レイヤー数を増やすことで、インパクト関数に漸近していきます。

image

  • [5,5,5,5]

Epoch数:169

立ち上がりも含めインパクト関数を表現できています。

image

y=-1~1と拡大した場合のフラット領域も綺麗に表現できています。第4回で実施した[20,20]はフラット部に多少凹凸があり、ニューロン数が過剰だった可能性があります。

image

 

まとめ

インパクト関数を題材とした非線形回帰問題に対して、romAIのニューロン数・レイヤー数の影響を調査し、ニューロン数・レイヤー数を増やすと、インパクト関数の再現性が高まることを確認しました。

一般的に、ニューロン数・レイヤー数を増やしすぎると過学習・過剰適合の問題がありますので、ご注意ください。

また、今回のテストでニューロン数・レイヤー数が少ないと収束までに多くのEpochを要する傾向がありました。ニューロン数・レイヤー数が不十分だと、lossがじわじわ低下していき、結果としてEpoch数が多くなる。一方、ニューロン数・レイヤー数が十分だと、あるEpochで一気にlossが低下し、その後変化がなくなり、少ないEpoch数で収束する傾向が見られました。ニューロン数・レイヤー数を設定する参考になるかもしれませんので、一度類似の問題でお試しください。

 

Comments