GTO Gecko GTO Gecko トレーニングを始める

ポーカーソルバーの「収束」とは?Kuhn PokerでExploitabilityを再現する

カテゴリー: ポーカー理論 | 日付: 2026年9月7日 | 著者: GTO Gecko

Read in English

ランク表示のない3枚のカードを挟み、乱れた黄緑と紫の戦略経路が細い線へ収束していくイメージ。
「収束」は、ゲーム、評価する戦略、対抗戦略、単位をそろえて初めて意味を持ちます。画面に出た1つの頻度だけの性質ではありません。

1,000反復の時点で、平均戦略同士を対戦させた先手P0の期待値は、Kuhn Poker(クーン・ポーカー)の厳密な理論値と0.000001664アンティ/ハンドしか違いません。それでも、厳密なベストレスポンスは0.007269アンティ/ハンドのExploitabilityを検出します。見かけ上の収支は、戦略全体より先に「解けた」ように見えることがあります。

この食い違いがなぜ起きるのかを、途中の計算をブラックボックスにせず10万反復まで追います。決定論的なvanilla CFR(Counterfactual Regret Minimization)で全ゲーム木をたどり、反復直後の現在戦略と到達確率で重み付けした平均戦略を比較します。さらに、両プレイヤーについてルールと情報制約を守るベストレスポンスを全列挙し、データと2つの実装を公開します。

開示:これはGTO Geckoが制作した、3枚のカードだけを使う人工的な小規模実験です。GTO Gecko製品の出力、ホールデムのソルバー計算、他社ソルバーのベンチマークではありません。また、ここで使う反復回数が別のゲームにも適切だとは主張しません。

期待値が理論値に近くても「収束」とは限らない

このゲームで先手P0の厳密な期待値は、−1/18 = −0.055555556アンティ/ハンドです。1,000反復後の平均戦略を両者が使うと、P0の期待値は−0.055557220。絶対差は0.000001664です。

ただし、これは同じ学習途中の戦略同士をぶつけた結果にすぎません。「片方だけ戦略を変えたら、どこまで得を増やせるか」は測っていません。情報制約を守る厳密なベストレスポンスで調べると、両者の一方的な改善余地の合計はまだ0.014538213です。本記事の定義では、その半分に当たる0.007269106アンティ/ハンドがExploitability(エクスプロイタビリティ、被搾取可能量)です。

同じチェックポイントで、質問は2つ

期待値の確認:P0の期待値は既知の理論値に近いか。はい。差は0.000001664アンティ/ハンドです。

ベストレスポンスの確認:片方だけ戦略を変えたとき、どれだけ改善できるか。両席で平均すると、まだ0.007269106アンティ/ハンドです。

期待値が理論値に近いことは、有用な整合性チェックです。しかし、それだけでは収束の証明になりません。

ゲーム全体を1枚の木に収める

Harold Kuhnの原論文「A Simplified Two-Person Poker」は、非公開情報とブラフを残しながら、最適戦略を解析できる大きさまでポーカーを縮約しています。本実験の2人版では、強さが J < Q < K の3ランクだけを使います。

狭い画面では、横にスクロールしてベッティングツリー全体を確認できます。

2人が1アンティずつ出し、P0がチェックまたは1ベット。チェック後はP1がチェックまたは1ベットし、ベット後は相手がフォールドまたはコールする。ショーダウン時のP0純収支はベットなしでプラスマイナス1、コール後はプラスマイナス2。
各反復で、6つの配札と全分岐を評価します。収支の符号は先手P0から見た純収支です。

ゲームが小さいため、評価を曖昧にしがちな要因を2つ排除できます。まず、ランダムサンプリングは使いません。毎回6つの配札をすべてたどります。次に、ベストレスポンスを近似する必要もありません。各プレイヤーが持つ「2択の情報集合」は6個なので、純粋な対抗プランは 26 = 64通り。両者について全件を調べられます。

ベストレスポンスは相手のカードを見てはいけない

ベストレスポンスとは、相手の戦略を固定したときに、自分の期待値を最大にする対抗戦略です。ただし、実際に知り得る情報しか使えません。ある情報集合で見えるのは、自分のカードと公開されたアクション履歴です。相手の伏せたカードがJならコール、Kならフォールド、という選び分けはできません。

JavaScriptの生成プログラムと独立したPython検証プログラムは、いずれも応答を player | 自分のカード | 公開履歴 だけで管理します。P0の64プランとP1の64プランを別々に全列挙します。両方の配札をキーに入れれば数値は計算できますが、それはカードを透視した対抗策であり、ポーカーのベストレスポンスではありません。

各プレイヤーが自分の戦略だけを変えたときの改善量を、それぞれ Δ0、Δ1 とします。本記事では次の2つを区別します。

NashConv = Δ0 + Δ1

Exploitability = NashConv ÷ 2

2行目は、2人定和ゲームについてOpenSpielの固定コミットにあるExploitability実装と同じ定義です。そこでは、情報制約を守る最悪ケースの相手に対する値を両席で平均します。別のソフトはNashConvをそのまま表示したり、ポットで正規化したりするかもしれません。ラベルだけを見て比較してはいけません。

10万反復の平均戦略では、P0の改善余地が0.000784906、P1が0.000567533アンティ/ハンドです。合計したNashConvは0.001352439、それを2で割ったExploitabilityは0.000676220アンティ/ハンド。いずれも期待純収支の単位で、パーセントではありません。

なぜ平均戦略と現在戦略が離れるのか

CFRの原論文は、各情報集合で反実仮想後悔値(counterfactual regret)を定義し、2人ゼロサム・完全記憶ゲームで、平均後悔値の減少を近似均衡へ結び付けています。この保証が対象にするのは、各反復の戦略を平均した戦略です。

固定した実装では、1反復ごとに次の処理を行います。

  1. 累積した正の後悔値から、regret matching(後悔マッチング)で現在戦略を作る。
  2. その戦略で全ゲーム木をたどり、各アクションの価値と現在戦略の期待値との差を情報集合ごとに累積する。
  3. 各情報集合へ自分が到達する確率で重み付けし、その反復の戦略を平均へ加える。

6つの配札をすべて評価してから、後悔値を同時更新します。下表の「現在戦略」は、その更新直後に後悔マッチングで得た戦略です。「平均戦略」は、1反復目から実際に使った戦略を到達確率で重み付けしたものです。サンプリングも乱数シードもありません。

表はすべて、OpenSpiel方式のExploitabilityをアンティ/ハンドで示します。パーセントではありません。狭い画面では横にスクロールできます。

同じゲーム・同じ厳密ベストレスポンス定義による6つのチェックポイント(ExploitabilityとP0期待値の単位:アンティ/ハンド)
反復回数平均戦略のExploitability現在戦略のExploitability平均戦略のP0期待値
10.4583330.333333+0.125000000
1000.0256750.228304−0.055987212
1,0000.0072690.215050−0.055557220
10,0000.0023180.149500−0.055546396
20,0000.0016330.333333−0.055536440
100,0000.0006760.267496−0.055554701
両対数グラフで、平均戦略のExploitabilityは1反復の0.458333から10万反復の0.000676へ低下する。一方、現在戦略は上下動を続け、10万反復では0.267496アンティ/ハンド。
黄緑で示した平均戦略のExploitabilityは実験の始点より終点で小さく、紫で示した現在戦略のExploitabilityは動き続けます。CSVには1,006行の軌跡を収録しています。

選んだチェックポイントでは、現在戦略のExploitabilityが1万反復の0.149500から2万反復の0.333333へ増えます。その間も平均戦略は0.002318から0.001633へ改善しています。10万反復では、現在戦略のExploitabilityは平均戦略のExploitabilityの約395.6倍です。これは今回の決定論的vanilla CFRと更新手順についての結果であり、別のアルゴリズムでも現在戦略が同じ動きをするという主張ではありません。

最終頻度は照合材料であって、収束スコアではない

10万反復後の平均戦略は、OpenSpielの固定コミットにあるKuhn Pokerの均衡戦略族とも整合します。たとえば、P0はJを20.5332%でブラフベットし、Kを62.4364%でバリューベットします。後者は前者のおよそ3倍です。P1はP0のチェック後にJを33.5669%でベットし、P0のベットにQで33.3412%コールします。

10万反復後、到達確率で重み付けした平均戦略
情報集合対象アクション頻度
P0がJ、最初のアクションベット20.5332%
P0がQ、チェック後のベットに直面コール54.1156%
P0がK、最初のアクションベット62.4364%
P1がJ、P0のチェック後ベット33.5669%
P1がQ、P0のベットに直面コール33.3412%
P1がK、P0のベットに直面コール99.9995%

このゲームには解析された均衡戦略の族があるため、頻度の照合は有用な検算になります。ただし、頻度そのものが収束スコアになるわけではありません。複数の均衡戦略が同じゲーム価値を持つことがあります。また、目立つセルの数字がもっともらしくても、別の分岐に改善余地が残る可能性があります。両者それぞれに厳密なベストレスポンスを当て、戦略全体を評価します。

ソルバーの収束値を読む前に確認したい6項目

  1. ゲーム:どのレンジ、アクション、確率分岐、収支、レーキ、ICMを含むか。
  2. 戦略:平均戦略か、現在戦略か、途中保存した戦略か、後処理後か。
  3. 対抗戦略:ベストレスポンスは厳密か、上限付きか、サンプリングか。情報集合を守っているか。
  4. 集計:片方の改善量か、両者の合計NashConvか、両席の平均か。
  5. 単位:チップ、アンティ/ハンド、bb、mbb(1/1,000 bb)、どのポットを基準にした割合か。
  6. 範囲:ゲーム全体、部分木、ストリート、ノード、1ハンド、1アクションのどれか。

ゲーム全体の値を、個別ハンドの頻度誤差を保証する値に変換しないでください。スート別頻度を検証する記事(英語)では、アクションEVと入力の同型性を別に調べる理由を説明しています。製品チームがソリューション周辺の入力と成果物をどう検証するかは、GTO Geckoのソリューション作成工程を参照してください。均衡の入口はGTOポーカーとは何かで整理しています。

Kuhn実験からは言えないこと

Kuhn Pokerは、各自1枚のプライベートカード、ベットサイズ1つ、ボードなし、次のストリートなし、レーキなし、トーナメントの賞金構造なしのゲームです。ここでは全ゲーム木を簡単に走査できます。ホールデムの木には、レンジ、カード除去、多数のランアウト、複数サイジング、近似方法が加わり、トーナメントにはスタック価値の非線形性も加わります。

したがって、10万反復は今回の入力であり、推奨停止値ではありません。最終値0.000676は商用ソルバーの収束を保証するものではなく、特定ハンドの頻度精度も示しません。CFRの方式、平均化を始める時点、更新順、収支の尺度、Exploitabilityの定義が変われば、軌跡と表示値も変わります。

GTO Geckoとの関係

現在のGTO Gecko日本向けApp Store掲載情報は、プランに応じて利用できる、あらかじめ計算されたポーカー局面のライブラリ、アクション頻度、EV、レンジ構成、およびシミュレーション形式の練習を説明しています。この公開Kuhnプログラムはそれらの製品出力とは別で、製品を検証するものではありません。

持ち帰れるのは、数値の読み方です。混合頻度やEVを復習するときは、ゲーム定義と単位を残し、戦略全体の精度ラベルを1ハンドの保証に置き換えないでください。GTO Geckoはテーブル外で使う教育用ポーカー学習ソフトウェアで、賭け、賞金、リアルマネープレイは提供しません。

方法・ダウンロード・独立検算

公開配布一式に非公開のソルバー計算や顧客データは含まれません。決定論的に再生成でき、公開対象のファイルをあらかじめ限定しています。

Python実装は、10万回の完全木更新を最初から繰り返し、保存した16チェックポイント、最終戦略24行、両者64通りずつのベストレスポンス、マニフェストに記録された全SHA-256ハッシュを照合します。Pythonを通常モードと最適化モード(-O)の両方で実行することを検証手順に含めています。

よくある質問

Exploitabilityが0なら、画面上の全頻度が一意になりますか?
いいえ。1つのゲームが複数の均衡戦略を持つことがあります。定義した厳密な評価で0というのは、片方だけ戦略を変えても改善できないという意味で、頻度表が1種類に決まるという意味ではありません。
なぜ平均戦略同士の期待値だけでは不十分ですか?
2つの不完全な戦略のずれが相殺され、両者をそのまま対戦させたときのP0の期待値だけが理論値に近づくことがあるためです。本実験の1,000反復では、期待値の誤差は約0.000001664でも、厳密なExploitabilityは0.007269106アンティ/ハンド残っています。
なぜ現在戦略は上下動し続けるのですか?
累積した正の後悔値が変わると、後悔マッチングが確率を大きく動かすことがあるからです。ここで使う古典的CFRの保証対象は平均戦略です。この結果を、すべてのソルバーやCFR方式の現在戦略へ一般化することはできません。
0.000676を別のソルバーの数値と直接比べられますか?
ゲーム、評価戦略、ベストレスポンス、集計、単位が一致するときだけです。同じ最終平均戦略でも、NashConvを表示するなら約0.001352になり、ポット正規化ならさらに別の値になります。

出典