Table of Contents generated with DocToc
🦆 Hungry Geese 🦆
https://www.kaggle.com/c/hungry-geese
🎉 Month 5 Winners - Goose luck! 🎉
Congratulations to our Month 5 Winners - Goose luck!
https://twitter.com/imokurity/status/1408578446645547012
はじめに
このレポジトリは HandyRL の fork です
私のソリューション
- 教師あり学習 + 強化学習 + MCTS (rating 1200くらい)
チームのベストソリューションは、また別です。。😂
教師あり学習
rating 1200 以上の agent の対戦履歴をもとに、 勝者の行動を教師データとして学習する
強化学習 (HandyRL)
使い方
- GPUサーバーで
python main.py -ts
- CPUサーバーの
config.yaml
でnum_parallel
を使用するCPU数にするserver_address
をGPUサーバーのアドレスにする
- CPUサーバーで
python main.py -w
その他
- GPUが遊んでいるようならGPUサーバーの
config.yaml
のnum_batchers
を増やす config.yaml
のbatch_size
は GPUのメモリサイズに合わせる- ただし learning rate がこの
batch_size
に依存しているっぽい このあたり
- ただし learning rate がこの
config.yaml
のmaximum_episodes
はGPUサーバーのメモリサイズに依存する (モデルサイズによるが128GBで 100万くらい)
学習
ハイパーパラメータ
parameters.md のメモ (間違っているかも)
gamma
: 先の報酬をどのくらい減らすか - 例えば gamma が 0.8 なら 10ステップ先の評価は 0.8 ^ 10 = 0.1 倍されるforward_steps
: 何ステップ先までの行動を評価の対象とするかentropy_regularization
: 最適な行動ではなくランダムな行動をする確率 (Noisy Layerを使うなら0でよさそう)update_episodes
: 何エピソードごとにモデルを更新するか (大きいほど安定するが時間がかかる)lambda
: n が 1 だと最終的な報酬を重視, n が 0 だと直近の報酬を重視policy_target
,value_target
: 損失関数(行動評価用と状態価値評価用) (基本はTD)
対戦相手
MCTS
こちら を パクる 参考にして、以下の更新をした。
- 探索のたびに、(探索済みの局面も)推論を行う
- 推論のたびに、ランダムにモデルが選ばれる(アンサンブル効果)
- 推論のたびに、局面をランダムにスライドさせる
- 推論のたびに、敵 3体のチャネルをシャッフルする
- ベストな行動は、直近での推論結果のみで決める
- 推論結果は、4択しかなく、選択肢の差がモデルによっては付きやすいため
- ある確率で、推論結果にルールを適用する
- それによって、正面衝突を回避しやすくする
評価
モデル同士で対戦し、成績の良いモデルを submit する
Kaggle への Submit
- 学習済みモデルの upload:
make model
- ソースコードの upload:
make source
- エージェント Notebookの submit:
make submit