■ はじめに
前回、マップ依存を外してロジックエージェントの動きから教師データを作り、模倣学習に挑戦しました。せっかくなので、次はマップの自動生成にも挑戦中です。
ところが――
仕様書をチェックしてもらうと、
マップよりも「学習の書き方」の指摘が多い。
どうやら私は、模倣学習と強化学習を混同していたようです。本を少しかじった程度の知識だと、こういうことが起きますね…。
というわけで今回は、ChatGPTさんに教えてもらった強化学習と模倣学習のちがいについてまとめてみます。
■ いまのコードの学習モード
現在は2つの学習をしています。
①「受」で荷物の重さから配送順を決める
② A*の動きをまねる
②は明らかに「まねをする」学習なので、模倣学習のつもりでした。
でも仕様書の書き方が、どうやら強化学習っぽくなっていたみたいです。
■ どこが紛らわしかったのか?
ChatGPTさんに指摘されたのはここでした。
紛らわしポイント①
仕様書に「Reward(報酬)」と書いていた。
この言葉で、一気に強化学習っぽくなります。
紛らわしポイント②
「予想が当たったら +1、ハズレたら -1」
と書いていた。
これ、完全に強化学習の考え方なんですよね
行動 → 点数をあげる → もっと良い行動を学ぶ
すごくシンプルに言うと、
🔵 強化学習
正解が分からない中で、
「やってみて点数をもらいながら」学ぶ
🟢 模倣学習
すでに正解があって、
「正解をまねして」学ぶ
という違いがあります
で、+1 / -1 という書き方は、
「良い・悪い」という結果だけを見ています。
模倣学習は、
「どれくらいズレているか」
という数値的な値を見ます。
そこで使うのが損失関数(loss)です。
難しそうですが、やっていることはシンプル。正解とどれくらい違うかを数字で表すもの
■ 模倣学習では、Reward ではなく loss を使う
Reward(報酬) → 結果に点数をつける考え方
loss(損失) → 正解との差を測る考え方
模倣学習では、
❌ reward = +1 / -1
ではなく
✅ loss を小さくする
と書くのが正しい考え方になります。
使い分けとしては、
正解データがある → loss を使う(模倣学習)
正解がなく、結果だけ分かる → reward を使う(強化学習)
まとめれば、なんてことは無いですが、私はここをごちゃ混ぜにしていました。
■ 今回の学び
今回の学びはシンプルです。
模倣学習をしたいなら、言葉も模倣学習の言葉で書こう。用語が違うだけで、 設計の考え方まで変わってしまいます。
特にAIに仕様を伝えるときは、 言葉の違いがとても重要だと実感しました。
■ まとめ
本当はマップ自動生成まで進みたかったのですが、
その前に「学習の考え方」でつまずいていました。
でも今のうちに整理できてよかったです。
次回こそ、マップの自動生成に進みたいと思います。
どんなマップが出てくるのか、今から楽しみです。
イラストにするとこんな感じ?

