■ はじめに
前回、ロジックエージェントの実装が終わり、今回からようやく学習に入ります。
今回の課題をそのまま強化学習でやると、学習すればするほど、乱暴者になり道に跳び出したり、信号無視したりするのでボツにしました。
ですので、先ずはエージェントの動きを真似する模倣学習をする事にします。
実は模倣学習については、「そう言う物がある」程度の知識を本で読んだ程度なので、ChatGPTさんだけが頼りです。
■ 「学習沼」をガサる
今までの経験上、このまま突っ込んだら沼一直線なのは、目に見えているので、先ずはこのコードで出てきたバグをまとめます。
①学習するほど乱暴になるエージェント
AI「宅配なんて速くてナンボでしよう」
反省「時間経過の罰を入れたので、早いほど良いと考えたか…」
②受でずっとルートの探索をしている
AI「配送?そんないつやるかも書かれてないこと、知らんよ」
反省「ルート検索は、エピソードのはじめだけと言っておくの忘れた」
③北に動いて道にぶつかって止まる
AI「取り敢えず上に動いておけば、大体正解。道は進入不可だから止まって正解」
反省「配達順番で変わるけど…」
④信号マークに引っかかって止まる
AI「なんか知らんものがあるから止まっとけ」
反省「それ、信号なんですけど…」
なんか、まとめ直すとこれは駄目かな。という気になってきます。
気を取り直して、仕様でバグがでない様にします。
流石に、これまで何回も触っているのでエラーは無い…が仕様から作ったコードにマップが無い。
不審に思ってChatGPTさんに理由を聞いてみると…
>「マップを入れて学習すると、例えばAに行く学習が『北に上がるのがだいたい良いはず』とエージェントに変なクセがつくんよ。マップは切離して学習するのかオススメ」
確かに似たことになった経験はあるね。
ここいらでマップなし教師データにトライしてみますか!
■教師データとは、
教師データと難しげな呼び方をしていますが、その「正体」は、
教師データの1サンプル = {
obs : 観測ベクトル
action : ロジックが選んだ行動
}
これを 大量に集めて教師データとします。
ここで、obs 側は、
・自己位置(row, col)
・向き
・A* 次方向
・信号色
・人配置(5×5)
・配送フェーズ
・is_delivering
これらは、delivery_logic.pyに入ってます。
action 側(教師)は、ロジックの最終出力なので、この課題ではコチラです。
action ∈ {
0: 前進
1: 左回転
2: 右回転
3: 停止
}
このエージェントの動きと適正な確率をChatGPTさんに出してもらって、そこに向けてコードを調整します。
目 標 調 整
FORWARD 55〜60% 56.8%
TURN_LEFT 8〜12% 12.4%
TURN_RIGHT 8〜12% 11.8%
STOP 15〜20% 19.0%
調整はこうしました。
①人出現率を下げる
Forward が増える。
TURN_LEFT,TURN_RIGHTが減る。
②赤信号を少し減らす
STOP が落ちる。
③ A* Forward を増やす
Forward が増える。
今の設計は、こうなります。
ハイブリッド型(現実ロボ型)
・A*は意思決定
A*は静的障害物のみ
回避後に再A*
・NNは反射神経
NNがローカル回避
この動きはロジックエージェントと同じになります。
■結果:
学習を含めた仕様書へのリンク
github.com/logicmaker256-prog/Imitation_Learning-/blob/main/new_doc_2.txt
学習のコードへのリンク【CNN5×5バージョン】
・学習データの収集
github.com/logicmaker256-prog/Imitation_Learning-/blob/main/Gather_training_data.py
・学習本体
github.com/logicmaker256-prog/Imitation_Learning-/blob/main/Learn_from_training_data.py
・動作チェックコード
github.com/logicmaker256-prog/Imitation_Learning-/blob/main/Imitation_learning_verification.py
学習データの収集と学習本体では、鋭く学習の精度が立ち上がるところが見られます。
チェックコードでは、人を回避して無事にゴールする所が見られます。
■ 今回の学び:
今回の学びは、
「マップ込みの学習では、マップ依存の学習になってしまう」
ですね。
自分もはじめマップありでやっていたのですが、沼の気配がビンビンしたので、マップなしでやってみました。
今のところ、上手くいっているみたいなのでこれで進みます。
■まとめ
何となく、「模倣学習」とか言っていたのですが、やって見ると想像していたのとは大分違ったようで、やり方から勉強し直しですな。
設計要件は僕が決めてますけど、ChatGPTさんありきでないと、進めない領域に入ったようです。
やっぱり、AI活用は大事ですよね。
今回、なんとか教師データを作ることに成功したので、次回はこれの活用ですかね。
