GA将?開発日記~原点回帰~

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

PGLeaf Drei Phase1完成

現状

 素のPGLeafとの差分は以下の通りです。

  1. 関数近似の導入(参考論文はこちら
  2. エントロピー正則化の導入(参考論文はこちら
  3. 並列16連ガチャの導入

 まず、1.の導入により、エピソード終了時の収益を計算しなくても、方策勾配の計算が可能になりました。これにより、Phase2~3でExperience Replayを導入する目処がたちました。

 次に、2.で指し手の多様性を確保する事に成功し、三目並べモードでは収束速度が向上しました。5五将棋モード・本将棋モードでは未検証ですが、上手く動いてくれるのを期待しています。

 ただ、それでもまだ「正しく収束するかは運次第」という部分も有りますので、3.の並列ガチャを導入しました。結果的に、三目並べモードでは30秒*1かからずに正しく収束する様になりました。

 昨日の時点では並列16連ガチャは「適当なタイミングで全評価関数のパラメータの平均を計算し、それをベースに再度学習を開始する」というものでした。ただ、現在は少し修正して、GA*2の交叉処理っぽく「2つのパラメータ間の内分を、トータルでは評価関数の個数分だけ計算する」という処理に変更しました。これにより、評価関数パラメータの多様性を維持しつつ学習を進められる様になっているはずです。

考察

 並列16連ガチャに関して「ガチャ」とか言わずに真面目に考察してみます。

 前提として、自己対局による学習を行うものとします。また、三目並べモードでの動作について考えるものとします。

 この時、初手であれば角や中央は「その後の展開が間違えにくく、負けにくい」手であり、辺は「その後の展開が広いので、負ける可能性が高い」手です。

 つまり、学習初期に「角や中央に打てば負けにくい」と学習してしまうと、先手は初手辺に打つ手を自己対局の際にほとんど選択しなくなります。

 この結果どうなるかと言うと、「先手GA将 VS 後手完全読みプレイヤー」の場合は引き分け率が100%になるのですが、先後入れ替えると引き分け率が100%になりません。これは、先手が辺に打った後の展開を学習する機会がほとんど無いのが原因です。

 では並列16連ガチャを導入するとどうなるかと言うと、複数のエージェントが並行して学習しますので、多数のエージェントは初手角・中央を選択していても、一部のエージェントは初手辺を選択する確率が高くなります。

 並列16連ガチャでは「収束判定に使用するパラメータは、全評価関数のパラメータの平均値」です。また、パラメータは全て0で初期化しています。

 ですので、「初手角が得意なエージェント」と「初手中央が得意なエージェント」と「初手辺が得意なエージェント」(ただし、それぞれエージェントの個数は異なる)の平均値を取ると、どういう局面に関しても「そこそこ妥当なパラメータ」が得られます。

 ここからは将棋の場合の話になりますが、将棋モードでは線形の評価関数を使用しますので、「パラメータの平均値をとる」という処理が果たして正しいのか、という問題は残っています。

 例えば「居飛車が得意なパラメータ」と「振り飛車が得意なパラメータ」の平均値を取れば「オールラウンダーなパラメータ」になるのか、という疑問です。

 ひょっとしたら「捌く居飛車」とか「ゴリゴリ攻める振り飛車」っていう棋風になるかもしれません。が、まぁそれはそれで見ていて面白そうなんで、特に気にしなくて良いかなと感じています。

*1:ノートPCだと1万局程度

*2:遺伝的アルゴリズム