マインスイーパーを機械学習で解くプロジェクトを作った

マインスイーパーを機械学習で解くプログラムを作成した。

github.com

マインスイーパーごにょごにょ。

6x6程度の小さい盤面しか学習できないようなパフォーマンス・設計という致命的な問題を抱えているが、その条件ならしっかり賢くなってくれる。正答率が上がっていくのを眺めるのは楽しね。

アルゴリズムとかは上記リポジトリのREADMEに任せて、プロジェクトの背景とか、私自身の学習過程とかをダラダラ書いていく。

背景、動機

2点。

どこから勉強し始めたか及びその経過経緯

そもそも機械学習とはなんぞや?

機械学習をやりたいけれど、どこから手をつけていいか分からない人のために - Qiita

機械学習を用いればマインスイーパーを解かせられるじゃろ!程度のぼんやりとした知識しかなかった。 ので、機械学習そのものについて調べているときにたどり着いた記事。この記事を読み、強化学習を使えば良さそうだな、と目星をつけた。

強化学習ってどんなことがデキるんじゃ?

ゼロからDeepまで学ぶ強化学習 - Qiita

強化学習という手法について、基礎から最近目覚ましい精度を出しているDeep Q-learning(いわゆるドキュンDQNです)まで、その発展の流れと仕組みについて解説をしていきたいと思います。

いざプログラム作成後に見てみると、クラス名とか記事参考にすればよかったなぁーって部分が幾つか。そのうち直そう(直さない)。とりあえず「現在のステートに対して、うまく出来たら報酬を与えて、うまく出来なかったら減点する」ということを学んだ。数式は全然見てないし、発展的な内容は全然取り入れてない。そのうちな!

いつの日かOpenAI Gymを少しだけ歩いてみたい。

シンプルな感じのサンプルコードを漁っていく

とりあえず今回参考にしたのはこの2つ。Q学習関係のサンプルコードを漁っていた。

Q学習を試してみたかったのだが、最終的にはモンテカルロチックな実装になった。そもそもQ学習を使いたかった理由は「なんかカッコイイから」程度のものだったのだが、マインスイーパーで伝搬が発生するような学習方法は難しい気がしたため変更。囲碁や将棋と比べて、盤面の変化がどのように起こるかが非常に分かりにくい。「あの状態に遷移するとクリアしやすいぞ!あの状態を目指せ!」と分かったところで、とてもじゃないが再現できないと判断したため。

そんな感じの知識を手に入れて、あとはゴリゴリ実装して終了。

改善できると分かってる箇所は多いんで、そのうち対応する。 そ の う ち 。


強化学習

これ買った。いろんな記事で「読んどけ」って宣伝されてたため。機械学習系の書籍は多いけど、強化学習に絞った書籍ってのは少ないらしい。その中で、こいつがオススメ~みたいな雰囲気のが多かった。

あ と で 読 む