Suphx論文を読もう Suphxの概要編

以下前回の続きです。今回は第2章。図表は割愛。[]部分は独自解釈です。

2.Suphxの概要

本節では、まずSuphxの決定フローを説明し、次にSuphxで使用されているネットワーク構造と特徴を説明する。

2.1 意思決定の流れ

麻雀の複雑なプレールールのために、Suphxは異なる状況を処理するために5つのモデルを学習します:表1に要約されているように、打牌モデル、リーチモデル、チーモデル、ポンモデル、およびカンモデルです。

これらの5つの学習モデルに加えて、Suphxは別のルールを基にしたあがりモデルを使用して、あがるかどうかを決定します。 基本的に、あがりの手がプレイヤーによって捨てられた牌から形成されるか[→つまりロンあがり]、山から引き出されるか[→つまりツモあがり]をチェックし、次の簡単なルールに従って決定を行います。

・オーラスでない場合はあがり宣言をする。

・オーラスであれば、

   -  あがり宣言をすることでラスが確定ならあがり宣言をしない。

   - それ以外ならあがり宣言をする。

また、麻雀プレイヤーがアクションを取る必要がある2種類の状況があります。AIのSuphxも同様です(図1参照[割愛])。

・ツモ番:まず山から一枚ツモります。手牌があがりならあがり宣言ができます。その場合は宣言し、次局へ。そうでなければ、

1. カンのステップ。手牌で暗カンか加カンができるのであればするかどうかを決定します。そうでなければリーチのステップに進みます。カンの場合、

a. 暗カンができるのであれば暗カンを行い、一枚ツモる。

b. 加カンであればその牌で他プレイヤーのあがり抽選を行う[→槍槓]。これにより他プレイヤーがあがればその局は終了。そうでなければ、加カンが成立し次の状況へ

2. リーチのステップ。手牌でリーチ宣言ができる場合、リーチモデルがリーチするかを決定します。リーチしない場合もする場合も次ステップへ。

3.打牌ステップ。打牌モデルは捨てる牌を選びます。その後は他のプレイヤーの番になった場合は、他のプレイヤーがアクションを取ります。山が無ければ局が終了します。

・他プレイヤーの打牌:他のプレイヤーが打牌する。Suphxはその牌であがりが可能であれば、あがりモデルがあがるかどうかを決定します。あがる場合はその局を終了します。そうでなければ、チー、ポン、カンができるかを判定します。チー、ポン、カン、それぞれのモデルがとるべきアクションを決定します。そうでなければ、他プレイヤーのターンになります。

1. 3つのモデルからアクションが提案されなかった場合は、他のプレイヤーがアクションを取るか、流局します。

2.1つ以上のアクションが提案された場合、Suphxは最も高い信頼度スコアを持つアクションを提案します(信頼度スコアは各モデルによって出力されます)。提案されたアクションが他のプレイヤーからの優先度の高いアクションによって中断されない場合[→チーしようとしたらポンや鳴こうとしたらロンなど]、Suphxはそのアクションを実行し、打牌ステップに進みます。それ以外の場合、提案されたアクションは中断され、他のプレイヤーのターンになります。

2.2 特徴とモデル構造

深層畳み込みニューラルネットワーク(CNN)は、チェスや将棋、囲碁などのゲームで強力な能力を発揮・検証されていることから、Suphxもモデルアーキテクチャとして深層CNNを採用しています。

囲碁やチェスのようなボードゲームとは異なり、麻雀でプレイヤーに利用可能な情報(図2に示すように[割愛、天鳳の対局画像])は、当然画像の形式ではありません。我々は、観測された情報をCNNによって消化できるチャネルにエンコードするための特徴セットを注意深く設計しています。

日本麻雀には34個の固有の牌があるので、状態を表すために複数の34×1のチャネルを使用します。 図3に示すように[割愛]、4つのチャンネルを用いてプレイヤーの手牌を符号化します。晒された手、ドラ、捨て牌のシーケンスは、他のチャンネルにも同様に符号化されます。カテゴリ特徴量は複数のチャンネルに符号化され、各チャンネルはすべて0または1のいずれかです。整数特徴量はバケットに分割され、各バケットはすべての0または1のチャンネルを使用してエンコードされます。

また、直接観察可能な情報に加えて、現在の手牌の中から特定の牌を捨てた後、山から牌を引いて他の何枚かの手牌を入れ替えた場合の手牌のあがり確率と得点を示すいくつかの先読み機能を設計しています。日本麻雀では、14枚のあがり形には4つのメンツと1つの雀頭が含まれています。 89種類のメンツと34種類の雀頭があり、非常に多くの異なる可能性のある手が考えられます。さらに、手が異なると複雑なスコアリングルールに従い得点も異なります。異なるツモ/打牌とあがり形の組み合わせをすべて列挙することは不可能です。そこで、計算の複雑さを軽減するために、先読みの特徴を抽出する際にいくつかの単純化を行っている。

(1) 可能性のあるあがり形を見つけるために深さ優先の探索を行う。(2) 対戦相手の行動を無視し、自分のエージェントのツモと打牌のみを考慮する。

このように単純化することで、100個以上の先読み特徴が得られ、各特徴は34次元のベクトルに対応しています。例えば、特定の牌を捨てることで、3枚の手牌を山から引いた牌や他のプレイヤーが捨てた牌に置き換えて、12000点のあがりにつながるかどうかを表している。

Suphxでは、すべてのモデル(つまり、打牌/リーチ/チー/ポン/カンモデル)は、入力層と出力層の寸法(表2)[割愛]を除いて、同様のネットワーク構造(図4および5)[割愛]を使用します。打牌モデルは34個の出力ニューロン 34個の固有の牌に対応して、リーチ/チー/ポン/カンのモデルは行うかどうかに対応する2つの出力ニューロンのみ対応しています。状態情報と先読み機能に加えて、チー/ポン/カンモデルの入力には、どの牌でチー/ポン/カンするかという情報も含まれています。我々のモデルにはプーリング層がないことに注意してください。なぜなら、チャネルの各列は意味を持っており、プーリングは情報の損失につながるからです。

今回はここまで。


だいぶ専門的な内容で全然わからない。前半の意思決定の流れは麻雀の一連の流れを分割してフローチャートに起こしている感じですね。

将棋などと違って、牌情報をどうプログラム上で表現するか、というのが難しいのでうまく変換の工夫して状態を持たせているよ。あと真っ向勝負で全部直接計算すると爆発的な量になって無理なので、基本相手の動きは無視して深さ優先探索でやっているよ、という感じ。そうすることで先読み機能(look-ahead features,翻訳合っている?)としてある程度手牌とその進行後の組み合わせを計算できる機能を作ってそれで評価させているよという感じ。

それぞれの判断のアクションはそれぞれのモデルが頑張って判定している。最後のプーリング層というのは非常にざっくり言うと情報を圧縮する部分で、それを付けると情報がちょいちょい抜け落ちるからその層は(一般的なCNNにはあるけど)我々はつけてないよという感じ。


この記事が気に入ったらサポートをしてみませんか?