Muse用アルゴリズム v1 — 追加学習と検証
2026年11月4日

【結論】
モデルの重みを実際に更新しました。学習済みのmodel.onnxを同梱しています。
今回の検証では、旧版より強くなったとは確認できませんでした。強化確定版ではなく、重み変更済みの試作版です。

【何を学習したか】
Mortal-S42の行動評価出力層の重み・バイアスを自己蒸留で追加学習しました。
教師は前版の二重評価です。新しい人間牌譜や、対局結果を報酬とする
オンライン強化学習は使っていません。特徴抽出器と局面価値の行は固定です。
変更した数値: 47,149個。元モデル全体の約0.44%です。
これは全層の再学習ではありません。

学習24半荘: 11,770元局面、萬筒交換を加えて23,540入力。
検証8半荘: 4,000元局面、萬筒交換を加えて8,000入力。
同じ配牌の席替え対局は同じ分割に入れ、学習・検証の混在を防いでいます。
Adamで35エポック学習し、検証誤差で5エポック目を選びました。
学習率5e-05、元重みへのL2係数0.02、バッチ256。
過剰な変化を抑えるため、学習した差分の50%を適用しました。

【未学習局面での診断】
教師Q値との中心化誤差: 0.00437633 → 0.00396968
誤差は約9.29%減少しました。
一回評価での教師との行動一致率: 99.3125% → 99.2625%
一致率は僅かに下がっています。誤差の減少を棋力向上とは解釈しません。
実際に使用する二重評価では、4,000元局面のうち
旧版から選択が変わったのは1局面でした。
したがって、この追加学習による行動の変化はごく小さいものです。

【旧版との棋力比較】
新版museと旧版strongを、学習・検証とは異なる配牌で比較しました。
両方とも同じ二重評価・半荘の終盤処理を使い、重みだけを変えています。
24組・合計48半荘。各モデル96席分。小さい平均順位が良い成績です。

                  新版muse            旧版strong
平均順位          2.489583           2.510417
平均得点          24771.88           25186.46
1〜4着回数        [25, 23, 24, 24]   [23, 25, 24, 24]

平均順位差（新版－旧版）: -0.020833
種ごとに再抽出したブートストラップ95%区間: [-0.062500, +0.000000]
同一配牌2半荘を一組として20,000回再抽出。区間はこの小標本に基づく推定です。
全48半荘を含み、対戦結果を使った候補の選び直しは行っていません。
seed=93000..93023、key=20261104。2処理に分けて計算し、全結果を統合しました。
同じ旧版同士の対照試験は双方平均順位2.500でした。

【動作確認】
重み・判断処理11件と初回導入・旧版更新2件、合計13件の自動テストに成功。
・勾配の数値検証、実際の重み差分、固定層の不変性、元重みへの完全復元
・新旧の異なる重みの読込、学習と検証の分離
・赤牌・鳴き・合法手・萬筒交換・終盤判断
画面用のRiichiEnvでも半荘が完走: 183入力、最終点[39200, 18400, -700, 43100]。
起動時のハッシュ照合と依存導入、テキスト対局の起動・終了も確認。
Meta Muse自身の操作と実ブラウザの見た目は未検証です。
対戦成績の測定環境はlibriichiで、画面のRiichiEnvとは別の実装です。

【検証可能な記録】
変更前モデルSHA-256: 30381bf21389e2d25d3edf48fed11bf772336ef3daeee67d1bdae7fb9dd30cb4
変更後モデルSHA-256: 55668d7bda2a2b02e82eb55e1a4fa5e83221c44544ba38e1afcfa8f979d86698
training/report.json、data-manifest.json、policy-change.jsonに詳細を記録。
evaluation/weights-v1には全48半荘の結果と集計を収録しています。
生の牌譜はbenchmark.pyでの再検証時に生成されます。
元の重みはweights/base-head.npzから完全に復元できます。
起動・再学習・再比較のコマンドはREADME.txtを参照してください。
