Deep Q-Network ── ゲームを自力で攻略するAIの仕組み
2013年にGoogleの子会社 DeepMind が発表。Atariのゲーム(ブロック崩しなど)を人間以上のレベルでプレイできるAIとして世界を驚かせた。
↑ Atari「ブロック崩し」のイメージ
DQNを理解するには、まず「強化学習」を知る必要がある。
強化学習にはいろいろな方法があるけど、DQNの土台は「Q学習」という方法。
各「状況」×「行動」の組み合わせに「おトク度」の点数が入っている
| 状況 \ 行動 | ⬅ 左に動く | ⏸ 動かない | ➡ 右に動く |
|---|---|---|---|
| 🏐 ボールが左上にある | Q = 8.5 ★最大 | Q = 3.2 | Q = 1.0 |
| 🏐 ボールが真上にある | Q = 2.1 | Q = 7.8 ★最大 | Q = 2.0 |
| 🏐 ボールが右上にある | Q = 0.5 | Q = 3.0 | Q = 9.1 ★最大 |
Q学習の考え方はシンプルだけど、現実のゲーム画面は「状況」の数が膨大すぎる。
210 × 160 ピクセル
各ピクセルに256色
25633,600 通り
← 宇宙の原子の数よりはるかに多い!
こんな巨大な表は作れない… 😭
DQN = Deep(深層学習の) + Q-Network(Q値を出すネットワーク)
最初のDQNは何もわからないので、デタラメに動く。でも何万回もプレイすると…
Q値が最大の行動だけ選んでいると、「もっと良い方法」を見つけられないかもしれない。
Q値が最大の行動を選ぶ
(活用:今知っている最善策)
ランダムな行動を選ぶ
(探索:新しい方法を試す)
学習初期は ε を大きく(たくさん探索)→ 学習が進むにつれて ε を小さく(活用メイン)
普通にゲームをプレイすると、連続する場面は似ている(ボールが少し動いただけ)。
似たデータばかりで学習すると、偏った知識しか身につかない。
学習中のDQNには「自分の予測」と「正解の目標」の両方を同じネットワークで計算するという問題がある。
行動を選ぶ&毎回更新される
「この状況ではどう動くべきか」を判断する本体。
学習のたびに重みが変わる(毎回成長)。
「正解」を計算する&たまにだけ更新
メインネットワークのコピー。
一定期間ごと(例:1万ステップごと)にメインからコピーして更新。
その間は固定 → 目標が安定する。
DQNは素晴らしいけど、まだ弱点があった。それぞれの弱点を解決するモデルが登場。
| モデル | DQNの弱点 | どう直した? | たとえ |
|---|---|---|---|
| Double DQN |
Q値を高く見積もりすぎる (過大評価) |
「行動を選ぶ役」と「評価する役」を別々のNNに分担 | 自分の答案を自分で採点すると甘くなる → 別の人に採点してもらう |
| Dueling DQN |
全ての状態で全行動の Q値を正確に学ぶ必要 |
Q値を「この状態がそもそもどれくらい良いか(V)」と「この行動が他よりどれくらい良いか(A)」に分けて推定 | テストの「基礎点」と「ボーナス点」を分けて考える |
| NoisyNet | ε-greedy法の探索が 適当すぎる |
NNの重みにノイズを加えて、探索を自動で賢くする | ランダムに店を選ぶ代わりに、「いつもと少し違うルートを歩く」 |
| Rainbow DQN |
— | 上の改良を含む7つの技術を全部合体! 「虹」のように7色=7技術 |
最強の幕の内弁当 |
ブロック崩しでのDQNの成長過程:
デタラメに動く。
ボールを追えない。
すぐゲームオーバー。
ボールを追い始める。
たまにブロックを壊せる。
まだ安定しない。
壁の裏にボールを回す戦略を自力で発見!
人間を超えるスコア。
誰も教えていないのに。