开源
Chess-alpha-zero:通过AlphaGo Zero方法进行国际象棋强化学习
来源:元经纪     阅读:795
网站管理员
发布于 2023-01-29 02:15
查看主页

概述

通过AlphaGo Zero方法进行国际象棋强化学习。

环境

Python 3.6.3 tensorflow-gpu: 1.3.0 Keras: 2.0.8

新结果(经过@Akababa 的大量修改)

[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,opteval

  • 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执行TrainerEvaluator

注意:确保您正在从这个 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_fracsrc/configs/mini.py

self.vram_frac = 1.0

较小的 batch_size 会减少opt. 尝试改变TrainerConfig#batch_sizeMiniConfig

[/hidecontent]

 
免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 开源
盘和林:消费电子获“国补”,有三大意义
魅族18s手机推送flyme10.5.0.0.0a稳定版更新
快递柜撤出:看新规更要拼市场
pdf-chatbot:给 PDF 文件创建聊天机器人
《无主之地4》明年面市

首页

分类

定制方案

消息

我的