mjx-project / mjx

Mjx: A framework for Mahjong AI research
https://colab.research.google.com/drive/1m1wOT_K2YFtuV6IO7VgWk4ilVhTKqRFU?usp=sharing
MIT License
167 stars 18 forks source link

Suphx-style reward shaping #1127

Open sotetsuk opened 2 years ago

sotetsuk commented 2 years ago

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

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

sotetsuk commented 2 years ago

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

nissymori commented 2 years ago

特徴量 suphnx論文より

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

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

nissymori commented 2 years ago

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 commented 2 years ago

特徴量 | 前処理方法

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

target

順位点 ÷ 100

concatenate pattern

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

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

sotetsuk commented 2 years ago

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

nissymori commented 2 years ago

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

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

nissymori commented 1 year ago

変更点

procedure

ToDo