[hidecontent type="logged" desc="隐藏内容:登录后可查看"]
在大约 10k 个游戏上使用监督学习,我训练了一个模型(7 个 256 个过滤器的残差块)来估计 1200 个 elo 和 1200 个 sims/move。MCTS 的优势之一是它可以很好地扩展计算能力。
在这里你可以看到一个例子,我(黑色)与 repo 中的模型(白色)对战:
在这里你可以看到我(白色,~2000 elo)与这个 repo 中的模型(黑色)对战的游戏示例:
使用我创建的新监督学习步骤,我已经能够将模型训练到似乎正在学习国际象棋开局的程度。此外,该模型似乎开始避免丢失幼稚的部分。
在这里你可以看到我针对这个模型玩的游戏示例(AI 玩黑色):
这里我们有一个由@bame55 训练的游戏(AI 玩白):
该模型以这种方式运行,仅在“opt”工作人员进行 5 次迭代后,“eval”工作人员更改了最佳模型的 4 倍(5 次中的 4 次)。此时,'opt' worker 的损失为 5.1(并且似乎仍然收敛得很好)。
我已经完成了一个监督学习新管道步骤(使用我们可以在互联网上找到的那些人类游戏文件“PGN”作为游戏数据生成器)。这个 SL 步骤也用在 AlphaGo 的第一个和原始版本中,也许国际象棋是一种复杂的游戏,我们必须在开始自我对弈过程之前首先预训练策略模型(即,国际象棋可能太复杂了单独进行自我训练)。
要使用新的 SL 进程就像在开始时运行新的工人“sl”而不是工人“self”一样简单。一旦模型与 SL play-data 充分收敛,我们就停止 worker“sl”并启动 worker“self”,这样模型就会开始改进,因为 self-play 数据。
python src/chess_zero/run.py sl
如果你想使用这个新的 SL 步骤,你必须下载大的 PGN 文件(国际象棋文件)并将它们粘贴到data/play_data
文件夹中(FICS是一个很好的数据源)。您还可以使用SCID 程序按玩家 ELO、游戏结果等标题进行过滤。
为了避免过拟合,我建议使用至少 3000 场比赛的数据集,最多运行 3-4 个 epoch。
这个 AlphaGo Zero 实现由三个工人组成:self
,opt
和eval
。
self
是Self-Play使用BestModel通过自我对战生成训练数据。opt
是训练模型,生成下一代模型的Trainer。eval
是Evaluator,用来评估下一代模型是否优于BestModel。如果更好,请更换 BestModel。现在可以以分布式方式训练模型。唯一需要做的就是使用新参数:
--type distributed
:使用迷你配置进行测试,(参见src/chess_zero/configs/distributed.py
)因此,为了为分布式团队做出贡献,您只需要像这样在本地运行这三个工作人员:
python src/chess_zero/run.py self --type distributed (or python src/chess_zero/run.py sl --type distributed)
python src/chess_zero/run.py opt --type distributed
python src/chess_zero/run.py eval --type distributed
uci
启动通用国际象棋界面,用于 GUI。要使用 GUI 设置 ChessZero,请将其指向C0uci.bat
(或重命名为 .sh)。例如,这是使用 Arena 的自玩功能的随机模型的屏幕截图:
data/model/model_best_*
: 最佳模特。data/model/next_generation/*
: 下一代模型。data/play_data/play_*.json
:生成的训练数据。logs/main.log
: 日志文件。如果你想从头开始训练模型,删除上面的目录。
pip install -r requirements.txt
如果你想使用 GPU,请按照这些说明使用 pip3 安装。
确保 Keras 使用的是 Tensorflow,并且你有 Python 3.6.3+。根据您的环境,您可能必须运行 python3/pip3 而不是 python/pip。
对于训练模型,Self-Play
执行Trainer
和Evaluator
。
注意:确保您正在从这个 repo 的顶级目录运行脚本,即python src/chess_zero/run.py opt
,不是python run.py opt
.
python src/chess_zero/run.py self
执行时,Self-Play 将开始使用 BestModel。如果 BestModel 不存在,将创建新的随机模型并成为 BestModel。
--new
: 创建新的 BestModel--type mini
:使用迷你配置进行测试,(参见src/chess_zero/configs/mini.py
)python src/chess_zero/run.py opt
执行后,训练将开始。将从最新保存的下一代模型中加载基础模型。如果不存在,则使用 BestModel。经过训练的模型将在每个时期保存。
--type mini
:使用迷你配置进行测试,(参见src/chess_zero/configs/mini.py
)--total-step
:指定总步数(小批量)数。总步数影响训练的学习率。python src/chess_zero/run.py eval
执行后,评估将开始。它通过玩约 200 场比赛来评估 BestModel 和最新的下一代模型。如果下一代模型获胜,它将成为 BestModel。
--type mini
:使用迷你配置进行测试,(参见src/chess_zero/configs/mini.py
)通常内存不足会导致警告,而不是错误。如果发生错误,请尝试更改vram_frac
,src/configs/mini.py
self.vram_frac = 1.0
较小的 batch_size 会减少opt
. 尝试改变TrainerConfig#batch_size
。MiniConfig
[/hidecontent]