検索
連載

【3目並べで学ぶ強化学習】Q-LearningとDQNを徹底解説Web解析にも使える! 強化学習超入門(2)(1/2 ページ)

3目並べで強化学習を行うと、どうなるのだろうか。強化学習のアルゴリズムの一つである「Q-Learning」を説明しつつ、Q-LearningにDeep Learningを組み合わせた「Deep Q-Network」を使って、強化学習を実装する方法を紹介する。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

【おわびと訂正:2020年5月13日19時 本稿のサンプルのソースコードは「ChainerRLで三目並べを深層強化学習(Double DQN)してみた - Qiita」を引用して一部改変させていただいたものでした。該当箇所で、その旨の記載を追加しております。引用元の著者様、ならびに関係者の皆さまにおわび申し上げます。】

 昨今、多くのサービスで活用され注目を集めている「機械学習」。その中から、2016年3月に囲碁のトップ棋士に勝利したDeepMindの「Alpha Go」でも使用されている「強化学習」について解説していく本連載。

 前回「囲碁プロ棋士に勝ったAI『Alpha Go』で使われた、『強化学習』って何?」では、「強化学習とは一体何なのか?」「強化学習のメリット」「他の機械学習との違い」「効率的に進めるためのフレームワークと実現できる世界観」「リクルートでの実践例の概要」を紹介しました。

 今回は、強化学習の中にあるアルゴリズムの一つである「Q-Learning」について説明し、Q-LearningにDeep Learningを組み合わせた「Deep Q-Network」(以下、DQN)にも触れていきます。また「強化学習×Deep Learning」を効率的に実装できるライブラリの一つである「ChainerRL」を用いて、3目並べを題材にDQNを実装していきます。

Q-Learning(Q値)とは

 前回は、強化学習を用いると「最終的なゴールを目指して、途中過程を最適にしたい」というタスクが解けると紹介しました。この点を、もう少し細かく説明するために、まず3つの要素を定義します。

  • 状態S:現在どういう状況になっているかを表すもの。ゲームの場合、「敵が目の前にいる」という情報も状態になります
  • 行動A:実際に起こす行動を表すもの。ゲームの場合、「ジャンプする」といったことが行動に当たります
  • 報酬R:とある状態においてある行動を起こした結果、どのくらいの利益が得られるかの値。ゲームの場合、クリアしたときです

 今回、後述するDQNの実装を説明するときに使うゲーム「3目並べ」をこの3要素に当てはめると下記になります。

  • 状態S:3目並べの場合は盤面の情報(現在、○がどこに置かれていて、×がどこに置かれているかを示したもの)になります
  • 行動A:3目並べの場合は、打つ一手になります
  • 報酬R:3目並べの場合、勝利の状態(3目連続で○または×が置かれた)になったときにプラスの報酬が与えられます

 すなわち、「最終的なゴール(3目並べの場合、勝敗)を目指して、途中過程を最適にする」とは、「報酬が与えられる状態まで進み、与えられた報酬を基に今まで行ってきた『状態と行動のセット』を評価する」ことと言い換えられます。

 ここで状態と行動のセットを評価するに当たって、重要な要素がもう一つあります。

  • 状態行動価値Q:Q値と呼ばれる。ある状態Sにおいて、ある行動Aを行ったときの価値のこと

 Q値は「価値」。つまり、短期的にもらえる報酬ではなく、将来的にもらえる報酬を鑑みた値のことです。ゲーム「テトリス」で例えると分かりやすいかもしれません。

 テトリスの場合、即時的に点数を稼ぐにはブロックを細かく消していく方が良い。しかし、長期的な点数を考えると、ときにはブロックを消さずにためて、一気に消す方が良い場合もあります。このときの「消さずにためる行動」をきちんと価値ある行動として評価できる指標がQ値です。

 このQ値を学習し、導くためのアルゴリズムの一つがQ-Learningです。Q-LearningではQ値を、「その状態での即時的に得られる報酬の価値」と「見積もられた次の状態の価値」の和と定義しています。そして次の状態の価値を見積もるのに、現在推定されている価値の最大値を用いるのがQ値の特徴です。更新されたQ値はまた次の推定値として活用することで、徐々に信頼性の高い価値の推定値として学習していきます。このように推定された一番高いQ値から導かれる行動が、ある状態おいて、価値が高く、将来を考慮された最適なものになります。

Deep Q-Network(DQN)とは

 強化学習の中でもQ値を使う手法は、いかにQ値を正確に推定できるかが鍵になります。逆に言えば、Q値を正確に推定できれば、「将来的に価値が一番高い行動を取ること」ができます。よって、「最適な行動を導くこと」は、「正確にQ値を推定すること」と言い換えられます。

 そこで、Q値を推定するためにDeep Learningを使って近似する手法がDQNです。Q-Learningの場合、状態のパターンが少なければQ値を正確に推定できますが、タスクによってはとても複雑な状態を定義する必要があります。このような場合、Deep Learningを組み合わせたQ値の推定の方が有効です。DQNでは学習精度を高めるために、さまざまな工夫を凝らしているのも特徴の一つです。

深層強化学習用のPython向けフレームワーク「ChainerRL」とは

 DQNのアルゴリズムは、もちろん一からフルスクラッチで実装できます。しかし、現在では便利なフレームワークを活用して、効率的に実装することがほとんどです。

 DQNを効率的に実装するためのフレームワークは何個か存在します。今回はその中から「ChainerRL」を紹介します。ChainerRLはPreferred Networksが深層強化学習のライブラリとして公開しており、Deep Learningのフレームワーク「Chainer」の強化学習バージョンとして有名です。ChainerだけでもDQNは実装できますが、ChainerRLを使うことでさらに効率的に実装できます。

Copyright © ITmedia, Inc. All Rights Reserved.

       | 次のページへ
ページトップに戻る