先月の電竜戦(将棋ソフトの大会)で優勝したGCT電竜チームの山岡忠夫さんと加納邦彦さん(共著)の将棋ソフト本が12月20日に発売になる。
私は上のツイートにあるように献本していただいたので、少しレビューを書いておきたい。
本書は、cshogi(Pythonから呼び出せる将棋の指し手生成や盤面操作を行うC++で書かれたライブラリ)を用いるので、C++の知識は必要なく、指し手生成や盤面操作の知識もほとんど不要である。
本書に掲載されているソースコードはPythonだけで書かれていて、Pythonがわかれば本書のソースコードを改造することが出来る。機械学習ライブラリにはPyTorchが使ってある。山岡さんの前著書では、機械学習ライブラリにChainerが使われていたが、Chainerは開発元のPFNが2019年12月に開発を終了させたので、その部分をPyTorchで書き直した書籍が望まれていた。今回はそれに応えた形である。
あと、本書のプログラムで使える教師データも用意されていて、Google Colabでその教師データを用いて学習させるだけで誰でも簡単に強いプログラムが作れてしまう。念の為に言っておくが、ここで言う「強い」は、人間(トッププロ)よりも、である。
書籍に合わせて公開された(Colabの)ノートブックからはWCSC31(第31回 世界コンピュータ将棋選手権)のGCTで5000 playoutで生成した教師データ2.25億局面もダウンロードできるようになってて、それを用いて本書籍のプログラムで学習させると(第6章)、floodgateでR3400程度になるようである。(トッププロより少し強いぐらい) 理解を促すためのサンプルプログラムなのでPythonで書いてある上に、探索の並列化などはなされていないが、そんなプログラムでトッププロより強くなるの凄すぎひん?
さらに書籍の方では、そのあと(第7章)、C++で書かれたdlshogiライブラリを用いて学習を回す方法が解説されていて、今回の教師データを用いた場合、昨年の電竜戦の優勝ソフト(初代GCT電竜)と同等以上の強さになる。(もしかすると今年の電竜戦の優勝ソフトであるGCTレベルになるかも?)
今後、この本は、Deep Learning系の将棋ソフトを作ろうとする人にとってのバイブルとなることは間違いないだろう。
本書のソースコードと(Colabの)ノートブックは以下のところで公開されている。ソースコードは全部合わせても1000行程度しかない。こんな単純なソースコードで強い将棋プログラムが作れるのには感動である。
ソースコード : https://github.com/TadaoYamaoka/python-dlshogi2
ノートブック : https://github.com/TadaoYamaoka/ShogiAIBook2
// ちなみにやねうら王のソースコードは5万行以上ある。
ただ、残念なこととしては、コンピュータ将棋本としては、『コンピュータ将棋の進歩』(以下、進歩本と記す)という書籍のシリーズがあって、この進歩本の最新刊(進歩本6)が2012年に発売され、2018年に山岡さんの前著書が発売になるまで6年のブランクがある。この間に発見された技術などは、この本には書かれていない。コンピュータ将棋史として、この間の技術を誰かが書かなければならなかったと思うが、進歩本を編集をされている松原仁先生がお忙しくなってしまったのか、進歩本は6を最後にそれ以降発刊されることはなかった。そこを埋める本を私が書けば良いのかも知れないが、私ひとりで書けるものでもないし、また、いまさら感もある。
そんなわけで残念ながら、6年間の技術や歴史は完全にロストである。まあ、やねうら王のソースコード上にはある程度その痕跡を見てとれるだろうし、このブログにも書き散らしてあることはあるにはあるが、それがすべてでもあるまい。
補足) 今回の5000poの教師、本書籍のために山岡さんが用意されたもののようで、本記事中のノートブックのリンク先のノートブックを開くとそのダウンロード先がわかる。全部で15.2GBある。
15.2GBがでかすぎると言う人もおられるかも知れないが、AobaZeroはこうだ。
AobaZeroの棋譜(xz圧縮): 217GB
AobaKomaochiの棋譜(xz圧縮): 84.3GB
AobaZeroのネットワーク重み(xz圧縮): 381GB
賞味(消費?)期限までに淹れきったルイボス茶みたいなことになりそうw
山岡さんのブログもかなり参考になるのがありがたいですね。
Alphazero登場から今に至るまで様々な改善案の論文が出てそれを時系列で追って強くなるか試すのも大変ですし
・6年間の技術や歴史
BONANZA解説ブログ→やねさん旧ブログ→やねさん現在ブログですかね。
はてなブログはGeoCitiesと同じ運命を辿り、いずれ消滅するだろうし、いまのうちに電子書籍で出版しておかないと10年後には空白の6年間になる気はしてます。YouTubeに解説動画でもアップしようかな…。
> そこを埋める本を私が書けば良いのかも知れないが、私ひとりで書けるものでもないし、また、いまさら感もある。
コンピュータ将棋の技術的な歴史に関心のあるいち将棋ファンとしては、どなたかにこれまでのコンピュータ将棋の歴史を調べられる限り詳細にまとめてあって欲しいと願ってしまう。数十年後には、2010〜2020年頃のコンピュータ将棋の進化を知りたいと思っても、将棋関連のブログ記事すら読めなくなってしまっているかもしれない。
(古い)プログラミング言語だって、当時の設計思想やとある機能の実装経緯など歴史的背景が追えずに歯痒い思いをする現代のプログラマはしばしば生じている。
手遅れになる前に、今のうちにコンピュータ将棋の関係者(特に開発者)に技術や歴史、あるいは今なら言える面白可笑しい開発秘話や周辺情報なども一つの書籍として遺してあって欲しいと勝手ながら考えてしまう。
将棋会館を引き合いに出すわけではないが、本件のクラウドファンディングでもすればやねさんが動こうと思えるくらいのお金は集まるのではないだろうか。(もちろんお金だけの問題ではないとも思いますが…)
将棋会館は箱物だからクラウドファンディングに成功したという見方もあるので、箱物でクラファンして、その資金で実際に建物を建てて、値上がったタイミングで叩き売ってしまえb(以下略)
> 理解を促すためのサンプルプログラムなのでPythonで書いてある上に、探索の並列化などはなされていないが、そんなプログラムで昨年の優勝ソフトと同等の強さになるって凄すぎひん?
おそらくですが、python-dlshogi2を使って学習・実行する前半パートと、
https://github.com/TadaoYamaoka/python-dlshogi2
ごりごりのdlshogiを使って学習・実行するパート(7章)をごっちゃにしていません…?
https://github.com/TadaoYamaoka/DeepLearningShogi
ごっちゃになってたので本文修正しました。m(_ _)m
コンピュータチェス界にも宣伝すべき。
4chanあたりに
おまえら全員買えと書くのがいいのでしょうか?
6年間の技術で1個だけ永久保存できるとしたら何選びますか。ヌエ?elmo?
私なら、互角局面集かな。あれで計測が以前より正確に出来るようになって、レーティングの小さな向上が拾えるようになったので。
あいつら、日本語読めるだすか?
NNUEの技術的・歴史的解説が書籍の形として残らないかもしれないというのは寂しく感じますね、、CSAサーバーにアピール文という形でしばらくは残るでしょうが、十数年という単位で見るとやはり心配です。
なんならStockfish NNUEとしてチェス界の方から書籍として出てしまったり?w
あー、その可能性はありますね。 > Stockfish NNUE
書籍ではないですけど、もうこういうのはありますね。
https://github.com/glinscott/nnue-pytorch/blob/master/docs/nnue.md
素晴らしい解説記事だと思います。> nnue-pytorchの