頭と尻尾はくれてやる!

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


強化学習(DQN)で報酬のクリッピング

強化学習で物理エンジンを使いたいが
↑この続き。
物理エンジンを使わずに4次のルンゲクッタ法なるものを使って振り子の角度、角速度を得られるようにして、いざ学習を進めるも、、、どういうわけかうまくいかない。

ところが、報酬のクリッピングという手法があるらしく、、、

ゼロからDeepまで学ぶ強化学習
↑このあたりを参考に、報酬の高い方を1、低い方を-1としてみたところこれがなかなか効いた。
単に報酬を振り子の高さや角度(ラジアン)なんかよりももっとはっきりと差がつくように与えるといいのだろうか?

Q値更新式
↑そもそもの式との整合性はどうなんよ?と思うけどきっといけるんだろう(理解不能)。


なお、Experience Replayの派生(?)で総報酬がよかったエピソードを残しといて使う、というのは全然効かなかった。似たようなデータが多くなってしまうのがよくないのか?なんとなくいろんなデータを使って学習させる方がいいんじゃね?と感じた。

ちなみに全く同じデータはデータセットから削除してから学習にまわしてた。

あと、損失関数にHuber関数を使うと発散しにくくなるとかなんとか見たので試してみたら、確かにQ値が発散していくのが抑えられたと思う。


まあ単に今回のケースではこうだった、ってだけかも。
ともかく、強化学習(DQN)ってのは難しいということはわかった。

<< SceneKitでオブジェクトの速度・角速度が取得できない  TopPage  日足チャート画像のCNNで株価予測 >>

コメント


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

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/1148-52dfb946




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

FC2Ad