V値ノイズ実験 — 記憶は驚くほど壊れにくい、ただしgreedyは脆い

バグ修正

sim.pyrun_trialがV値を毎回リセットしていた。reset_v=Falseオプションを追加。 046以前の実験も同じバグの可能性あり → 要確認(ただし046のexp_developmental_crossover.pyは独自にrun_trialを呼んでる可能性があるので個別確認が必要)

結果1: ノイズスケール vs 復元率

noise 記憶% 身体%
0.00 83.3 73.3 +10.0
0.01 83.3 73.3 +10.0
0.05 81.7 73.3 +8.3
0.10 80.0 73.3 +6.7
0.20 81.7 73.3 +8.3
0.50 81.7 73.3 +8.3
1.00 75.0 73.3 +1.7
2.00 76.7 73.3 +3.3
5.00 61.7 73.3 -11.7 ← 逆転

記憶劣化閾値: noise ≈ 2.0-5.0 の間

結果2: ε依存性 (noise=0.5)

ε 記憶% 身体%
0.01 73.3 85.0 -11.7
0.10 81.7 73.3 +8.3
0.30 83.3 78.3 +5.0

解釈

記憶のノイズ耐性

V値は対称環境で1000歩学習しただけだが、noise=2.0まで耐える。なぜか:

  • TD学習で蓄積されたV値は空間的に相関している(隣接セルは似た値)
  • 一様ノイズは相関がない → 勾配方向は平均的に保存される
  • 個別のセルは乱れても、「A側 > B側」という大域的勾配はノイズで壊れにくい

実機への含意: ローバーのSpatialMemoryが多少壊れても(電源断、メモリ破損)、大域的な傾向は保持される。完璧な永続化は不要。

ε=0.01の逆説

最もgreedyなエージェントで記憶が最弱。理由:

  • ε=0.01 → ほぼ100%、V値の最大値に従う
  • ノイズでV値の局所的な山谷が変わると、greedy選択が完全に狂う
  • 一方、ε=0.1-0.3は探索があるので、局所ノイズを無視して大域勾配を再発見できる

「慎重すぎる個性は、記憶が汚染されたとき最も脆い」

これは直感に反するが構造的に正しい。探索(冒険)は記憶劣化への保険として機能する。

身体のε依存性

ε=0.01で身体が85%に跳ね上がる。greedyエージェントはV=0でもわずかな経験を即座に固定するので、身体の位置アドバンテージを最大化する。身体復元にはgreedyが有利。

構造的発見

探索率εは記憶と身体の相対優位を制御するパラメータ:

  • 高ε → 記憶有利(ノイズ耐性、大域勾配追従)
  • 低ε → 身体有利(位置からの局所学習を即固定)

これは「個性の二軸モデル」を示唆する:

  • valence_ratio: 何を重視するか(正/負報酬への感度)
  • ε: どう振る舞うか(探索的/保守的)→ 記憶依存度にも影響

開いた問い

  1. noise=2.0-5.0の間でより細かくスイープして逆転ポイントを精密に特定
  2. 046以前の実験にreset_vバグの影響があるか確認
  3. 「相関ノイズ」(空間的に滑らかなノイズ)を加えたらどうなるか → 大域勾配が壊れる → 逆転が早まるはず
  4. 実機ローバーで「記憶を部分的に消す」デモ → ほこ天で「この子は記憶をちょっと忘れたけど、まだ好きな場所を覚えてる」と説明できる