LandlordFormer-Lite:從 DouZero 蒸餾到階段性結果 #
從去年開始,出於個人興趣,我們開啟了專案「OpenLandLord」,並構建了规则引擎、数据生成、蒸馏管线、对局评测与可视化后端等模塊。在基礎模塊搭建好後,我們開展了對「LandlordFormer-Lite」的設計。這是一個以 DouZero-ADP 為參考,規模更小、適合在 Apple Silicon 上迭代與部署的鬥地主模型。
截至目前,我們所構建的 LandlordFormer-Lite 只有 139,021 個參數,約為三個 DouZero 角色模型總參數的 3.10%。儘管在實際對局能力中其還沒有追平教師,但已經使我們明確後續改進方向。在本階段工作中,我們通過分析研究後,將價值頭從「只預測輸贏」修改為「預測經截斷的終局分差」,從而使得產物在三組全新牌局上的勝率由 34.26% 提升至 35.19%,平均每局分數由 -2.406 改善至 -2.321。
這是目前最好的階段性結果,但它與我們設想的完整版本仍有距離:三個角色尚未同時受益、叫牌還沒有特化訓練,牌力也需要繼續提高。
為什麼要重新做一個小模型 #
從理論上來分析,鬥地主對小模型並不友善,主要有四個原因:
- 資訊不完整。 玩家只能看到自己的手牌與公開歷史,對手手牌始終是隱變數。
- 角色不對稱。 地主獨自對抗兩名農民,三個座位的決策分布差異很大。
- 合法動作數量變化很大。 某些局面幾乎是強制出牌,某些地主局面卻可能同時有十幾種選擇。
- 輸贏不是全部。 炸彈、春天與倍數會放大終局分差;同樣是輸,代價可能完全不同。
DouZero 已經證明,對所有合法動作逐一評分是處理這類問題的有效方式 [1]。但原始系統為三個角色保留三套模型,重點也在大規模自我對弈。我們想探索另一條路:讓三個角色共享大部分表示,用一個很小的 Transformer 同時理解公開狀態、合法動作集合與角色差異。
目標並不是單純追求最少參數。真正希望得到的是一個可以快速迭代的研究載體:模型足夠小,能反覆做消融;推論足夠快,可以接進即時對局;同時仍保留足夠牌力,讓架構與訓練方法的差異能在完整牌局中顯現。
我們是怎麼做的 #
1. 讓教師評分所有合法動作 #
如果蒸餾資料只記錄 DouZero 最後選了哪一手牌,學生只能看到一個硬答案,其他合法動作之間的差異都會消失;保留教師的軟分布也是策略蒸餾的核心方法之一 [2]。因此,每個決策狀態都保存:
- 當前玩家能看到的狀態與手牌;
- 完整的標準合法動作集合;
- DouZero 對每個合法動作的分數與溫度化機率;
- 教師最後選擇的動作;
- 這副牌的終局結果與分差。
在這套分工中,OpenLandLord 是唯一的規則裁判;LandlordFormer-Lite 學習如何在合法動作中做決策。DouZero-ADP 負責為裁判給出的合法動作提供教師分數,不會取得對手私有手牌,也不能繞過規則引擎。資料則按整副牌切分,避免同一副牌的不同決策同時出現在訓練與驗證中。
目前主要資料由 500 手教師軌跡與 500 手學生/教師混合軌跡構成,共 35,672 個決策狀態。在混合軌跡中,學生控制一半出牌,DouZero 仍會為所有到訪狀態重新提供完整動作分數。這讓資料同時包含教師熟悉的狀態,以及學生自己走偏後真正會遇到的狀態。
2. 用 Transformer 編碼狀態,用 Deep Sets 理解合法動作 #
LandlordFormer-Lite 的狀態編碼器只有兩層 Transformer:
- hidden size 64;
- 4 個注意力頭;
- feed-forward size 128;
- 15 個手牌牌階/張數 token;
- 三位玩家的公開已出牌摘要;
- 叫牌、出牌與 pass 的公開歷史。
每個合法動作會獨立編碼,並以 query 的方式讀取狀態序列。接著,模型用 masked mean/max Deep Sets 摘要整個合法動作集合,讓策略知道「當前這個動作與其他選項相比如何」,又不依賴合法動作的排列順序;這一設計也延續了集合模型對排列不變性的處理思路 [3]。
我們也測過誘導注意力、三套角色專屬策略頭與額外動作分數回歸頭。它們都增加了模型複雜度,但沒有換來更好的完整對局結果。最後保留下來的是秩為 8 的低秩角色 adapter:大部分知識共享,只用很小的殘差表示地主、地主下家與地主上家的差異。
這個組合把模型控制在 139,021 個參數:
| 模型 | 參數量 | 相對 DouZero | 權重大小 |
|---|---|---|---|
| DouZero-ADP 三角色模型 | 4,486,659 | 100% | 17.96 MB |
| LandlordFormer-Lite | 139,021 | 3.10% | 591 KB |
這裡得到的第一個方向很明確:對小模型而言,讓架構符合問題本身,比直接增加 Transformer 容量更有效。 合法動作是集合,角色不同但共享大量知識;把這兩點直接寫進模型,比多加一層通用模組更划算。
3. 用牌數守恆限制公開信念 #
只看公開歷史仍不足以描述不完全資訊。受到 PerfectDou、DouZero+、BAD 與 ReBeL 的啟發 [4, 5, 6, 7],我們加入一個很小的公開信念頭。
對每個牌階
超過
這幾個限制看似保守,結果卻比更豐富的版本好。只把信念當輔助任務、把完整類別分布輸入策略,或再加入二階矩,都沒有穩定改善牌力。最有效的形式反而是「守恆、期望值、停止梯度」。
這指向第二個方向:不完全資訊模型需要的未必是更大的信念表示,而可能是更可靠的資訊瓶頸。 下一步值得研究的不是無限制增加隱藏資訊維度,而是如何讓少量信念特徵更準確、更符合規則,也更能服務不同角色。
4. 從「輸或贏」改成「輸贏多少」 #
前幾個版本用
目前最有效的修改,是改用經縮放與截斷的終局分差:
截斷保留了「輸得多重」的訊號,又避免少數極端倍數完全支配梯度。這個修改不增加模型參數,也不改變推論圖,只改變訓練時價值頭看到的目標。
做完之後,結果發生了什麼 #
探索階段:分數目標帶來最明顯的提升 #
所有版本都與 DouZero-ADP 使用同一規則引擎與叫牌流程。每組 300 手原始牌會把學生輪流放到三個座位,形成 900 場鏡像對局。統計時仍以原始牌局為單位,避免把共享同一副牌的三場對局視為完全獨立樣本。
前三組牌局用於比較架構與訓練方法,共 2,700 場對局:
| 版本 | 勝率 | 平均每局分數 |
|---|---|---|
| 教師軌跡公開信念模型 | 31.70% | -2.580 |
| 加入 50% 學生狀態,統一採樣 | 31.81% | -2.572 |
| 學生/教師分歧重播 | 32.04% | -2.758 |
| 分數感知價值目標 | 33.48% | -2.488 |
分歧重播提高了部分狀態上的教師模仿率,但平均分數反而惡化,並出現幾場極端失分。分數感知價值目標則同時改善勝率與分數,成為最值得繼續測試的版本。
這裡揭示了第三個方向:選模不能只看教師一致率,也不能只看勝率。 完整牌局的分數、角色切片與尾部損失,會暴露局部模仿指標看不到的風險。
全新牌局:方向延續,但角色仍不均衡 #
選定分數感知版本後,我們再使用三組全新牌局,共 2,700 場鏡像對局:
| 版本 | 勝場/對局 | 勝率 | 平均每局分數 |
|---|---|---|---|
| 統一採樣模型 | 925/2,700 | 34.26% | -2.406 |
| 分數感知模型 | 950/2,700 | 35.19% | -2.321 |
三組新牌局的勝率與分數全部朝同一方向改善。以原始牌局做配對 bootstrap,勝率差為 +0.93 個百分點,95% 信賴區間為 [-0.26, +2.15];平均分數差為 +0.084,區間為 [-0.068, +0.239]。這是目前的最優結果,也說明下一輪需要更多全新牌局來縮小波動範圍。
按角色拆開後,新的研究問題也出現了:
| 角色 | 統一採樣勝率 | 分數感知勝率 | 統一採樣分數 | 分數感知分數 |
|---|---|---|---|---|
| 地主 | 16.11% | 18.44% | -5.753 | -5.413 |
| 地主下家 | 43.44% | 45.56% | -0.740 | -0.663 |
| 地主上家 | 43.22% | 41.56% | -0.723 | -0.887 |
地主與地主下家受益,地主上家卻退化。未來的角色共享研究需要在「共享表示」與「角色專屬調整」之間找到更好的位置,而不是簡單拆回三套完整模型。
更大的資料集沒有自然帶來更強的模型 #
我們也嘗試把資料從 500 手擴大到 1,000 或 2,000 手。在累計更新量相近時,更多不同狀態意味著每個狀態得到的重複優化更少,實戰表現反而下降。1,000 手版本的離線教師一致率更高,實戰卻只有 26.44% 勝率與 -3.157 平均分數。
同樣地,用學生軌跡完全取代教師軌跡會把勝率降到 29.33%;合併兩種來源才回到 31.81%。這表示資料覆蓋與訓練曝光必須分開控制。下一步不能只問「再收集多少手牌」,而要研究「哪些狀態值得更多更新,以及如何在教師狀態和學生訪問狀態之間分配預算」。
小模型已經足以支援即時對局 #
固定形狀 Core ML 匯出在這次 Apple Silicon 測試中達到 0.466 ms P50、0.623 ms P95:
| Core ML 設定 | P50 | P95 |
|---|---|---|
| CPU_ONLY | 0.466 ms | 0.623 ms |
| CPU_AND_NE | 0.498 ms | 0.639 ms |
| ALL | 0.494 ms | 0.643 ms |
三種設定的差異很小,CPU_ONLY 反而略快。compute-unit 描述的是調度偏好;若要進一步利用 Neural Engine,還需要逐算子 profiling 與更針對固定形狀算子的設計。對目前的可視化與人機對局而言,這個延遲已經足以讓模型即時回應。
這些結果把下一步指向哪裡 #
後續研究方向規劃如下。
1. 讓分數目標真正對應高倍數風險 #
目前有效的尺度設定是 24,下一步會比較不同縮放尺度、未截斷分數與更穩健的分位數目標。重點不只看平均分數,也要單獨追蹤炸彈與春天造成的尾部損失。
2. 改善角色共享,而不是回到三套模型 #
地主上家退化說明目前的低秩 adapter 還不夠精細。可以研究依角色與合法動作數動態調節的 adapter,或只在高分支地主狀態增加少量容量,同時保留大部分共享參數。
3. 把公開信念變得更準,而不是更大 #
完整分布與二階矩沒有自然帶來提升。更值得做的是校準期望牌數、利用玩家出牌行為更新信念,並研究信念誤差在三個角色上的不同影響。
4. 同時控制資料覆蓋與更新次數 #
更多牌局不等於更多有效學習。後續資料策略需要按整副牌控制曝光,針對學生常到訪、教師分歧大且終局代價高的狀態分配額外更新,而不是單純擴大資料集。
5. 把叫牌納入同一套學習問題 #
現在的結果主要反映出牌策略。完整版本還需要學習叫地主、搶地主與加倍,讓角色形成、倍數風險與後續出牌共享同一套價值尺度。
階段性結語 #
作為 OpenLandLord 目前的輕量策略模型,LandlordFormer-Lite 用約 3.10% 的教師參數量,實現了快速迭代、Core ML 匯出與完整三座位對局。最有效的改動並不是擴大網路,而是加入符合問題結構的限制:合法動作集合、低秩角色差異、守恆感知公開信念,以及能區分輸贏幅度的價值目標。
目前最優版本在全新牌局上同時改善了勝率與平均分數,但與最初設想相比,仍需要提高整體牌力、解決地主上家的退化,並把叫牌規則整合進來。這些差距使得後續研究從架構變化這個龐大的問題收斂為幾個可以清楚驗證的小問題。
參考文獻
- Zha D, Xie J, Ma W, et al.. DouZero: Mastering DouDizhu with Self-Play Deep Reinforcement Learning[C]. Proceedings of the 38th International Conference on Machine Learning, 2021, 12333–12344. https://proceedings.mlr.press/v139/zha21a.html.↩
- Rusu AA, Colmenarejo SG, Gülçehre Ç, et al.. Policy Distillation[C]. International Conference on Learning Representations, 2016. https://mlanthology.org/iclr/2016/rusu2016iclr-policy/.↩
- Lee J, Lee Y, Kim J, et al.. Set Transformer: A Framework for Attention-based Permutation-Invariant Neural Networks[C]. Proceedings of the 36th International Conference on Machine Learning, 2019, 3744–3753. https://proceedings.mlr.press/v97/lee19d.html.↩
- Yang G, Liu M, Hong W, et al.. PerfectDou: Dominating DouDizhu with Perfect Information Distillation[C]. Advances in Neural Information Processing Systems, 2022, 34954–34965. DOI: 10.52202/068431-2533.↩
- Zhao Y, Zhao J, Hu X, et al.. DouZero+: Improving DouDizhu AI by Opponent Modeling and Coach-guided Learning[C]. 2022 IEEE Conference on Games, 2022, 127–134. DOI: 10.1109/CoG51982.2022.9893710.↩
- Foerster J, Song F, Hughes E, et al.. Bayesian Action Decoder for Deep Multi-Agent Reinforcement Learning[C]. Proceedings of the 36th International Conference on Machine Learning, 2019, 1942–1951. https://proceedings.mlr.press/v97/foerster19a.html.↩
- Brown N, Bakhtin A, Lerer A, et al.. Combining Deep Reinforcement Learning and Search for Imperfect-Information Games[C]. Advances in Neural Information Processing Systems, 2020, 17057–17069. https://proceedings.neurips.cc/paper/2020/hash/c61f571dbd2fb949d3fe5ae1608dd48b-Abstract.html.↩