1年間機械学習をやってみて分かったこと

1年間KPPT型の評価関数を作成(機械学習)して分かったことを書いてみます。

※個人的な知見になるので、おかしかったらやさしくツッコミお願いします

評価関数を学習するということ


現在「将棋ソフト」の主流である「KPPT型」評価関数
(この形式について詳しい説明は割愛します)

この機械学習で強くなる原理というか、
本質的に何やっているか考えてみました。

私がたどり着いた答えは「言語学習」でした。

例えば現在やっている機械学習において、

「将棋言語=標準語」と置き換えた場合

depth3(探索深さ3手)で生成した教師局面は「沖縄弁」といった感じです。

「あぎじゃびよい」等の言語をたくさん生成して「標準語(将棋言語)」に翻訳。
そもそも「あぎじゃびよい」を使う場面(局面)が
「オーマイゴット」や「アンビリバボー」といった場面だと分類していくイメージです。
でも「オーマイゴット」と「アンビリバボー」は違うんじゃない?
っていうのが「depth3」であり、
なかなか正確な「標準語(将棋言語)」に翻訳出来ないため
評価関数が強くなりません。


それで私の感覚で言えば
depth8(探索深さ8手)で生成した教師局面は「関西弁」といった感じです。

「ほんま~」くらいなら、まあ分かる。

でも「ちゃ~しばきいくぞ」とか言われても「ん?」ってなる。
これが「喫茶店に行く」といった場面(局面)がたくさん出てくると、
そういった意味かって理解できる。


そしてひと口に「関西弁」と言っても「大阪」と「兵庫」でも微妙に違うし、
同じ「兵庫県」内でも「ちゃ~しばきいくぞ」とか使うのは「姫路」や「加古川」付近で、
「神戸」くらいになるとやっぱり「ん?」ってなる。

こういった地域性の違いが
「別の評価関数」から生成されたdepth8といったイメージで私は捉えました。


つまり、現在やっている機械学習は
「将棋言語」に翻訳する「言語学習」であると考えました。

具体的に出来ること


方言を「標準語(将棋言語)」に翻訳する「言語学習」となれば、
すぐにいろいろなアイデアが生まれると思います。

1)そもそも標準語に近いほど良い=depthを上げる

2)サンプルが多いほど良い=教師局面をたくさん

このようにありきたりな発想はすぐに出てきますね。


こういったイメージから私は機械学習時に、
他の上手く行きそうなアイデアを盛り込んで学習した結果が、
評価関数「Qzilla9」となります。


他にやった取り組みについて少し書くと、
depth8などの浅い探索で生成されたノイズの多い教師局面(教師無し)と、
学習用定跡から生成されたノイズを除去した教師局面(教師有り)をシャッフルし、
同時に学習することでノイズの除去を期待したり、
潜在表現の共有化を狙っています。
(他にもいろいろやっている)

WCSC28までにやってみた実感としては、
普通にまだ強く出来るだろうなとは思いました。

そして、これらのやり方は学習の本質にあって、
3駒等の形式の問題ではないので、
新しく発表された学習モデル「NNUE型」にも使えるはずです。

何でこんなことを書いたか


Kaggle(カグル)という
世界中の機械学習、データサイエンスに携わっている数十万人が集まるコミニティーがあります。

そこではいろいろな機械学習のコンペを開催されており、
中には企業や政府が賞金付きのコンペを開催しております。

ここではすでに「言語学習」なんかのコンペもやっており、
Kernels(カーネル)という機能で、
コンペに参加した世界中の機械学習、データサイエンスに携わっている
数千人が構築した学習モデルが多数公開されています。

そしてそれはKaggle(カグル)に登録すれば利用することが出来ます。

我々がやっている「将棋ソフト」の機械学習が「言語学習」とするならば、
最新の機械学習をやっているKaggle(カグル)で行われたコンペからみれば、
古典的な手法に分類されると思われます。

こういった現状から、英語に堪能な将棋ソフト開発者が
何かすごいアイデアを引っ張って来てくれないかな?
カグラー(Kaggler)が、そういったことならいっちょ将棋ソフト作ってみるか。
といった活動を期待して書いてみました。

この記事へのコメント

スポンサーリンク