【Suphx論文解説④】麻雀AIの基本(特徴量とモデル構造)
今回はSuphxの全体像を知ろうということで、Suphxが扱うデータ(特徴量)とモデル構造について解説していこうと思います。
※麻雀プレイヤー向けの記事なので厳密な解説は行いません。
前回の記事はこちら。
ニューラルネットワークとは
突然ですが皆さん。
ニューラルネットワークという言葉を聞いたことがありますか?
Wikipediaを見るとこのように記述されています。
ニューラルネットワークはシナプスの結合によりネットワークを形成した人工ニューロン(ノード)が、学習によってシナプスの結合強度を変化させ、問題解決能力を持つようなモデル全般を指す。
要するに「ニューラル(神経の)ネットワーク(回路網)」というのは人間の脳内の神経回路網を模した人工知能モデルのことです。
例えば9という画像を認識させるネットワークを考えてみます。
こちらをご覧ください。
※引用元 https://www.youtube.com/watch?v=aircAruvnKk
このアニメーションのように左から784ピクセル(縦28ピクセル×横28ピクセル)の画像を入力します。すると、脳の神経のシナプス結合のように情報伝達が行われ、最終的に入力画像は9であるという結果が出力されます。
このような認識をさせるためには「学習」という工程が必要です。
まず「入力データ」と「出力結果(正解ラベル)」のペアをたくさん用意します。これを学習データと呼びます。先程の例で言えば、「画像」とその答えである「9」という情報です。このペアを数十万と用意して、それを再現するようにネットワークを調整します。その結果、未知の画像に対しても近い数字が出力されるようになるのです。
うーん、難しいですね。麻雀の戦術研究のためにSuphxを知りたいという方は「ふーん。たくさんのデータと正解ラベルを学習させているんだな」くらいの理解で大丈夫です。
「ニューラルネットワークについてもっと深く知りたい!」という方は下記リンクを読んでみてください。本格的に理解したければ高校数学くらいの知識は必要なので、ダメなら深入りせずに次に進みましょう。
牌譜画像から特徴量を抽出する
これまでのゲームAIでは画像をそのまま入力データとして利用することが出来ました。AlphaGoの論文を見ると盤面がそのまま入力データとして利用されているのが分かります。
麻雀ではどうでしょうか?
天鳳のプレイ画面をイメージしてみてください。
麻雀は扱う牌の種類が多く、プレイヤーも複数います。ドラや鳴きなどルールも複雑です。そのため、盤面の画像をそのままニューラルネットワークに入力することが出来ません。
麻雀では画像データから必要な情報を抽出する必要があるのです。
Suphxでは盤面の画像から以下の情報を抽出しています。
1. 手牌の情報(メンゼン部分、晒し手部分、ドラ情報など)
2. 捨て牌の情報
3. 数値情報(点数状況、残りツモ山枚数)
4. カテゴリ情報(局数、親・子、本場、供託、テンパイ、段位)
このように「ある現象から観測可能な情報」をAIの分野では特徴量と呼びます。ざっくり言えば「AIが扱うデータ」のことです。どんな特徴量を抽出・選択するかは重要です。AIの最終的な精度に大きく影響します。
※カテゴリ情報というのがわかりにくいと思いますが、連続した数値で表せない情報と捉えておけば大丈夫です。例えば、図中のWaitingというのは「テンパイしているかどうか」というカテゴリ情報です。
Suphxはここで述べた情報以外にも様々な情報を画像から抽出しています。メンツ(Melds)、雀頭(pair)など…。ツモ番が移る度にこの作業を行う必要があるのでとても大変です。
Suphxはデータをどう解釈している?
実は画像から情報を抽出するだけでは不十分です。数値計算出来ないような文字・画像などはそのままでは入力できないからです。ニューラルネットワークに入力したければ、数値計算可能なデータに変換する必要があります。
でもどうやって…?🤔
みなさん、「牌のマトリクス」という言葉を知っていますか?知らない人は下記リンクを見てみてください。
Suphxもまさにこの「牌のマトリクス」を利用して、数値計算不可能な情報を数値計算可能な形式に変換しています。
例えば、あるプレイヤーの手牌は下図のように表現できます。
麻雀牌は34種類でそれぞれ4枚ずつあります。したがって34×4チャンネルのマトリクスで表現できますね。鳴きで牌を晒している場合は5つ目のチャンネルを追加すれば表現可能です。このようにチャンネルを追加していけば、ドラや捨て牌のツモ切り手出しなども表現できます。
数値情報やカテゴリ情報も同様に34×〇チャンネルで表現します。
このようなイメージです。
当てはまる場合は1、そうでない場合は0です。34個全て0/1で表現します。例えば、点数状況であれば[0~9900/10000~19900/20000~29900…] のように区切りをつけます。局数なら[東1局/東2局/東3局…]と言った感じです。
このような学習データの設計・加工は専門的には「特徴量エンジニアリング」と呼ばれます。高性能なAIを作る場合はこの作業が最も重要です。とても奥が深いので興味のある方は参考リンクを見てみてください。
論文ではこれ以上の情報は見つけられませんでした。ソースコードも非公開です。MicrosoftとしてもここらへんはSuphxの機密事項なのでしょう。
「赤ドラはどうやって表現しているんだ?」「西入した場合どうするの?」など疑問はたくさんありますが、正確な情報が公開されていないので、あれこれ悩んだところで何もわかりませんね。ここら辺の考察はまた別の記事で扱いたいと思います。
先読み特徴量
麻雀では見えない情報も扱う必要があるため、見える情報だけでは不十分です。これからツモる牌、残り枚数の多い待ち方、打点などあらゆるパターンを想定する必要があります。そのためにSuphxでは「先読み特徴量(Look-ahead Features)」と呼ばれる特徴量を導入しています。
ただし、先読みと言っても全パターンを想定するのは困難です。麻雀では盤面のパターンが膨大だからです。 Suphxでは以下の前提を置くことで、状況判断を簡単化しています。
1. 現在の手牌から見える手役を深さ優先探索する
2. 自分の選択だけを他家の行動は考慮しない
先読み特徴量は100以上とのことなので、34×100以上の特徴量が生成されることになります。
論文中では具体例として「3手変わりで12000点になりうるかどうか」が表現可能であると書かれていますが、正直よくわかりません。詳細不明です。
Suphxのネットワーク構造
Suphxのような激強麻雀AIでも、結局は単純な数値計算を行うだけのプログラムに過ぎません。入力データを数値計算可能な形式に変換したら、あとはニューラルネットワークに入力するだけです。
簡単に説明すると以下の3ステップです。
①盤面の画像から必要な情報を抽出する
②ニューラルネットワークに入力して計算する
③ニューラルネットの出力から最適な選択を得る
Suphxでは畳み込みニューラルネットワーク(Convlutional Neural Network)と呼ばれる特殊なネットワークを利用しています。画像認識などではよく使われるネットワークです。もっと知りたい方は参考リンクをご覧あれ。
※画像中ではConvと表記されています。
「打牌選択(Discard)モデル」と「その他のモデル」では出力の形式が微妙に違うので注意が必要です。打牌選択では出力が34通り、他のモデルは【する/しない】の2通りです。
これまでの情報を整理するとこんな感じです。
入力データ:牌のマトリクス、数値/カテゴリの特徴量、先読み特徴量
出力データ:34通りの選択肢(打牌選択モデル)、するしない(その他)
※図中の出力結果は0/1で表現されていますが、実際は0.xxxなどの確率値で出てくるはずです。最も大きい候補が選択されます。
このように、入力データ/出力データのイメージが描ければ十分です。
参考リンク
うーん…今回は重厚な内容でした。全て理解するのは難しいかもしれません。最低限理解しておくべきポイントをまとめておきます。
■ Suphxではニューラルネットワークが利用されている
■ (おそらく)鳳凰卓の大量のデータを学習している
■ ニューラルネットワークの出力が最適な選択となる
今回の記事でSuphxの基本の説明は終わりです。既に説明しきれない部分がたくさんありますが、出来るだけ直感的にわかるように頑張りたいと思います。さて、次回はいよいよSuphxのキーワードとなる「Global Reward Prediction」です。
この記事が気に入ったらサポートをしてみませんか?