はじめに
網羅編で、「入力のまとめ方を変えただけで、人間の打牌との一致率(Top-1)が+8ポイント上がった」と書きました。この記事はその詳細編①です。
- 何を変えたのか(最初の設計と、今の設計 v3)
- どんな局面で良くなったのか
- 入力を1種類ずつ壊すと、何が効いていると分かるのか
- 「点数や順位のような、使わないと思っていた情報が実は効いていたのでは?」という疑問への答え
ここで言う精度は人間の打牌との一致率で、麻雀の強さではありません。モデルは各1本(seed 1)です。
比べた2つのモデル
最初に作ったモデルは、手牌・河・ドラなどを平らな1本の特徴ベクトルにまとめて、全結合層(MLP)で混ぜていました。これを「最初の設計」と呼びます(late fusion)。精度が思ったほど伸びず、牌ごとにトークンを作って1本の系列にする今の設計(v3、early fusion)に作り直しました。
この記事は、その作り直しで何が変わったのかの記録です。情報は同じで、混ぜ方だけが違う2つのモデルを比べます。
| 最初の設計(late fusion) | v3(early fusion) | |
|---|---|---|
| イベント系列(ツモ・打牌・鳴きの時系列) | Transformer 6層に通して1本のベクトルにまとめる | 牌トークンと一緒に、1本の系列として Transformer 6層に通す |
| 局情報(点数・順位・風など)と牌ごとの情報 | 局情報41次元と、牌ごとの20チャネル×37牌を平らにした781次元をMLPに通す | 局情報は1トークン、牌は37トークン。牌ごとの情報はそのトークンに乗ったまま |
| 出力 | 2つのベクトルをつなげて出力MLP | 各牌トークンの最終隠れ状態に共通の Linear(256→1) をかけ、牌ごとにスコア |
最初の設計は、「どの値がどの牌のものか」を、平らにした表からMLPが学ぶ必要があります。v3 は、値が牌トークンに付いたまま、その牌が自分のスコアを出します。
そろえた条件は次のとおりです。
- データ: 天鳳2023年(鳳凰卓、4人打ち・赤あり)。学習は2023年のtrain 約5,580万局面、1エポック(27,244 step、バッチ2,048)、学習率3e-4、seed 1
- 評価: 同じ年のvalid 19,343試合。強制ツモ切りを除いた約872万局面
- 共通: 幅256、8ヘッド、FFN 1024、Pre-norm、同じイベント埋め込み
- どちらも、牌効率やシャンテン数などの派生特徴は使っていない(牌の基本チャネルだけ)
結果は次のとおりです。
| 最初の設計 | v3 | 差(95%区間) | |
|---|---|---|---|
| ツモ後の打牌 | 68.90% | 77.14% | +8.24pt |
| 鳴いた直後の打牌 | 67.29% | 79.76% | +12.47pt |
| 全局面 | 68.83% | 77.25% | +8.42pt [+8.39, +8.45] |
区間は試合単位のブートストラップ(2,000回)です。網羅編の 68.9% → 77.1% は、このうちツモ後の打牌の値です。
パラメータ数では説明できない
「v3 の方が大きいモデルだから」ではありません。
| パラメータ数 | 推論FLOPs(系列長33) | |
|---|---|---|
| 最初の設計 | 5,232,678 | 2.09億 |
| v3 | 4,824,833 | 4.47億 |
v3 はパラメータが約8%少ないです。一方、計算量(FLOPs)は約2.1倍です。v3 は牌トークン37個と局情報トークン1個を系列に足すので、Transformerが処理するトークン数が増えます。計算量の増加が改善の一部を説明する可能性は、この比較では排除できていません(計算量をそろえた学習はしていません)。
どんな局面で良くなったのか
局面を層に分けて、Top-1の改善量(v3 − 最初の設計)を比べました。
| 層 | 局面数 | 最初の設計 | v3 | 改善 |
|---|---|---|---|---|
| 聴牌 | 1,034,350 | 75.57% | 90.39% | +14.82pt |
| 1向聴 | 2,618,791 | 68.97% | 79.87% | +10.90pt |
| 2向聴 | 2,804,917 | 68.33% | 75.37% | +7.04pt |
| 3向聴以上 | 2,257,420 | 66.20% | 70.52% | +4.32pt |
| 他家リーチなし | 7,159,580 | 68.82% | 76.96% | +8.14pt |
| 他家リーチあり | 1,555,898 | 68.86% | 78.55% | +9.69pt |
| 1〜6巡 | 4,493,854 | 68.03% | 74.87% | +6.84pt |
| 7〜12巡 | 3,124,476 | 68.95% | 79.60% | +10.64pt |
| 13巡以降 | 1,097,148 | 71.74% | 80.30% | +8.56pt |
(どの区間の幅も±0.1〜0.2pt程度です。)
- 手が進んでいるほど、改善が大きいです。聴牌では最初の設計でも75.6%ですが、v3 は90.4%まで届きます
- 他家リーチ中、鳴いた直後、中盤も大きく伸びています
聴牌の打牌は「待ちが残る牌を選ぶ」「当たり牌を避ける」判断で、牌ごとの残り枚数や他家の現物が決め手になります。牌ごとの数量が決め手になる局面ほど、改善が大きいという並びです。
一方、点数・順位・親・オーラスで分けた層では、改善量はほぼ同じでした。
| 層 | 改善 |
|---|---|
| 自分の順位 1位 / 2位 / 3位 / 4位 | +8.38 / +8.40 / +8.38 / +8.51pt |
| 子 / 親 | +8.41 / +8.44pt |
| オーラス以外 / オーラス | +8.45 / +8.10pt |
入力を壊して、何を使っているかを調べる
「どこで良くなったか」の次は、「何を使って良くなったか」です。学習済みモデルの入力を1種類ずつ、同じバッチ内の別の対局の局面の値に差し替えて、Top-1の落ち方を見ました。大きく落ちる入力ほど、モデルがそれを使っています。
(2023年validの約43.6万局面、強制ツモ切りを除く。)
| 壊した入力 | 最初の設計の低下 | v3 の低下 |
|---|---|---|
| 牌ごとの見えている枚数 | 7.0pt | 34.9pt |
| 牌ごとの残り枚数 | 9.5pt | 40.8pt |
| 手牌 | 33.0pt | 24.5pt |
| イベント系列(河・ツモの時系列) | 20.2pt | 27.8pt |
| 他家の現物(3人分) | 0.9pt | 3.5pt |
| 点数・順位 | 0.2pt | 0.8pt |
| 風・親 | 1.5pt | 2.2pt |
v3 は、牌ごとの「見えている枚数」「残り枚数」に強く頼っています(−35pt、−41pt)。最初の設計は同じ情報を持っているのに、ほとんど頼れていません(−7pt、−10pt)。平らにした表の中から、「この値はこの牌のもの」という対応を学べていないのだと考えています。
さらに、改善が大きかった局面と、頼り方の差が大きい局面が同じ向きに並びました。
| シャンテン数 | 見えている枚数・残り枚数を壊した低下(v3 − 最初の設計) |
|---|---|
| 聴牌 | +46.1pt |
| 1向聴 | +34.5pt |
| 2向聴 | +28.4pt |
| 3向聴以上 | +24.5pt |
リーチ中の現物
他家リーチ中に、他家の現物のチャネルを壊すと、次のようになります。
| 最初の設計 | v3 | |
|---|---|---|
| 他家リーチ中 | −0.3pt | −16.9pt |
| リーチなし | −1.0pt | −0.6pt |
最初の設計は、リーチ中でも現物の情報をほとんど使えていません。v3 の「他家リーチ中の改善が大きい」(+9.7pt)ことは、これで説明できます。
「点数・順位のような、使わないと思っていた情報が効いていたのでは?」
上の表を見ると、小さな寄与は実際にあります。
- 点数・順位: v3 の方が最初の設計より0.53pt余計に落ちる(95%区間 [+0.46, +0.60])
- 風・親: 0.69pt(区間 [+0.61, +0.77])
- オーラスでは、点数・順位の差が1.92pt([+1.63, +2.21])まで大きくなる
v3 の方が、点数・順位のような静的な情報を少し多く使っています。ただし、大きさは牌ごとの数量(見えている枚数・残り枚数)の1/50以下です。それに、改善量そのものはオーラスでも他の局面と変わりません(+8.10pt 対 +8.45pt)。
結論は、「小さな寄与は実際にあるが、+8ポイントの主な出どころではない」です。効いていたのは新しい情報ではなく、最初の設計も持っていた牌ごとの情報を、使える形で渡したことだと考えています。
牌効率やシャンテン数などの派生特徴を追加しても、差は0.1ポイント未満でした(seed 1本)。入力に枚数や河や現物が入っていれば、モデルが自分で導けているようです。
限界
- モデルは各1本(seed 1)、2023年だけ、1エポックです。区間は試合の抽出のばらつきだけで、学習のseedによるばらつきは入っていません。16年分で学習した最終モデルで、同じ形になるかは確かめていません(最初の設計の16年分モデルがありません)
- 入力の差し替えは、局面として矛盾した入力を作ることがあります(手牌と合法手が合わないなど)。低下の絶対値は「その情報が無い状況」の値ではなく、最初の設計とv3の比較と順位を見るものです
- 入力のまとまりは互いに独立ではありません(見えている枚数と残り枚数は手牌と関係します)。単独で壊した値は足し合わせられません
- 「最初の設計が牌と数量の対応を学べていない」のは、推論時の依存の差から考えた説明です。確かめるには、最初の設計に牌トークン単位のスコアだけを足した条件で学習する実験が要ります(未実施)
- 計算量の違いを統制していません(上記)
- 層ごとの比較は多重比較の補正をしていません
まとめ
- 同じ情報・同じデータで、混ぜ方だけを変えると、Top-1が68.8% → 77.3%(+8.4pt)
- 改善は、聴牌・1向聴、他家リーチ中、鳴いた直後など、牌ごとの数量が決め手になる局面に集中する
- v3 は「見えている枚数」「残り枚数」(−35pt、−41pt)、リーチ中の現物(−16.9pt)に強く頼る。最初の設計は同じ情報を持っていても、ほとんど頼れていない(−7pt、−10pt、−0.3pt)
- 点数・順位のような静的な情報はv3 の方が少し多く使うが、主因ではない
- パラメータ数は新の方が少ないが、計算量は約2.1倍
次の詳細②では、AIは相手のリーチで降りるのか、安牌を持つのかを調べます。


