Deep Q-Network まとめ

強化学習に関する良記事を見つけた。

qiita.com

元論文はこちら

NIPS [1312.5602] Playing Atari with Deep Reinforcement Learning

Nature Human-level control through deep reinforcement learning : Nature : Nature Publishing Group

以下自分なりの整理。

Q学習の枠組み

名前 意味
s(,o) 観測 環境に関してエージェントが得る情報
r 報酬 環境からエージェントが得る報酬
a 行動 エージェントが環境に対してとる行動
R_t (目的関数) 時刻tから無限の未来までに得る報酬の和(のようなもの)
 \pi(s) 方策 観測sに基づきエージェントがとる行動aを規定する関数
 \pi^*(s) 最適方策 最大化させる方策
Q(s, a) 行動価値関数 観測sで行動aを取った場合の目的関数R_t の期待値
Q^*(s, a) 最適行動価値関数 下記

 R_tの正確な定義は { \displaystyle
R_t = \sum \gamma^{k} r_{t+k+1}
}

この目的関数 R_tを最大化させる最適方策 \pi^*(s)を得ることが学習の目的。

方策を求める代わりに、行動価値関数 Q(s, a)という概念を導入する。

最適方策と最適行動価値関数の間には以下の関係が成り立つ

{ \displaystyle
\pi^{*}(s) = argmax_{a}Q^{*}(s, a)
}

学習は目的関数 R_tを最大化させる最適価値関数 Q^*(s, a)を得る事と等価。

学習の更新式

観測sに続く行動aの次のステップの観測s'、行動a'をもとに、Q(s, a)を更新する。

{ \displaystyle
Q(s, a) \gets Q(s, a) + \alpha ( r + \gamma \max_{a'}Q(s', a')  - Q(s, a) )
}

つまり学習率\alphaで、r + \gamma \max_{a'}Q(s', a')に近づけていく。

価値関数Q(s, a)をパラメータ\thetaの関数で近似した場合、勾配によるパラメータの更新式は

{ \displaystyle
\theta \gets \theta + \alpha ( r + \gamma \max_{a'}Q(s', a')  - Q(s, a) ) \nabla Q
}

Neural networkの応用

価値関数をNNで近似。原理的には誤差逆伝搬で上記勾配法を適用すればよいが、学習速度を向上させるためには工夫が必要。

以下のアルゴリズムが提唱されてきたらしい。

  • Experience Replay

エージェントが経験したサンプル (s, a, r, s′)を全て(あるいは有限の時間数ぶん)記録しておき、一度つかったサンプルを上記の関数近似を用いたQ学習で何度も利用するという手法

つまり再利用という事?

  • Neural Fitted Q Iteration

まずサンプル (s, a, r, s′)からなる十分な数のデータがあるものとして、「これ以上サンプルを追加せず、与えられたデータから最適方策を学習する」、すなわちバッチ強化学習を行うことを考えるアルゴリズム

NNの学習としてみれば、ただのミニバッチ学習?SGDに近い。

  • Growing Batch

ある程度学習を行った後にエージェントを環境中で動かし、バッチのデータを後から追加していく

強化学習、という条件が付いているために名前が付いているが、NNの学習という意味では特別は事はやっていなさそう。

Nature論文のアルゴリズムはNeural Fitted Q Iteration + Growing Batch。詳細は論文のアルゴリズム参照。