HOME > natural science Laboratory > コンピュータ・シミュレーション講座 > ゼロから作るDeep Learning

【ニューラルネットワークの基礎研究29】
放物運動の初期位置と初速度と経過時間から位置と速度を学習

文責:遠藤 理平 (2018年5月23日) カテゴリ:ゼロから作るDeep Learning(49)

「解析解は得られないが数値解が容易に得られる系で、学習の成果を簡単に検証できる問題」として、空気抵抗力が存在する放物運動を対象として物理的な運動を学習させています。
・ここまでの学習でできることをまとめると以下のとおりです。
(1)軌跡から粘性抵抗係数を見積もることができる
(2)その粘性抵抗係数を用いて初速度と投射角度を与えるとその飛距離がわかる
→ その結果、最大飛距離となる初速度に対する投射角度を予測できる。
(3)粘性係数と現時点での位置と速度からその後の位置と速度がわかる

本稿では視点を変えて、粘性係数と初期位置と初期速度と経過時間をからその後の位置と速度を学習させてみます。

ニューラルネットワークの基本パラメータ

・ニューラルネットワークの構造:順伝播型ニューラルネットワーク(FFNN)
・学習方法:通常の勾配法(学習率固定、逆誤差伝搬法)
・学習率:eta = 0.01;
・ミニバッチ数:100 (サンプルは無限に用意できるためミニバッチという概念は存在しませんが、ランダムに用意したミニバッチ数分のサンプルに対する平均を用いて学習を進める)
・活性化関数(中間層):ReLU(ランプ関数)
・活性化関数(出力層):恒等関数
・損失関数:2乗和
※独立したネットワークを10個用意してそれぞれ個別に学習させて、学習効果の高かった上位5つの「学習回数」vs「損失値」をグラフ化します。

中間層2層のニューラルネットワーク(6-500-500-4)

初速度、投射角度、粘性抵抗係数を毎回ランダムに与えて、1秒間の軌跡を0.01秒刻みで学習させた結果です。

(追記)初速度、投射角度、粘性抵抗係数を毎回ランダムに与えて、3秒間の軌跡を0.01秒刻みで学習させた結果です。

100,000回学習後のチェック

初速度20、粘性抵抗係数を1.0として、投射角度を15°、30°、45°、60°、75°の軌跡の数値計算結果(実線)と、ネットワークで計算した1秒間の軌跡(黒丸)を重ねて描画しています。概ね数値解の上に乗っていることが確認できます。

(追記)上記と同じ条件で3秒間の軌跡を学習させた場合の結果です。

考察と次の課題

・学習方法で一つ失敗だったのが、初期状態の学習(時刻t=0)を怠ったため、原点での誤差が大きくなってしまった。
→ 次回は初期状態も学習させる
・この方法が良いのは、「粘性抵抗係数と初速度と投射角度から飛距離を学習」する場合は1回の投射で1個のデータしか得られないが、軌跡をまるごと学習対象とすることでデータ数が時間刻み数個分取得できる。
・さらに、入力データを「投射角度」ではなく「初期速度」とすることで放物運動の一般的な状態を初期状態として扱うことができる。
→ つまり、投射運動以外にもそのまま適用できる。自分がやりたい方向に少し近づいた気持ち。
(追記)学習対象が1秒間から3秒間と伸ばすと学習は難しくなることがわかる。

・投射運動に限らずどんな初期条件でも1秒間の軌跡を追随する学習を行ってみる。
→これができれば、次の1秒後の軌跡もつなげていくことで予測できる

プログラムソース(C++)

http://www.natural-science.or.jp/files/NN/FFNNs_epoch_ProjectileMotion_AirResistance4.zip
※VisualStudio2017のソルーションファイルです。GCC(MinGW)でも動作確認しています。



▲このページのトップNPO法人 natural science トップ

関連記事

ゼロから作るDeep Learning







▲このページのトップNPO法人 natural science トップ




Warning: mysqli_connect(): (28000/1045): Access denied for user 'xsvx1015071_ri'@'sv102.xserver.jp' (using password: YES) in /home/xsvx1015071/include/natural-science/include_counter-d.php on line 8
MySQL DBとの接続に失敗しました