Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MCTSの可視化 #91

Open
kaorahi opened this issue Jan 5, 2024 · 4 comments
Open

MCTSの可視化 #91

kaorahi opened this issue Jan 5, 2024 · 4 comments
Labels
enhancement New feature or request

Comments

@kaorahi
Copy link
Contributor

kaorahi commented Jan 5, 2024

TamaGo を少し改造して MCTS の可視化を試しています. 現状のやっつけ実装からいくらか体裁を整えたら, マージの可能性はございますでしょうか?

教育やデモには良さそうに思われますが, プロジェクトの趣旨に合わなければご遠慮なく却下ください. 概念図ではない「現物」は見たことがなかったので, 個人的にはおもしろいです.

アニメーション

https://github.com/kaorahi/TamaGo/tree/mcts_step

mcts.mp4
  • 色 = 勝率 (前回の自手番との相対値)
  • 文字の大きさ = visits (親との相対値)

(kaorahi/lizgoban#100 を参考にしました)

ツリー表示

https://github.com/kaorahi/TamaGo/tree/treeviz

100visits

tree100

  • ノードの大きさ = visits
  • ノードの形 = 手番 (□は高 winrate (青) を, ○は低 winrate (赤) をめざす)
  • 兄弟ノードの順序 = 左から右へ visits 順 (最左をたどるのが principal variation)
  • 色 = winrate (自身と子孫ノードたちの NN winrate の平均)
  • ふちの色 = NN winrate (探索なしの素のニューラルネット出力)
  • 辺の太さ = policy

1000 visits

tree1000

10000 visits (principal variation 周辺のみ)

tree10000

@kobanium
Copy link
Owner

kobanium commented Jan 7, 2024

どちらも非常に興味深い機能だと思います。
探索部や学習部の可読性が著しく低下したり、破壊的変更になるようなものでなければ基本的にPRは受け付けているので、本機能郡についてPRを出していただけるのであればマージして、次バージョンとしようと考えています。
コードについても細かい体裁やコメント等はこちらで理解しながら追記するので、気軽にPRを出していただければ幸いです。

@kobanium kobanium added the enhancement New feature or request label Jan 7, 2024
@kaorahi
Copy link
Contributor Author

kaorahi commented Jan 8, 2024

ありがとうございます. 理解・改造しやすいことが TamaGo の魅力だと思いますから, 機能を欲ばってコードを肥大化させないようにと気にかけています.

アニメーションのほうがやっつけ度が高いので後回しにして, ツリー表示について, まずは実装の方針をご相談願えないでしょうか. 以下の方針に何かコメントがあればお聞かせください.

  • 「ツリーのダンプ機能」と「ダンプからのグラフ描画機能」を分ける. (将来的な別活用も期待して. たとえばダンプからモデルの苦手局面を調べるなど)
  • ダンプ機能には GTP の独自拡張を用いる. (将来的に GUI からも呼び出しやすいように)
  • tamago-dump_tree というコマンドを受けたら, 現在のツリーの状態を標準出力へ書き出す.
  • 出力は GTP の仕様を守る. (GTP の成功レスポンス → ダンプ文字列 → 空行)
  • ダンプ文字列は, 途中改行なしで長い一行の JSON とする. (入り組んだ情報も含められて, パーズもしやすいように)
  • このダンプ文字列を別プログラムで読み込んでツリー表示する.

また, ツリー表示を作っていたら下記がほしくなりました. こちらは別 PR にします. 本体の PR が形になるまで採否保留でも結構です.

  • GTP の独自コマンド tamago-read_sgf: load_sgf の変種で, SGF 文字列自体を引数として受けとる. echo '…' | main.py | … のような作業がしやすくなります.
  • main.py のオプション --strict-visits: 「1000 visits のツリー」などを描きたいときに, 最善手が確定しても探索を打ち切らないように.

@kobanium
Copy link
Owner

kobanium commented Jan 9, 2024

実装方針確認しました。ツリー表示についてはその方針で良いと思います。
ツリーのダンプ機能についてはmcts/tree.pyに挿入して、ダンプからのグラフ表示機能は適当なディレクトリ(graphあたり?)を切って、その中に対応するスクリプトを入れるイメージですかね。

指定した回数探索するオプションについては、探索打ち切り機能を入れたタイミングで--visitsオプションの機能が微妙に変わってしまっているので確かにそのようなオプションは必要ですね。
もしかしたら既に実装済みかもしれませんが、まだコマンドラインオプションの追加対応に着手されていないのであれば、こちらで実装してdevelopブランチにpushしようと思います。

tamago-read_sgfコマンドについても特別探索部やNN部に影響はありませんし、純粋に機能が拡張されるだけなのでPRが来たらマージする方向で考えています。
置碁のサポートは多分そんなに難しくないですが、分岐のあるSGFを扱うとなると結構大変かもしれません。分岐のサポートの有無含め、どのように実装するかはタイミングを見て議論しましょう。

あと1点お手数をお掛けしますが、下記機能それぞれでissueを分けて作成していただけないでしょうか。

  • ツリー表示
  • アニメーション
  • tamago-read_sgf
  • 探索回数の厳密な指定オプション(--strict-visits)

複数機能に絡むディスカッションは本issueで行いますが、個別機能の議論は各issueで行いたいという狙いがあります。
またPRの際にどの機能かをマッピングできるようにしたいというものあります。

@kobanium
Copy link
Owner

issueの作成、確認しました。
ありがとうございます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants