何故、将棋の機械学習で天国と地獄メソッドが必要なのか?

今回、私はWCSC31ではみざうら王チームとして参加する。やねうら王に、水匠開発者のたややんさん、やねうら王のメンテナーのMizar(ミザー)さんが加わった形なので、水匠の「水」とMizarさんの「ざー」から、「みざうら王」という名前になった。

みざうら王チームでは、天国と地獄メソッドを使って学習させている。

// みざうら王 with お多福ラボ PR 文書(draft) : https://www.apply.computer-shogi.org/wcsc31/appeal/YaneuraOu/mizaura_PR_draft.pdf

早い話、これはABテストに他ならない。私の手元にRTX 3090のPCが3台あるので、2台でABテストを行い、3台目のPCで強くなったかの計測を行っている。

https://twitter.com/yaneuraou/status/1361243386993283075

3台目のPCにはJenkinsがインストールされていて、Jenkins上で自己対局のJobを管理している。2台のPCの方では、1epochごとにmodelファイルを共有フォルダに入れて、JenkinsのJobを呼び出す。JenkinsはWeb APIを備えているのでcurlで簡単に呼び出すことができる。

// Jenkins Web API まとめ : https://qiita.com/att55/items/372936652f96d4473cfa

また、2台のPCでは5分ごとに共有フォルダにログをコピーするようになっていて、5分以上ファイルがコピーされてこなければ、そのPCは停止していると判断して、私にメールで通知が来るようになっている。これが、heartbeat(心音)であり、いわゆる活性監視をしている。

余談になるが、うちのチーム、(全員だと)GeForce RTX 3090を合計6台保有している。BitCoinが爆上がりしているので仮想通貨の相場もかなり上がっており、このRTX 3090 6台で仮想通貨をマイニングすれば月に2,30万円は入ってくるはずなのであるが、それを1円にもならない将棋ソフトの機械学習に費やしているわけである。なかなか贅沢な趣味であるな…。

さて、将棋ソフトの機械学習においてABテストが何故必要なのかという話を簡単にしておく。

そもそも強化学習というのは、ニューラルネットのアーキテクチャー(resnet10ch192みたいなの)を最初に決定すれば、あとは放置しておくだけで勝手に強くなるべきである。

将来的には、ダイアログからアーキテクチャーを「resnet10ch192」のように選択して開始ボタンを押すだけであとはサチる(飽和する)ところまで自動的に強くなるのかも知れないが、現状、そうはなっていない。これにはいくつか理由がある。

  1. 学習の初期は強くなるまでにとても時間がかかるので、既存の棋譜を用いることでその学習時間を短縮できる。昨年の電竜戦で優勝したGCTでは、elmo(将棋ソフト名)の教師生成部(elmo_for_learn)を用いて生成した教師局面で、初期の学習(pre-training)を行っていた。
  2. また、一つ前の記事でも書いたように、強化学習で必要となる自己対局には学習に要する時間とは桁違いに多いため、自己対局をなるべく省略したいというのがある。そのためには何かしらの工夫が必要だ。
  3. それから、教師の性質によって、それに合わせて探索パラメーターの調整が必要になることがある。

※ dlshogiで、方策(policy)を、Actor-Critic(強化学習の教科書に出てくるので詳しくはそちらを…)ではなく、方策の分布を学習するように改良したら、policyのentropyが増大したので、それに合わせて探索時のSoftmaxの温度を低めに調整したという話がある。

// 将棋AIの実験ノート:方策の分布を学習すると探索パラメータの調整が必要になる : https://tadaoyamaoka.hatenablog.com/entry/2021/04/05/215431

それらの事情を鑑みとダイアログからニューラルネットのアーキテクチャーを選んで、「開始」ボタンを押すだけであとは勝手にサチるところまで強くなる、というのは、まだちょっと遠そうではある。

あと、冒頭に書いた、ABテストが必要になる理由は1.~3.のどれとも違って、次の4.である。

  1. 教師の配合チューニングが必要になる

自己対局には大きなコストがかかるので自己対局はさせずにすでに公開されている教師局面を使う場合だと、resnet10ch192のような小さなモデルでは1ヶ月もあればサチる。それでサチったあとにどんなチューニングの余地があるのかと言うと、配合チューニングである。

従来の評価関数(KPPTやNNUE)でもこの問題があった。評価関数の学習限界に達した時に、教師局面における序盤と終盤の比率を調整してやるのだ。これは進行度(序盤は0.0、詰みの局面が1.0になるようなパラメーター)に応じて、勾配に係数を掛けてやることで調整する方法もある。たぬきチームがやっているWeighted Lossもその一種だし、水匠などは手で配合を調整している。

// WCSC31 たぬきちPR文書 : https://www.apply.computer-shogi.org/wcsc31/appeal/Tom_Nook/Tom_Nook_appeal.pdf

教師局面の序盤と終盤の比率以外にも、戦型がどれくらいばらついているほうが良いかという問題もある。昨年の電竜戦のみずうら王では、振り飛車(対抗形など)を学習局面に用いないようにすることで相居飛車の勝率を上げることに成功した。

// 電竜戦(2020年) みずうら王 PR文書 : https://drive.google.com/file/d/1bPnlSVxWBoReEu1I19CB03UrtWD-NMDf/view

このように、サチったあと、教師局面の序盤と終盤の比率を調整したり、戦型のばらつきを調整したりすることにより、さらに強くすることができる。この調整を行うためにABテストが必須なのだ。

// AlphaZeroはそんな泥臭いことはやっていないと思われる。

11 thoughts on “何故、将棋の機械学習で天国と地獄メソッドが必要なのか?

  1. dlshogiは初期段階でelmoを用いていたとありますが、競馬でいうところの血統のように、根幹的な部分になるんですか?
    elmoのイズムを引き継いでそのイズムをもとにどんどん強くしていく感じなのかなーっと思いまして…

    • > 根幹的な部分になるんですか?

      その後の学習の根幹になり最終的な棋風に反映されるという見方もありますし、サチるところまで持っていくならそこで同じ勝率、同じような棋風になるという見方もあります。
      どちらが真実なのかは大規模な比較実験をやってみないと何とも…。

  2. 飽和しているかは自己対局の勝率から判断するのだろうか?
    いつも勉強になります

    • 私のほうでの計測は水匠を相手に調べています。自己対局ですと計測が不正確だというのと、水匠のほうがいまのところ少ないリソース(CPU時間)で強いので計測時間が減らせるためです。

  3. >> 教師の配合チューニングが必要になる

    数学だけ勉強するよりも、数学と音楽と運動をバランス良くした方が脳の成長がいい??

  4. このブログ記事ややねうら王やDLの影響もあって将棋ソフト開発に興味を持ちました!
    ありがとうございます!
    pythonの基本書で文法を学んだ後に何したらいいのか全くわからんので、アドバイス欲しいです!

  5. あれ?これって多様性と淘汰だよね。首の長いキリンが生き残ったみたいな。それを繰り返す。生命の進化。英語で言うとエボリューション

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です