🎮 🧠 🤖

DQN をイチから理解する

Deep Q-Network ── ゲームを自力で攻略するAIの仕組み

🤔 DQN って何?(ひとことで)

🎮
ひとことで言うと
「ゲーム画面を見て、最も高スコアになる操作を自分で見つけ出すAI」のこと。
人間がルールを教えなくても、何万回も試行錯誤して「うまいプレイ」を自力で覚える。
ゲーム画面
(目で見る)
DQN
(脳で考える)
操作を決める
(手を動かす)
スコア獲得!
(ご褒美)

2013年にGoogleの子会社 DeepMind が発表。Atariのゲーム(ブロック崩しなど)を人間以上のレベルでプレイできるAIとして世界を驚かせた。

↑ Atari「ブロック崩し」のイメージ

📖 前提知識:強化学習ってなに?

DQNを理解するには、まず「強化学習」を知る必要がある。

🐶
たとえ話:犬のしつけ
犬に「お手」を教えるとき、
うまくできたら → おやつをあげる(報酬+)
失敗したら → おやつなし(報酬なし)
これを繰り返すと、犬は「こうすればおやつがもらえる」と学ぶ。
これが強化学習の基本!

強化学習のサイクル

🤖
エージェント
=プレイヤー(AI)
③ 行動する
──────→
(右に動く、ジャンプ等)
(スコア+10、ゲーム画面)
←──────
① 状態を見る + ② 報酬をもらう
🌍
環境
=ゲームの世界
このサイクルを何万回も繰り返して、「報酬が最大になる行動パターン」を見つける
3つの専門用語:
🤖 エージェント = 学習する主体(ゲームAI本体)
🌍 環境 = ゲームの世界(ルール、画面、スコア)
🎁 報酬 = ご褒美(スコアが増えた=+、ゲームオーバー=−)

📊 Step 1:Q学習 ── 「おトク度」を表にする

強化学習にはいろいろな方法があるけど、DQNの土台は「Q学習」という方法。

📋
Q学習のイメージ
「こういう状況で、こう動いたら、どれくらいおトクか?」
を全パターン表にまとめていく方法。
この「おトク度」を Q値(Q-value)と呼ぶ。

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値が最大の行動 を選べば、高スコアが取れる!
Q値とは:「この状況でこの行動をしたら、この先ずっと合計でどれくらい得するか」の予測値。
目先の報酬だけでなく、未来の報酬まで含めて計算する。

😱 Q学習の限界 ── 表が巨大すぎる問題

Q学習の考え方はシンプルだけど、現実のゲーム画面は「状況」の数が膨大すぎる

Atariゲームの場合

こんな巨大な表は作れない… 😭

💡
そこで!
「表を全部作る」のをやめて、
ニューラルネットワーク(NN)に「Q値を予測させる」ことにした。
全パターンを暗記する代わりに、「だいたいこうなりそう」と推測する能力を育てる。

これが DQN(Deep Q-Network)のアイデア!

🧠 DQNの全体像 ── 画面を見てQ値を予測

DQN = Deep(深層学習の) + Q-Network(Q値を出すネットワーク)

DQNのアーキテクチャ

直近4フレーム
入力
84×84×4
Conv層 ①
8×8, 32枚
Conv層 ②
4×4, 64枚
Conv層 ③
3×3, 64枚
CNN
画像の特徴を抽出
全結合層
512ニューロン
FC層
判断する
⬅ Q = 3.2
⏸ Q = 1.5
➡ Q = 8.7 ★
出力
各行動のQ値
処理の流れ:
1 ゲーム画面(直近4フレーム)をグレースケール84×84に縮小して入力
2 CNN(畳み込み層)が画像から「ボールの位置」「パドルの位置」などの特徴を自動で抽出
3 全結合層が特徴をもとに判断
4 各行動のQ値を出力 → Q値が最大の行動を実行
なぜ4フレーム?
1枚の画像だけだと「ボールがどっちに動いているか」がわからない。
連続する4枚を入力することで、動きの方向や速さがわかるようになる。
パラパラ漫画のように連続した画像を見せているイメージ。

🔄 どうやって学習するの?

最初のDQNは何もわからないので、デタラメに動く。でも何万回もプレイすると…

学習の1サイクル

1
ゲーム画面を見る
現在の状態(画面4枚)をDQNに入力
2
行動を選ぶ
Q値が最大の行動を選ぶ。ただし、最初のうちはあえてランダムな行動も混ぜる(探索
3
報酬をもらう
ブロックを壊した → +1点、ゲームオーバー → −1点
4
「正解のQ値」と「予測したQ値」を比べる
正解 = 実際にもらった報酬 + 次の状態で一番良いQ値
予測 = さっきDQNが出したQ値
このズレ(誤差)を小さくするようにNNの重みを更新 ← これが「学習」
5
繰り返す!
Step 1〜4 を何百万回も繰り返すと、Q値の予測がどんどん正確になっていく
🎯
たとえ話:テスト勉強
① 問題を解く → ② 答え合わせする → ③ 間違えたところを復習する
これを何百回もやると成績が上がるのと同じ!
DQNも「予測と正解のズレ」を毎回修正して賢くなっていく。

🎲 探索と活用のバランス(ε-greedy法)

Q値が最大の行動だけ選んでいると、「もっと良い方法」を見つけられないかもしれない。

🍜
たとえ話:ラーメン屋選び
いつも同じラーメン屋に行く(活用)のも良いけど、
たまに新しい店を試す(探索)と、もっと美味しい店が見つかるかも!
DQNも同じで、たまにランダムな行動を混ぜる

ε-greedy(イプシロン・グリーディ)法

学習初期は ε を大きく(たくさん探索)→ 学習が進むにつれて ε を小さく(活用メイン)

💡 DQNの工夫① Experience Replay(経験の再利用)

普通にゲームをプレイすると、連続する場面は似ている(ボールが少し動いただけ)。
似たデータばかりで学習すると、偏った知識しか身につかない

📓
たとえ話:テスト勉強ノート
テスト勉強で「最後に解いた問題」だけ覚えていても意味がない。
ノートに全問題をメモしておいて、ランダムに復習する方が効率的!
Experience Replayもこれと同じ考え方。

Experience Replayの仕組み

ゲームをプレイするたびに記録
画面A + 右に動いた + +1点 + 画面B
画面B + 左に動いた + 0点 + 画面C
画面C + 右に動いた + +1点 + 画面D
… 何万件もたまる …
保存
🗄️ Replay Buffer(経験の倉庫)
過去の経験を
最大100万件保存
ランダムに取り出し
ミニバッチ
ランダムに32件選んで
まとめて学習
なぜランダムに取り出すのか:
データの相関を壊す → 連続する似た場面ばかりで学習する偏りを防ぐ
1つの経験を何度も使える → データ効率が良い(1回のプレイを何度も復習)
過去のレアな経験も学習に使える → 珍しい状況も忘れない

💡 DQNの工夫② Target Network(ターゲットネットワーク)

学習中のDQNには「自分の予測」と「正解の目標」の両方を同じネットワークで計算するという問題がある。

🎪
たとえ話:動くゴールポスト
サッカーの練習を想像してみて。
シュートの練習をしたいのに、ゴールが毎回動いてしまうとしたら、うまく練習できない。
「目標(ゴール)を一定時間固定する」のがTarget Networkのアイデア。

2つのネットワーク

メインNN 🧠
── 1万ステップごとにコピー ──→
ターゲットNN 🎯
まとめ:メインNNは毎回更新されるが、ターゲットNNはたまにしか更新されない。
→ 「正解の目標」がコロコロ変わらなくなる → 学習が安定する

🏁 DQNの全体まとめ

DQN = Q学習 + CNN + 2つの工夫

Q学習
「おトク度」で行動選択
CNN
画像からQ値を予測
Experience Replay
経験を記録&ランダム復習
Target Network
目標を固定して安定化
G検定で問われるDQNのキーワード:

Deep Q-Network(Q学習+ディープラーニング)
DeepMind が2013年に発表(2015年にNature誌に掲載)
Atariゲームを人間以上のレベルでプレイ
Experience Replay(経験の再利用でデータの相関を壊す)
Target Network(目標を安定させるための固定ネットワーク)
ε-greedy法(探索と活用のバランス)
価値ベースの強化学習(Q値=行動の価値を推定)

🌿 DQNのあとに生まれた改良版

DQNは素晴らしいけど、まだ弱点があった。それぞれの弱点を解決するモデルが登場。

モデル DQNの弱点 どう直した? たとえ
Double
DQN
Q値を高く見積もりすぎる
(過大評価)
「行動を選ぶ役」と「評価する役」を別々のNNに分担 自分の答案を自分で採点すると甘くなる → 別の人に採点してもらう
Dueling
DQN
全ての状態で全行動の
Q値を正確に学ぶ必要
Q値を「この状態がそもそもどれくらい良いか(V)」と「この行動が他よりどれくらい良いか(A)」に分けて推定 テストの「基礎点」と「ボーナス点」を分けて考える
NoisyNet ε-greedy法の探索が
適当すぎる
NNの重みにノイズを加えて、探索を自動で賢くする ランダムに店を選ぶ代わりに、「いつもと少し違うルートを歩く」
Rainbow
DQN
上の改良を含む7つの技術を全部合体
「虹」のように7色=7技術
最強の幕の内弁当
覚え方:
DQN(基本)→ 個別改良が色々出た → Rainbow(全部入り)が最強
「虹(Rainbow)のように7つの技術を合わせた」のが名前の由来。

🧪 おまけ:DQNの学習の変化

ブロック崩しでのDQNの成長過程:

学習初期(〜100万フレーム)
😵

デタラメに動く。
ボールを追えない。
すぐゲームオーバー。

中期(〜1000万フレーム)
🤔

ボールを追い始める。
たまにブロックを壊せる。
まだ安定しない。

後期(〜5000万フレーム)
😎

壁の裏にボールを回す戦略を自力で発見!
人間を超えるスコア。
誰も教えていないのに。

DQNが世界を驚かせた理由:
人間が「こう動け」とプログラムしたわけではない。
ただゲーム画面とスコアだけを与えて、AIが自力で上達した
しかも人間が思いつかない「壁裏攻略法」まで自分で発見した。
→ AIが「自分で考えて工夫できる」ことを示した歴史的なモデル。