知的探求の世界 2025 最終発表

klis3年 鈴木史麿

内容

  1. MeltingPot → SocialJax
  2. cleanupゲームにおけるippo, mappo, svoそれぞれの学習結果について
  3. cleanupゲームの難易度緩和について
  4. 今後の展望・課題
  5. 知的探求の世界まとめ & 反省

1. MeltingPot → SocialJax

MeltingPot → SocialJax

MeltingPot (paper)

  • 観測が画像(RGB)

SocialJax (paper)

  • 観測が文字
  • 環境のパラメタをいじりやすい
  • JAXベースで早そう(15000step/sec)

→ 12月末ごろからSocialJaxを触り始める

2. cleanupゲームにおけるippo, mappo, svoそれぞれの学習結果について

家のネットが死んだためほとんどグラフが無いです……
cleanupゲームにおけるippo, mappo, svoそれぞれの学習結果について

cleanup

報酬のためには、個人はリンゴの収穫を優先しなければならない一方で、汚染されるとリンゴが育たなくなる川を(報酬なしで)掃除する必要があるという社会ジレンマを模したゲーム.

cleanupゲームにおけるippo, mappo, svoそれぞれの学習結果について

cleanupゲームに焦点を当てた理由

  • 報酬が自然発生しない(最初の数十ステップを除いて)
    • common_harvest, mashroom :「どうすれば既存の報酬を枯らさずに維持し続けることができるのか」
    • cleanup : 「どうすれば継続的に報酬を生み出せるのか」
  • 利得行列とエージェントのActionがそのままでは一致しない
    • common_harvest : ビーム == 相手を排除することで自分の利益を重視
    • cleanup : ビーム == 相手に当てる → 自分重視 / 川に当てる → 協調重視

→ SSDにおける協調行動の獲得のためには、他ゲームよりも複雑な方策の獲得が必要

cleanupゲームにおけるippo, mappo, svoそれぞれの学習結果について

検証動機

  1. IPPO
    • defalt
  2. MAPPO
    • cleanupゲームがあまりにも難しいため……
  3. SVO
    • cleanupゲームがあまりにも難しいため……
    • DTDEにて(何かしらの文脈で説明可能な)報酬形状の変更を取り入れることで何かしら変化があるのかを確かめるため
cleanupゲームにおけるippo, mappo, svoそれぞれの学習結果について

IPPO(Independent PPO)

  • 報酬はほとんど発生しない(0.000 ~ 0.005)
uv run scripts/train.py env=clean_up algorithm=ippo
2026-02-12 22:43:11 | INFO | update=25 | env_step=819200 | reward_mean=0.0001
2026-02-12 22:43:15 | INFO | update=26 | env_step=851968 | reward_mean=0.0000
2026-02-12 22:43:18 | INFO | update=27 | env_step=884736 | reward_mean=0.0000
2026-02-12 22:43:20 | INFO | update=28 | env_step=917504 | reward_mean=0.0000
2026-02-12 22:43:22 | INFO | update=29 | env_step=950272 | reward_mean=0.0005
2026-02-12 22:43:25 | INFO | update=30 | env_step=983040 | reward_mean=0.0001
  • ゲーム開始から川の汚染によりリンゴが育たなくなるまでの間に発生したリンゴのみが報酬となる
    → 報酬が共有されていない状態では「川を掃除するとリンゴが育つ(報酬が生まれる)」という関係を学習することが難しい.
cleanupゲームにおけるippo, mappo, svoそれぞれの学習結果について

IPPO demo

cleanupゲームにおけるippo, mappo, svoそれぞれの学習結果について

MAPPO(Multi-Agent PPO)

  • IPPOよりは報酬が発生する(0.01 ~ 0.5)
uv run scripts/train.py env=clean_up algorithm=mappo
2026-02-08 01:52:56 | INFO | update=22 | env_step=90112 | reward_mean=0.0000
2026-02-08 01:52:57 | INFO | update=23 | env_step=94208 | reward_mean=0.0000
2026-02-08 01:52:57 | INFO | update=24 | env_step=98304 | reward_mean=0.0002

2026-02-08 02:58:28 | INFO | update=6613 | env_step=27086848 | reward_mean=0.2192
2026-02-08 02:58:29 | INFO | update=6614 | env_step=27090944 | reward_mean=0.3245
2026-02-08 02:58:29 | INFO | update=6615 | env_step=27095040 | reward_mean=0.1199
  • 川を掃除する個体とリンゴ畑で収穫を待つ個体、中間エリアで呆然とする個体、全てに同じ報酬が与えられる
    → フリーライダー問題(Free-rider)/怠慢なエージェント問題(Lazy Agent Problem)/負の影響回避(Negative Impact Avoidance)
  • 社会ジレンマを扱っていると言えるのだろうか?
cleanupゲームにおけるippo, mappo, svoそれぞれの学習結果について

MAPPO demo

cleanupゲームにおけるippo, mappo, svoそれぞれの学習結果について

SVO(Social Value Orientation)

SVOにおけるエージェントの報酬 :
が大きいほどエージェント が受け取る報酬における他者依存の割合が大きくなる

  • 報酬角の設定によってはMAPPOよりも報酬が発生する(0.000 ~ 1.500)
uv run scripts/train.py env=clean_up algorithm=svo algorithm.SVO_ANGLE_DEGREES="[45,45,45,60,60,75,75]"

SVO reward demo

  • 報酬角によって他者の報酬が流入するため、擬似報酬共有状態になる
  • エージェントの振る舞いが報酬角によって分化する
  • 社会ジレンマを扱っていると言えるのだろうか?
cleanupゲームにおけるippo, mappo, svoそれぞれの学習結果について

川掃除エキスパート誕生

SVO clean water demo

cleanupゲームにおけるippo, mappo, svoそれぞれの学習結果について

SVO demo

3. cleanupゲームの難易度緩和について

検証動機

cleanupのdefault設定の難度が高いことがネックになっているのではないか?

  1. dirtSpawnProbability(汚れの発生確率)
  2. thresholdDepletion(リンゴが育たなくなる川の汚染度の閾値)
  3. map_ASCII(マップ形状の変更)
cleanupゲームの難易度緩和について

clean_up.yaml(一部省略)

env_kwargs:
  num_agents: 7
  shared_rewards: false
  maxAppleGrowthRate: 0.05
  thresholdDepletion: 0.4
  thresholdRestoration: 0.0
  dirtSpawnProbability: 0.5
  delayStartOfDirtSpawning: 0
  observe_others_rewards: false
  map_ASCII:
    - "HFFFHFFHFHFHFHFHFHFHHFHFFFHF"
    - "HFHFHFFHFHFHFHFHFHFHHFHFFFHF"
    - "HFFHFFHHFHFHFHFHFHFHHFHFFFHF"
    - "HFHFHFFHFHFHFHFHFHFHHFHFFFHF"
    - "HFFFFFFHFHFHFHFHFHFHHFHFFFHF"
    - "==============+~FHHHHHHf===="
    - "   P    P  P   ===+~SSf     "
    - "     P     P   P  <~Sf  P   "
    - "             P   P<~S>      "
    - "   P    P         <~S>   P  "
    - "               P  <~S>P     "
    - "     P           P<~S>      "
    - "           P      <~S> P    "
    - "  P   P   P     P <~S>      "
    - "^T^T^T^T^T^T^T^T^T;~S,^T^T^T"
    - "BBBBBBBBBBBBBBBBBBBssBBBBBBB"
    - "BBBBBBBBBBBBBBBBBBBBBBBBBBBB"
    - "BBBBBBBBBBBBBBBBBBBBBBBBBBBB"
    - "BBBBBBBBBBBBBBBBBBBBBBBBBBBB"
cleanupゲームの難易度緩和について

dirtSpawnProbability(汚れの発生確率)

  • 変化量 : 結果としてほとんど変わらなかった
2026-02-13 05:18:59 | INFO | update=238 | env_step=7798784 | reward_mean=0.0002
2026-02-13 05:19:02 | INFO | update=239 | env_step=7831552 | reward_mean=0.0000
2026-02-13 05:19:05 | INFO | update=240 | env_step=7864320 | reward_mean=0.0000
2026-02-13 05:19:07 | INFO | update=241 | env_step=7897088 | reward_mean=0.0000
2026-02-13 05:19:10 | INFO | update=242 | env_step=7929856 | reward_mean=0.0015
2026-02-13 05:19:13 | INFO | update=243 | env_step=7962624 | reward_mean=0.0017
cleanupゲームの難易度緩和について

thresholdDepletion(リンゴが育たなくなる川の汚染度の閾値)

  • 通常よりも少し報酬が上がる(0.01 ~ 0.07)
2026-02-13 05:38:37 | INFO | update=301 | env_step=9863168 | reward_mean=0.0658
2026-02-13 05:38:39 | INFO | update=302 | env_step=9895936 | reward_mean=0.0674
2026-02-13 05:38:42 | INFO | update=303 | env_step=9928704 | reward_mean=0.0681
2026-02-13 05:38:45 | INFO | update=304 | env_step=9961472 | reward_mean=0.0704
2026-02-13 05:38:47 | INFO | update=305 | env_step=9994240 | reward_mean=0.0667
cleanupゲームの難易度緩和について

map_ASCII(マップ形状の変更)

  • 通常よりも少し報酬が上がる(0.01 ~ 0.4)
2026-02-13 00:35:53 | INFO | update=1 | env_step=32768 | reward_mean=0.0421
2026-02-13 00:35:56 | INFO | update=2 | env_step=65536 | reward_mean=0.0002
2026-02-13 00:35:58 | INFO | update=3 | env_step=98304 | reward_mean=0.0000

2026-02-13 00:46:58 | INFO | update=280 | env_step=9175040 | reward_mean=0.4254
2026-02-13 00:47:00 | INFO | update=281 | env_step=9207808 | reward_mean=0.4485
2026-02-13 00:47:02 | INFO | update=282 | env_step=9240576 | reward_mean=0.3858
cleanupゲームの難易度緩和について
uv run scripts/train.py env=clean_up algorithm=ippo env.env_kwargs.dirtSpawnProbability=0.25

cleanupゲームの難易度緩和について
uv run scripts/train.py env=clean_up algorithm=ippo env.env_kwargs.dirtSpawnProbability=0.25

cleanupゲームの難易度緩和について

難易度緩和による効果

  1. dirtSpawnProbability(汚れの発生確率)

  2. thresholdDepletion(リンゴが育たなくなる川の汚染度の閾値)

    → 学習によって報酬量がほとんど変動しない
    → 初期の数十ステップで得られるリンゴの量が増加しているだけ
    → (rndも同じような結果)

  3. map_ASCII(マップ形状の変更)

    → 川とリンゴ畑を近づけることでエージェントが報酬発生の因果を学習
    → 非定常性の緩和(そのためobs_sizeを下げると報酬も下がる)
    → (カリキュラム学習には使えるかも?)

4. 今後の展望・課題

  • 完全な分散訓練・分散実行は(defaultの設定だと)限界がある
    • そもそも他者との関係を考慮するフェーズに辿り着かない
    • SSDという問題設定を維持することも難しい
  • rndに倣うと純粋な内発的報酬にも限界がありそう
  • マップ形状を定期的に変化させながら学習
    • 安定しなさそう
  • 自身の理解度・能力的に実装できなかったペア選択やハイパラ探索、LOLAの可能性を探る
  • cleanupにおいては計算資源の問題もある
    • GPUのVRAMが設定によっては不足する
      • 問題のスケールを柔軟にすると良いかも?(マップ形状、エージェント数)

5. 知的探求の世界まとめ & 反省

  1. MARLやその具体的な問題設定であるSSDや協調課題などについて、それらの概観を学ぶことができた
  2. MLの様々な要素(ハイパラ, エンコーダ, 実験方法など)について実装を元に学ぶことができた
    • torch, jax, tensorboard, wandb, hydra-core……
  3. しかし、(少なくとも自分が行えたことは) 既存の研究の確認・再現に留まってしまった
  4. スケジュール管理や自分の実装能力、(ネットワーク環境) など至らぬ点が多かった