ポーカーAIを作るための強化学習入門

ポーカーAIを作るための強化学習入門

2026年5月21日
200

ナガメ研究所 (@2c7f08445fde)

AIを使った面白いコトを探してます。今はポーカーAIの開発をしており、強化学習や自然言語処理に興味があります。難解な数式や英語は記事に出てきません。AIことが分からなくても大丈夫です!ぜひフォローよろしくお願いします!

AKQゲームで考える「AIが駆け引きを学ぶ仕組み」

こんにちは。ナガメ研究所です。

今回は、ポーカーAIを作るうえで理解しておきたいAI技術のひとつ、強化学習について解説します。

AIを作るといっても、その学習方法にはいくつか種類があります。代表的なものには、次のようなものがあります。

  • 教師あり学習

  • 教師なし学習

  • 強化学習

これらは、AIにどのように学ばせるかによって分類されます。

たとえば、現在よく知られているChatGPTのような生成AIでは、教師あり学習だけでなく、自己教師あり学習や、人間のフィードバックを使った強化学習など、さまざまな技術が組み合わされています。

この記事では、その中でも特にポーカーAIと相性のよい 強化学習 に絞って説明していきます。

強化学習とは何か

強化学習とは、AIが試行錯誤を繰り返しながら、報酬が大きくなる行動を学んでいく仕組みです。

人間がAIに対して、

「この場面では必ずこうしなさい」

と細かく教えるわけではありません。人間が用意するのは、主に次の2つです。

  • AIが行動するための環境

  • 行動の結果として返ってくる報酬

そのうえでAIは、自分で何度も行動を試しながら、「この行動をすると得をしやすい」 「この行動をすると損をしやすい」という傾向を学んでいきます。

ポーカーはこの強化学習と非常に相性がよいゲームです。なぜなら、ポーカーでは常に「どの行動が最も期待値が高いか」を考える必要があるからです。

AKQゲームとは

ここで、ポーカーを極限までシンプルにした AKQゲーム を考えてみます。AKQゲームとは、名前の通り、AKQ の3種類のカードだけを使った、非常にシンプルなポーカーゲームです。

2人のプレイヤーに1枚ずつカードを配り、カードの強さは次のようになります。

A > K > Q

A が最も強く、K がその次、Q が最も弱いカードです。

SB/BB 1/2
A
D(SB)
K
BB

役やボードは存在しません。スートも関係ありません。手札1枚の強さだけで勝負します。

ただし、ポーカーなので、単純に強いカードを持っている人が必ず大きく勝つわけではありません。

なぜなら、ポーカーには次のようなアクションがあるからです。

チェック、ベット、コール、フォールド

たとえば、弱いQ を持っていても、ベットによって相手を降ろせる可能性があります。 反対に、強いA を持っていても、相手にコールしてもらえなければ大きく勝つことはできません。

つまりAKQゲームは、ポーカーの複雑な要素を極限まで削ぎ落とし、ベットの駆け引きだけを学ぶのに適したゲームです。

AKQゲームをAIに学習させる

このAKQゲームをAIにプレイさせるとします。まず、AIにAKQゲームを何度もプレイさせます。AIには、たとえば次のような環境情報を与えます。

自分のカード 相手の行動 現在のポット 自分が選べるアクション

AIはその状況ごとに、

チェックする ベットする コールする フォールドする

といった行動を選びます。

最初のうちは、AIはどの行動が強いのかわかりません。そのため、ランダムにベットしたり、意味の薄い場面でフォールドしたりします。

しかし、ゲームを何度も繰り返すことで、少しずつ次のような傾向を学んでいきます。

「この場面でベットすると期待値が高い」 「このカードでコールしすぎると損をする」 「この状況ではフォールドしたほうが損失を抑えられる」

このように、AIは経験を通じて、よりよい行動を選べるようになっていきます。

報酬をどう決めるか

強化学習では、行動の結果としてAIに 報酬 を与えます。AKQゲームの場合、報酬はシンプルです。

勝てばプラス。 負ければマイナス。

より正確には、チップを多く獲得できる行動ほど高い報酬となり、チップを失う行動ほど低い報酬になります。

たとえば、次のように考えます。

報酬 = 獲得したチップ - 失ったチップ

1チップ勝てば、

r = +1

1チップ負ければ、

r = -1

となります。

ここで r は reward、つまり報酬を表します。

AIはこの報酬をもとに、

「どの行動を選ぶと、長期的に得をしやすいか」

を学習していきます。

状態・行動・報酬で考える

強化学習では、AIが見ている状況を 状態 と呼びます。

AKQゲームでは、状態sはたとえば次のように表せます。

s = (自分のカード, 相手の行動, 現在のポット)

ここで s は state、つまり状態を表します。

そして、その状態でAIが選べる選択肢を 行動 と呼びます。

a = チェックor ベットor コールor フォールド

ここで a は action、つまり行動を表します。

AIは、ある状態 s にいるとき、行動 a を選びます。 その結果、ゲームが進み、最終的に報酬 r を受け取ります。

整理すると、強化学習の流れは次のようになります。

状態 s を見る → 行動 a を選ぶ → ゲームが進む →報酬 r を受け取る → 次回以降の行動を改善する

これを何度も繰り返すことで、AIは少しずつ強い行動を覚えていきます。

Q値とは何か

AIが学びたいのは、

「ある状態で、ある行動を選ぶと、どれくらい得をしそうか」

です。

これを数値で表したものを Q値 と呼びます。

Q(s, a) = 状態 s で行動 a を選んだときの期待値

たとえば、次のようなQ値があったとします。

Q(Aを持っている, ベット) = 0.8

これは、

「Aを持っているときにベットすると、平均して0.8チップ得をしそう」

という意味です。

一方で、次のようなQ値も考えられます。

Q(Qを持っている, コール) = -0.4

これは、

「Qを持っているときにコールすると、平均して0.4チップ損をしそう」

という意味です。

AIは、このQ値を少しずつ更新しながら、どの行動が得なのかを学習していきます。

Q値の更新

AIは最初、各行動のQ値を知りません。

そのため、最初は適当に行動します。 しかし、実際にプレイして報酬を受け取るたびに、Q値を少しずつ更新していきます。

更新のイメージは、次のように表せます。

新しいQ値 = 古いQ値 + 学習率 × (実際の報酬 - 古いQ値)

記号で書くと、次のようになります。

Q(s, a) ← Q(s, a) + α × { r - Q(s, a) }

ここで α は学習率です。

学習率とは、新しく得た結果をどれくらい強く反映するかを表す値です。

たとえば、ある状態でベットした結果、大きく勝てたとします。 その場合、その行動のQ値は少し上がります。

Q(Kを持っている, ベット) が上がる

反対に、ある状態でコールした結果、何度も負けるようであれば、その行動のQ値は下がります。

Q(Qを持っている, コール) が下がる

このようにしてAIは、

「このカードでは強気にベットしたほうがよい」 「この状況ではコールしすぎると損をする」 「この場面ではフォールドしたほうがよい」

といった判断を、経験から学んでいきます。

探索と活用

ここで、もうひとつ重要な問題があります。

AIが常に一番Q値の高い行動だけを選んでいると、新しい戦略を試せなくなります。

たとえば、最初のうちにたまたま「Qでは必ずフォールドしたほうがよい」と学んでしまった場合、Qでブラフする可能性を試さなくなってしまいます。

しかしポーカーでは、弱いカードでも一定の頻度でブラフすることが重要です。 そのため、学習中はAIにランダムな行動も選ばせます。

この考え方を、探索と活用 と呼びます。

探索:まだ試していない行動を試す
活用:これまでの学習で良いとわかっている行動を選ぶ

たとえば、次のように行動を選ばせます。

一定の確率 ε で、ランダムな行動を選ぶ それ以外の確率 1 - ε で、Q値が最も高い行動を選ぶ

記号で書くと、次のようなイメージです。

ε の確率 → ランダムな行動を選ぶ 1 - ε の確率 → Q(s, a) が最大になる行動を選ぶ

ここで ε は、どれくらい探索するかを表す値です。

学習の初期は ε を大きくして、いろいろな行動を試します。 学習が進むにつれて ε を小さくし、だんだんとQ値が高い行動を選ぶようにします。

AKQゲームでAIが覚える戦略

このような学習を繰り返すと、AIは少しずつポーカーらしい戦略を覚えていきます。

たとえば、次のような判断です。

Aを持っているときは、積極的にベットする。

Qを持っているときでも、一定の頻度でブラフする。

Kを持っているときは、相手の行動に応じてコールやフォールドを使い分ける。

重要なのは、AIに対して、

「Aなら必ずベットしなさい」 「Qなら必ずフォールドしなさい」

と直接教えているわけではないという点です。

AIは大量の試行錯誤を通じて、自分で期待値の高い行動を見つけていきます。

AKQゲームにおける強化学習の流れをまとめると、次のようになります。

  1. AIにカードを配る

  2. 現在の状態 s を確認する

  3. 方策にしたがって行動 a を選ぶ

  4. ゲームを進める

  5. 勝敗によって報酬 r を受け取る

  6. Q(s, a) を更新する

  7. これを何度も繰り返す

この繰り返しによって、AIは単に「強いカードなら勝つ」という判断ではなく、

「相手を降ろせる場面ではベットする」 「コールされやすい場面では強いカードでベットする」 「期待値が低い場面ではフォールドする」

といった、ポーカーらしい駆け引きを学んでいきます。

強化学習とナッシュ均衡

このように、強化学習では、AIが試行錯誤を通じて期待値の高い行動を学んでいきます。

そして、この考え方を突き詰めていくと、最終的には ナッシュ均衡 と呼ばれる状態に近づいていきます。

ナッシュ均衡とは、すべてのプレイヤーが最適な戦略を取っている状態のことです。

もう少し噛み砕くと、

「自分だけが戦略を変えても、それ以上得をできない状態」

です。

相手も最適にプレイしているため、自分が一方的に戦略を変えても、期待値を上げることができません。

ポーカーの文脈では、この考え方は GTO にもつながります。

GTOとは、Game Theory Optimal の略で、日本語では「ゲーム理論的に最適な戦略」と言われます。

ポーカーにおけるGTOとは、相手に大きくエクスプロイトされにくい、理論上バランスの取れた戦略のことです。

たとえば、強いハンドだけでベットしていると、相手に簡単に降りられてしまいます。 反対に、ブラフが多すぎると、相手に簡単にコールされてしまいます。

そのためGTOでは、

バリューベットの頻度 ブラフの頻度 コールの頻度 フォールドの頻度

などを、バランスよく組み合わせます。

AKQゲームのようなシンプルなゲームでも、この「バランス」の考え方は非常に重要です。

ノーリミットホールデムでは一気に複雑になる

ナガメ研究所が目指しているのは、この考え方をノーリミットホールデムに応用し、ポーカーAIを開発することです。

ただし、AKQゲームと違って、ノーリミットホールデムの計算量は膨大です。

まず、プレイヤーに配られる2枚のハンドだけでも、組み合わせは1,326通りあります。

さらに、フロップ・ターン・リバーの5枚のボードまで含めると、1人のハンドとボードの組み合わせだけでも約28億通りになります。

そして、6人でプレイする場合は、各プレイヤーに2枚ずつカードが配られ、さらにボードが5枚出ます。 カードの配られ方だけでも、およそ次のような規模になります。

約 10 の 24 乗通り

これだけでも非常に大きな数ですが、実際のポーカーではさらにアクションが加わります。

プリフロップ フロップ ターン リバー それぞれの場面で、

ベット チェック コール レイズ フォールド オールイン

といった選択肢があります。

さらにノーリミットホールデムでは、ベットサイズを自由に選べます。

小さいベット ハーフポット ポットベット オーバーベット 小さいレイズ 大きいレイズ オールイン

このように考えると、ノーリミットホールデムで最適戦略を求めることが、どれほど大変かがわかります。

AKQゲームでは数えられる程度だった状態や行動が、ノーリミットホールデムでは一気に天文学的な数になります。

それでも、現在はこの膨大な計算の一部をうまく抽象化しながら、ナッシュ均衡に近い戦略を求めるソルバーやサイトが存在しています。

これは本当にすごいことです。

まとめ

今回は、ポーカーAIを作るうえで重要な技術である 強化学習 について、AKQゲームを例に解説しました。

強化学習では、AIに正解を直接教えるのではなく、AI自身が試行錯誤しながら報酬の高い行動を学んでいきます。

AKQゲームでは、AIは次のような流れで学習します。

状態を見る 行動を選ぶ 報酬を受け取る Q値を更新する また次のゲームで試す

これを何度も繰り返すことで、AIは少しずつポーカーらしい駆け引きを覚えていきます。

そして、この考え方はナッシュ均衡やGTOにもつながります。

もちろん、実際のノーリミットホールデムでは、カードの組み合わせもアクションの数も膨大です。 そのため、AKQゲームのように単純にはいきません。

しかし、まずはAKQゲームのような小さなゲームで考えることで、ポーカーAIがどのように学習していくのかを直感的に理解しやすくなります。

次回予告

次回は、この強化学習の仕組みを一部使って、実際にポーカーAIを開発している様子をお見せします。(まだまだ初期段階で期待した動作はしてくれていませんが)

将来的には、開発したAIを公開して、みなさんに遊んでもらったり、ライブ配信でAI同士の対戦や、人間との対戦を見せたりしていきたいと考えています。

「こんな機能があったら面白そう」 「こんなコンテンツを見てみたい」 「AI同士の対戦を見たい」

などありましたら、ぜひコメントしてください!

クリエイターの人気記事

ポーカーAIの開発日記
ポーカーAIの開発日記

ポーカーAIの開発日記

コメント (0)

まだコメントはありません

ログインすると、コメントできます