Soft Actor-Critic(SAC)でdonkeycarのシミュを走らせてみる
東大の松尾先生の研究室主催のセミナー(RLSP2021)の復習に書いた記事です.
1回生で参加し, 知識不足ではありましたがとても勉強になりました. ありがとうございました.
記号の定義
: 状態, 行動
: 遷移確率関数
: 方策
: 報酬関数
SACとは?
概要
エントロピー項を追加した目的関数を用いる手法.
状態空間, 行動空間が連続な場合にも適用可能.
※大抵は目的関数は
※エントロピー項の定義は
Criricは関数()を近似し, Actorは(関数のsoftmax方策)を近似する.
ActorはGaussian Policyを用い, 分布の平均値と分散を出力する事で行動の分布を生成する.
学習とそれぞれの損失関数
・Critic()の損失関数
Criticはエントロピー項を考慮した関数を近似する.
具体的にはベルマン作用素を用いて更新する.
※状態価値関数はと定義される
このベルマン作用素はエントロピーの最大化を含む様に修正されているが,
を報酬関数として用いると解釈すれば,
通常のベルマン期待作用素と同じ形になり, 同等の性質が言える.
(targetの方策に基づいた関数に収束. 方策の評価をすると解釈できる.)
以上から, Criticは損失関数として
を用いて学習する. (ベルマン作用素を適用した関数に最も近くなるように最小二乗法をかけてる)
※であり,
double networkとTarget Q-networkと呼ばれる手法を用いている.
(不確かな時は楽観的にというヒューリスティックと急激な変化を抑える意図がある)
全体の流れ
SACではExperience ReplayとTarget Q-Networkを用いる事に注意.
ActorとCriticの関係は以下の様になる.
全体の流れとしては,
1. 現在の方策から行動を生成し, をバッファに収集.
2. をバッファからサンプリング.
3. Q関数を損失関数を用いて, として更新
4. 方策を損失関数を用いて, として更新
5. 何回かQ関数と方策を更新したら,
target Q-functionもとして更新
実装
この実装では, envから得られる状態にVAEで前処理をした物を3frame分集めて1つのstateにした.
また, actionも3回連続で入力した.
(VAEはRLSP2021で同じチームだったikedaさん(Ryunosuke Ikeda (@ImR0305) | Twitter)が実装してくださいました. ありがとうございます.)
↑走行時の映像
※VAEはEncoderとDecoderを持っておいて入力をEncodeした物をDecodeした物と入力の誤差が小さく成る様にEncoder, Decoderを学習させる事で入力をEncodeする事で次元削減できるという手法.
↑criticのlossのグラフ
↑actorのlossのグラフ
↑報酬のグラフ
何かおかしいです...
(何が原因か分かる方がいらっしゃれば教えてください...!)
感想など
RLSP2021はとても楽しかったし勉強になった.