深層学習

DQN

ニューラルネットで行動価値関数を近似するQ学習に、経験再生と固定ターゲットネットワークを組み合わせて学習を安定させる構成。

  • A|中核
  • 深層学習

数式の記号で止まったら 記号の読み方 (∂・⊙・転置・上付き添字を、読み方から)

ひとことで言うと

DQN(Deep Q-Network)は、状態と行動の組に対する行動価値 Q(s,a)Q(s,a) をニューラルネットで近似し、Q学習の更新を深層学習の勾配更新で実行する構成です。ネットワークへの入力は状態 ss、出力は各行動の価値で、最大の出力を選べば貪欲な行動になります。

ゲーム画面を見て「このボタンを押すと、この先どれくらい得をするか」を行動ごとに採点する担当者を、画像から採点できる関数に置き換えたものです。ただし採点結果をすぐ次の採点基準に使うと基準が揺れるため、過去のプレイ記録と、少し前の採点器を併用します。

なぜ必要か

表形式のQ学習なら、状態 ss と行動 aa の組ごとに値を持てます。しかし画像のように状態空間が大きいと、状態を一つずつ表に登録する方法は使えません。DQNは畳み込みニューラルネットを関数近似器にして、画素から特徴を抽出しながら、見たことのない状態にも価値を一般化します。原論文の初期構成は、生の画素を入力し、各行動の価値を出力するCNNです。

ここでQ学習へそのままニューラルネットを持ち込むと、二つの問題が出ます。

壊れる理由何が起きるかDQNの手当
サンプルの相関連続した時刻の遷移は似ており、ミニバッチが同じ局面に偏る経験再生で過去の遷移からランダムサンプル
方策と教師の同時変化重みを更新すると行動選択もQ学習のターゲットも変わる固定ターゲットネットワークを一定期間使う

経験再生は遷移をメモリに保存し、そこからランダムに取り出します。これで隣接時刻の相関を弱め、過去の行動からも繰り返し学習できます。固定ターゲットは、更新するオンラインネットワークとは別のネットワークで教師値を計算し、その重みをしばらく固定します。どちらも「ニューラルネットを大きくすれば解決する」種類の問題ではありません。

仕組み

状態 ss、行動 aa、報酬 rr、次状態 s′s'、割引率 γ\gamma、オンラインネットワークの重み θ\theta を使います。ネットワークは Q(s,a;θ)Q(s,a;\theta) を出力し、経験再生から遷移 (s,a,r,s′)(s,a,r,s') のミニバッチを選びます。終端でない場合のターゲットは、固定したターゲットネットワークの重み θ−\theta^{-} で次状態の最大価値を評価して作ります。

y=r+γmax⁡a′Q(s′,a′;θ−)y = r + \gamma \max_{a'} Q(s',a';\theta^{-})

a′a' は次状態で候補となる行動、yy は教師値、θ−\theta^{-} は固定期間中に変えない重みです。終端状態なら将来報酬はないので、ターゲットは y=ry=r とします。オンライン側の予測 Q(s,a;θ)Q(s,a;\theta) とターゲットの差を損失にし、θ\theta だけを更新します。

L(θ)=E(s,a,r,s′)∼D[(y−Q(s,a;θ))2]L(\theta)=\mathbb{E}_{(s,a,r,s')\sim D}\left[(y-Q(s,a;\theta))^2\right]

DD は経験再生メモリから作る遷移の分布です。重要なのは、ターゲット計算に使う θ−\theta^{-} を勾配更新の対象に含めないことです。一定回数ごとに θ−←θ\theta^{-}\leftarrow\theta とコピーし、教師側の変化を段階的にします。

行動選択は通常、常に最大値を選ぶのではなく ε-greedy にします。

a={arg⁡max⁡a′Q(s,a′;θ)確率 1−εランダムな行動確率 εa=\begin{cases}\arg\max_{a'}Q(s,a';\theta)&\text{確率 }1-\varepsilon\\\text{ランダムな行動}&\text{確率 }\varepsilon\end{cases}

ε\varepsilon は探索の確率です。学習中は未知の行動を試すためにランダム選択を残し、評価時には貪欲選択に寄せます。なお、Q学習は実際に従う探索方策とは別に、最大価値を取る方策を学ぶオフ方策の更新です。

画面入力では、画像をそのまま全結合層へ渡すのではなく、畳み込み層で局所的な視覚特徴を抽出し、最後の層で行動数個のQ値へ変換します。出力は「行動の確率」ではなく「各行動を選んだときの将来報酬の推定値」です。方策勾配系は、ここで扱う価値ベースの構成とは別系統です。

試験でどう問われるか

問われ方正解に寄る条件引っかけ
DQNの出力状態から各離散行動のQ値を出すsoftmaxで行動確率だけを出す
経験再生の目的相関した連続遷移をランダム化し、過去サンプルを再利用するターゲット値を固定する仕組みとする
固定ターゲットの目的別ネットワークの重みを一定期間固定して教師の揺れを抑える探索のために行動をランダム化する仕組みとする
ε-greedy最大Q値を確率 1−ε1-\varepsilon、ランダム行動を確率 ε\varepsilon で選ぶ常に最大Q値だけを選ぶ
画像入力の構成生の画素をCNNへ入力し、行動ごとの価値を出力する画像を人手で特徴量へ変換する前提にする

実装で確かめる

次の最小例は、経験再生からバッチを取り出し、固定ターゲットでTDターゲットを作る部分です。ネットワーク自体は省き、配列の対応を確認します。

import numpy as np

rng = np.random.default_rng(0)
states = rng.normal(size=(6, 4))
actions = np.array([0, 1, 0, 1, 1, 0])
rewards = np.array([1., 0., -1., 2., 0., 1.])
next_states = rng.normal(size=(6, 4))
done = np.array([0, 0, 1, 0, 1, 0], dtype=bool)
idx = rng.choice(len(states), size=3, replace=False)
q_online = rng.normal(size=(3, 2))
q_target = rng.normal(size=(3, 2))
gamma = 0.99
y = rewards[idx] + gamma * (~done[idx]) * q_target.max(axis=1)
prediction = q_online[np.arange(3), actions[idx]]
print("batch", states[idx].shape, "target", np.round(y, 3), "prediction", np.round(prediction, 3))

このコードで states と next_states は同じ遷移の組として保持され、q_online からは実際に選んだ行動の値だけを取り出します。ターゲットは q_target の最大値を使い、done が真の遷移では割引された将来価値を足していません。実装でネットワークを分けるときも、この役割の分離が崩れていないかを確認します。

取り違えやすいもの

用語DQNとの切り分け
表形式Q学習Q値を表に保持する。DQNはニューラルネットで状態からQ値を近似する
経験再生遷移を保存してサンプル相関を弱める仕組み。ネットワークではない
固定ターゲットネットワークTDターゲットを作る重みを固定する仕組み。探索そのものではない
ε-greedy行動を選ぶ探索方策。Q値の教師を安定させる機構ではない
方策勾配法方策を直接パラメータ化して更新する系統。DQNの価値出力とは目的が違う
Double DQN最大行動の選択と評価を分ける派生手法。ここでの基本DQNの固定ターゲットとは別の論点

想起チェック

ニューラルネットでQ学習を行うとき、連続サンプルが問題になる理由は

隣接時刻の状態・行動が似ているため、ミニバッチのサンプルが強く相関します。経験再生は過去の遷移からランダムに取り出して、この相関を弱めます。

固定ターゲットネットワークは何を固定するか

ターゲット yy を計算するネットワークの重み θ−\theta^{-} を一定期間固定します。更新するオンラインネットワークの重み θ\theta と同時には動かしません。

ε-greedyで確率εのときに行うことは

ランダムな行動を選びます。確率 1−ε1-\varepsilon では、Q値が最大の行動を選びます。

DQNの画像入力で、ネットワークの出力は何か

行動ごとのQ値です。行動確率ではなく、その行動から得られる将来報酬の推定値を出力します。

出典