特徴量を入れて効率的に学習をさせる

川島馨氏(以下、川島):私が作っているdlshogiの特徴を説明します。dlshogiでは私個人が趣味でやっていて、Googleみたいな計算資源が大量にあるわけじゃないので、どうやって効率的に学習するかをいろいろ考えて、少し工夫をしています。

主な工夫点は、先ほど盤面の画像を用いるという話があったんですが、そこにもう少し将棋で有効な特徴量を入れています。駒の配置以外にも駒の利きの情報や王手の情報を入れることで、もっと効率的に学習するようにしています。

先ほど少し言ったとおり、やっぱり終盤が少し弱いので、そこをどうやって克服するかを考えて工夫しています。モンテカルロ木探索の中で、終端で“詰め”の探索をしたり、長手数の詰めの探索はdf-pnという別のアルゴリズムで行なったりしています。

強化学習をするときも“詰み”の探索をして、詰みが見つかったらそれを勝ちとする報酬の与え方をしています。ほかに、従来ソフトとリーグ戦で学習して、自分で気づかないような間違いを気づかせるということをしています。

山口祐氏(以下、山口):この特徴量って今119ですけど、AlphaGoやAlphaZeroはヒストリカルな情報が8次元分入っていますよね。それはdlshogiには入っていないということですか?

川島:そうです。

山口:現局面だけ入力の特徴を入れている?

川島:はい。

山口:なるほど。

川島:私の考えでは将棋はマルコフ連鎖で現局面だけで差し手がわかるゲームなので、履歴はいらないはずだという考えで一応やっています(笑)。ただ囲碁はマルコフ連鎖ではなくて……。

山口:そうですね。ここでコウ(劫)になる局面があるから、同一局面だけど実効的には違う局面があり得るから、ヒストリカルが効くだろうという考えですね?

川島:そうです。囲碁は必要だと思っていて、将棋は必ずしもいらないんじゃないかなと。

山口:あるとしたら王手、千日手くらいですから、その辺は探索をできればよいという発想なんですね。

川島:そうですね。

井口圭一氏(以下、井口):囲碁も必要以上に入れているような気はしますけどね。

山口:8個、う~ん、どうですかね? 

井口:直前だけあればコウ(劫)は判定できるので。8個入れる必要はないはずですよね。

山口:まあそうですね。プログラムが8や16が好きなので、ちょうどいいから入れたんじゃないですかね。

井口:たぶん現実の問題として手数依存性が人間にあるから、それでいれたんじゃないかなと私は思っていますけどね。

山口:手数依存性?

井口:手数じゃない。直前の手……

山口:それは非常にあると思います。AlphaGoが出る前のソフトはけっこう直前の手の近傍に打つ確率、リソースをよく割くという特徴量をけっこう入れていたんですよね。

それは非常によく当たっていて、全体の40パーセントくらいは直前に打った手の近くに打つという統計があります。たぶんそういう直前の情報を入れたほうがいいという発想で、最初のAlphaGoとかには入れていて、AlphaZeroもその流れを汲んでいる可能性があるかもしれないですね。

dlshogiは将棋界最強のAlphaZeroと互角の強さ

川島:ディープラーニングを使ったdlshogiの強さが今どれくらいになっているかを説明します。AlphaZeroというGoogleのDeep Mindが作った囲碁もチェスも将棋もプレイできるAI、それが将棋でも最強になったという論文が出ています。

elmoという、当時大会で優勝したソフトを基準にしてレーティングをしたものが論文に載っていて、4,500を少し超えるというグラフが示されています。

ただこれは勝ちと判定する条件が、点数が大きく開いて何手か続いた場合になっているので、詰みの局面の弱さがうまくカバーできているのかは、実際に対局させてみないとわからないとは思っています。dlshogiやαβ法の一番強いソフトがどれくらいの強さかと言うと、floodgateという将棋AI同士で対戦をさせるサイトがあるんですけど、そこでレーティングが出ていて、今一番強いのが4,500を超えたくらいです。

この間の電竜戦という大会では、このソフトとdlshogiはほぼ互角になっているので、レートがだいたい4,500を超えたくらいになっていて、今の強さはAlphaZeroと同じくらいかなと思います。

Ponanzaでも以前ディープラーニングを導入しているので、それとの違いも少し説明したいと思います。Ponanzaでもディープラーニングを使って大会に出ているんですが、ディープラーニングを全面的に活用しているわけじゃなくて、Ponanzaとハイブリッドで利用されていました。

利用している箇所は、αβの探索のときにどれを優先的に探索するかのオーダリングに使うところと、評価関数でもディープラーニングの評価と組み合わせて、アンサンブルで使うやり方で活用しています。

dlshogiは、ディープラーニング1本でやるというところで、ちょっと違う考え方でディープラーニングを使っています。

深層学習と深層強化学習の違い

山口:ありがとうございます。5月にコンピュータ将棋選手権がありますよね。川島さんも私もエントリーしている大会なんですが、それに向けてdlshogiを使ったソフトがほかに出てきているとか、dlshogi自体がどういう開発をしているとかがあれば、教えてもらっていいですか?

川島:電竜戦で優勝したのはけっこうインパクトがあったと思っていて、dlshogiを使ってみようかなぁという開発者はわりと出てきていると思います。たぶん一番大きいのは、大会で優勝した「やねうら王」が、dlshogi互換エンジンを一機能として取り入れています。

Discordというチャンネルで、開発者のやねうらさんともやりとりをしていて、dlshogiの間違いを指摘してもらうなど、交流しています。

山口:なるほど。そういうところでdlshogi自体も強くなるし、ほかの開発者もdlshogiを見ながら開発を進めているので、次のコンピュータ将棋選手権はディープラーニングベースのソフトがけっこう出てくる可能性が高いですね。

井口:山口さんはディープラーニングベースですか?

山口:はい、2021年は完全にディープラーニングだけでゴリ押すつもりですね。

井口:なるほど。川島さんのお話の中にもあったんですけど、よく画像認識などで深層学習がありますけど、それと将棋の深層強化学習では、どの辺が一番違いますか? 

山口:説明が難しいんですが、非常にざっくりと言うと、一番の違いは強化学習は自分でその環境に応じたデータを作り出すというところですかね。

普通の深層学習はデータですね。画像分類だったら画像、例えば翻訳だったらコーパスと呼ばれる単語同士の対応のテキストデータ。将棋だったら棋譜です。

そういったものがデータとしてあって、それに対してうまく指し手を一致させるとか、この画像は車の画像だとか、この単語は日本語だとこうだとか。そういったところを学習するうえで、データさえあればできるのが深層学習なんですね。

これに対して深層強化学習というのは、プレイヤーの王道など環境をシミュレーションするのが特徴としてあります。将棋で例えると、盤駒が環境です。あとはそれを動かすプレイヤーですね。エージェントと強化学習では言うんですけれども。

これが実際に用意してあって、将棋の場合は棋譜を自分自身で作り出す。それをまた学習することによって、ちょっとずつ強くなっていくというのが強化学習の特徴なんです。

人間に例えると、将棋ウォーズをやっている人がいるとします。将棋ウォーズをやっていて「新しく横歩取りを覚えたいな」と思い立ったとしますよね。深層学習は、横歩取りを覚えたいとなると、まず本屋に行きます。本屋に行って、将棋コーナーに行って、横歩取りの本を買ってきます。その本を読んで、横歩取りの変化を覚えて強くなる。これが深層学習。普通の深層学習ですね。

深層強化学習は、「いやいや、そんなことはやってられん」といきなり将棋ウォーズのアプリを立ち上げて、とにかく対局する。どんどん横歩取りをする。横歩取りの対局をどんどん繰り返して、自分でいろいろな手を試して勝った負けたと、それに基づいて棋力を上げていく。これが深層強化学習です。

考えてみたらわかると思うんですけど、これはすごく時間がかかるんですね。人間でやってもすごく時間がかかるんですけど、コンピューターでやってもやっぱり同じようにすごく時間がかかります。そういう環境をシミュレートして、棋譜を生成するところにものすごくマシンリソースがかかるというのが、深層強化学習で大変なところかなと思います。

井口:棋譜を生成しながらその棋譜で学習していく?

山口:そうですね。生成の部分がすごく時間がかかります。普通の教師あり学習も人間の棋譜とほかのソフトが作った棋譜を学習するのに比べて、ざっくり50倍くらいのマシンリソースが必要になると思ってもらっていいかなと思います。

dlshogiの強化学習時間は延べ数万時間

井口:今お2人はどういう環境を使っているんですか?HEROZのデータセンターも使っているんですかね?川島さんからどうですか?

川島:私はHEROZに入る前から自分で強化学習をやっていて、自宅のPCにGPUを3枚挿して、24時間ずっと動かしています。それはそれでずっとやっています。

HEROZに入ってからは、GPU環境を借りられる状況なので、将棋ソフトのいくつかあるパラメータで、探索のときにもいくつか数値を調整しないといけないパラメータがあるので、それを自動で見つけることを並列で行いたい場合に、休日に動かして実験をしています。

いろいろ変えて強さを測るのにも、いくつか並列で何回も対戦させたいときがあるので、そういうときも、サーバーでいくつも並列で実行して確認するために、会社のサーバーも利用しています。

山口:つまりメインラインの強化学習ではデータセンターはあまり使わずに、わりと自分のマシンリソースでやっている感じですか?

川島:そうですね。(HEROZのデータセンターは)業務でも使っていて、そっち優先だと止めることもあるので、ずっと動かし続けたいと思って、家でやっています。

山口:そうなると川島さんがご自身でdlshogiで強化学習をしている延べ時間は、GPU時間で言うとどのくらいですか?万単位ですか?

川島:ほぼ2年以上家のPCを動かし続けていますね(笑)。

山口:じゃあもう数万時間ですね。

川島:ただ、最初はアイデアを試している段階だったので、はじめに生成した棋譜はあんまり役に立っていないとは思います。

山口:それにしたって相当な時間と電気代がかかっているということですね。いや~大変ですね。

井口:山口さんもご自宅ですか?

山口:はい。今は自宅でやっています。先週までずっと実装していたので、学習を回す暇がなかったんですけど、ようやく学習が始まって、今3世代目くらいまで来ています。

大会までにはがんばって300世代まで学習したいなと思っているので、まだ1パーセントくらいしかできていないですね。GPU時間でどのくらいいるかと言うと、たぶん3万GPU時間くらいいるんじゃないかなと思っていて、自宅のマシンだと4年くらいかかる計算になっちゃうので(笑)。

ちょっと話にならんということで、今書いているのは、HEROZのデータセンターで、夜間や休日の空いている時間に、こっそり使わせてもらうというスクリプトを書いています。業務で使っていないリソースを優先して見つけてきて、夜間と休日に動かして学習世代を回すということを今のところは計画しています。

井口:HEROZのデータセンターにはGPUサーバーが16台にV100が8枚ずつ入っていて、基本は業務用なんですが、空いているときは将棋の学習や個人の研究に自由に使っていいよとしいるので、山口さんも川島さんもそれぞれ使っている感じですね。

学習時、利用時、それぞれにスペックが要求されるようになっていますけど、みなさんはどうされています?会社のものが使えるときは会社の、それ以外にはクラウドも使っているんですか? 

山口:そうですね。私はさっき言ったように、会社のものを使うことを検討していますが、個人的に貸してもらっているデータセンターのサーバーや、AWSで課金して使うこともわりと考えてはいます。

井口:川島さんは今はご自宅と会社のもの?

川島:そうです、両方。NVIDIA A100というのが最新で、大会ではそれを使いたいので、大会のときだけAWSでそれ(A100)を借りようと思っています。

井口:なるほど。

山口:そのA100っていうのはどのくらい速いんですか?

川島:dlshogiだけで言うと数倍ですね。カタログスペックだと何十倍というふうに言われています。

山口:何十倍……

井口:16ビットで?

川島:32ビットだと何十倍だったと思います。

井口:今はV100が128枚ですけど、実は会社でも、A100も入れることを検討しているので、大会に間に合ったらいいなと思っています(笑)。

山口:そうですね。AWSでA100を借りようとすると、けっこう大変ですよね。申請がまず通らないといけないし。

井口:ほかのインスタンスみたいに自由には借りられない?

山口:制限があって、お得意さんじゃないと貸してもらえないんですよ。

井口:そうなんだ。

川島:私も1回断られています(笑)。課金を今までにしたことがない人は断られますね。

井口:会社経由で申し込めば通るかもね。

山口:そうですね。会社や研究目的は通りやすいですね。あといっぱい課金している人ですね。私はメチャクチャ課金しているので、申請をしなくても自由に使える状態でした。

井口:すばらしい。

今後は初心者向けAIソフトを作りたい

井口:将棋の話をいろいろと聞いてきたところで、今後の将棋AIの展開や技術面・活用面でなにか考えているところはありますか?川島さんどうでしょうか?

川島:強さは従来の手法と並んだところで、ディープラーニングの方が伸びしろがあると思っています。ディープラーニングの技術もどんどん新しい論文が出てきているので、まだ強くなっていくとは思っています。

活用面で言うと、ディープラーニングのほうが初心者に近い手を指せるという、成果もチェスではあるみたいなので、初心者向けの練習ソフトを作りたいです。

私も将棋が強くないので、自分で作ったソフトで強くなりたいなぁと(笑)。アテンションという仕組みを使って可視化できないかを試しています。

山口:そうなんですよねぇ。将棋ソフトが強すぎる問題があって。私も先週まで自分のソフトを作っていて、まだ強化学習をする前の0世代目を自分で試しに打ってみたんですよ。私は一応アマチュア5段くらいなんですけど、ボコボコにやられました(笑)。

まったく強化学習していないのにもかかわらず、話にならないくらい負けてしまって、けっこうショックを受けたので、そういった人間に寄り添う機能が今後あると、もっと使う人が増えるかなと思っています。

井口:学習する前って強いんですか?

山口:一応教師ありです。前のバージョンのPALで棋譜を生成したものが1億局面くらいあるので、それをまず教師で学習して、そこから強化学習をスタートするという方式です。

井口:強化学習はしていないけど、まずは教師ありですね。

山口:それだけでも十分人間より強そうだなっていう感じです。

将棋AI開発の経験と知識を業務で活かす

井口:日常の業務で、将棋でやっているような深層学習や深層強化学習を使うシーンはありますか?じゃあ山口さんからいきますか。

山口:(使うシーンは)非常にありますね。深層モデルや深層学習モデルを使っていろいろなプロジェクトに適応するということを日常的にやっているので、もちろん非常に使います。将棋AIや竜王AIで、深層学習のためのライブラリやフレームワークを使うんですが、そういったところは業務でも共通して使うので、知見が技術的にも活用できます。

あとは探索を書くときに、高速化するとか、メモリを少なくするとか、そういう技術がけっこう必要なんですが、データ構造や処理をするためのアルゴリズムをやるというのは、実際の案件で効率的に学習を回したり、実際に予想したりするときに非常に役立っていると実感しています。

井口:川島さんはいかがですか?

川島:私はBtoBのエンタメ系のAIをやっているので、直接ゲームAIを作ることもやっています。そこでは、将棋AIやdlshogiと似た仕組で作るということもあります。

案件によっては、ゲームのシミュレーターがけっこう遅いことがあって、そのままGPUをいっぱい使った仕組みが使えるか、と言うとそうではない場合もあるので、探索しないようなモデルフリーの強化学習や、アルゴリズムを使うこともあります。

ほかにも、スマホで動かすのが前提だったら、ディープじゃない線形の関数のモデルを使います。ゲームAI以外でも、機械学習の案件ではやっぱり将棋AIでやっていた経験と知識はけっこう活かせていると思います。

井口:お2人はこれからもまだ将棋AIの開発を続けると思うんですけど、直近の目標はありますか?川島さんからいいですか?

川島:ディープラーニングのソフトをもっと強くしていきたいです。最新の論文などいろいろと出てきたのを試すのを続けていきたいなと思っています。

井口:なるほど。山口さんは?

山口:5月に大会があるので、とりあえずそれに向けて学習をやって、恥ずかしくない程度のものが出せるといいかなと思っています。

井口:なるほど。ありがとうございます。

(次回へつづく)