FC2ブログ

頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


TensorFlow、MPS、SceneKitで強化学習

強化学習で倒立振子をやってみようとした。いわゆるDQNってやつ。
学習にはTensorFlow。
振り子の描画にはMacアプリのSceneKit。振り子の動きはSceneKitの物理演算を使う。振り子を動かす時にNNの出力が必要なのでTensorFlowが学習させた後の係数をMacアプリ側でもらって、Metal Performance Shaderを使うようにしてる。
MacアプリでTensorFlow使って学習させる方法が不明なのでMacアプリと同時にPythonを実行させておき、進行状況を示すファイルを双方で監視し、処理を行ったり来たりするようにしてる。

物理エンジンを使う状況で強化学習をやりたかったのでこんなややこしいことになってる。
面倒だけど他に方法が思いつかなかったので、、、まあ素直に機械学習のライブラリもある(らしい)Unity使えばよかったのかな、知らんけど。
WWDC2018でmacOSでCreate MLなる新フレームワークで学習ができるようになったけど、今回の用途には使えなさそう。

ともかくこんな感じで倒立振子に挑戦したんだが、、、これが予想外に難易度高かった。

倒立振子で学ぶ DQN (Deep Q Network)
↑これ見たら簡単にできそうな気がするけど、実際はとんでもなく難易度が高かった。

いくつかツイートで動画をあげてたけど、、、




とまあ結局挫折しました。
ここまでいろいろとやりましたよ、、、
・層を増やす
・損失関数にHuber関数を使う
・(総報酬の高かった)エピソードを記録しといて学習に使う(Experience Replay)
・報酬のクリッピング
などいろいろと試行錯誤したんだけどダメでした。

他にもやったことがあるのでまた別記事で。





<< 強化学習で物理エンジンを使いたいが  TopPage  コストコのクロスバイクを調整してもらった >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/1145-8eee18a5




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad