深層強化学習とDQN — Q表をニューラルネットに置き換える
Q学習は強力ですが、「表」で価値を覚えるやり方は状態が増えた瞬間に破綻します。表を関数(ニューラルネット)に置き換えるとき何が壊れるのか、DQN はそれを2つの工夫でどう抑えて Atari を攻略したのか — 動かしながら見ていきます。
1. Q表の限界 — 状態の数が爆発する
前章の Q学習は、「状態 × 行動」のマス目に Q値を書き込む表(テーブル)が主役でした。6×6 のグリッドワールドなら状態は 36 個。表は 36 行で済み、全マスを何度も訪ねて更新できます。
では、ゲーム画面のピクセルそのものを「状態」にしたら? 盤面や画面のように要素が組み合わさる世界では、状態数は掛け算で増えます。下のスライダーで課題の規模を変えて、Q表に必要な行数がどうなるか見てください。
2. 表から関数へ — Q(s, a; θ) という発想
表のもうひとつの弱点は、マスどうしが完全に独立なことです。「敵が1ピクセル右にいる画面」と「元の画面」は別の行になり、片方で学んだことがもう片方に一切伝わりません。ほぼ同じ状況なのに、経験がゼロから必要になります。
そこで発想を変えます。Q値を表から引くのではなく、状態を入力すると各行動の Q値を出力する関数で近似する。関数の正体は多層パーセプトロンなどのニューラルネットで、パラメータ θ を誤差逆伝播と勾配降下で調整します。
アイデア自体は単純です。ところが、Q学習の更新式にそのままニューラルネットを差し込むと、学習はあっさり発散します。理由は2つ。①エージェントの体験は時間的につながっていて、直前の経験ばかりの偏ったデータで学習してしまう。②Q学習の目標値 r + γ max Q(s′, a′) には自分自身の出力が入っており、ネットを1歩更新するたびに追いかける的も動いてしまう。
3. DQNの2つの工夫 — 経験再生とターゲットネットワーク
DQN(Deep Q-Network)はこの2つの問題に、それぞれ対策を当てました。
- 経験再生(Experience Replay) — 体験 (s, a, r, s′) をいったんリプレイバッファに貯め、学習時はランダムに取り出したミニバッチを使う。時間的な相関が壊れてデータが独立同分布(i.i.d.)に近づき、教師あり学習の前提に寄せられる。おまけに同じ経験を何度も再利用できる。
- ターゲットネットワーク — 目標値の計算には、パラメータを凍結したコピー θ− を使う。θ⁻ は C ステップごとに最新の θ を丸ごとコピーして更新。追いかける的が一定期間止まるので、回帰問題として安定する。
| 素朴なQ学習(表) | DQN | |
|---|---|---|
| Q の表現 | 表(1状態 = 1行) | ニューラルネット Q(s, a; θ) |
| 経験の使い方 | 1回使ってその場で捨てる | バッファに貯めてランダム再利用 |
| 更新の目標値 | 最新の Q をそのまま使う | 凍結した θ⁻ で計算(定期コピー) |
| 扱える状態空間 | 小さな離散空間のみ | 画素のような高次元入力もOK |
4. 方策の違いを目で見る — バランス課題
関数近似が本領を発揮するのが、連続値の状態です。定番のベンチマーク「CartPole(棒立てカート)」は、カートを左右に押して棒を立て続ける課題。状態は(位置 x, 速度 ẋ, 角度 θ, 角速度 θ̇)の4次元連続値なので、そもそも表が作れません。行動は「左に押す/右に押す」の2択です。
5. Atari の衝撃と、まとめ
- 状態爆発:現実の課題では状態数が桁違いに増え、Q表は作ることすら不可能になる。
- 関数近似:Q(s, a; θ) をニューラルネットで表せば、固定サイズのパラメータで全状態をカバーでき、似た状態へ汎化する。
- 死の三角形:関数近似+ブートストラップ+方策オフの組み合わせは発散し得る。
- DQNの2つの工夫:経験再生がデータの相関を壊し、ターゲットネットワークが動く目標を止める。
- ここまでは「価値を学んで、行動はそこから導く」路線。次章では方策そのものを直接学習する、もうひとつの大きな路線に進みます。