■ はじめに

前回は MiniGrid(ドアあり鍵あり)をなんとかクリアできました。
しかし、最後は、運で当たりを引いた感じで解いた感がありません。

原因は、CNNです。
イマイチよくわかりません。
別の課題で、もう少しCNNをやってみようと思いました。

ATARIのBreakoutを、CNNデータ(画像)で学習する方法があるらしいです。

これが、復習に良いのと思ったのですが
ChatGPT さんからストップが掛かりました。

曰く「Breakoutはレベル高いから復習には向かん。Cartpoleにしとき!」

とのこと、でもCartpoleは初めにやったしな。
あれをもう一度やっても復習になるとは思えんな…

「PixelデータでやるとCNNの復習になる。悪いこと言わんから、これにしとき!」

ChatGPTさんが、そこまで言うならやってみよう!
今回は、「Cartpole再び、画像データで学習!」という感じで復習します!


■ まず最初の壁:CNNの罠

いや〜今回も良くエラーにハマりました。

「環境から返ってきた画像が 400×600 なのに、84×84 の箱に無理やり入れようとして失敗した」

「学習用 env と評価用 env か同じ wrapper 構成になってない」

「SB3 公式で、動画とラッパは分離を推奨しているにも関わらず、何故か分離を忘れる」

等など、CNN周りのフルコースを食らいましたね。CNN以外は経験済みでよかった。

ChatGPTさん疑ってごめんよ。

■なんとかVer1.0出来ましたが…

CNNに振り回されながら、何とかできたVer1.0!
だけど200K学習しても、あんまり保持できない。

どこか悪いところがあるかな?

Ver1.0のコードはコチラ→GitHubにリンク
動画はこれ



ChatGPTさんに聞くと、CNN化して学習がむづかしくなるのは、むしろ当たり前だそうです。
あと僕のコードでは、棒の角速度・台車の速度を知ることができないから、フレーム・スタックを4つ積めというものでした。

■何で、4つなんでしょう?

速度を知りたければ2フレームで良いのでは?
不思議に思って、ChatGPTさんに聞いてみます。

ChatGPTさん回答抜粋:

⚫CNN関係理由:
CNNは本質的に、空間パターンは得意だけど、時間差分は苦手だから

2フレームだけだと、
ノイズ、1pxのズレ、レンダリング誤差
に 極端に弱い。

4フレームあると、
過去 ← [ fₜ₋₃, fₜ₋₂, fₜ₋₁, fₜ ] → 現在

→ 「傾き」「加速傾向」を空間パターンとして捉えられる

とのことで、これが重要だそうです。

⚫見え方の問題:

符号(±方向)が安定する

2フレームだと、
・右に倒れ始めたのか
・左に戻ってきている途中なのか
が 分かりづらい。

4フレームだと、

・倒れ始め
・加速中
・減速中
がはっきりわかる。

👉 制御が「ビクビク」しなくなります。

こっちの方がわかりやすいね。

■4フレーム・スタック版

コードはコチラ→Githubにリンク
学習結果の動画はコチラ



200Kの平均リワードの結果は、

20→ 30 → 40 → 50 → 80 → 120 → 200
     ↓      ↓
   2フレーム   4フレーム

2フレームの学習


4フレームの学習



4フレームに軍配が上がってます。(と言っても、数値Cartpoleに負けます)
PixelCartPole は、数値CartPole に負けるのか?
それは、角度・角速度などをピクセルから、CNNで自力で抽出しているためです。

だから
> 「負けて当然」で今回の結果が正しい。

■ 結果:

CartpoleをCNN使って画像から解いてみました。CNN絡みのエラーを乗り越え、更に、速度の算出方法として、
4フレーム・スタック
という方法を学びました。

■ 今回の学び

今回CNNを復習する為に、Cartpoleを画像から解くという縛りゲーをしました。

Cartpoleて強化学習を勉強したてで、先ず初めにトライする課題じゃないですか?
それにこんな形でやる事になるとは、思ってもいませんでした。

強化学習には、まだまだ知らない扉がありそうですね。

■ まとめ

今回は PixelCartpoleと称して、Cartpoleを画像データだけで解く方法に挑戦してみました。
ChatGPTさんの力を借りてなんとかクリアしましたが、数値版Cartpoleに学習上は負けます。

あくまで、CNNの勉強と割り切ります。

さて、MiniGridへの逆襲ですが、ちょっと思い付いた事があって…

「これって、Slam使えば一撃なのでは?」

ChatGPT さんには、

「うん。それはもうMiniGridじゃないね」

と言われたけど、面白そうだからまあいいか。