🏁 はじめに

前回の FrozenLake では、初めての強化学習に挑戦して、なんとかゴールにたどり着きました。
次の課題をChatGPTさんに相談したところ——

> 「それなら、CartPoleでDeep Q-Networkを勉強するのが良いです!」

とのお答え。

正直、「え? いきなりそんな高度なやつ?」とびっくりしました。
しかし、ChatGPTさんの自信たっぷりな様子に押されて、
もう一度、**Deep Q-Network(DQN)**への挑戦を決意しました。

もちろん、ChatGPTさんあっての挑戦です。



🧠 Deep Q-Network(DQN)ってなあに?

DQNとは、Q学習をニューラルネットワークで拡張したものです。
従来のQ学習は「状態×行動」の組み合わせが膨大になると扱えなくなります。

そこで登場するのがDQN。
ニューラルネットを使って、Q値(どの行動が良いかの指標)を近似的に学習します。

たとえば今回の CartPole(棒立てバランス)。
棒の角度・速度・位置など、状態はほぼ無限にあります。
それを一つずつ計測していたらとても追いつきません。

でも人間は、何度か繰り返すうちに「なんとなくコツをつかんで」自然とバランスを取れるようになりますよね?

これこそが、DQNの本質です。
ニューラルネットが「過去の経験から学び、次に何をすべきかを感覚的に判断する」——まさに人の学習のような仕組みなのです。

⚙️ 実際にCartPoleをやってみた

さて、理屈がわかったところで実践です。
ChatGPTさんに教えてもらったコードを使って、DQNでCartPoleを学習してみました。

最初は思ったように棒が立たず、何度も転倒。
「これほんとに学習してるの?」と不安になるほどでした。

ところが、数百エピソードを超えたあたりから急に安定して棒が立ち続けるように!
リワード(報酬)も右肩上がりに伸びていき、DQNの威力を体感しました。

📚️ 問題発生と対策

でも、やる度に結果がかなりブレます。これだとパラメーターを決めるのが厳しいです。

ChatGPTさんによると、僕のルールでは「うまく立っていたがちょっとだけ揺らいだ」ときにも急にマイナスになります。
これが、ばらつきの原因 となっているそうです。

ここを、ChatGPTさんに直してもらいました。

直してもらったコードがこちら↓

📂 学習コード:
📈 学習ログ(エピソードとリワード):



🎥 学習後の動作動画:
👉 動画はこちら


ばらつく事がかなり減りました。

🔍 DQNで気づいたこと

CartPoleを何度か実行してみて感じたのは、結果が毎回微妙に違うということ。
同じ設定でも、報酬の伸び方や収束の速さが変わります。

考えてみれば当然で、
DQNは**ランダム探索(ε-greedy法)**を取り入れているため、
最初の試行やサンプルの違いで結果が変わるのです。

僕の環境では、探索率(ε)を 0.995 でCartPoleの最大値リワード500が達成できました。
ただし「同じ値=同じ結果」にはならないのもDQNの面白いところです。

🧭 まとめ

今回の学びを一言でまとめると——

> 「DQNは“感覚をつかむAI”である」

ということです。

ニューラルネットが経験を通して最適な行動を覚えていく姿は、
人間が「やってみて覚える」過程そのもの。

そして、探索率の調整(ε) が学習の安定に大きく影響することも実感しました。
小さすぎると学ばない、大きすぎると収束しない。
この“さじ加減”こそ、強化学習の醍醐味ですね。

🚀 次回予告

次はさらに一歩進んで、MountainCar に挑戦します。
テーマは「報酬の先延ばし学習」。
谷底からどう登るのか——ChatGPTさんと一緒に探っていきます!