報酬の割引を実装したら、ちょっと改善
後手のみ学習で、例として下記局面での各手を指す確率をログ出力してみました。
■■■■■ ■○× ■ ■○ ■ ■ ■ ■■■■■ 手番:後手
で、ログを眺めてると、○の2つ並んでるのを止めないといけないんだけど、止めた後の勝ち方をなかなか学習出来ていない(止めた後の手順が長いので、なかなか勝つ対局が出現しない)らしいという所まで突き止めました。
んで、それなら目先の負けをとりあえず回避出来る様にと、報酬の割引*1を実装してみました。
結果、下記の通り。時間の都合でリバーシ・テーブル形式の評価関数は実験していません。
先手のみ学習 | 後手のみ学習 | 両方学習 | |
---|---|---|---|
三目並べ | ○(100局かからずに収束) | ○(100局かからずに収束) | ○(4000局ほどでちゃんと収束) |
リバーシ(線形評価関数) | ×(25万局かけて+8に収束) | ×(25万局かけて-9に収束) | ○(45万局ほどでちゃんと収束) |
リバーシ・線形評価関数の両方学習版は収束までの対局数が短くなってますし、まぁ割と良い感じです。
学習条件は下記の通り。
- 方策勾配法+ソフトマックス方策
- 探索無し
- 初期温度0.02
- 温度可変、目標探査率0.05
- 学習しない側のプレイヤーは、合法手リストの最初の手を指す
- 割引率γは0.99
それじゃぁ次は5五将棋で割引率を色々変えて実験してみます。
*1:開始局面から近い報酬ほど重視するようにする