romAI検証コーナー(その2)非線形回帰:3次関数
シンプルなモデルを使用して、romAIの機能をチェックしていきます。第2回はromAIを3次関数の非線形回帰問題に適用してみます。
問題設定
y=u+0.2u^3の3次関数に対し、乱数で±100のノイズを付与したデータを作成しました。
uの範囲は-15~15としています。これを学習データとしてromAIがy=u+0.2u^3の3次関数を求めることができるか確認します。
romAIの設定
romAIの設定を行います。
入出力
第1回の線形回帰問題と同様に、静的ROMとして、Inputs、Outputsのみを指定します。
関数
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]
トレーニングパラメータの設定
第1回の線形回帰問題と同様に、Early Stoppingを使用します。Cross-Validationデータのlossの変化が見られなくなった段階でトレーニング終了とします。変化量は1e-7としました。
Epochsが上限に達してもトレーニングが終了するため、大きめの値1000としておきました。
romAIの精度確認
乱数によるノイズをゼロとしたものを正解として、romAIの結果と比較しました。
Non linear: tanh [20,20]
概ね3次関数を表現できていることがわかります。
Non linear: relu [20,20]
概ね3次関数を表現できていることがわかります。relu関数は滑らかでないので、その傾向が表れています。
まとめ
今回はromAIを3次関数の非線形回帰問題に適用し、Neural Netで3次関数が概ね表現可能なことを確認しました。
Comments
-
本ブログで使用したモデルとその解説動画は下記よりご利用いただけます。
パラメータを変えていろいろお試しください。
https://community.altair.com/community/?id=kb_article_view&sysparm_article=KB0122009
0