ころがる狸

ころがる狸のデータ解析ブログ

【深層強化学習(DQN)】Q値で分かる深層強化学習

こんにちは。今日は、強化学習に関する入門記事を書きたいと思います。強化学習はニューラルネットワークとはまた違うノウハウがあり、腑に落ちるレベルでの理解をするのがなかなか難しい技術だと思います。実際、私は昨年初めて強化学習の勉強をしましたが、理解したと思っても時間を置くとすぐに忘れてしまいます。そこで、強化学習の本質をがっつりと理解してモノにすることを目的にこの記事を書きました。内容は、強化学習の初歩からモンテカルロ法・Qラーニングを経て深層強化学習(DQN)までを扱います。図解ベースで話を進めますので、どうぞお付き合いください。
なお、本記事は以下の本を参考に執筆させて頂きました。

強化学習の基本的なイメージ

強化学習の目標は、価値の見積もりや作戦を最適化することによって最大の報酬を得ることです。強化学習には7個の基本的な概念:エージェント・行動・方策・状態・報酬・価値・環境があります。これらの関係性を以下のイメージ図に示しました。

f:id:Dajiro:20200518085216p:plain
強化学習の基本的なイメージ図。

具体的な内容を見てみましょう。

  • エージェント:行動を行う主体です。エージェントは何らかの方策に従って価値が高そうな状態に移るための行動を取ります。
  • 行動:エージェントが別の状態に移るための行動を指します。価値が高い状態に移るための行動を選択します。
  • 方策:どのように行動を取るかを決める方策(戦略)を指します。
  • 状態:エージェントが置かれている状態を指します。
  • 報酬:エージェントが別の状態に移ったときに得られる報酬を指します。短期的に得られる報酬であることから即時報酬とも呼ばれます。
  • 価値:状態の価値を指します。問題ごとに強化学習で目指すべきゴールは異なりますが(ゲームで勝つ、株取引で利益を得るなど)、そのゴールへの到達可能性と考えるとイメージしやすいかもしれません。即時報酬とは異なり、将来得られる長期的な報酬を織り込んで決定されます。
  • 環境:エージェントが置かれた環境を指します。この環境下でエージェントは行動を取ることで別の状態に移り、環境から即時報酬を獲得します。

このように、強化学習の基本的なエッセンスは比較的理解しやすい内容だと思います。しかしこの中には、学習という観点が欠けています。エージェントが正しい判断をできるようにするためには、以下のような学習が必要となるはずです。

  • 得られた報酬を元に、状態や行動の価値の最適な見積もり値を学ぶ
  • 得られた報酬を元に、最適な方策(戦略)を学ぶ

この学習方法を与えるものこそが、強化学習という学問です。以下ではこれらの学習方法について図解してきますが、特に価値の最適化手法について学びます。方策の最適化については方策勾配法が代表的な方法になりますが、それは次回以降の記事に回します。

具体的な方法の前に

Qテーブル:ゴールに至る手順書

具体的な方法を紹介する前に、強化学習を学ぶ上で非常に重要な概念を覚えておきましょう。以下で様々な強化学習の手法が登場しますが、共通して言えるのは状態と行動の価値Qを最適化したい、ということです。この価値Qというのはゲームの攻略本のようなもので、ある状態である行動を取ることにこれくらいの価値があるという情報が記載された表のことで、Qテーブルなどと呼びます。このQテーブルがあれば、それに従って行動することでエージェントは大きな報酬を受け取ることができるのです(人生のQテーブルが欲しいですね)。このQテーブルは事前には与えられていないため、適当な値で初期化しエージェントが実際に行動をして得られた報酬からQテーブルを更新することが強化学習でやりたいことです。どのようにしてQテーブルを獲得するのかという観点で具体的な方法を見ていきましょう。

f:id:Dajiro:20200517154542p:plain
Qテーブルのイメージ。プログラムでは配列として定義する。

方策について

価値Qが与えられたとき、どのような方策に従って行動をとるべきでしょうか。最も素朴な方法は、状態sにおいてQが最大となる行動を選択することですね。しかしこの方法には問題があり、Qが相対的に高いと分かった状態や行動があると、一方的にそうした状態・行動をとり続けてしまいます。もしもQがより高くなる状態・行動があってもそこに到達できません。こうしたエージェントの視野狭窄を防ぐために、ε-greedy法があります。ε-greedy法は人が事前に設定した一定の確率でランダムな行動をとり(探索)、残りの確率でQが最大となる行動を選択します(活用)。これによりQテーブルに従った行動をとりつつも、ランダムな行動を取ることでまだ見ぬ状態・行動に対する報酬を探索することができます。以下で紹介する方法では、暗にこのε-greedy法を方策として採用しています。

モンテカルロ法とQラーニング

実際にエージェントが動くことでQテーブルを作っていくと書きました。この作成方法には、エージェントがQテーブルを更新するタイミングによって大きく分けて2通りの方法があり、モンテカルロ法Qラーニングがあります。それぞれ見ていきますが、以下ではエージェントの行動には終わりと始まりが明確に定義されているとします。つまり、エージェントは決まった初期状態から行動を取り始め、何らかのミッションを達成したり失敗したらそれで一連の行動が終了するとします。この一連の行動を、エピソードと呼びます。

f:id:Dajiro:20200518084811p:plain
エピソードのイメージ。

モンテカルロ法

モンテカルロ法は、エピソード終了時点でQテーブルを更新します。どのように更新するかというと、現在のQテーブルの値に、実際に行動して見積もった価値と現在のQテーブルに記載されている価値の差分を補正項(TD(Temporal Difference)誤差と呼ばれます。)として付け加えるのです。

 Q(s, a) ← Q(s, a) + \alpha(G - Q(s, a))

ここで、Q(s, a) は状態s、行動 aに対する価値を表しており、\alphaは補正項を現在のQ(s, a) の値にどれくらいの割合で混ぜるかを調整するパラメータ、Gは1エピソードを終えて分かったQ(s, a)の価値の見積もり値です。これは以下のように表されます。

 G = r_{t+1} + \gamma r_{t+2} + ・・・ +\gamma^{T-1}r_{T}

r_{n}, (n = t+1, ・・・T))は各ステップにおける報酬を表しており、\gammaは割引率です。割引率とは、将来貰える報酬の見積もりには不確実性があると考え、将来貰える報酬に掛けられる1未満の値です。つまり遠い未来の報酬に関しては大きく割り引いて見積もられることになります。1エピソード終了ごとに上式に従ってQ(s, a)を更新するのがモンテカルロ法になります。 そのため1エピソードの行動を行う際には、各行動で得られた報酬をメモしておいて、最後に見積もり価値Gを計算する際に利用します。

f:id:Dajiro:20200518084746p:plain
モンテカルロ法のイメージ図。

Qラーニング

続いてQラーニングの説明です。Qラーニングでは、1つの行動を取った段階でQテーブルを更新します。その行動によって得られた即時報酬と次の状態における価値から新しい価値を見積もり、それとQテーブルの値の差分を取って価値を補正します。

 Q(s, a) ← Q(s, a) + \alpha(r_{t+1} + \gamma \underset{a}{{\rm max}}Q(s', a) - Q(s, a))

モンテカルロ法と大きく異なるのは r_{t+1} + \gamma \underset{a}{{\rm max}}Q(s', a) の部分になります。これは、状態sから1つの行動を取って遷移した状態s'の価値になります。遷移することで即時報酬 r_{t+1}を獲得し、それ以降の長期的な価値を\gamma \underset{a}{{\rm max}}Q(s', a)で表しています。将来のことなので\gammaを掛けて割引き、また常に価値が最大となる行動aを取ると仮定しています( \underset{a}{{\rm max}}Q(s', a))。なお、ここのQ(s', a)もQテーブルから参照する値です。

f:id:Dajiro:20200518084716p:plain
Qラーニングのイメージ図。

モンテカルロ法に比べ、Qラーニングは即座に価値を更新できるため、学習効率は高いと言われています。一方で長期的な報酬を織り込んでいないため、適切な行動を取れるかは不確実になります。また、QラーニングにおけるQの更新方法では方策を用いていないため、これはOff-policyと言われる手法です。一方でQの更新に方策を用いるものはOn-policyと呼ばれ、この手法はSARSA(State-Action-Reward-State-Action)として知られています。

Qテーブルの問題点

Qテーブルを獲得するという観点からみると、モンテカルロ法もQラーニングもイメージが付きやすいのではないのでしょうか。さて、エージェントが行動することでQテーブルを最適化できることを見てきたわけですが、ここまでは暗に状態sや取りうる行動aの数が少ないことを前提に進めてきました。しかしsやaが例えば連続値だった場合、すべての状態と行動の組み合わせの価値をQテーブルとして保持するというのは現実的な考えではありません。上の図のように、ロボットアームで林檎を掴みたい場合などは、制御対象となる腕の位置や角度は本来連続値で与えられるはずです。Qテーブルにのっていない値を参照すると正しい判断が出来なくなるため、上記の更新式には何かしらの改良が必要であることは明白です。

この問題を解決するためにこれから学ぶのが、深層強化学習になります。なお、以下では機械学習(特にニューラルネットワーク)に関する知識を前提に話を進めますのでご了承下さい。

深層強化学習(Deep Q-Network)

ここまでは Q(s, a)で表されるQテーブルを埋めることを目標にしてきましたが、それが連続値となると限界があります。そこで考え方を変えて、 Q(s, a)を高精度で予測する関数を作ろうというのが深層強化学習を始める最初のモチベーションになります。そしてその関数というのがニューラルネットワークです。限られた学習データを使って Q(s, a)を予測できるモデルを作ると、学習データには存在していない入力(ここでは、エージェントの状態を入力パラメータとします)が来てもうまく対応できます。なぜならニューラルネットワークは内挿を高い精度で行うことができるからです。そのため Q(s, a)のテーブルを埋めるための果てしない努力をする必要はなくなり、未知なる状態に対しても Q(s, a)を予測できるようになります(もちろんニューラルネットワークは内挿が得意ですが外挿は大の苦手です。そのためできるだけ多様性のあるデータを使って学習するのが良いでしょう)
【参考記事】
dajiro.hatenablog.com

Deep Q-Networkのワークフロー

 Q(s, a)の予測にニューラルネットワークを使うとはいえ、これまでのQラーニングやモンテカルロ法の考え方はそのまま使えます。それこそが深層強化学習と呼ばれるものになり、特にQラーニングにニューラルネットワークを使ったものはDeep Q-Network (DQN)と呼ばれます。それでは、DQNの学習ステップを図解してみましょう。

f:id:Dajiro:20200517221823p:plain
DQNのワークフロー。エピソードを重ねるごとにニューラルネットワークは賢くなる。

こちらの図がDQNのワークフローを表しています。これは以下のステップを踏んでいることが分かります。

  • 1. エピソード開始時点で環境とエージェントの状態を初期化する
  • 2. 方策に基づいて行動をする
  • 3. エージェントが遷移した次の状態に対する即時報酬を得る
  • 4. 元の状態、次の状態、行動、報酬を保持しておく(ニューラルネットワークの学習に用いる)
  • 5. 決めた個数の学習データがたまったら学習フェイズに移行。不足してる場合には1に戻る

学習の実行を除けば、1-4は要するに学習データの作成です。これまでのニューラルネットワークを使わないモデルには無かったステップなので、よく覚えておきましょう。

学習の実行

さて、最後に学習フェーズを見てみましょう。Qラーニングと同様に1ステップ進んで得られる価値を用いますが、その時の価値は次のように表されます。これこそがニューラルネットワークの教師データに対応しています。

 {\rm Estimate} = r_{t+1} + \gamma \underset{a}{{\rm max}}Q(s', a)

r_{t+1}\gammaは即時報酬と割引率です。 Q(s', a)はニューラルネットワークで予測される状態s'での価値に対応しています。もしもQ(s, a)の完璧な予測器があったら、Q(s, a)と次の状態の推測価値{\rm Estimate}は完全に一致するはずです。なので、元の状態sを入力、価値{\rm Estimate}を出力とするニューラルネットワークをトレーニングすることによって価値Q(s, a)の予測器が得られる寸法です。

これでQを推定するニューラルネットワークが得られました。このような訓練を経た後に、エージェントは方策に従って実演を行うことになります。これがDQNの一連の流れになります。

おわりに

上記のプロセスを、指定したエピソード数だけ繰り返しQの予測器を獲得するのがDQNでの学習です。DQNのワークフローを見るとわかりますが、エピソードに関するループの度に学習データを生成し、それに対する学習を実行しています。これ自体が普段の機械学習のワークフローそのものですよね。これをエピソードの数だけ行うわけですから、相当な学習時間がかかることは想像に難くありません。特にCNNのような画像データを状態とする場合にはなおさらです。また、ここでは詳細に触れませんがDQNによる学習は不安定でそのまま使われることはあまりありません。Double DQN、Prioritized Replyなどの様々なテクニックが存在しており、これらの工夫を取り入れたモデルを使うことが多いようです(Rainbowなどのモデルがあります)。発展的なモデルであっても、基本的には上で示したDQNのワークフローに従うので、深層強化学習の論文を読む際にはここで学んだ内容が理解の助けになるのではないでしょうか。
【参考】Rainbowに興味のある方はこちらの文献を参照して下さい。
arxiv.org

また、本記事では扱いませんでしたがニューラルネットワークによって方策を最適化する方策勾配法という手法があります。こちらもまとめていますので、本記事の続きにぜひお読みください!
dajiro.hatenablog.com