GA将?開発日記~王理のその先へ~

ネタ勢最強を目指して絶賛開発中。

もういい加減、メタ強化学習に見切りをつける時期かもしれない

メタ強化学習

今月いっぱいは足掻いてみて、それでめどが立たなかったらすっぱりあきらめます。

メタパラメータの調整

メタ強化学習が失敗した場合は、何か別の手を考える必要あり。今の所案は二つ。

  1. 王手将棋*1・後手ランダム指しで、手作業で調整
  2. 上の条件で、収束までの対局数が最短になる値に自動調整

二つ目は、単純な(状態を見ずに値を調整する)メタ強化学習ですが、これは既に成功しているので、ルーチンを流用するかも。

今の所、ソフトマックスの温度(or εグリーディーのε)とλ・評価関数の学習率の三つだけ調整出来れば良いので、手作業でもなんとかなるかもしれませんが。

学習が進んでいるかどうかの判断方法

いくつか案はあるんですが、どれも決め手にかけます。

  1. 次の一手問題の正解率
  2. 棋譜との一致率
  3. 他のソフトとの連続対戦

「正解率や一致率が高くなるけど、弱くなる」って可能性を考慮すると、最初二つはあんまり採用したくないです。やるとしても補助程度に。

ただ、連続対戦にしても1日1〜2時間程度しか(連続対戦に使うのには)時間をさけれませんから、それだとせいぜい数十局。統計的に見て意味のある数字かどうかは…微妙。

判断方法に関しては継続して検討しておきます。

高速化

学習が遅いのは対局数を増やしてごまかします。目標10万局/日。

以前調べた限りだと、プログラム全体の実行時間に占める評価関数内での処理時間がかなり多かったので、評価関数の高速化とリーフノード数の削減だけでも、それなりの高速化は期待出来そうです。


つー訳で残項目。多い…

  • リバーシでの予備実験
    • TDLeaf(λ)実装。
    • メタ強化学習で、状態を見て行動選択する様に変更。
    • メタ強化学習で、状態の表現方法を検討。
    • εグリーディーとソフトマックス手法の比較。
    • TDLeaf(λ)とTD(λ)の比較。
  • 将棋の学習関連
    • TDLeaf(λ)エージェントを再実装。
      • 方策をエージェントから独立させる。
      • メタ強化学習対応。
    • 【保留】メタ強化学習の移植。
    • 学習中の各種統計情報の収集・表示ルーチン実装。
    • 対局部分の並列化。
    • 他のソフトとの連続対戦ルーチン実装(勝率での検証用)。
    • 評価関数でのstd::mapの使用をやめる。
      • ひょっとしたらテンプレートを使用する必要があるかも。ここら辺は要検討。
    • ハッシュ表の再実装。
    • MTD(f)再実装。静止探索部分でもハッシュを使用する。
    • 将棋のルールの細かい部分の実装。
      • 千日手・連続王手の千日手の検出。
      • 入玉宣言の実装。
      • 詰みとステイルメイトの区別。
      • 打ち歩詰めと打ち歩ステイルメイトの検出。
    • 探索に頓死チェックを追加。(※必要に応じて)
  • 選手権での対局用
    • USIにちゃんと対応
    • MTD-∞の実装
    • 思考時間制御

*1:王手したら勝ちという以外は普通の将棋と同じルール