romAI検証コーナー(その1)線形回帰

Kosuke_IKEDA
Kosuke_IKEDA
Altair Employee

シンプルなモデルを使用して、romAIの機能をチェックしていきます。第1回はromAIを線形回帰問題に適用してみます。

 

問題設定

y=2uの直線に対し、乱数で±10のノイズを付与したデータを作成しました。

uの範囲は-15~15としています。これを学習データとしてromAIがy=2uの直線を求めることができるか確認します。

image

 

romAIによる静的ROM

romAIは状態空間表現の微分方程式を使用することで動的な表現を可能としています。

image

しかし、状態量x(θ,t)を使用しないことで、静的な表現も可能です。

image

今回は、この形式でuとyの関係である関数gを同定します。

 

romAIの設定

romAIの設定を行います。

入出力

静的ROMを作成する場合は、Inputs、Outputsのみを指定し、statesを空欄とするだけです。

今回は

Inputs: u

Outputs: y

とします。

ただし、静的ROMを作成する場合でも学習データのcsvファイルの1行目にはtimeのデータが必要です。静的問題ですのでダミーデータで問題ありません。

image

 

関数

romAIではModel Typeとしてlinearとnon linearが選択できます。

今回は線形回帰問題を取り扱いますので、linearを選択します。

image

しかし、せっかくですので、non linearでもどのような結果が得られるか確認しておきます。

non linearの場合、Neural Netを使用します。関数としてtanhかreluを選択できます。

さらに、Neural Netのレイヤーの数、ニューロンの数を指定できます。

image

今回は合計3つのromAIを作成してみます。

  • Linear
  • Non Linear: tanh [20,20]
  • Non Linear: relu [20,20]

 

トレーニングパラメータの設定

学習データはTESTデータとCross-Validationデータに分割されます。デフォルトでは、TESTデータが20%、Cross-Validationデータが0%となっています。

Advanced SettingsのEarly Stoppingにチェックを付けると、Cross-Validationが有効となります。=0.25とすると、TESTデータを除いた80%に対して、25%のデータ(全体の20%のデータ)がCross-Validationに使用されます。

したがって、残りの100%-20%-20%=60%のデータを用いて、パラメータの最適化が行われます。Cross-ValidationデータはEpoch毎にlossをチェックしますので、収束判定に利用できます。TESTデータはトレーニング完了後の答え合わせに使用されます。

image

image

Early Stoppingを使用する場合、Cross-Validationデータのlossの変化が見られなくなった段階でトレーニング終了とします。変化量は1e-7としました。

image

Epochsが上限に達してもトレーニングが終了するため、大きめの値1000としておきました。

image

 

Linearの場合以下のようなトレーニング結果が得られました。

60%のTrainingデータのLossと20%のCross-ValidationデータのLossがEpoch毎に低減していく様子が確認できます。

最終的に34 epochでCross-ValidationデータのLossの変化が十分小さくなったため、トレーニングが終了しています。

最後にTESTデータでLossを確認した結果0.005という値が得られています。

TESTデータとCross-Validationデータの分割には乱数が使用されますので、同じ設定でも毎回結果が変わることに注意してください。

image

 

romAIの精度確認

乱数によるノイズをゼロとしたものを正解として、romAIの結果と比較しました。

外挿域での関数の形を確認するため、uの範囲を-30~30と、学習データの-15~15より広くしています。

Linear

線形関数ですので、外挿域も含め綺麗に予測できています。

image

 

Non linear: tanh [20,20]

トレーニングに使用したu=-15~15の範囲では概ね予測できていますが、u>10で徐々に乖離が見られます。

image

 

Non linear: relu [20,20]

トレーニングに使用したu=-15~15の範囲では概ね予測できていますが、u<-15で大きな乖離が見られます。

image

 

まとめ

今回はromAIをシンプルな線形回帰問題に適用してみました。

状態量を使用しないことで、静的なROMを作成できることを確認しました。また、学習に使用した範囲で精度良く線形問題を予測できることを確認しました。

Comments