LIANG 学习了数千场职业比赛的 Ban/Pick 序列,能够预测下一步最优选择,并评估整套阵容的胜率。
输入当前已有的 Ban/Pick 序列,模型预测下一步最可能出现的动作。通过多次采样统计频率,给出置信度最高的推荐。
给定阵营和先手信息,生成完整的 24 轮 Ban/Pick 方案。通过胜负预测筛选,只保留被预测为"赢"的候选方案。
比赛进行到一半时,输入前半段序列,模型推荐后半段最优选择。帮助教练和选手在中场做出更好的策略调整。
输入完整的 24 轮 Ban/Pick 序列,模型预测 Radiant 方的胜率。基于 BP 阵容的统计关联进行判断。
LIANG 基于 GPT(Decoder-Only Transformer)架构,专为 Dota 2 BP 序列建模而设计。0.83M 参数,每一层都在学习策略模式。
graph TD
A["Input Embedding
[batch, seq, 128]"] --> B["LayerNorm"]
B --> C["Multi-Head Attention
4 heads × 32-dim each"]
C --> D["Residual Connection
+ Dropout 0.1"]
D --> E["LayerNorm"]
E --> F["MLP Feed-Forward
128 → 512 → 128"]
F --> G["Residual Connection
+ Dropout 0.1"]
G --> H{"× 4 Layers"}
H --> I["Final LayerNorm"]
I --> J["Linear Head
128 → 186"]
J --> K["Softmax
Next Token Probs"]
style A fill:#1a1a2e,stroke:#5ac8fa,color:#f5f5f7
style K fill:#1a1a2e,stroke:#0071e3,color:#f5f5f7
style H fill:#0a2540,stroke:#0071e3,color:#5ac8fa
style B fill:#1d1d1f,stroke:#444,color:#a1a1a6
style C fill:#1d1d1f,stroke:#444,color:#a1a1a6
style D fill:#1d1d1f,stroke:#444,color:#a1a1a6
style E fill:#1d1d1f,stroke:#444,color:#a1a1a6
style F fill:#1d1d1f,stroke:#444,color:#a1a1a6
style G fill:#1d1d1f,stroke:#444,color:#a1a1a6
style I fill:#1d1d1f,stroke:#444,color:#a1a1a6
style J fill:#1d1d1f,stroke:#444,color:#a1a1a6
每个 Ban/Pick 动作被编码为 4 个 Token:动作类型、英雄、阵营、顺序。加上特殊标记和胜负结果,形成完整的序列语言。
graph LR
subgraph "Single Match = 97 Tokens"
BOS["BOS
[1]"]
A0["BAN / PICK
[2-3]"]
A1["Hero ID
[4-157]"]
A2["Team
[158-159]"]
A3["Order
[160-183]"]
DOT["..."]
WIN["WIN / LOSS
[184-185]"]
end
BOS --> A0 --> A1 --> A2 --> A3 --> DOT --> WIN
style BOS fill:#0071e3,stroke:none,color:#fff
style A0 fill:#5ac8fa,stroke:none,color:#1d1d1f
style A1 fill:#5ac8fa,stroke:none,color:#1d1d1f
style A2 fill:#5ac8fa,stroke:none,color:#1d1d1f
style A3 fill:#5ac8fa,stroke:none,color:#1d1d1f
style DOT fill:#e8e8ed,stroke:none,color:#6e6e73
style WIN fill:#34c759,stroke:none,color:#fff
从 OpenDota API 抓取职业比赛数据,获取完整的 Ban/Pick 序列和比赛结果。
prepare_dotabpdata.py
将 JSON 格式的动作序列编码为整数 Token,每场比赛生成 97 个 Token 的序列。
prepare.py
按 90/10 比例划分为训练集和验证集,存储为二进制文件以加速读取。
train.bin / val.bin
使用 AdamW 优化器 + 余弦学习率调度,进行 2000 次迭代的 next-token prediction 训练。
train.py
加载 checkpoint,通过多次采样 + 胜负筛选,生成最优 Ban/Pick 推荐。
sample_dotabanpick.py
LIANG 采用标准的自回归语言模型训练方式——Next Token Prediction。模型在学习"下一个 Token 是什么"的过程中,自然掌握了 BP 策略和胜负关联。
使用 AdamW 优化器,配合分组 weight decay:权重矩阵应用衰减,偏置和 LayerNorm 不应用。
线性预热 50 步 → 余弦衰减 → 保持最小学习率。确保训练初期稳定,后期精细收敛。
标准交叉熵损失,预测下一个 Token 的概率分布与真实 Token 的差距。忽略填充位置。
多次采样生成候选 → 用模型自身的胜负预测能力过滤 → 从"赢"的候选中统计最优选择。
graph TD
subgraph Training ["训练阶段 Training"]
RAW["pro_matches.json
职业比赛数据"] --> TOKEN["Token 化
JSON → 97 tokens/match"]
TOKEN --> BIN["train.bin / val.bin
二进制训练数据"]
BIN --> LOOP["训练循环 ×2000"]
LOOP --> FWD["Forward: model(X, Y)"]
FWD --> LOSS["Loss: CrossEntropy"]
LOSS --> BWD["Backward: loss.backward()"]
BWD --> UPD["AdamW Update
+ Grad Clip + LR Schedule"]
UPD -->|"每 50 步"| EVAL["Eval: train/val loss"]
EVAL -->|"保存最优"| CKPT["ckpt.pt"]
UPD --> LOOP
end
subgraph Inference ["推理阶段 Inference"]
CKPT2["ckpt.pt"] --> LOAD["加载模型"]
LOAD --> SAMPLE["多次采样 K=20"]
SAMPLE --> PRED["胜负预测筛选"]
PRED --> STAT["统计最优动作"]
STAT --> OUT["推荐 Ban/Pick"]
end
CKPT -.-> CKPT2
style RAW fill:#f5f5f7,stroke:#e0e0e0,color:#1d1d1f
style TOKEN fill:#e8f4fd,stroke:#0071e3,color:#1d1d1f
style BIN fill:#e8f4fd,stroke:#0071e3,color:#1d1d1f
style LOOP fill:#0071e3,stroke:none,color:#fff
style FWD fill:#f5f5f7,stroke:#e0e0e0,color:#1d1d1f
style LOSS fill:#f5f5f7,stroke:#e0e0e0,color:#1d1d1f
style BWD fill:#f5f5f7,stroke:#e0e0e0,color:#1d1d1f
style UPD fill:#f5f5f7,stroke:#e0e0e0,color:#1d1d1f
style EVAL fill:#fff3e0,stroke:#ff9800,color:#1d1d1f
style CKPT fill:#34c759,stroke:none,color:#fff
style CKPT2 fill:#34c759,stroke:none,color:#fff
style LOAD fill:#1d1d1f,stroke:#444,color:#f5f5f7
style SAMPLE fill:#5ac8fa,stroke:none,color:#1d1d1f
style PRED fill:#5ac8fa,stroke:none,color:#1d1d1f
style STAT fill:#5ac8fa,stroke:none,color:#1d1d1f
style OUT fill:#0071e3,stroke:none,color:#fff
LIANG 在多项指标上展现了小模型的潜力。以下是当前版本的核心性能数据。
| Model | Parameters | Vocab Size | Layers | Domain |
|---|---|---|---|---|
| LIANG (Ours) | 0.83M | 186 | 4 | Dota 2 BP Prediction |
| Shakespeare Char | 10.65M | 65 | 6 | Text Generation |
| GPT-2 Small | 124M | 50,257 | 12 | General NLP |
| GPT-2 XL | 1,558M | 50,257 | 48 | General NLP |
辅助教练团队进行赛前 BP 策略准备,分析对手常用阵容,生成针对性的 Ban/Pick 方案。
深入理解职业比赛的 BP 趋势和 Meta 变化,量化分析英雄优先级和阵容搭配规律。
实时展示 BP 阶段的预测和分析,增强赛事直播的互动性和专业感。
探索小型 Transformer 在结构化序列预测任务上的表现,研究游戏策略建模的可能性。
从验证 Pipeline 到产品级应用,LIANG 的每一步都在进化。
完成数据采集、Token 化、训练、推理的完整流程。使用 10 场比赛数据验证端到端可行性。
采集 5000+ 场职业比赛数据,训练正式模型。优化超参数,提升预测准确率。
部署为 Web 服务,提供实时 BP 推荐 API。支持交互式 BP 编辑器和可视化分析。
引入英雄克制关系数据、版本 Meta 信息、选手偏好等多维度特征,打造专业级 BP 助手产品。