romAI検証コーナー(その2)非線形回帰:3次関数

Kosuke_IKEDA
Kosuke_IKEDA
Altair Employee

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


問題設定

y=u+0.2u^3の3次関数に対し、乱数で±100のノイズを付与したデータを作成しました。

uの範囲は-15~15としています。これを学習データとしてromAIがy=u+0.2u^3の3次関数を求めることができるか確認します。

image


romAIの設定

romAIの設定を行います。

入出力

第1回の線形回帰問題と同様に、静的ROMとして、Inputs、Outputsのみを指定します。

image


関数

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

今回は3次関数で非線形であるため、non linearのNeural Netを使用します。tanhとrelu関数でどのような違いがあるかを見るため、以下二つのモデルを作成します。レイヤーの数、ニューロンの数は、[20,20]としました。

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

image


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

第1回の線形回帰問題と同様に、Early Stoppingを使用します。Cross-Validationデータのlossの変化が見られなくなった段階でトレーニング終了とします。変化量は1e-7としました。

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

image


romAIの精度確認

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

Non linear: tanh [20,20]

概ね3次関数を表現できていることがわかります。

image

Non linear: relu [20,20]

概ね3次関数を表現できていることがわかります。relu関数は滑らかでないので、その傾向が表れています。

image


まとめ

今回はromAIを3次関数の非線形回帰問題に適用し、Neural Netで3次関数が概ね表現可能なことを確認しました。

Comments