0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

行動提案モデルをゼロから作る:batch1 → class-weight までの実験ログ

Posted at

行動提案モデルをゼロから作る:batch1 → class-weight までの実験ログ

この記事は、以下のQiita記事の続編です。

本稿では、そこから先の

  • state → action(行動)を提案するモデル
  • ゼロから作り
  • batch1 → batch3 までデータを増やしながら
  • 偏り・リーク・評価設計の問題にぶつかり
  • class-weight まで導入して改善する

という一連の 実験ログ をまとめます。


目的の再整理

最終的にやりたいことはシンプルです。

ゲームのプレイ動画を入力すると、
「今この状態なら、次に出す行動候補はこれ」という
行動提案(Top-k) を返したい

そのために、以下の2段階モデルを採用しています。

  1. state 抽出モデル

    • 動画 → 入力状態状態(one-hot)
  2. 行動提案モデル(本記事の主役)

    • state → action(クラス分類)

この記事では ②のみ を扱います。


データ定義(最初はこれだけ)

v1: 最小構成

{
  "in_hand_state": [0,1,0,1,1,0,0,0],
  "role": 4
}
  • in_hand_state : 入力状態8枚の one-hot
  • role : 実際に出した行動(0–7のクラス)

まずは「入力状態だけ見て、何を出したか当てる 」という
一番単純な問題設定から始めました。


batch1:とにかく動かす

データ

  • batch1 = 数試合分の動画
  • 数十サンプル規模

結果

  • 学習は動く
  • ただし
全部、同じ行動を出すモデル

原因

  • データ数が少ない
  • クラス分布が極端

👉 まずはデータを増やす必要がある


batch2:データを増やすと見える問題

データ

  • batch2 = 約5試合
  • 約200サンプル

評価

  • Top-1 accuracy: 約0.33
  • Top-3 accuracy: 約0.65

一見それっぽいが、
confusion matrix を見ると…

  • 特定クラスに極端に偏る

👉 「当てに行っているというより、逃げている


prev_action を入れる(v2)

発想

人間は、

  • 直前に何を出したか

を前提に次の行動を決めます。

v2 feature

{
  "in_hand_state": [...],
  "prev_action_onehot": [...],
  "role": 4
}

結果

  • Top-1: 微増
  • Top-3: 改善

👉 文脈は効くが、まだ弱い


batch3:新規動画で汎化を確認

方針

  • batch1,2 とは完全に別の試合を録画
  • 18試合 / 513サンプル

評価(batch2学習モデル)

  • Top-1: 0.25
  • Top-3: 0.55

baseline 比較

モデル Top-1 Top-3
mostfreq 0.19 0.39
random 0.10 0.33
提案モデル 0.25 0.55

👉 学習はしているが、まだ弱い


問題の正体:クラス不均衡

実際の分布(例)

[98, 55, 51, 89, 31, 74, 48, 67]
  • よく使う行動
  • ほとんど使わない行動

が混在。

👉 通常の CrossEntropy では

「当たりやすい行動だけ出す」

モデルになる。


class-weight の導入

方針

  • train split の分布から重みを算出
  • rare class を重く、frequent class を軽く
python -m scripts.train_proposal_model \
  --class-weight balanced

効果

  • Top-1: 0.45
  • Top-3: 0.70
  • macro F1 が大きく改善

confusion matrix を見ると

  • 以前は出なかったクラスも
  • きちんと予測されるようになった

👉 「それっぽい提案」になった


学んだこと

  • 精度より先に 評価設計 が重要
  • データリーク・分布偏りはすぐ起きる
  • Top-k 評価は「提案」には必須
  • class-weight は最後の一押しとして効く

次にやること

  • group split + holdout(動画単位評価)
  • batch4 を完全テストとして固定
  • state の表現をもう一段リッチにする

まとめ

このプロジェクトは

強いモデルを作る話

というより

どうやって「ちゃんとした実験」に育てるか

の記録です。

同じように

  • 行動ログを学習したい人
  • ゲームAIを作りたい人

の参考になれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?