マルチエージェント深層強化学習手法の1つであるQMIXについてちょっと調査しましたので、メモしておきます。
一応実装してみたのですが、まだTwo State Game上でしかテストできてません。
QMixとは
- QMixはcentralized training with decentralized execution (CTDE)の一種。つまり、行動選択自体は各々のネットワークで行うが、学習自体はすべてのエージェントの情報を用いて行う
- 各々のエージェントのQネットワークを\(Q_a\),\(Q_a\)を使って中央で学習するネットワークを\(Q_{tot}\)とする
- QMIXでは、\(Q_a\), \(Q_{tot}\)が以下のような関係であることを仮定する。
- つまり、\(Q_a\)を向上させると\(Q_{tot}\)も向上する。なので、\(Q_{tot}\)を最大化する行動の組み合わせは、
QMIXのネットワークは以下のようになります。
各エージェントが各々のネットワークを保持しており、各エージェントはここから得られたQ値を使って行動選択を行います。
学習は各エージェントのネットワークから得られた\(Q_{a}\)と状態\(s_t\)を入力としたMixing Networkを使って学習を行います。Mixing Networkは内部でhyper networkを使っています。
最小化したい関数は以下のようになります。
QMIXの実装(Two State Game)
QMIXをtensorflow2で実装してみました。
https://github.com/tocom242242/qmix_tf2
ちなみに本家のソースコードも公開されています。
https://github.com/oxwhirl/pymarl
まだ、Two State Gameでしか実験できてません。(計算機が貧弱なので、いつもう少し複雑な問題でテストできるかわかりません・・・)
ちなみに、実験結果は以下のようになりました。参考文献と同じような結果にはなっていました。
左がepisodeの報酬(最大が8)、左が\(Q_{tot}\)の学習時の誤差の推移になります。
参考文献
https://arxiv.org/pdf/1803.11485.pdf
コメント