🏁 はじめに
前回の 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さんと一緒に探っていきます!

