Deep-Q-Network (2013) 以降の深層強化学習(Q学習)の発展を、簡単な解説とtensorflow2での実装例と共に紹介していきます。今回はオリジナルのDQNを微修正するだけで実装可能な改良手法である、Double DQN , Dueling-network, そしてNoisy-network の3つを紹介します。
DQNシリーズ
DQNの進化史 ①DeepMindのDQN - どこから見てもメンダコ
DQNの進化史 ②Double-DQN, Dueling-network, Noisy-network - どこから見てもメンダコ
DQNの進化史 ③Prioritized experience replay, Multi-step learning, Categorical DQN - どこから見てもメンダコ
DQNの進化史 ④Rainbowの実装 - どこから見てもメンダコ
前提手法:DQN horomary.hatenablog.com
Double DQN(2015)
[1509.06461] Deep Reinforcement Learning with Double Q-learning
オリジナルDQNのベルマンオペレータでは行動選択もQ(s, a)の評価もtarget-Q-networkが行います。
Double-DQN論文では、ベルマンオペレータ内のにおいて、行動選択するネットワークとQ値を評価するネットワークが同一である場合に推定Q値が過大評価される傾向があることを指摘しまし*1た。さらに、その低減策として行動決定をQ-networkによって行い、Q(s, a)の評価はtarget-Q-network によって行うDouble-Q-learingの適用を提案しました。
Double DQN
実装例
実装はとても単純です。
Q値の過大評価の直感的理解
論文を乱暴に要約すると、 にランダムノイズが乗る場合にはでQ値の過大評価が起こるよ、ということを説明しています。
直感的な理解のために、5次元アクション空間での状態sにおける [ ] の場合、つまりどの行動を取ってもQ(s, a) = 0 である極端な状態*2を考えましょう。各アクションaについての の推測値に一切のノイズが無い場合は当然ながら、
となります。しかし、報酬やダイナミクスの確率的要因によって生じる正規分布ノイズε が各状態行動価値の推測値に乗る場合、
つまり [ ] である場合は、
となり真のQ値からずれます。このことをjupyter notebookでの簡単な実験で確かめます。
真のQ値は0であるので確かに過大評価が生じています。この過大評価は行動選択を、平均値が同じだが別のノイズが乗ったネットワーク(target-Q-networkに対するQ-network)で行うことによって低減することができる、というのがDouble DQNの直感的理解です。
2つのQ-networkでノイズを低減するというDouble DQNの考え方は連続値制御のためのオフポリシー手法であるTD3(DDPGの後継手法)でもclipped-double-Q-learningという名称で採用されています。
Dueling Network(2016)
[1511.06581] Dueling Network Architectures for Deep Reinforcement Learning
Dueling Networkは強化学習では珍しくネットワーク構造を工夫した手法です。Dueling-networkアーキテクチャではQネットワークが出力する"状態価値 V(s)" と "アドバンテージ A(s, a)" の和をとったものをQ(s, a)とします。*3
アドバンテージA(s, a)とは状態行動価値Q(s, a)から状態価値V(s)を引いた値であり、 で定義されます。
状態価値V(s)とアドバンテージA(s, a)を分けて学習するアーキテクチャは、どのような行動をとっても価値がほとんど変わらないような状態において学習を促進すると考えられます。たとえば下図のボンバーマンのような状態を考えてみます。
どんな行動をとっても結果が変わらないことは明らかであるので、Q(s, a) ≒ V(s) です。V(s)は行動選択に依存しない価値であるのでDueling-networkアーキテクチャではどのアクションaを選択してもQ(s, a)の近似性能が大きく改善します。一方、Q(s, a)を直接出力するDQNアーキテクチャではこのような明らかに絶望的な状態sでもすべての行動aを試さなければよい近似性能が得られません。
実装例
学習の安定性のために、アドバンテージA(s)は平均値でスケーリングしてからV(s)に足していることに注意してください。*4
Noisy Network(2017)
[1706.10295] Noisy Networks for Exploration
探索と活用のトレードオフのバランスをどうとるかは強化学習における最重要問題の一つです。オリジナルのDQNでは探索促進のためにε-Greedy法を採用しました。ε-Greedy法は行動の決定時にεの確率で完全にランダムなアクションを採用し、1-ε の確率で貪欲方策でアクション決定を行うというごく単純な方策です。
ε-Greedy法の問題は探索率εの適切な設定が難しいことです。学習の序盤では探索率εを高めにとる必要がありますし、ゲームに習熟してきたらεを低めにする必要があります*5。そこで、DQNでは最初の100万ステップで探索率εを1.0から0.1まで線形に減少させ、それ以降はε=0.1で固定するというアニーリング方式でεの値を調整します。
epsilon_scheduler = (lambda steps: max(1.0 - 0.9 * steps / 1000000, 0.1))
しかし、ε-Greedy方策では探索率εのアニーリングのスケジューリング関数がエージェントのパフォーマンスを大きく左右する重要なハイパーパラメータとなってしまうため大変扱いづらいです。この問題へのアプローチのひとつが Noisy networkであり、この手法ではε-Greedy法のようにアクション選択に直接確率的ノイズを乗せるのではなく、Q-netwrok自体がノイズを発生することによってアクション選択が確率的になるためε-Greedy方策を使わなくても探索が促進されます。
このようなNoisyなネットワークはDense層の重みwとバイアスbが毎回の推論ごとに正規分布からサンプリングされるようにすることで実現します。 すなわち、 であり、正規分布パラメータが学習すべきパラメータです。
ただし、本当に確率的サンプリングしてしまうと誤差逆伝搬できなくなるので実際は正規分布パラメータのμとσをtrainable parameterとし、標準正規分布ノイズを外から与えます。これは変分オートエンコーダなどでもおなじみのreparameterization trickですね。
Factorized Gaussian Noisy Network
パラメータに確率的摂動を与えるNoisyNetworkでは、推論するたびにDense層のパラメータと同じ数の正規分布ノイズをサンプリングしなければいけません。例えばDQNではconv層から抜けた直後のDense layer では入力ユニット数が約3000で出力ユニット数が512なので、wのパラメータ数 + bのパラメータ数 = 3000×512 + 512 ≒ 150万 になります。致命的なほどではありませんがちょっと嫌ですね。
そこでNoisy-networkではFactorized Gaussian noise というトリックで、入力ユニット+出力ユニット数分の正規分布ノイズから疑似的にパラメータ数と同数の正規分布ノイズを生成することで計算量を減らす方法を提案しています。正直なところ tf.random.normal
を使えばこのトリック使わなくてもあんま処理速度変わらなくない?とは思いましたがせっかくなのでこの方法で実装します。
実装例
DQNのすべてのDense LayerをNoisyDense
に置き換えればNoisy-networkの実装完了です。