見出し画像

オセロAIの教科書 13 【評価】 深層学習を使わずに評価関数を作る

こんにちは、にゃにゃんです。

この記事集「オセロAIの教科書」は私の世界1位AIの技術を中心に、オセロAI(オセロの相手をしてくれるプログラム)を初歩から段階を踏んで作っていく記事集です。全編無料でこちらから読めます。

この記事について、わかりにくい点や疑問点、おかしな点がありましたら気楽にコメントとかTwitterとかで教えて下さい。みなさんの力で記事を洗練したいです。

※この記事では深層学習と最急降下法を同列に扱いますが、これはオセロAIにおける私の深層学習の利用方法が特殊であるために同列に扱えるだけで、実際の技術としては同列に扱うべきものではありません。


強豪オセロAIは(知る限り)深層学習を使っていない

この記事集の前半では深層学習を使って評価関数を調整しました。しかし、実は私が現在開発中のものも含めて世の強豪オセロAIは基本的に深層学習を使わずに評価関数を作っています。

"AI"と聞くと深層学習というイメージがある人が多いかもしれませんが、"AI"という言葉は一般に深層学習だけを指したものではありません。

ところで、深層学習に似た言葉で「機械学習」がありますが、これは深層学習より広汎な概念で、今回紹介する手法は機械学習に入ると思います。


パラメータをそのまま最適化する

さて、深層学習を使わずにどうやって評価関数を作るかという話ですが、言ってしまえば簡単で、パラメータをそのまま何も捻らずに最適化するだけです。

もう少し詳しく解説しましょう。

まずはオセロにおけるパターンの考え方の復習です。

まず、オセロの盤面から概ね8マスから10マス程度*1のパターン(マスの集合)を抽出して、各マスに黒石があるか、白石があるか、空きか、の3種類の状態を考えます。各マスの状態が3種類であれば、N個のマスをまとめたパターンは3^N種類の状態が考えられます。

ここで、各パターンは8マスから10マス程度だと言いました。10マスのパターンの考えうる状態数はいくつになるでしょうか。3^10=59049種類です。少ないですね(?)。

実はこの6万弱という状態数が絶妙で、これくらいであれば私の経験上、深層学習を使わないほうが性能の良い評価関数を作れます。この大量の状態1つずつについてそのまま点数を最適化します。

*1: 私のオセロAIでは5マスのパターンから10マスのパターンまで計16種類を使っています


最適化アルゴリズム

最適化アルゴリズムには一般的に、最急降下法が使われます。ニュートン法の方が一般に収束は速いですが、ある程度の高速化をすれば最急降下法で十分だと思います(私自身はニュートン法を試していません)。

最急降下法では初期値が必要ですが、経験上、全てのパラメータを0、つまり互角に初期化すれば問題ないと言われています


深層学習と最急降下法のメリット・デメリット

これらの手法にはそれぞれメリットとデメリットがあると考えています。

深層学習は関数によって足りないデータを補完できると思われるので少ないデータ数で妥当な評価関数が作れることが期待されますが、学習に必要な計算リソースが莫大です。それに対して最急降下法はデータが少ない状態はすぐに過学習を起こしてしまうために大量のデータが必要になりますが、最適化自体は高速に行えます。

私の経験では、例えば深層学習ではRTX3090で4時間程度かかっていた学習が、最急降下法ではCore i9 11900Kで20-30分程度で十分だということもあります。ただ、使用したデータは最急降下法が深層学習の10倍以上です。


まとめ

今回は評価関数の最適化に最急降下法を使う話をしました。私のオセロソフトであるEgaroucid5では最急降下法を使用して評価関数を最適化しています。


次回予告

次回はおそらく探索の並列化アルゴリズムについて書きます。


スキと投げ銭で喜びます

noteではログインなしでスキできます!役に立ったぞ、面白かったぞ、という方はぜひハートマークをポチッと押してください!

この記事は全編無料ですが、投げ銭してくれたら私が喜びます。喜ぶだけです。何も見返りはありません。「役に立ったし投げ銭してやっても良いぞ」という方はポチっとしてくださると嬉しいです。

ここから先は

0字

¥ 100

この記事が気に入ったらサポートをしてみませんか?