在十亿个局面中蒸馏 Stockfish,完整 3.9B 数据集已发布 [P]
摘要
Luke Salamone 将 Stockfish 的评估蒸馏为 39 亿个国际象棋局面,并在其中 10 亿个上训练了一个 ResNet-Transformer 混合价值网络,同时在 Hugging Face 上开源了 Gigafish 3.8B 局面价值数据集——据称这是迄今为止最大的开源国际象棋局面价值数据集。
暂无内容
查看缓存全文
缓存时间: 2026/10/05 05:14
# 用十亿局面蒸馏 Stockfish
来源:https://blog.lukesalamone.com/posts/distilling-stockfish/
**摘要:我提取了 39 亿个国际象棋局面的 FEN 和 Stockfish 评估值,然后用其中 10 亿个局面训练了一个神经网络。据我所知,这是目前已发布的最大的开源局面价值(state-value)国际象棋数据集。该数据集已在 Huggingface 上以 theGigafish dataset 名义发布(https://huggingface.co/datasets/lukesalamone/gigafish-3.8b-d10)。**
在整个训练过程中 loss 持续下降,这强烈表明数据量的重要性。
Stockfish 目前是世界上最强的国际象棋引擎。它的工作原理是在每个局面中调用一个小型神经网络数百万次。一个有意思的问题是:我们能否用更准确的价值函数来替代搜索深度?2024 年,DeepMind 的研究人员曾尝试(https://arxiv.org/pdf/2402.04494v1)回答这个问题。关键在于,他们的方法并没有固定搜索深度,尽管他们拥有 150 亿对(局面,动作)价值数据,但局面价值估计只有约 5.3 亿个。
Stockfish 对某个局面的评估是胜率的良好指标(https://blog.lukesalamone.com/posts/chess-blunders/),因此我想重新审视这个问题。为此,我在固定搜索深度下构建了一个大规模的局面价值数据集,并尝试了不同的模型架构。
## 注意力并不是你需要的全部
我训练了三个主要架构类别的变体:纯 Vision Transformer、纯 ResNet,以及一种混合架构(先接 ResNet 块,再接 Transformer 块)。
我进行了一系列初步实验来筛选出最适合这个任务的架构。第一个初步实验训练了一个 40M 参数的变体,很快就发现 Hybrid 和 ResNet 架构明显优于纯 Vision Transformer。与 ResNet 和 Hybrid 相比,Vision Transformer 无法从卷积提供的归纳偏置中获益。它实际上需要从零开始学习什么是二维网格。
在第一个初步实验中,Vision Transformer 的表现明显差于 ResNet 和 Hybrid。
随后我进行了一次规模更大的 80M 参数初步实验,以比较纯 ResNet 与 Hybrid。从 loss 曲线可以看出,ResNet 受益于其关于棋盘的归纳偏置,因此纯 ResNet 模型的 loss 快速下降。然而,它难以学习准确评估所必需的更细微的全盘关系,学习速度较慢。
混合方法让我们两全其美。ResNet 块快速学习空间模式并将其输入 Transformer 块。这也是 Transformer 之所以对数据如此饥渴的部分原因:它们可以持续吞吐海量数据集。
从第二个初步实验可以看出,Hybrid 方法既受益于卷积提供的归纳偏置,也受益于注意力模块的全局推理能力。
### 输入格式
所有模型的输入格式都是相同的:
- 6 个 8x8 位棋盘,表示走棋方的棋子
- 6 个 8x8 位棋盘,表示对方的棋子
- 6 个"元"通道,编码易位权、全回合数计数等信息
### 使用的损失函数
训练任务是从走棋方的视角预测局面评估。(换句话说,如果当前走棋方占优,预测的百分比应 > 50%。)模型有 103 个输出 logits。前 101 个桶对应 0% 到 100% 的胜率。最后两个桶处理强制将杀。
损失函数由两部分组成:**交叉熵分量(CE)**,惩罚预测概率质量落在正确桶之外;以及**序数分量(ORD)**,惩罚预测远离正确桶。两种损失通过加权求和的方式结合。
### 训练细节
最终的混合架构是一个 79M 参数模型,由 6 个 ResNet 块接入 16 个 Transformer 块。训练使用 AdamW 优化器,学习率为 1e-4,约 20M 样本的 warmup,批量大小为 1024。
## 结果
训练开始时总 loss 超过 7.0。训练结束时,CE loss 稳定在 2.49,ORD 项为 0.29,总训练 loss 约为 2.64。在约 5 万个局面的留出验证集上,模型的验证 loss 为 2.648。
其他指标更能说明问题。**方向准确率——即模型是否正确预测哪一方占优——达到了 92.97%**。换句话说,对于任意一个局面,模型在大约 19/20 的情况下与 Stockfish 的判断一致,考虑到数据集中存在大量不明确的局面,这个结果相当出色。
对于不存在强制将杀的局面,模型预测的胜率平均偏差约 4–5 个百分点。将这些胜率转换回 Stockfish 的厘兵评估值,在覆盖从接近败局到接近胜局完整范围的局面上,**厘兵平均绝对误差(MAE)为 64 cp**。
由于算力限制,我决定将训练截断在 10 亿个局面,耗时约三天。但从 loss 曲线来看,仍有巨大的性能提升空间。
## 构建 Gigafish 数据集
该数据集基于 **Lichess Open Database**(https://database.lichess.org/),使用了 37 个月的对局数据构建。我首先用一个多线程 Rust 脚本从每场对局中提取 FEN 局面。
接下来我对 FEN 进行了去重,因为数据集中许多局面被过度代表。我用了一种在磁盘上"穷人版"的 MapReduce 来实现:对每个 FEN 计算哈希值,并将其追加到与哈希前 12 位对应的文件中。这样产生了 4096 个独立文件,每个文件都足够小,可以使用内存中的哈希集合单独去重。
最后,我用 Stockfish 在深度 10 下对每个剩余的 FEN 进行标注。虽然这本身是一个高度可并行的任务,但即使分配到 24 个核心上,仍然花费了超过一天的计算时间。
据我所知,这是目前最大的开源`(局面, 评估值)`国际象棋数据集。ChessBench 数据集包含更多数据点,但它们是"局面-动作-价值"三元组(局面 + 走法 + 评估值),且并未在固定搜索深度下计算。
相似文章
Hugging Face 发布 The Stack v3 – 迄今最大的开放代码数据集
Hugging Face 发布了 The Stack v3,这是迄今为止最大的开源代码数据集,旨在增强针对代码的 AI 模型的训练。
@AdinaYakup: OpenBMB 刚刚发布了一个令人印象深刻的有监督微调数据集 UltraData-SFT-2605,包含 1500 万以上高质量样本,覆盖深度思考与非思考等类型……
OpenBMB 发布了 UltraData-SFT-2605,这是一个大规模数据集,包含超过 1500 万高质量样本,用于推理型大语言模型的监督微调(SFT),涵盖深度思考、非思考、数学、代码、知识、指令遵循和多语言数据。
@RekaAILabs: CS2-10k 现已在 @huggingface 上发布。60万+ 第一人称游戏视频。1万+ 小时。每帧都配有相应的键盘、鼠标和3D位置数据。
Reka AI Labs 发布了 CS2-10k 大型数据集,包含超过 60 万个第一人称游戏视频,总计超过 1 万小时,每帧都配有键盘、鼠标和 3D 位置数据。该数据集已在 Hugging Face 上开放,可用于世界模型、基于动作的视频生成以及第一人称导航研究。
Hugging Face 数据集突破 100 万!
庆祝 Hugging Face 社区达成 100 万个数据集的里程碑,彰显社区通过开放数据协作推动 AI 发展的共同努力。
@svpino: 这对任何希望看到开源模型成功的人来说意义重大!这是我第一次看到开源模型发布检查点级别的…
该帖子强调了K2 Horizon的发布,这是一套由六个开源基础模型组成的互联系列,参数从0.9B到375B,提供检查点级别的日志、训练代码和评估,标志着开源AI发展的重大一步。