mjx icon indicating copy to clipboard operation
mjx copied to clipboard

Suphx-style reward shaping

Open sotetsuk opened this issue 3 years ago • 7 comments

エピソードのデフォルトの定義をどうするかがまだ決まってないが(今は選択可)、半荘を1エピソードとするのは流石に無意味なので、1局毎にエピソードとする。 このとき、報酬をどう決めるかが問題になるので、suphx-likeなreward-shapingをする。

GRUが意味がないので、単純に今の点棒状況から回帰する。

  • [x] 特徴量を調べる @nissymori
  • [x] 少量データでデータ作成をしてみる
  • [x] 少量データで回帰を学習してみる
  • [x] 学習したモデルをnumpyへ吐き出せるか確認
  • [x] データを増やして学習、モデルをコミット
  • [ ] モデルを報酬に組み込む
  • [ ] この挙動をデフォルトにする

sotetsuk avatar Aug 24 '22 04:08 sotetsuk

workspace/suphx-reward-shaping の下で作業 @nissymori

sotetsuk avatar Aug 25 '22 03:08 sotetsuk

特徴量 suphnx論文より

  • 持ち点
  • 上がり点/失点
  • 本場
  • 詰み棒

suphnxでは上記のの情報をGRUに渡しているつまりj局目の場合j組ある. slackでの議論のように現在の情報のみから予測したい.

GRUでは過去の情報の系列から局数, 自風なども推論可能だが一局のみから予測する場合は明示的に特徴量を用意した方がよさそう.

  • 局終了時の持ち点
  • 本場
  • 詰み棒
  • 自風

nissymori avatar Aug 25 '22 13:08 nissymori

jaxで学習したモデルをnumpyへ吐き出せるか確認

簡単な例を作って確認. https://colab.research.google.com/drive/1Hn5TADrD7NUHjxo0QqfSUQ8UX_XuPKId?usp=sharing

学習が終わったモデルの重みを jnp.save("weights.npy", weights)で保存 jnp.load("weights.npy")でロードできる. loadしたobjectのtypeを確認するとnumpy.ndarrayなので少なくともこの方法でjaxで学習させた重みをnumpyのarrayとして使える.

nissymori avatar Aug 25 '22 13:08 nissymori

特徴量 | 前処理方法

  • 4人の点 | ÷ 100000
  • 自風: one-hot
  • 親: one-hot
  • 本場: 整数 | ÷ 4
  • 詰み棒: 整数 | ÷ 4
  • 局: 整数 8以上は全て7にする. | ÷ 7

当初は, 自身の点, 下家, 上家, 対面の順で並べるつもりでしたが, 自風と, 親の情報を与えるので, 順番をあえて指定する必要なはいのではないかと思いました. いったんやってみてダメだったら当初の予定通りやってみようと思います.

target

順位点 ÷ 100

concatenate pattern

  1. concatしたものをinput
  2. one-hotだけNNを用意してhidden layer で他の特徴量とconcat

とりあえず1. で良いかなと思っています.

nissymori avatar Sep 04 '22 07:09 nissymori

上家とかの並びにするのは重要な気がするけどなあ

sotetsuk avatar Sep 04 '22 08:09 sotetsuk

上家とかの並びにするのは重要な気がするけどなあ

単純に4人の点/100000だと全くうまくいかないのでこちらに変えます!

nissymori avatar Sep 04 '22 08:09 nissymori

変更点

  • 特徴量として残りの親の数を追加する.
  • 風の情報を
  • 出力は4次元[起家, ..ラス親]
  • NNは8個用意するmodel_0, ...model_7

procedure

  • 南4のデータから順位点をmodel_7に予測させる
  • 南3のデータのmodel_7の予測結果をmodel_6に予測させる.
  • 以下繰り返す.

ToDo

  • [x] 特徴量実装
  • [x] 特徴量テスト
  • [x] 訓練関数実装
  • [x] 訓練関数テスト
  • [x] plot関数実装
  • [x] plot関数テスト
  • [x] コマンドライン整備
  • [x] 実験

nissymori avatar Sep 16 '22 08:09 nissymori