強化学習をわかりやすく教える教材のために、三目並べを題材にモンテカルロ、Q-Learning、Deep Q Network (DQN)をPythonで作りました。
DQNはChainerで実装しています。
細かい内容は、Qiitaに投稿しました。
http://qiita.com/narisan25/items/e64a5741864d5a3b0db0
結論は以下になります。
- モンテカルロ
実装は簡単。各手を100回試行位でほぼ負けなしに。(50回くらいだと乱数の偏りで時々負ける) - Q-Learning
更新式の設計に気を遣う。3目並べ程度なら10万対戦で最強 - Deep Q Network
色々な落とし穴が多数。最適なトポロジーがわからない。Leaky Reluにするまで最弱。教える順序次第で何も学習しない。などなど
いずれにしても Deep Q Networkが断然ハイパーパラメーター(設計者が決めるもの)が多く、このような単純なタスクでも苦労しました。
実装にかかった時間は大体こんな感じです。
- 三目並べ盤面、進行役 15分
- 人間とランダム 15分
- 改良ランダム 5分
- モンテカルロ 20分
- Q-Learning 1時間
- Deep Q Learning 6時間 (学習時間も長い)
圧倒的にDQNの実装が手ごわかったのがわかります。
やはり課題に応じて目的と予算、精度などが違うわけですので、最適な手法はそれぞれ違うこと。とくにQ-Learningで済むならそれでよいケースがあることがわかるよい事例になりました。
レクチャーでは、強化学習の理論から含めて、ソースレビューを行う予定です。
今後、モンテカルロをモンテカルロ木探索(MCTS)への改良や、DQNへのCNN組み込み、そしてValue Networkへの展開などをテストして、Alpha Goの流れを実際に体験するコースを計画しています。