Skip to content

Instantly share code, notes, and snippets.

@Cryolite
Created April 15, 2022 11:18
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Cryolite/519c8ecc042732a3459a39a1f1256599 to your computer and use it in GitHub Desktop.
Save Cryolite/519c8ecc042732a3459a39a1f1256599 to your computer and use it in GitHub Desktop.
kanachan について (2022年4月15日現在)

kanachan の基本思想は

  • 麻雀に関する事前知識は最低限のルールを除いて明示的には一切与えない.
  • 特徴量は局面に関する情報を完全に取り出せる簡潔な表現を使う.
  • それ以外は何も工夫せず,とにかくモデルの表現力と学習量で殴り倒す.

behavioral-cloning

まずモデルの構造は図のとおり(図は behavioral cloning の場合のものだけれど, transformer 以下の encoder 部分は一切変わらず,それより上の decoder 部分が例えば強化学習では dueling network になったりするだけ).入力の "Sparse", "Numeric", "Progression", "Possible Actions" は kanachan のドキュメントに書いてある通り.

麻雀 AI の多く (Suphx, Mortal, そしておそらく NAGA も) が encoder に CNN を採用している中で,「今から麻雀 AI 作るならやっぱ transformer でしょ」という極めて精緻な理論により transformer (BERT に使われている構造と同一) を採用.モデルの表現力が劇的に向上している(はず).なおパラメタ数も劇的に増加して GPU メモリがいくらあっても足りなくなったのは見なかったことにした.

このモデルに突っ込む特徴量は,「完全かつ簡潔」を目指した結果,例えば捨て牌1個取ってみても「牌の種類計37通り」×「誰が捨てたか計4通り」×「自摸切りか手出しか計2通り」×「立直宣言かどうか計2通り」の計592種類のトークンが必要になることに.「ま,漢字圏の言語処理とか1000のオーダーの入力トークン数なんて普通じゃろ」というこれまた極めて精緻な理論によりこの異常にスパースな特徴量表現は特に気にしないにことになった.そんなもの学習量で殴り倒せばええねん.

この巨大なモデルと異常にスパースな特徴量表現を引っ提げて深層強化学習するわけだが,麻雀のような1シナリオが長い強化学習で一番工夫が必要なのってやっぱ reward の設計だよね.というわけでどのような工夫をしたかというと,「一切工夫しない」という基本思想に従い「reward なんて一切工夫しなくても学習量で殴り続ければそのうちマルコフデシジョンプロセス全体が泣きながら V と Q を差し出してくるでしょ」というまたまた精緻な理論により,1試合の最後にだけ reward がぽつねんと存在してそれ以外の reward は全部0というシンプレスト・イズ・ジャスティス設計 (completely sparse reward) を採用.「1局の最後」の間違いじゃないからね? 「1試合の最後」だからね? そこんとこ夜露死苦!

さて,皆さんおわかりいただけただろうか? 「強化学習は(普通は)シミュレーションが必要」「モデルが巨大なのでシミュレーションが重い」「学習量で殴り倒すつもりなのでとんでもないシミュレーション回数が必要」この組み合わせが何を意味するか? そう,人生は有限なのである.タイム・イズ・マネー.試しに Suphx の学習でやってた150万半荘のシミュレーションを何故か自宅の床に転がっていた RTX 3090 で実行したらどのくらいの時間がかかるか電卓に聞いたら「5年です」って答えやがったんですよ.電気代40万円もかかるじゃないですか.あ,いや,問題はそこじゃなくてですね?

上記の通り,(少なくとも個人で用意できる計算機環境では)強化学習のためのシミュレーションにあまりにも時間がかかりすぎることが判明.どうするか.ここで私は中島敦著『名人伝』の一節を思い出していた.甘蠅老師曰く「弓矢の要る中はまだ射之射じゃ。不射之射には、烏漆の弓も粛慎の矢もいらぬ。」そう,シミュレーションの要る中はまだ強化学習之強化学習じゃ.オフライン強化学習にはシミュレーションはいらぬ…….ここに至ってオフライン強化学習の採用を思いつく.というわけで,オフライン強化学習のアルゴリズムの2022年4月現在の state of the art である implicit Q-learning (IQL) を学習に使用.ちなみに,オフライン強化学習として同レベルの state of the art を達成している conservative Q-learning (CQL) もあるけれど,なんか IQL のほうが実装が簡単そうだったので IQL を選択した.だって論文に「疑似コードはたったの7行です!」って喧伝してるんだもん.素晴らしい.ちなみに PyTorch で実装してみたらコードの行数が1500行くらいになりました.詐欺か.機械学習の論文あるあるなんだけれど,いい加減これ景品表示法違反か何かでしょっ引いてほしい.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment