強いAIの実現方法 ~実践的な作り方~

強いAIの実践的な作り方を検討しています。メイン記事に主張をまとめています。人工知能関係の書評もあり。なお、今後、任意団体として活動してみたいと考えており、手伝ってみたいという方は是非ご連絡下さい。詳しくは、メイン記事の7を参照下さい。

AlphaZero 人工知能プログラミング実践入門を読んだ(その1) 第5章 探索

AlphaZero 深層学習・強化学習・探索 人工知能プログラミング実践入門
布留川英一著 2019年 ボーンデジタル

 仕事が忙しすぎて時間が取れなかったので、年末年始休暇で、以前買ったこの本に取り組もうと思う。

 1章がまえがき、2章がPythonの紹介で、3章が深層学習、4章が強化学習、5章が探索という、AlphaZeroを構築する3つの概念を独立して学ぶ構成となっている。この3つの章は並列の関係にある。最初に載っていたロードマップの図が大変わかりやすい。6章でAlphaZero、7章でユーザーと対戦できるようグラフィカルインタフェースについて学ぶ。

 本書では、GoogleColabという、クラウド上で実行する方法を推奨しているが、アナコンダをインストールしたノートPCで、JupyterNotebook上で試すことにした。結論から言えば、問題なく動く模様である。

 5-1ミニマックス法の最初のサンプルプログラムを手打ちで打ってみる。ブログ筆者はC言語が染みついているので、インデントによる構造管理に慣れない。また、パワポ作業の癖でShift+Returnを押すと実行されてしまうのにイライラ。

 JupyterNotebookで新しいipynbファイルを作り、テキスト通りに打っていくと問題なく動いた。他の教科書では、その通りにやっても動かない場合もあるので、大変良いと思う。
 5章の最初のプログラムを手打ちして実行すると、自分のタイプミスで止まるのはすぐエラーになって分かったのだが、tabによるインテンドの数が1つ多い場所があり、それで誤動作していたのは見つけるのにとても時間がかかった。ダウンロードしたサンプルプログラムは正常に動いたので、一行一行見比べて、3周目ぐらいで見つけることが出来た。こういう時に悩んでいろいろ考えると、それこそいろいろ身につく。

 逆に、ダウンロードしたサンプルプログラムを実行するのは簡単すぎる。適当にShift+Returnを押しているとそれっぽい結果が打ち出されてくるのだが、その結果を眺めていても、なにも身につかないと思われる。

 実行結果はこんな感じ。本書で言う3目並べは、小学校の頃にやっていたいわゆる○×である。本文と逆で、先手が○でランダム、×が後手で全探索を行い最適解をうつミニマックス法。actionというのが×を置けるところのリストで、左上から横に0、1…8まで、その場所においた時の評価がscoreで、scoreの高いところに置くようになっている。scoreは1か0か-1しかないので、1が複数あったらその中の番号が若いところに置いているのかな(良く分かっていない(^^))
 ミニマックス法で後手が考えている時だけ、actionとかが表示される。

--o
---
---


action: 0, 1, 3, 4, 5, 6, 7, 8,
score: -1,-1,-1, 0,-1,-1,-1,-1,

--o
-x-
---


--o
-x-
--o


action: 0, 1, 3, 5, 6, 7,
score: -1,-1,-1, 0,-1,-1,

--o
-xx
--o


-oo
-xx
--o


action: 0, 3, 6, 7,
score: 0, 1,-1,-1,

-oo
xxx
--o


 この手法は総当たりなので強いが、○×程度ならともかく、ちょっと規模が大きいゲームでは実行に時間がかかり過ぎる。5章の後半では、大規模なゲームでも通用するような解の探索方法として、Alpha-Beta法、モンテカルロ法が紹介されている。

 かなり簡単な紹介だが、この本のプログラムはしっかりと動くと思われるので、初心者の勉強にとても良いのではないか。ネットでも、分かりやすいとの評判を良く読む。

 6章のAlphaZero、7章のグラフィックはこの年末年始にクリアしておきたい。7章のPython上で画面描写することを学ぶのが一番の目的だったりする。