この記事の出発点はかなり素直です。
前の段階では、著者は Reinforcement Learning(強化学習)を tabular setting、つまり「状態ごとの値を表にして覚える」方法で扱っていました。
でも、ここで問題が出ます。
状態が増えすぎると表が巨大になりすぎるんです。さらに、今回のような multi-player game では、局面の種類が一気に増えます。Connect Four は見た目こそシンプルですが、実際にはかなり多くの盤面があり、表だけでうまく扱うのは難しい。
このため著者は、「表で全部持つ」のではなく、ニューラルネットワークにQ値を近似させる方向へ進みます。
これが Deep Q-Learning です。

個人的には、ここが強化学習の面白さのひとつだと思います。
単純な問題では表形式がわかりやすくて強い。でも、少しでも複雑になると、今度は「覚える」より「うまく一般化する」能力が必要になる。まさに、表計算ソフトからAIへ、という感じです。
この記事では、学習の仕組みをいくつか強化しています。
以前は Sarsa を使っていて、1回の遷移ごとにモデルを更新していました。
これは理論としてはきれいですが、計算機的には少し非効率です。
そこで導入するのが replay buffer。
これは、ゲーム中に起きた経験
(state, action, reward, next_state, done)
をいったん保存しておいて、あとでまとめて学習する仕組みです。
簡単に言うと、
という感じです。
これにより、学習のばらつきが減り、GPU などのハードウェアも活かしやすくなります。
こういう「地味だけど効く」改善は、実務っぽくて好きです。派手ではないけど、効率を大きく変えます。

Sarsa は on-policy、つまり「実際にその方針で動いた結果を学ぶ」方法です。
一方の Q-learning は off-policy。
これは「今動いている方針とは別に、もっと良さそうな行動を仮定して学ぶ」感じです。
ざっくり言うと、Q-learning は次の局面での 最大のQ値 を見ます。
つまり、「次に最善手を打てたらどうなるか」を基準にするわけです。
盤ゲームのようにルールがはっきりしている環境では、こうした考え方はかなり相性がいい。
著者も、特に deterministic environment(結果がほぼ決まる環境)では、値が伝播しやすくなると説明しています。
Q-table の代わりに使うのがニューラルネットワークです。
ネットワーク Qθ(s, a) が、状態 s と行動 a に対する価値を予測します。

学習は回帰問題として行い、
の差を小さくします。
損失関数には Huber loss(smooth_l1_loss) を使っています。
これは、MSE(平均二乗誤差)よりも外れ値に少し強い、扱いやすい損失です。

Connect Four では、当然ながら 置ける場所だけが合法手 です。
列がいっぱいなら、その列には置けません。
そのため著者は、次状態のQ値を計算するときに mask をかけて、illegal move(違法手)を除外しています。
これをしないと、ネットワークが「置けない手がすごく良い」と勘違いしてしまうので、かなり危険です。
この部分は地味ですが、本質的に重要です。
ボードゲームAIは、単に“高そうな手”を選ぶだけではダメで、ルールを破らないことが前提になるからです。
強化学習は、とにかくデータがたくさん要ります。
なので、著者は複数のゲームを同時に進める vectorized environment wrapper を入れて、学習のスループットを上げています。

ただし、Python では GIL(Global Interpreter Lock) のせいで、マルチスレッドで単純に速くなるとは限りません。
そこでマルチプロセスも試したそうですが、通信コストが効いて、期待ほどは伸びなかったとのこと。
それでも、最終的には 1秒あたり50〜100ゲーム程度 まで改善したそうです。
ここは「理論だけではなく、実装が大事」という典型例だと思います。RL はアルゴリズムだけでは勝てなくて、処理系や並列化の工夫が効いてくるんですよね。
実験結果は、以前の tabular method と比べてかなり前進しています。
tabular method では、100,000 steps くらい学習しても、どの方針も勝率があまり変わらず、random policy ですら約50% という状態だったそうです。
要するに、「学習したのに、まだ偶然と大差ない」感じです。これはかなり厳しい。

それに対して DQN では、random policy の勝率がかなり下がるようになりました。
これは、少なくとも「ゲームを理解し始めている」証拠です。
ただし、改善はずっと続くわけではなく、約100万 steps 以降で頭打ちになり、random policy がなお 約20% くらい勝てる状態で止まったそうです。
率直に言うと、これは「かなり進歩したけど、まだ完成ではない」という結果です。
ボードゲームAIとしては、入門段階を抜けた感じはある。でも、人間相手に本気で安定して勝つには、まだ足りない。
著者は人間相手の例も示しています。
DQN は 攻撃的に自分の4つ並べを狙う ことはできている。
これはかなり良い兆候です。
でも一方で、守りが弱い。
相手の明白な脅威を読み切って止めるのが苦手だったそうです。

ここはすごく納得感があります。
強化学習のエージェントは、報酬が見えやすい「自分の得点」は伸ばしやすい一方で、相手の未来の攻撃を先回りして防ぐのが苦手なことがよくあります。
攻めは「やった感」が出やすいけれど、防御は地味で難しい。人間でも同じですが、AIでもそこはちゃんと難しいんですね。
この記事の後半で印象的なのは、著者がかなり率直に「今の枠組みには限界がある」と認めている点です。
これまでのシリーズは、Sutton の本に沿って 汎用的でわかりやすいフレームワーク を優先してきた。
でも、より強いエージェントを作るには、それだけでは足りない。
著者は今後、

ような、問題に特化した方法 に進むつもりだと述べています。
この姿勢はかなり好きです。
「きれいに一般化された理論」だけでは勝てない場面がある。実際の強いシステムは、かなりの部分が泥臭い最適化でできていることが多いからです。
この記事の重要ポイントをひとことで言うと、
表形式の強化学習では厳しかった Connect Four を、Deep Q-Learning でようやく“学習できる問題”に持ち込んだ
ということです。

ただし、ここで得られたのは「勝てるようになった」という成功だけではありません。
同時に、
も見えてきます。
個人的には、この「勝てるようにはなった、でもまだ全然おもしろい壁がある」という温度感がすごく良いと思いました。
AI の記事って、成功談だけだと薄っぺらくなりがちですが、この記事はむしろ限界の描き方がうまい。だから読後感がいいんですよね。
参考: Playing Connect Four with Deep Q-Learning | Towards Data Science