質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
強化学習

強化学習とは、ある環境下のエージェントが現状を推測し行動を決定することで報酬を獲得するという見解から、その報酬を最大限に得る方策を学ぶ機械学習のことを指します。問題解決時に得る報酬が選択結果によって変化することで、より良い行動を選択しようと学習する点が特徴です。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

2回答

1027閲覧

オリジナルボードゲームの機械学習での実装方法がわからない

programming

総合スコア476

強化学習

強化学習とは、ある環境下のエージェントが現状を推測し行動を決定することで報酬を獲得するという見解から、その報酬を最大限に得る方策を学ぶ機械学習のことを指します。問題解決時に得る報酬が選択結果によって変化することで、より良い行動を選択しようと学習する点が特徴です。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

1クリップ

投稿2018/08/22 13:46

強化学習の初心者です。
以前の質問に続いて、またわからないことがあるため、質問させていただきます。

あるオリジナルボードゲーム(囲碁みたいに探索空間が非常に広い)のソルバーを作ろうとしています。

DQNを用いて実装しようかと考えているのですが、学習するときに、MiniMax法などの他のソルバーの自己対局データをファイルに保存したものを読みこんで、学習させるのでしょうか。それとも、プレイアウトのように対局させながら、その都度ネットワークを調整していくのでしょうか。

また、将棋が参考になると考えて、どのような考え方で実装されているのか調べてみました。しかし、そもそも将棋には優れた教師データがありますが、今回はオリジナルゲームであるため教師データはなく、どのような考え方で実装すればいいのかわかりません。きっと強化学習というものを使うのだろうとは考えていますが、具体的にどんなデータが必要で、どんな処理を行う必要があるのかがわかりません。そのため、そのあたりもアドバイスをいただけると嬉しいです。また、何か参考になる競技や、重要なキーワードなども教えてくださると役に立つと思います。

機械学習でやっていく方針でいいのかは考える余地があるのですが、まずは概念的にでもどのような処理をすればいいのかを理解したいので、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

DQNを用いて

DQNはMiniMaxやモンテカルロなど、先読みが不可能であるテレビゲームの攻略などには使われていますが、ボードゲームのように評価の探索が可能である場合には使う必要性は薄いかと思われます。

今回はオリジナルゲームであるため教師データはなく、どのような考え方で実装すればいいのかわかりません。

強化学習の考え方としては、とりあえずわからない部分は、最終結果から判断して学習させるというものです。
例えば、対局させてその対局中に現れた全ての局面を記憶しておきます。
そして勝った場合は、その局面全てを正しいものとして正解ラベルを与えて学習させていきます。
負けた場合は、その逆の事を行います。
勝ったとしても、その全てが正しい行動であるとは限りませんが、それを繰り返していく事で、勝ちのパターンを見つけていく事が出来るという感じです。
データの性質は違うかもしれませんが、大まかにはただの教師あり学習と同じです。

ソルバーというゲームがどのようなものかはわかりませんが、オセロ、チェス将棋などのボードゲームのようなものだと仮定してもう少し詳しく実装に触れてみます。

1.出力層にはTanh関数を使う。
-1であれば自分の勝率は0% 1であれば自分の勝率は100%として表現します。
sigmoid関数よりも強い勾配を得られるので、学習がしやすいです。
ただし重みが大きくなると-1か1しか返さなくなるので、l2ノルムやBatchNormalizationなどを使う事をお勧めします。
AlphaGoZeroでは両方使われています。

2.MiniMaxで先読みした評価値を学習させる(DQNでいうQ値なようなもの)。
より少ない探索で正しい評価が出来るように必要です。
一手指す毎、もしくは一局終わる毎に学習させていきます。
AlphaGoZeroではモンテカルロ法(PUCTアルゴリズム)で8回探索する毎に学習が行われています。
(教師データのサイズは81919 トータル探索数は1600回)
この時に局面をランダムで回転させる事で、局面が回転しても同じである事を教えています。

3.最終結果から学習させる。(正解ラベルは負けなら-1 勝ちなら1を与えます)
一局毎もしくは、ある一定の試合数を行う毎に学習させていきます。
AlphaGoZeroでは、50万局毎に全ての局面を用いて、ミニバッチ学習を行っています。
(最適化手法はMomentum ミニバッチサイズは2024 イテレーション数は1000)

先読み探索で得られた評価値 + 最終結果からの学習を何かしらのタイミングで学習させていく感じですね。この辺りは完全に模倣しようとせず、手探りや好みで決めてもいいと思います。

ちなみに以下リンクでは、Q値(先読み探索の評価値)の学習とゲーム結果の学習のバランスを変える事でAlphaGoZeroよりもいい結果が得られたという報告があります。
http://tadaoyamaoka.hatenablog.com/entry/2018/07/01/121411

投稿2018/08/23 00:10

編集2018/08/23 00:27
puroko3

総合スコア185

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mkgrei

2018/08/23 09:50

細かいことばかりですが。 間違ってたら許してください。 > DQNはMiniMaxやモンテカルロなど、先読みが不可能であるテレビゲームの攻略などには使われていますが、ボードゲームのように評価の探索が可能である場合には使う必要性は薄いかと思われます。 AlphaGoはDQNで、ボードゲームの囲碁での有効性を示しました。 先読みが可能でも手の数が膨大な場合は有効です。 > 強化学習の考え方としては、とりあえずわからない部分は、最終結果から判断して学習させるというものです。 これは強化学習の一部の手法での話で、オンライン学習の場合、最終結果から判断しているわけではありません。 > ソルバーというゲームがどのようなものかはわかりませんが、オセロ、チェス将棋などのボードゲームのようなものだと仮定してもう少し詳しく実装に触れてみます。 ソルバーは特定のゲームの名称ではなく、ゲームAIの判断の司る部分のことです。
puroko3

2018/08/23 12:33

>AlphaGoはDQN そうでしたか。私の記憶では、softmaxに-1か1を与えるだけのものだと思っていました。 >強化学習の考え方 その通りですね。最終結果からではなく、「行動」を取った結果から判断すると言った方が正しいですね。指摘ありがとうございます。 >ソルバー なるほど、勉強になります。
programming

2018/08/23 13:34

とても丁寧にご教示いただきありがとうございます。 機械学習にこだわっているわけではなく、とにかく強いAIを作ることが一応目的なので、DQN以外の方法も候補に入れて検討しようと思います。ただ、私自身は機械学習について無知で、少し興味がわいてきたので、この分野について少しなりとも理解するためにも、機械学習を使って実装してみたいと思いました。 詳しい実装方法にも触れていただきありがとうございます。いろいろなサイトや書籍を読んでもいまいち理解できなかったのですが、ご回答を拝見して具体的な実装方法をなんとなく頭で思い描くことができました。今回AIを作ろうとするゲームに当てはめながら、しっかりとした理解を深めていこうと思います。 どのご回答も私にとって役に立つものでしたが、今回は puroko3 様をベストアンサーにさせていただこうと思います。 皆様ありがとうございました。
programming

2018/08/23 13:34

オンライン学習とバッチ学習という名前がついているんですか... この辺が理解できないというか、使い分けがよくわからないことだったので、キーワードとして調べてみようと思います。
guest

0

あるオリジナルボードゲーム(囲碁みたいに探索空間が非常に広い)のソルバーを作ろうとしています。

わからないことが多いのならまるばつゲームとかオセロとかから始めればいいのに、と思わなくはないです。


DQNを用いて実装しようかと考えているのですが、学習するときに、MiniMax法などの他のソルバーの自己対局データをファイルに保存したものを読みこんで、学習させるのでしょうか。それとも、プレイアウトのように対局させながら、その都度ネットワークを調整していくのでしょうか。

MinMaxを実装しておかないと、すばらしい機械学習手法のすばらしさがわからないでは?
それでとりあえずMinMaxよりはマシなものを作ってみないと、頭の悪い機械学習AIの入ったゲームになります。
自己対局のみでAlphaGoZeroはAlphaGoより性能が良いと言われているので、原理的に可能ですが、それを可能にしたのは専門家がたくさんいてノウハウがあったからであり、とりあえず教師データありでパラメータチューニングの感覚をつかんでからでないと。一発でやり遂げる天性のセンスを期待してもいいのですが。

また、将棋が参考になると考えて、どのような考え方で実装されているのか調べてみました。しかし、そもそも将棋には優れた教師データがありますが、今回はオリジナルゲームであるため教師データはなく、どのような考え方で実装すればいいのかわかりません。きっと強化学習というものを使うのだろうとは考えていますが、具体的にどんなデータが必要で、どんな処理を行う必要があるのかがわかりません。そのため、そのあたりもアドバイスをいただけると嬉しいです。また、何か参考になる競技や、重要なキーワードなども教えてくださると役に立つと思います。

DQNも強化学習の一種なので、それでやったらいいですよ。

入門書↓
http://incompleteideas.net/book/bookdraft2017nov5.pdf

軽い概論↓
http://minerva.cs.uec.ac.jp/~ito/entcog/contents/lecture/date/5-yoshizoe.pdf

投稿2018/08/22 22:39

mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

programming

2018/08/23 13:35

確かに、よく知られているゲームのほうがネット上にもたくさん情報がありますし、オセロなどのほうがいいかもしれませんね。 今回扱うゲームもオセロに通じるところがあるので、参考にしようと思います。 MiniMax法でも実装しようと思います。また、モンテカルロ木探索というのもあるそうなので、そちらも確認しようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問