如何利用 Python 打造一款简易版 AlphaGo

简介:

2017 年伊始,再度出山的 AlphaGo 化名 Master 在网络围棋平台上打遍棋界无敌手。你是否也想打造一个自己的 AlphaGo 呢?GitHub 用户 Brian Lee(brilee)发布了一个效仿 AlphaGo 的极简围棋引擎的 Python 实现 MuGo。

这是 AlphaGo 基本组成部分的一个纯 Python 实现。

AlphaGo 逻辑/控制流(logic/control flow)其实并不非常复杂,本项目就是其复现。AlphaGo 的秘密武器是在于其各种神经网络之中。

就我所知,AlphaGo 在对弈过程中使用了三个神经网络。

第一个神经网络是一个速度很慢但很准确的策略网络(policy network)。这个网络被训练用来预测人类的走子(大约 57% 的准确度),它会输出一个可能走子的列表,并且每一种走子方式都对应了一个概率。这个网络为蒙特卡洛树搜索(MCTS)提供了可能的走子起点。这个神经网络很慢的一大原因是它具有很大的规模,这是因为这个神经网络的输入是围棋棋盘上的各种计算成本高昂的属性——气的数量、叫吃、征等等。

第二个神经网络也是一个策略网络,它比第一个更小更快,但准确度更低(大约 24%),这个网络并不使用复杂的属性作为输入。一旦到达了当前 MCTS 树的叶节点(leaf node),这个第二个更快的网络就会被用来得到一个棋盘局面的可能走子,并且对这个这个最终局面进行评分。

第三个神经网络是一个价值网络:它为棋盘输出一个预期获胜的范围,而不会自己下任何棋。

然后,将使用第二个神经网络的蒙特卡洛得到的结果和使用第三个神经网络的价值计算结果进行平均,然后这个值被记为该 MCTS 节点的近似结果。

开始

安装 TensorFlow

开始需要安装 TensorFlow,并使用 GPU 驱动器(即英伟达显卡的 CUDA 支持)

获取用于监督学习的 SGF

接下来需要一个 SGF 文件源。你可以在 https://u-go.net/gamerecords 获取 15 年时长的高段位对局数据。你也可以从其它来源下载专业比赛的数据库。

预处理 SGF

第三,对你的 SGF 文件进行预处理。这需要 SGF 文件中的所有局面并提取出每一个局面的特征以及记录正确的下一步走子。

然后将这些局面分割成块(chunk)——一块用于测试,其它的都用于训练。这个步骤需要一定时间,而且要是你修改了 features.py 文件中的特征提取步骤,你还需要重新预处理。

 
  1. python main.py preprocess data/kgs-* 

注:这句代码用了通配符,比如说:KGS 目录可以名为 data/kgs-2006-01、data/kgs-2006-02 等等

监督学习(策略网络)

使用上面预处理过的 SGF 数据(默认输出目录是 ./processed_data/),你可以训练策略网络。

 
  1. python main.py train processed_data/ --save-file=/tmp/ 

网络训练好了之后,当前模型会被保存在 --save-file。你可以通过如下代码继续训练这个网络:

 
  1. python main.py train processed_data/ --read-file=/tmp/savedmodel  
  2. --save-file=/tmp/savedmodel --epochs=10 --logdir=logs/my_training_run 

此外,你也可以使用 TensorBoard 跟踪你的训练过程——如果你为每一次运行定义了一个不同的名字(如:logs/my_training_run、logs/my_training_run2),你可以将这些运行彼此重叠起来:

 
  1. tensorboard --logdir=logs/ 

与 MuGo 对弈

MuGo 使用了 GTP 协议,你可以通过任何兼容 GTP 的程序来使用它。要调用原始策略网络,使用如下代码:

 
  1. python main.py gtp policy --read-file=/tmp/savedmodel 

要调用集成了 MCTS 的策略网络版本,使用:

 
  1. python main.py gtp mcts --read-file=/tmp/savedmodel 

通过 GTP 下棋的一种方式是使用 gogui-display(它有一个兼容 GTP 的 UI)。你可以在 http://gogui.sourceforge.net/ 下载 gogui 工具套件。参见http://gogui.sourceforge.net/doc/reference-twogtp.html 了解使用 GTP 的有趣方式。

 
  1. gogui-twogtp -black 'python main.py gtp policy --read-file=/tmp/savedmodel' -white 'gogui-display' -size 19 -komi 7.5 -verbose -auto 

另一种通过 GTP 玩的方式是对抗 GnuGo,同时还能观看比赛:

 
  1. BLACK="gnugo --mode gtp"  
  2. WHITE="python main.py gtp policy --read-file=/tmp/savedmodel"  
  3. TWOGTP="gogui-twogtp -black \"$BLACK\" -white \"$WHITE\" -games 10 \  
  4. -size 19 -alternate -sgffile gnugo"  
  5. gogui -size 19 -program "$TWOGTP" -computer-both -auto 

还有一种玩法是通过 GTP 连接 CGOS(http://yss-aya.com/cgos/ 计算机围棋在线服务器)。由 boardspace.net 运营的 CGOS 服务器已经关闭了;你需要在 yss-aya.com 接入 CGOS 服务器。

配置好了你的 cgos.config 文件之后,你可以通过 cgosGtp -c cgos.config 连接到 CGOS,以及使用 cgosView yss-aya.com 6819 查看你自己的游戏。


本文作者:佚名

来源:51CTO

相关文章
|
4月前
|
机器学习/深度学习 人工智能 算法
Python与强化学习:AlphaGo背后的编程逻辑
本文介绍了使用Python实现Q-learning算法,以模仿AlphaGo在围棋中的决策过程。强化学习涉及环境、智能体和状态,Q-learning是无模型的学习算法,通过优化Q函数来预测状态动作的预期收益。AlphaGo结合Policy Network和Value Network进行强化学习,而简单的实现可借助OpenAI Gym创建围棋环境,使用Tensorforce库实现Q-learning。不过,要达到AlphaGo的水平,还需深入研究和优化。
|
4月前
|
机器学习/深度学习 人工智能 算法
|
1天前
|
机器学习/深度学习 人工智能 数据可视化
Python比较适合哪些场景的编程?
Python比较适合哪些场景的编程?
14 7
|
5天前
|
数据挖掘 索引 Python
Python数据挖掘编程基础3
字典在数学上是一个映射,类似列表但使用自定义键而非数字索引,键在整个字典中必须唯一。可以通过直接赋值、`dict`函数或`dict.fromkeys`创建字典,并通过键访问元素。集合是一种不重复且无序的数据结构,可通过花括号或`set`函数创建,支持并集、交集、差集和对称差集等运算。
15 9
|
2天前
|
存储 数据处理 开发者
深入浅出:Python编程基础与实战技巧
【9月更文挑战第32天】本文将引导读者从零开始,掌握Python编程语言的核心概念,并通过实际代码示例深入理解。我们将逐步探索变量、数据结构、控制流、函数、类和异常处理等基本知识,并结合实用案例,如数据处理、文件操作和网络请求,提升编程技能。无论您是初学者还是有一定经验的开发者,这篇文章都能帮助您巩固基础,拓展视野。
|
21小时前
|
大数据 Python
Python 高级编程:深入探索高级代码实践
本文深入探讨了Python的四大高级特性:装饰器、生成器、上下文管理器及并发与并行编程。通过装饰器,我们能够在不改动原函数的基础上增添功能;生成器允许按需生成值,优化处理大数据;上下文管理器确保资源被妥善管理和释放;多线程等技术则助力高效完成并发任务。本文通过具体代码实例详细解析这些特性的应用方法,帮助读者提升Python编程水平。
18 5
|
2天前
|
数据采集 机器学习/深度学习 人工智能
Python编程之旅:从基础到精通
【9月更文挑战第32天】本文将带你进入Python的世界,从基础语法到高级特性,再到实战项目,让你全面掌握Python编程技能。无论你是初学者还是有一定基础的开发者,都能在这篇文章中找到适合自己的学习路径和方法。让我们一起踏上Python编程之旅,开启一段充满挑战和乐趣的学习历程吧!
|
5天前
|
存储 开发者 Python
探索Python编程的奥秘
【9月更文挑战第29天】本文将带你走进Python的世界,通过深入浅出的方式,解析Python编程的基本概念和核心特性。我们将一起探讨变量、数据类型、控制结构、函数等基础知识,并通过实际代码示例,让你更好地理解和掌握Python编程。无论你是编程新手,还是有一定基础的开发者,都能在这篇文章中找到新的启示和收获。让我们一起探索Python编程的奥秘,开启编程之旅吧!
|
6天前
|
Python
Python编程的循环结构小示例(二)
Python编程的循环结构小示例(二)
下一篇
无影云桌面