romAI検証コーナー(その4)非線形回帰:インパクト関数
シンプルなモデルを使用して、romAIの機能をチェックしていきます。第4回はromAIをインパクト関数の非線形回帰問題に適用してみます。衝突問題など非線形性の強い問題へromAIが適用できるかの下調べとなります。
問題設定
If文とExponential関数を用いたインパクト関数を自作しました。
y=k exp (e*(u-u0)), u>u1
y=0, u<=u1
パラメータは
k = 1, e = 2.1, u1 = 10
とすると以下のようなカーブが得られます。u=10を超えたところで、壁に衝突し、反力が立ち上がることをイメージしています。今回はこれをトレーニングデータとし、静的な問題として、この特性を捉えることができるかを確認します。
romAIの設定
romAIの設定を行います。
入出力
第1~3回と同様に、静的ROMとしてInputs、Outputsのみを指定します。
関数
romAIではModel Typeとしてlinearとnon linearが選択できます。
今回は非線形の強いインパクト関数であるため、non linearのNeural Netを使用します。tanhとrelu関数でどのような違いがあるかを見るため、以下二つのモデルを作成します。レイヤーの数、ニューロンの数は、[20,20]としました。
- Non Linear: tanh [20,20]
- Non Linear: relu [20,20]
トレーニングパラメータの設定
第1~3回と同様に、Early Stoppingを使用します。Cross-Validationデータのlossの変化が見られなくなった段階でトレーニング終了とします。変化量は1e-7としました。
Epochsが上限に達してもトレーニングが終了するため、大きめの値1000としておきました。
Regulation Coefficientは急峻なカーブを表現できるよう0としています。詳しくは第3回をご確認ください。
romAIの精度確認
romAIの結果をインパクト関数と比較しました。
Non linear: tanh [20,20]
概ねインパクト関数を表現できています。
y=-1~1で拡大してみると、波が見られます。
Non linear: relu [20,20]
概ねインパクト関数を表現できています。
y=-1~1で拡大してみると、tanhと比較して波が小さく、フラットに近い特性が得られています。
非線形の強い特性に対してはrelu関数が向いていると言えます。
まとめ
今回はromAIをインパクト関数の非線形回帰問題に適用し、Neural Netでインパクト関数が概ね表現可能なことを確認しました。また、インパクト関数のような非線形性の強い特性はrelu関数が向いていることが確認できました。
Comments
-
本ブログで使用したモデルとその解説動画は下記よりご利用いただけます。
パラメータを変えていろいろお試しください。
https://community.altair.com/community/?id=kb_article_view&sysparm_article=KB0121850
0