Connect4でちまちまpMCTSの改良
引き続き↓のローカル実行。
blog.codecamp.jp GitHub - AppliedDataSciencePartners/DeepReinforcementLearning: A replica of the AlphaZero methodology for deep reinforcement learning in Python
コード概要
動作を見てみるとどちらかというとAlphaGoZeroの再現といった趣が強いです。
ここまで試したこと
- MCTS_SIMSだけ半分の25にして回し始める
- 50なら確実に相手の上がり手阻止まで読めるのにそこを減らしてしまったので、読み抜けが発生しまくる
- にしても…学習が進んでも自分の上がり手すら放置してゲームが進行するの何なの?
- CPUCT=1は小さくない?とりあえず2にしてみた
- CPUCTを大きくしてもPolicyの強制力が上がるだけ…NN評価値が1.0になってしまうと上がり手の1.0と同格になりPの大小で上がり手が選ばれなくなる
- MCTS木で上がり手と上がり手放置のminimax扱いを実装
- elmo式(MCTS評価値と最終結果の平均でNN評価値を学習)
- 上がり手でない部分でPによる差別を解消するために、MCTSの後半1/4をUCB1の係数0.5倍に変更
- あ!ディリクレノイズの加え方が変!→公式のIssueに報告、手元では間に合わせの修正で進める
- 手選択の温度で『最善手でない手を選んでしまった』自覚があるならその分それ以前の局面の学習で『最終結果はそれ以降の手のせいだからこの局面にはMCTS評価値のほうが意味がある』という処理をしたらいいんじゃないか
今後の予定
- 自己対戦棋譜のためのランダムソースに悩んでいます。(現状の動作は訪問回数最大の腕(同数が複数あったらその中で無作為)なのですがplayout数が少ないので同数が頻発したり)実力最優先な本番とは違うので訪問回数最大と評価値最大からランダムに選ぶとか?
- 改めてUCB1について振り返ったり
- チャンピオン方式をやめる、それで戦型の多様性を考えたら複数NNのリーグ戦はどうだろう
- 4目並べだからって4x4カーネルなんだろうけども汎化性能が良くないんじゃないの、そろそろ3x3とかResNetとか
- 今の学習率0.1って書いてあるけどmomentum=0.9のせいで実質1.0じゃん、これは過去を忘れてるかも
- シリアルに1局面ずつ推論しているから遅いんだ、探索並列化でバッチ推論を実現しないと