じゃんけんのナッシュ均衡は1/3ずつと決まっている。学習させたら均衡から3,050倍遠ざかり、最後は手が完全に読めるようになった
約12分で読めます

じゃんけんのナッシュ均衡は1/3ずつと決まっている。学習させたら均衡から3,050倍遠ざかり、最後は手が完全に読めるようになった


ゲーム理論を習うと、必ずナッシュ均衡が出てくる。誰も自分だけ手を変える理由がない状態で、じゃんけんなら「グー・チョキ・パーを1/3ずつ」がそれにあたる。

そして、たいていこう説明される。

合理的なプレイヤーが互いに学習していけば、やがてナッシュ均衡に落ち着く。

均衡が「行き着く先」として語られている。ナッシュの定理が保証しているのは存在だけなのに、いつのまにか到達の話にすり替わっている。

では、実際に学習させたらどこへ行くのか。じゃんけんで200,000手ぶん回したら、均衡から3,050倍遠ざかった。実験に使ったコードの全文はGitHubに置いています

じゃんけんの均衡は、確かに1/3ずつしかない

まず前提のほうを固めておく。

じゃんけんに「これを出しておけば損しない」という一手はない。グーを出すと決めた瞬間、相手はパーを出せばいい。パーに決めれば、相手はチョキ。どの一手も、必ずそれを狩る手がある。

なので均衡があるとすれば、手を確率で混ぜるしかない。相手がグー・チョキ・パーを1/3ずつで出してくるなら、こちらが何を出しても勝率は等しく、有利な手が存在しない。だから自分も1/3ずつでいい。これがじゃんけんの唯一のナッシュ均衡で、1/3という数字は計算するまでもなく対称性から出る。

ここまでは疑いようがない。問題は、学習でそこに行けるのかのほう。

測り方

2人のプレイヤーに、それぞれ3つの手の確率を持たせる。毎手このように更新する。

  1. 相手の現在の確率に対して、自分の各手の期待利得を計算する
  2. 期待利得の高い手ほど、確率を指数的に大きくする
  3. 3つの確率の合計が1になるよう正規化する

いわゆる指数重み更新(multiplicative weights)で、「勝てた手を、勝てた分だけ多めに出すようになる」を素直に式にしたものだ。刻み幅という1つのパラメータで、1手ぶんの反応の強さを決める。刻み幅が大きいほど、直前の結果に強く反応する。

この更新則を選んだ理由は2つある。オンライン学習の標準的な手法であることと、刻み幅を0に近づけた極限がレプリケータ方程式(生物の進化ダイナミクスで使う連続時間の式)になるので、同じコードで離散と連続の両方を見られること。

出発点は毎回同じ (0.40, 0.35, 0.25) と (0.30, 0.40, 0.30)。均衡の近くではあるが均衡そのものではない、という位置に置いた。ここから刻み幅だけを変えて200,000手ずつ回す。

均衡に近づかない。遠ざかる

3つの手の確率は合計1なので、状態は三角形の1点で表せる。真ん中がナッシュ均衡だ。

じゃんけんの混合戦略を正三角形に描いた4枚の図。左上は刻み幅0.002で、中央のナッシュ均衡の星のすぐそばに細長い輪が1本あるだけで、14周してもほとんど同じ場所をなぞっている。右上の刻み幅0.01は同じような輪だがわずかに大きい。左下の刻み幅0.05は星を中心に外向きに広がる螺旋がはっきり見え、薄い色の内側から濃い色の外側へ向かって巻いている。右下の刻み幅0.2は14周のうちに三角形の3つの頂点にまで達し、辺に沿った太い三角形の軌跡になっている

刻み幅を変えただけで、行き先がまったく違う。どれ一つとして中央の星に向かっていない。

均衡からどれだけ離れているかを数字にすると、こうなる。

刻み幅開始時の隔たり200,000手後倍率最後に最も高かった手の確率
0.20.0528160.923,050倍1.0000
0.050.029638.041,287倍1.0000
0.010.02842.55490倍0.8803
0.0020.02830.0371.3倍0.3817

隔たりは均衡との KL ダイバージェンスで測っている。刻み幅0.2では確率1.0000、つまり混ぜるのをやめて一手を出し切るところまで行った。じゃんけんで手が固定されるというのは、最悪の状態だ。

動かすと何が起きているのかがはっきりする。

じゃんけんの三角図の上で、赤い点(いま出している手)と青い点(ここまでの平均)が同時に動くアニメーション。序盤は両方とも中央の星のすぐそばにいるが、手数が進むにつれて赤い点は星から離れて大きく回りはじめ、やがて三角形の辺の上をグー・パー・チョキと順に移動するようになる。青い点は最初の数百手で星の位置に吸い寄せられ、そのあとは最後まで星から動かない

赤い点は外へ広がって、最後は三角形の辺の上を移動している。辺の上にいるということは、3つのうち1つの手の確率がほぼ0ということだ。グー、パー、チョキ、と順番に出すだけの機械になっている。

学習した結果として、じゃんけんで最もやってはいけない状態に到達した。

「いま出す手」は読まれる。読まれないのは平均だけ

ところが、青い点は星から動かない。ここまでに出した手の平均を取ると、均衡にぴたりと乗っている。

刻み幅200,000手の平均 (グー, パー, チョキ)
0.2(0.3320, 0.3344, 0.3336)
0.05(0.3335, 0.3320, 0.3345)
0.01(0.3339, 0.3335, 0.3326)
0.002(0.3335, 0.3333, 0.3332)

どれも1/3ずつだ。軌道は均衡から3,050倍遠ざかりながら、その平均は均衡に収束している。

これがどれくらい違うのかを、実利で測ってみる。手の内が相手に完全に読まれたとき、どれだけ搾取されるか(exploitability)を計算する。ナッシュ均衡なら0で、じゃんけんで一手に決め打ちしていると2.0が最大値になる。

横軸が手数の対数目盛、縦軸が読まれたときの損の折れ線グラフ。上段は刻み幅0.05で、赤い線(いま出している手)は最初0.25付近から始まり、1,000手を過ぎたあたりから激しく振動しながら上昇し、10,000手以降は上限の2.0に張りついて細かく震えている。青い線(ここまでの手の平均)は逆に200手あたりで0まで下がり、そのあとは0の水平線に重なったまま動かない。下段は刻み幅0.002で、赤い線は0.25付近を保ったまま緩やかに振動し続け、青い線は5,000手あたりで0に達してそのまま張りついている

刻み幅0.05では、いま出している手の読まれやすさは2.000。理論上の最大値で、読まれたら必ず負ける。同じ試行の時間平均は0.00406で、ほぼ無敵だ。

つまりこの学習は、「均衡を見つける」ことには成功していて、「均衡を打つ」ことには失敗している。見つけた答えは記録の中にしかなく、プレイヤー自身は一度もその答えを打っていない。

刻み幅を小さくすれば直る、わけではない

表を見ると、刻み幅を小さくするほど離れ方が緩やかになっている。ならば0に近づければ均衡に落ち着くのでは、と考えたくなる。

刻み幅0.0005で400,000手回してみた。この更新則は刻み幅を0に近づけるとレプリケータ方程式に一致するので、実質的に連続時間の挙動になる。

結果は、均衡へ寄りもしなければ離れもしなかった。3つの確率の積(この系の保存量)は 0.03500 から 0.03617 へ 3.4% ずれただけで、これは数値誤差の範囲だ。確率は0.234から0.440の間を往復し続け、読まれやすさは0.137から0.258を行ったり来たりして、平均0.207。一度も0に触れていない。

閉じた輪をひたすら回っているだけで、均衡は輪の中心にあり、通り過ぎることすらない。

刻み幅を大きくすると外へ広がり、0に近づけると同じ場所を回る。離れないようにはできても、近づけることはできない。

外へ広がるほど、一周が遅くなる

螺旋のもう一つの性質として、周期が伸びていく。「最も確率の高い手」が3回入れ替わるのを1周と数えて、周ごとに何手かかったかを測った。

横軸が何周目か、縦軸が1周にかかる手数の対数目盛の折れ線グラフ。刻み幅0.2の赤い線は56手付近から始まり右肩上がりで2,900手付近まで伸びる。刻み幅0.05の橙色の線は222手から2,886手へ同様に伸びる。刻み幅0.01の青い線は1,107手から1,909手へゆるやかに上がりつつ細かくギザギザしている。刻み幅0.002の緑の線だけは5,535手のところでほぼ完全に水平のまま35周ぶん続いている

刻み幅0.2では1周56手から2,902手へ、51.8倍に伸びた。外側の輪ほど大きいので当然にも見えるが、これは「そのうち落ち着く」の逆を意味している。回るのが遅くなるだけで、回るのはやめない。

刻み幅0.002の緑の線だけが水平なのが、前の節の閉じた輪に対応している。5,535手から5,560手、35周してほとんど変わらない。

刻み幅を自分で切り替えて、最初の20周ぶんの軌道を見比べられるようにした。拡大すると内側から外側へ順に巻いているのが見えるし、線にカーソルを合わせれば何手目かが出る。

同じ学習則でも、辿り着くゲームはある

ここまでだと「学習は均衡に着かない」という一般論に見えるが、それは言いすぎだ。同じコード、同じ更新則のまま、ゲームだけ差し替えてみる。

3段に積んだ図。上段はじゃんけんで、グー・パー・チョキの確率が3,000手のあいだ1/3の破線をまたいで振動し続け、振れ幅はむしろ手数とともに大きくなっている。中段は囚人のジレンマで、裏切りを選ぶ確率が0.1から立ち上がって107手で99%に達し、以降1.0の破線に張りついたまま動かない。下段は協調ゲームの初期値の地図で、2人の初期確率を縦横に振った121×121の格子が2色に塗り分けられている。境界はなめらかな曲線で、混合戦略の均衡(1/3, 1/3)を通っている。青い領域(利得2の均衡へ)が73.3%、灰色の領域(利得1の均衡へ)が26.7%

囚人のジレンマでは、裏切り確率0.1から始めて107手で99%に達し、そのまま(裏切り, 裏切り)の均衡に張りついた。振動も逆戻りもない。

協調ゲーム(2人が同じ方を選べば得、選ぶ先が2つある)では、初期値121×121通りを全部回して、どちらの均衡に落ちるかを地図にした。73.3%が利得2の均衡へ、26.7%が利得1の均衡へ。どちらも均衡には辿り着く。ただしどちらに着くかは出発点で決まるので、「学習の結果、良いほうが選ばれる」わけではない。

3つのうち2つは均衡に着いた。着かなかったのはじゃんけんだけだ。

違いは利害の構造にある。囚人のジレンマも協調ゲームも、相手の手が分かれば自分の最善手が固定される。じゃんけんだけは、相手に合わせて手を変えると相手もそれに合わせて変えてくるので、追いかけっこが閉じない。ゼロ和で、勝ちが循環しているゲームでだけ起きる現象だ。

これはGANを一から実装したときに見たものと同じ構造でもある。あのときは損失が理論値に収束したのに生成分布が最後まで揃わなかった。生成器と識別器も、勝ちが循環する2人ゲームだ。

この実験で言えないこと

3つほど、正直に線を引いておきたい。

時間平均が均衡に収束すること自体は、既知の結果だ。ゼロ和ゲームでは学習の経験分布が均衡に近づくことが1950年代から知られている。この記事がやったのはその実測と、同時に軌道のほうは離れていくという対比を1枚の絵にしたところまで。

周期の測り方は粗い。「最も確率の高い手が3回入れ替わったら1周」という数え方なので、図3の細かいギザギザは実際の物理量ではなく数え方のブレを含んでいる。傾きの向きは信用してよいが、個々の値を精密なものとして読まないでほしい。

現実の人間はこの更新則で学習していない。指数重み更新は数学的に扱いやすい理想化で、記憶の減衰も、相手の癖の読みも、飽きも入っていない。ここで示せたのは「素直な学習則ではこうなる」までで、人間のじゃんけんがこうだという話ではない。

均衡は、行き先ではなく重心だった

この実験でいちばん意外だったのは、200,000手ぶんの手が最悪(読まれたら必ず負ける)なのに、その平均は最善(誰にも付け込まれない)だった、という食い違いだ。

均衡は行き着く先ではなく、回り続けたときの重心として現れていた。存在は保証されているが、そこに立てるとは誰も言っていない。ゲーム理論の教科書が「均衡が存在する」で止めているのは、たぶん正確さのためだったのだと思う。

ついでに言えば、この螺旋は「相手の直前の出方に強く反応するほど大きくなる」。刻み幅0.2は3,050倍離れ、0.002は1.3倍で済んだ。素早く適応することが、そのまま読まれやすさに変わっていた。相手の出方に合わせて自分を変えるのが速い人ほど、次に何をするか予測しやすくなる——というのは、じゃんけんの外でも心当たりがなくもない。