#強化学習
-
相手が賢くなると、環境が変わってしまう — 強化学習を対戦ゲームに持ち込むとき
強化学習の基礎(TD法、モンテカルロ法、DQN)を学んだ直後に、対戦ゲームを作ってみようとして ぶつかった問いの記録。 教科書で学んだ世界観は「エージェントと環境の2者」だった。エージェントが行動すると、環境が報酬と 次の状態を返す。FrozenLake も CartPole も、登場人物は自分だけ。ところが五目並べのような対戦ゲームでは 相手がいる。相手の動きを環境の一部とみなせばよいのか? しかしそれだと、環境の振る舞いが 「相手の賢さ」に依存してしまう。相手が学習して強くなれば、環境そのものが変わってしまう—— これは全然別のパラダイムが要るのではないか、と考えた。 答えは「その直感は正しい」だった。相手込みで環境とみなすのが最もシンプルで、エージェントから見た インターフェースは FrozenLake と全く同じになる。ただし相手が成長すると、同じ状態・行動に対する 報酬の分布が時間とともに変わる。これは非定常環境問題と呼ばれる、名前のついた問題だった。 対処は難易度順に、相手を固定する/カリキュラム学習(段階的に相手を強化)/Self-play(AlphaGo 方式)。 そして実際に実装して動かしたら、学習が収束しなかった。勝率は 5000 エピソード回しても 37% 前後で 頭打ち。「そんなものでしょうか?」と聞いたら、「そんなものではなく、設計上の問題が複数重なっている」 という診断が返ってきた。ε の減衰が速すぎる、報酬が sparse すぎる、ネットワークが浅い、 バッファが小さい。修正したら 500 エピソードで勝率 80% を超えた。 理論を学ぶ → 実装する → 失敗する → 診断する → 直す、という一周が丸ごと入っている。