【ニューラルネットワークの基礎研究30】
任意の初期条件に対する運動を学習(重力+空気抵抗力)
「解析解は得られないが数値解が容易に得られる系で、学習の成果を簡単に検証できる問題」として、空気抵抗力が存在する放物運動を対象として物理的な運動を学習させています。
・ここまでの学習でできることをまとめると以下のとおりです。
(1)軌跡から粘性抵抗係数を見積もることができる。
(2)その粘性抵抗係数を用いて初速度と投射角度を与えるとその飛距離がわかる。
→ その結果、最大飛距離となる初速度に対する投射角度を予測できる。
(3)粘性係数と現時点での位置と速度から0.5秒後の位置と速度がわかる
(4)放物運動の初期位置と初速度と経過時間から位置と速度を学習
ここまでは放物運動を想定して学習していましたが、任意の初期条件(初期位置と初速度)に対する運動の0~1秒間を学習させます。
これがうまく行けば、「重力+空気抵抗力」が存在する物理系を学習できたことを意味し、任意の初期条件からスタートした運動を同じネットワークを繰り返し利用することで予測できます。
ニューラルネットワークの基本パラメータ
・ニューラルネットワークの構造:順伝播型ニューラルネットワーク(FFNN)
・学習方法:通常の勾配法(学習率固定、逆誤差伝搬法)
・学習率:eta = 0.01;
・ミニバッチ数:100 (サンプルは無限に用意できるためミニバッチという概念は存在しませんが、ランダムに用意したミニバッチ数分のサンプルに対する平均を用いて学習を進める)
・活性化関数(中間層):ReLU(ランプ関数)
・活性化関数(出力層):恒等関数
・損失関数:2乗和
※独立したネットワークを10個用意してそれぞれ個別に学習させて、学習効果の高かった上位5つの「学習回数」vs「損失値」をグラフ化します。
中間層2層のニューラルネットワーク(6-500-500-4)
初期位置、初速度、粘性抵抗係数を毎回ランダムに与えて、1秒間の軌跡を0.01秒刻みで学習させた結果です。
100,000回学習後のチェック
これまでの結果と比較するために、初速度20、粘性抵抗係数を1.0として、投射角度を15°、30°、45°、60°、75°の軌跡の数値計算結果(実線)と、ネットワークで計算した3秒間の軌跡(黒丸)を重ねて描画しています。ネットワークで学習した結果が不連続になってしまっている部分は、0~1秒の最後の結果を初期条件として次の1秒~2秒を計算し、続けて同様に2秒~3秒も同じネットワークを利用しているところです。
考察と次の課題
・現在理由は不明だが、初期状態がずれてしまっている。
→ これについては詳しく検証する
・任意の初期条件に対する学習は、無論、放物運動を想定している場合よりも学習が難しい。
→ 層数やユニット数を変更して試してみる
・まだまだ課題は多いが、物理系そのものを学習できそうなので希望が持てた。
プログラムソース(C++)
・http://www.natural-science.or.jp/files/NN/FFNNs_epoch_ProjectileMotion_AirResistance4.zip
※VisualStudio2017のソルーションファイルです。GCC(MinGW)でも動作確認しています。