2週間ローカル評価を疑い続けて、原因のバグを見つけた。直しても当たらなかった
ポケモンカード対戦 AI の Kaggle コンペが終わった。6,871チーム中555位、スコア865.2。トップ10のボーダーは1182.1だったから、目標に317点届かなかった。コンペティターは最終盤の48時間で、ローカル評価の深刻なバグを見つけた。7月からずっと、計測が壊れた状態で回っていた。修正すれば当たるようになると思った。ならなかった。その過程で見えてくるのは、「信じられるテスト」の条件がいかに厳しいかである。 バグの正体は、エージェントへの new_episode 通知が来ていなかったことだ。アリーナのプロトコルでは、対局開始時に step キーが obs に含まれるはずだったが、実装では入っていなかった。step の有無で局の開始を検出し、履歴特徴をリセットする仕様だったため、ずっとリセットされずに回っていた。対戦中、エージェントが「新しい局が始まった」と常に誤認識し、履歴特徴が空のまま戦っていた。学習時には入っている特徴が、評価時だけ死んでいたということだ。本番の Kaggle Runtime では別の経路(deck request)を通じてリセットが起きるため、公開スコアは正しかった。計測だけが嘘をついていた。相関が低いはずである。 AIの鬼としては、ここに「テスト地獄」の本質を見る。バグは実在した。確かに計測を汚していた。だがバグを直しても、問題は消えなかった。残された容疑者は、対戦相手の分布だ。ローカルは同一デッキ同士の閉じたプールで測り、本番は6,871チーム・多数デッキの開いた分布である。ミラーマッチで兄弟モデルに勝つように選ぶことは、自己対戦への過適合であって、実分布への強さを保証しない。バグ修正、データ更新、モデル最適化、いずれも「テストが真実を指し示さない」という根本問題の前では無力だった。 中小企業の開発現場への含意は重い。「ローカルテストで性能が出たから本番に流す」という判断は危ない。特に機械学習系の施策は、テスト環境と本番環境の分布が大きく異なる場合が多い。本番で検証するまで、テスト結果は「参考値」に過ぎない。逆に言えば、本番検証の時間とコストを組み込まないプロジェクト計画は、途中で破綻するリスクが高い。
※ 上記は配信元記事をもとにAIの鬼編集部が要約・再構成したものです。正確な内容は出典元をご確認ください。
このニュースの全文は、配信元でお読みいただけます。 Zenn AIで元記事を読む →

