人間の棋譜を参考にせずに評価関数パラメーターを学習させる件


少し誤解している人がいらっしゃるようなので補足します。


まず、人間の棋譜を参考にせずに学習させようとした場合、探索で正しい手が指せるのは詰みの絡む局面(≒終盤)だけなので、終盤の指し手から(開始して、それを前倒ししていき、最終的に序盤の指し手を)学習させるというのは当然のことです。これは私のアイデアではないです。オセロのロジステロなど先行事例(10数年以上前から!)は多数あります。


この部分、誤解している人が多いので、以下に「ひまわり(将棋)」の山本さんのツイートを紹介しておきます。


https://twitter.com/kyamamoto9120/status/529958077491970049


https://twitter.com/kyamamoto9120/status/529960169023631360



その上で私のアイデアは、二点あります。


一つは、学習に強化学習(TD法など)を使わないということです。普通の棋譜からの学習はボナメソで成功することが保証されているのだから、わざわざ他の方法を持ち出さないということです。


もちろん、TD(λ) 法やQ学習などを用いても成功するとは思います。しかし、Bonanzaのlearn.cを見てもわかるように、ペナルティのかけかたや、シグモイド関数の使い方に独特のテクニックのようなものがあり、TD(λ) 法やQ学習を用いる場合も、それに相当する独特のテクニックを開発しないといい値に収束しないのではないかと思うのです。私は強化学習を専門にやっているわけではないので、そのへんの事情は知りませんが、ボナメソで出来るとわかっていることをわざわざ他の方法でやるのは遠回り以外の何物でもないと思っています。


ボナメソであれば、プロの棋譜から学習させる場合、どれくらいの数の棋譜でどれくらいのイテレーションをどれだけ回せばそこそこの値に収束するのか(どれくらいの棋力の評価関数パラメーターになるのか)がわかっていますから、それと比較しながら実験が出来ます。だから、この部分をボナメソ以外でやるというなら、そもそもその手法を用いてプロの棋譜からボナメソより早く学習でき、ボナメソでやるのと同等以上の棋力になることを証明してからでないとその手法を使う価値がないと思うのです。


また探索部についても同様で、きちんと探索部が書けていること(少なくともボナ6のfv.binを使用したときにボナ6と同等の性能が出ていること)が必須条件だと私は考えています。この部分がきちんと書けていない場合、この手法で学習させた評価関数パラメーターとの比較実験自体がまっとうに出来ないからです。


二つ目は、学習の時の次元下げです。終盤に出てくる特徴から序盤に出てくる特徴を学習するためには、学習時の次元下げが行われていない限り、厳しいというのが私の考えです。


そのために相対KPPによる次元下げ(や、その他の次元下げ)を用います。それなしではうまく終盤から序盤の形を学習させられないと私は考えています。例えば、自己対戦で生成した棋譜からのみ学習させることを繰り返すと、棋力がサチらず(飽和せず)、どこからか棋力が下がっていきます。それは序盤を誤って学習してしまうためです。このような(自己対戦棋譜からのみの学習という)フィードバック型の学習において、サチらない状況(条件下)では、終盤から序盤を学習させるのは厳しいというのが私の考えです。


つまり、フィードバック型の学習で棋力がきちんとサチるように次元下げをして、まずサチることを確認する。サチらないなら次元下げの方法を工夫してやる。これがまず最初にやるべきことであり、これをやらずに、終盤から序盤を学習させようと努力するのは、努力の方向性が真逆であるというのが私の考えです。だから、私は、この部分でサチる」のを確認できたら、この手法に取り組むつもりです。


オセロで成功して将棋で成功しないのは、以上の2点に起因する問題だと私は考えています。


つまり典型的な駄目な研究の進めかたとしては、探索部=独自に書き起こしてバグ有りかも、評価関数の形=独自、評価関数の学習メソッド=強化学習、次元下げ=やってない、というやり方です。このように未知の要素が多い状況では比較実験自体が成立しないので、成果を出すのに相当な腕力が必要になります。そのような状況下では私ですら全く成果は出せないでしょう。(※ ひまわり将棋がどうやっているのかは私は知らないので、この話はひまわり将棋や特定の将棋ソフトのことではありません。)


人間の棋譜を用いずに評価関数パラメーター学習する件について、私の考えおよび、私の提案する手法は以上です。