コンピュータ将棋の学習の失敗談。

 本日の日記は数年前の失敗談である。そして、コンピュータ将棋の話でもあり、機械学習の話でもある。

 まずはざっくりとした話から始めよう。今のコンピュータ将棋というのは、探索と評価関数からできている。探索がおよそ読みに相当し、評価関数がおよそ大局観に相当する。この評価関数というのは以前は技術者が経験と勘に基づいて職人芸で作っていたそうなのだが、今は自動的なパラメータ学習によって作られている。

 評価関数作成が職人芸から自動学習へ移り変わったのはまだつい数年前のことであり、これが大きなブレイクスルーだった。それ以前にも自動学習の試みはあったらしいが、実用的になったのはBonanzaというソフトからだそうである。

 何をもとに自動学習しているのかといえば、プロ棋士やトップアマチュア棋士たちの棋譜である。ここからパラメータを自動決定している。棋士たちの棋譜を「模範解答」とし、それをはじき出すようなパラメータを求めている。

 本日の日記で大切な概念はこの「模範解答」である。コンピュータ将棋以外でもパラメータの自動決定にかかわる技術のことを「機械学習」というのだが、この機械学習は大雑把に分けて二種類ある。「教師あり学習」と「教師なし学習」である。この二つは「模範解答ありなのかなしなのか」と言い換えて大体あっている。今のコンピュータ将棋の流行は「模範解答あり」なので「教師あり学習」ということになる。ここまで細かいところに異論はあるかもしれないが、大筋は間違っていないはずである。

 ここから私の考えに入っていくのだが、おそらくこの教師あり学習を極めていけば数年後には次々と棋士たちをなぎ倒していくだろうと思う。トップ棋士たちとも互角かそれ以上になるだろう。でも、それでは機械が人間を越えた気がしないのである。なぜなら、人間の作った模範解答を参照しているからである。どうせなら、人間の模範解答に頼らずに将棋のルールのみからパラメータを自動学習し、人間に勝利したい。これこそが完全勝利だと思う。教師なし学習こそが完全勝利だと思っている。

 すでに教師なし学習でのコンピュータ将棋の研究開発をしている人はいるが、今日はその人の話ではなく過去の私の失敗談を書きたい。

 まず私は簡単にいえばこんな感じのアルゴリズムを書いた。最初にパラメータの初期値をランダムに作成しておく。そのパラメータに乱数を加えたパラメータを作る。二つを対局させ、勝った方のパラメータを残す。これを繰り返す。

 実際には数段階複雑なアルゴリズムを書いたのだが、失敗の方向性はこれと同じなので、この程度の説明で問題はない。

 このアルゴリズムはある一つの条件を仮定している。それは、勝った方が優秀なパラメータであるということである。ところが実際にはそんなことはない。このことは将棋をジャンケンに喩えるとよく分かる。アルゴリズムの繰り返しの初期でパーが強いということになったとしよう。そうすると、機械はパーばかりを出すようになる。すると次第にチョキが強いということになり、チョキばかりを出すようになる。同様にグーばかりを出すようになる。これがループし、偏りのあるジャンケンマシーンが生まれてしまう。話を将棋に戻すと、戦法や駒の価値に「偏見」が生まれ、その偏見が偏見を呼び、いつまで経っても偏見を拭い去ることができないといった具合である。

 数年前、私はそんな罠に陥り、それを克服するための実用的な手段が思い浮かばなかったので、この方針でコンピュータ将棋を作るのをやめた。

 一つの解決方針として、作ったパラメータ全てを記録しておき、それら全てと新しいパラメータを対戦させるということも考えたが、計算量として実用的ではないと思った。こういうミスをしてしまうあたり、私が機械学習の素人であることを物語っている。

 ともあれ、いつかは教師なし学習による強いコンピュータ将棋を誰かが作らねばならないと思っているので、教師なし学習にとり組んでいる人を応援しているし、私自身も教師なしという枠組みでモンテカルロ法にとり組んでいる。そしてゆくゆくは「機械の序盤」というものを見てみたい。