取消
首页  »  国际象棋版AlphaZero出来了诶,还开源了Keras实现ヽ( `0´)ノ  »  国际象棋版AlphaZero出来了诶,还开源了Keras实现ヽ( `0´)ノ

国际象棋版AlphaZero出来了诶,还开源了Keras实现ヽ( `0´)ノ

国际象棋版AlphaZero出来了诶,还开源了Keras实现ヽ( `0´)ノ

主演:
陈奕名 刘慧 张德晖 李子雄 孙承浩 
备注:
类型:
枪战 其它 武侠 
导演:
亨德里克·威廉姆斯 
别名:
更新:
24-05-31/年代:2020
地区:
印度
《国际象棋版AlphaZero出来了诶,还开源了Keras实现ヽ( `0´)ノ》内容简介
国际(🌆)象棋版AlphaZero出来了诶,还开源了Keras实现ヽ( `0´)ノ

原作 @Zeta36

Root 编译自 全球最大同性交友网站

量子位 报道 | 公众号 QbitAI

只用了不到4小时。

AlphaZero在去年底通过自我对弈,就完爆上一代围棋冠军程序AlphaGo,且没有采用任何的人类经验作训练数据(至少DeepMind坚持这么认为,嗯)。

昨天,GitHub有位大神@Zeta36用Keras造出来了国际象棋版本的AlphaZero,具体操作指南如下。

项目介绍

该项目用到的资源主要有:

去年10月19号DeepMind发表的论文《不靠人类经验(🌲)知识,也能学会围棋游戏》

基于DeepMind的想法,GitHub用户@mokemokechicken所做的Reversi开发,具体前往https://github.com/mokemokechicken/reversi-alpha-zero

DeepMind刚发布的AlphaZero,从零(😻)开(📠)始掌握国际象棋:https://arxiv.org/pdf/1712.01815.pdf。

之前量子位也报道过,AlphaZero仅用了4小时(30万步)就击(🤴)败了国际象棋冠军程序Stockfish。是不是赛雷(´・Д・)」

更(🛣)多细节去wiki看呗。

笔(🕊)记

我是这个信息(🈸)库(repositories,也简称repo)的创造者。

这个repo,由我和其他几个小(🙃)伙伴一起维(💤)护,并会尽我们所能做到最好。

repo地址:https://github.com/Zeta36/chess-alpha-zero/graphs/contributors

不过,我们发现让机器自己对弈,要烧很多钱。尽管监督学习的效果很好,但我们从来没有尝试过自我对弈。

在这里呢(🍷),我还是想提下,我们已经转移到一个新的repo,采用大多数人(📊)更习惯的AZ分布式版本的国际象棋(MCTS in C ++):https://github.com/glinscott/leela-chess

现在,项目差不多就要完成啦。

每个人都可以通过执行预编译的Windows(或Linux)应用程序来参与。这个(🔡)项目呢,我们赶脚自己做(🛵)得还是不错的。另外,我也很确定,在短时的分布式合作时间内,我们可以模拟出DeepMind结果。

所以呢,如果你希望能看到跑着神经网络的UCI引擎打败国际(😻)象棋冠军程序Stockfish,那我建议你去看看介个repo,然后肯定能增强你家电脑的能力。

使用环境

Python 3.6.3

tensorflow-gpu: 1.3.0

Keras: 2.0.8

最新结果 (在@Akababa用户的大量修改贡献(👾)后获得的)

在约10万次比赛中使用监督(🦋)式学习,我训(🈺)练了一个模型(7个(🧓)剩余的256个滤波器块)(🛌),以1200个模拟/移动(🎑)来估算1200 elo。 MCTS有个优点(🎰),它计算能(🍗)力非常好。

下面动图泥萌可以看到,我(黑色(⏺))(⛱)在repo(白色)模型中对阵模型:

下面的图,你可以看到其中一次对战,我(🗜)(白色,〜2000 elo)在这个回购(黑色(🕞))(🥑)中与模型对战:

首个好成绩

在用了我创建的新的监督式学习步骤之后,我已经能够训练出一个看着像是(🏖)国际象棋开局的学习(🐿)模型了。

下图,大家可以看到这个模型的对战(AI是黑色):

下面,是一场由@ bame55训练的对战(AI玩白色(🐋)):

5次迭代后,这个模型就能玩成这样了。这5次里,’eval’改变了4次最佳模型。而“opt”的损失是5.1(但结果已经相当好了)。

Modules

监督学习

我已经搞出来了一个监督学习新的流程。

从互联网上找到的(🎱)那些人类游戏文(🔅)件“PGN”,我们可以把它们当成游戏数据的生成器。

这个监督学习流程也被(🎗)用于AlphaGo的(🈯)第一个和最初版本。

考虑到国际(👌)象棋算是比较复杂(🚓)的游戏,我们必须在开始自我对弈之前,先提前训练好策略模型。也就是说,自我对弈对于(🔞)象棋来说还是比较难。

使用新的监督学习流(⚫)程,一开始运行挺简单的。

而且,一旦(👆)模型与监督学习游戏数据足够融合,我们只需“监督学习”并启动“自我”,模型将会开(🐔)始边自我对弈边改进。

python src/chess_zero/run.py sl

如果你(⬇)想使用这个新的监(😼)督学习流程(⚡),你得下载一个很大的PGN文件(国(👸)际象棋文件)(🏷)。

并将它们粘贴到(🚑)data / play_data文件夹中。BTW,FICS是一个很(🏘)好的数据源。

您也可以使用SCID程序按照玩家ELO,把(🦔)对弈的结果过滤。

为了避免过度拟合,我建议使用至少3000场对战的数据集(🚴),不过(📟)不要超过3-4个运行周期。

强(📤)化学习

AlphaGo Zero实际上有(🗽)三(😰)个workers:self,opt和eval。

self,自我模型,是通过使用BestModel的自我生成训练数据。

opt,训练模型,是用来(🌡)训练(🖼)及生成下一代模型。

eval是评测(👍)模型,用于评估下一代模型是否优于BestModel。如果更好,就替换BestModel。

分布式训练

现在可以通过分布式方式来训练模型。唯一需要的是使用新参数:

输入分布式:使用mini config进(⛔)行测试,(参见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

图形用户界面(GUI)

uci启动通用象(🌳)棋(🙊)界面,用于(🎷)GUI。

为ChessZero设置一个(🐒)GUI,将其指(💩)向C0uci.bat(或重命名为.sh)。例如,这是用Arena的自我对弈功能的随机模型的屏幕截图:

数据

data/model/modelbest: BestModel.

data/model/next_generation/: next-generation models.

data/playdata/play*.json: generated training data.

logs/main.log: log file.

如果您想从头开始训练模型,请删除上述目录。

使用说明

安装

安(🖋)装(🤐)库

pip install -r requirements.txt

如果您想使用GPU,请(🎥)按照以下说明使用pip3进行安装。

确保Keras正在(⬜)使用(🌹)Tensorflow,并且你有Python 3.6.3+。根据您的环(🌤)境,您可能需要运行python3 / pip3而不是python / pip。

基本使用

对于训练模型,执行自(🚟)我对弈模型,训练模型和评估模型。

注意:请确保您正在从此repo的顶级目录运行脚本,即python src / chess_zero / run.py opt,而不是python run.py opt。

自(📯)我对弈

python src/chess_zero/run.py self

执行时,自我对弈会开始用BestModel。如果不存在BestModel,就把创建(🆓)的新的随机模型搞成BestModel。

你可以这么做

创建新(🎱)的BestModel;

使用(⛔)mini config进行测试(🦊),(参见src / chess_zero / configs / mini.py)。

训(⏺)练模型

python src/chess_zero/run.py opt

执行时,开始训练。基础模型会从最新保存的下一代模型中加载。如果不存在,就用BestModel。训(🐈)练好的模型每次也会自动保存(😡)。

你可以这么做

输入mini:使用mini config进行测(📆)试,(参见src / chess_zero / configs / mini.py)

用全套流程:指定整套流程的(📑)(小批量)编(🥙)号,不(🌈)过跑完全程会影响训练的学习率。

评价模型

python src/chess_zero/run.py eval

执行后,开始评估。它通过玩大约200场对战来评估BestModel和最新的下一代模型。如果下一代模型获胜,它将成为BestModel。

你可以这么做

输入mini: 使用mini config进行测试,(请参阅src / chess_zero / configs / mini.py)

几点小(🚌)提示和内存相关知识点

GPU内存

通常来讲,缺少内存会触发警告,而不是错误。

如果发生错误,请尝试更改src / configs / mini.py中的vram_frac,

self.vram_frac = 1.0

较小的batch_size能够减少opt的(🌌)内存使用量。可(😌)以尝试在MiniConfig中更改TrainerConfig#batch_size。

最后,附原文链接(🦂),

https://github.com/Zeta36/chess-alpha-zero/blob/master/readme.md

— 完 —(🎚)

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京(🥃)中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复(🌤)“招聘”两个字。

量子位 QbitAI · 头条号签(🛶)约作者

վ'ᴗ(🐇)' ի 追踪AI技术和产品新动态