ゲームAIに関しては、オセロ、チェス、将棋、囲碁とすでにトッププロでも敵わないレベルに到達した。これらのゲームAIから人間が学ぶにはどうすれば良いのかということについて考えてみる。
まず最初に考えられるのは、コンピューターに最善手(あるいは、最善応手列)を示してもらうというものである。
ある程度棋力があれば、最善手だけもらえれば学べるかも知れないが、得られる情報量としては少ないので、少々物足りない意味はある。
そこで最善応手列とそのときの(局面の)評価値から学ぶという手法がある。(このブログの読者には説明するまでもないが)評価値は、形勢の良し悪しを数値化したものである。これを期待勝率(同じぐらいのプレイヤー同士がその局面から指し継いだ時の勝率)に変換したもののほうが人間的には嬉しいかも知れない。
将棋のプロ棋士である千田先生がこれに近い方法で、学ばれているのだと思う。自分の感性(直感)を、コンピューターの出す評価値に寄せていく(近づけていく)という方法だ。
これはこれで良いのだが、もう少し情報量があったほうが初心者には嬉しいのではないかと思う。
千田先生レベルになると自分のなかに評価値があって、その評価値とAIの導き出す評価値の差から学習できるのだと思うが、初心者にとっては自分のなかに評価値がないので、そこから学ぶのはとてもつらい。
人間は2つの差を修正するように学習することは出来るように作られているのだが[要出典]、自分のなかに評価値がない人は、最善応手列と評価値だけ提示されても学ぶのは難しい。(自分の頭のなかの最善応手列と比較することは可能だが)
だから、最善応手列と評価値だけではなく、その局面の候補手5手に関する最善応手列と評価値が得られたほうが嬉しい。(候補手同士の差を比較がしやすくなるため)
ただ、将棋ではこれらの候補手と評価値を視覚化しにくい。候補手の指し手の駒の移動元から移動先までを矢印で描いて、そこに評価値を併記する程度のことは出来るが、候補手を増やすと画面がぐちゃぐちゃになる。まあ、候補手が5手ぐらいであれば、一つ一つ精査してもどうってことないので、視覚化されているメリットは(囲碁に比べると)あまりないかも知れないが。
将棋とは異なり、オセロや囲碁の場合、駒の移動がないので単に着手できる升に評価値を記入するだけで良いので視覚的に大変わかりやすい。囲碁の場合、着手できる升(合法手)が非常に多いのでそれらすべてを画面に描画すると非常に見づらいかも知れないが、評価値をヒートマップのように色の濃度などで表現すれば、なんとかなるんじゃないかと思う。
そう考えていくと、AIの指し手から人間が効率的に学ぼうとするとき、そのAIの導き出した答えをうまく視覚化出来るのかというのが一つのキーポイントとなる。
逆に言うと視覚化しやすいものは、そこから人間が効率的に学べる可能性が高い。
例えば、最近はAIによって(わりと手軽に)自動着色や美少女の画像生成などが出来ることがわかってきたが、AIが絵を描くことについてプロフェッショナルの領域に達したとき、このAIから教えてもらうことだって出来るはずだ。
「ここに線を引けば評価値+120」みたいに、線一本一本に対して、そこに線を引く価値を計算して視覚的にわかる形で提示することは可能なはずである。しかしそう考えた時に、線分にも移動元と移動先があるので、ここに将棋の指し手と同じ問題が出てくる。このように「移動元、移動先、評価値」という3つで構成される情報が大量にあるときにこれを視覚的にわかりやすく表現する手段が必要なのである。(良い方法があるのかは知らん)
以上のことからわかるように、「人間が将棋AIに学ぶ」という問題は、「人間が自動お絵かきAIから学ぶ」など、他の領域の「人間がAIから学ぶ」問題にも存外共通点が多いのである。
突き詰めていくと、「人間が学習するために必要な情報とは何なのか」だとか「人間はどうやって学習しているのか」だとか、「学校教育はAIでどこまで代替できるのか」だとか、色々面白そうな課題に発展するのだが、本記事の範疇を大きく超えているので今回はこのへんで筆を置きたい。
期待勝率は、同じぐらいのプレイヤー同士と言えども、それが初心者レベル同士なら50%-50%に近づき、将棋の神同士なら100%-0%(または千日手)になりますよね。
プロ棋士が棋力向上のために参考にするなら、「自分と同じ程度の棋力同士」での勝率がいちばん参考になる…のでしょうか?もしくは、勝つべき相手の棋力同士?
棋士個人の棋力を持ち出していいなら、それこそ局面によっては棋風が大きく影響を及ぼしそうな気もします。キリがなさそう。
などとつらつら。
> 期待勝率は、同じぐらいのプレイヤー同士と言えども、それが初心者レベル同士なら50%-50%に近づき、将棋の神同士なら100%-0%(または千日手)になりますよね。
はい、その意味では、将棋ソフトの出す評価値は、正確には、その評価値を出したソフトと同じぐらいの強さのプレイヤー同士が指し継いだときの期待勝率と言えるかも知れません。
ちなみに将棋ソフトの評価値を期待勝率に変換する式としてよく使われているのは、これです。
https://twitter.com/issei_y/status/589642166818877440
shotgunの読み筋可視化についてはドワンゴに話してあるのですがSDTも終わったことですし期待薄いですね。プロ棋士の方とお会いすると盤面見たときにどんなイメージが脳内に浮かんで読んでいるのか質問することがあります。あちこちで話題になってると思いますが,個人差が大きいようでどれが良いってのはないと思うのですが色の濃淡を感じている棋士が多く共感覚に近いものじゃないかと憶測しています。詰み形が一瞬で見えるとかほんとすごいですよね。
候補手の移動先を塗りつぶすだけでも、そこそこヒントにはなるような気はします…が、もう少し何か欲しいですよね。
私はプログラムを読めませんが、やねうら王さんの記事は、想像で補完しつつ、楽しく読ませてもらっています。昔Bonanzaの頃はプロの指し手の点数が高くなるように3駒の点数を機械学習で学ばせていたと思いますが、今はプロ棋士が逆機械学習させられるみたいな感じになっているのですね。その修正方法はかなりブラックボックス的な感じがしますが若い人は(子供とか)自然に感覚で対応しちゃいそう。囲碁のヒートマップはそれっぽくなりそう。将棋は移動先か指し手の利きの箇所だけで表現は無理でしょうか?粗っぽすぎますか?初級レベル位までなら、どの辺がミソか理解するのに役立つかなとか思いました。まぁそれよりも早くやねうら王を買って2枚落ちで5つのソフトと対戦しなきゃ。
> 将棋は移動先か指し手の利きの箇所だけで表現は無理でしょうか?
ヒントにはいいと思うんですけど、もうちょっと工夫が欲しいような…(´ω`)
面白い記事です。
MyBonaのGUIに「棋譜データベースの中でのその局面の着手を矢印で表す(指された回数が多いと矢印が太くなる)」という機能がありました。
あれもどの手が良い手かが視覚的に学べたので今回の話に近いものな気がします。
「移動元、移動先、評価値」を盤面に表す上でもある程度の量までは矢印とその太さ(もしくは色?)が一番分かりやすいのではないでしょうか。
まあ、そうですね。矢印の太さはいいアイデアだと思います。(`・ω・´)b
>> 「人間が学習するために必要な情報とは何なのか」
常に2手先3手先4手先を見る姿勢は素晴らしいと思います。
私がするとしたら画面を6分割して、今の局面、3手進んだ局面1、3手進んだ局面2、3手進んだ局面3、3手進んだ局面4、3手進んだ局面5とか表示させて、それぞれの局面で、今の局面の評価関数からの
増加に大きく寄与している特徴三角形ベスト3&
減少に大きく寄与している特徴三角形ベスト3を表示させてみるとおむ
>> 最近はAIによって・・・美少女の画像生成などが出来ることがわかってきたが
おお!日本始まったな!詳細知りたい
DCGANあたりがキーワードっぽいですねw
トップ棋士でも現在のソフトの読みは理解しづらいので古いソフトを使ってるみたいな話もあるので
人間にとっての局面の分かりやすさや難度を示すようなものが欲しいですね
簡単なものでいえばこの先最善手を続けないと維持できない(=ミスが発生しやすい)優勢なのか
何を指しても勝てるような(=ミスが発生しにくい)優勢なのかみたいな
> トップ棋士でも現在のソフトの読みは理解しづらいので古いソフトを使ってるみたいな話
最近はその話、あんま聞かないですね。さすがに古いソフトと最新のソフトでは大人と赤子ぐらいの差があるので、研究には使えなくなってきているのではないかと…。
遅ればせながら「マイナビ 将棋神 やねうら王」を注文しました。到着を楽しみにしています。
評価値の扱いに関して、次のようなアイデアはダメでしょうか?空間的な直観認識は難しそうなので時間的認識のサポートをしたらどうかと考えました。
1)「現局面の評価値は」というような表現をしますが実際には現局面から考えられる20~30?手先の局面の最善応手の評価値が出ていると思うので、本当に単純な現局面、5手後、10手後、最大読んでいる手数の評価値をセットで表す。例えば
評価値(0)=120、評価値(5)=280、評価値(10)=680、評価値(27?)=700とか。
2)評価値の安定度みたいなものを加える。例えば最善の細い線を辿れば勝ち(ex.自玉は必死、でも相手玉は難解な23手詰めとか)と何を指してもほぼ勝ちでは違うと思うので。どうやれば良いのか分かりませんが最善手、次善手、次々善手くらいまでの応手を取り入れた評価値が+1050~-200くらいまでの範囲に入るとか、あるいは最善手~次々善手の組み合わせで評価値が+になる局面の発生確率とか。
3)敵玉のKPP(例えば敵玉評価値)と自玉のKPP(自玉評価値)を分離して示す。評価値=敵玉評価値(危険度)ー自玉評価値(危険度)±α?どっちも危険で互角の評価値ほぼ0とどっちも安全で互角の評価値ほぼ0は全然違うと思うし、玉の危険度把握は肝の部分だと思うので。
勝手なことを書き失礼しました。
1)はPV(最善応手列)の途中ですと駒の取り合い(角交換のときの一時的な角損など)をしている可能性があって(PVの末尾ではこの可能性はほぼ無いです)、その場合、かなり変な値が返るので参考にならないような…。
2)は意味があるのですが、複数の候補手の評価値を出すにはMultiPV > 1 (1より大きな数)にしないといけなくて、そうすると、通常の探索より時間がかかるので実戦においては現実的ではないです。棋譜解析などでは有効です。
3)いまKPP型はもうNNUE型に置き換わろうとしているので…(;ω;)
丁寧な回答ありがとうございました。NNUEは知りませんでした(^^;が、階層の浅いニューラルネットワークらしいということだけ理解しました。「やねうら王」が速攻で届いたので今日から遊んでみます\(^o^)/