如何利用 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

时间: 2025-01-27 19:58:00

如何利用 Python 打造一款简易版 AlphaGo的相关文章

如何利用AngularJS打造一款简单Web应用_AngularJS

目前不同类型的Web开发人员都在广泛使用AngularJS,这套卓越的框架也充分证明了自身满足各类不同需求的能力.作为一名Web开发人员,无论大家是刚刚入门的新手还是已经拥有丰富的实践经验,选择一款优秀的框架都是必要的工作前提,而AngularJS正是这样一套理想的解决方案.在使用AnguarJS的过程中,大家可以同时学习到更多与应用程序开发相关的知识以及如何构建起更出色.更具吸引力的应用成果.如果大家希望在应用程序的创建工作中采取各类最佳实践,那么AngularJS也能够带来极大的助益.总而言

利用Python实现命令行版的火车票查看器_python

接口设计 一个应用写出来最终是要给人使用的,哪怕只是给你自己使用.所以,首先应该想想你希望怎么使用它?让我们先给这个小应用起个名字吧,既然及查询票务信息,那就叫它tickets好了.我们希望用户只要输入出发站,到达站以及日期就让就能获得想要的信息,所以tickets应该这样被使用: $ tickets from to date 另外,火车有各种类型,高铁.动车.特快.快速和直达,我们希望可以提供选项只查询特定的一种或几种的火车,所以,我们应该有下面这些选项:      -g 高铁      -d

提高流量和订单 高手是怎么打造爆款的?

中介交易 SEO诊断 淘宝客 云主机 技术大厅 很多淘宝网商家,看到别人网店里的爆款产品,都觉得特别羡慕,一旦有了一款爆款产品,那流量.订单什么的,都不在话下了,关键问题是,怎么打造爆款产品呢?以下收录并且整理了一些卖家精心整理和分享的秘籍和方法,仅供淘宝店主们参考和借鉴. 一丶爆款的形成 自从有了淘宝的"爆款"一说,淘宝各路商家出现以"单品为王"的疯杀.其实在其它领域均早有爆款的迹象,但在淘宝上唯有爆款尚和"秒杀"的开创一般,受到商家还有买家的

高手是怎么打造爆款的?

很多淘宝网商家,看到别人网店里的爆款产品,都觉得特别羡慕,一旦有了一款爆款产品,那流量.订单什么的,都不在话下了,关键问题是,怎么打造爆款产品呢?以下收录并且整理了一些 卖家精心整理和分享的秘籍和方法,仅供淘宝店主们参考和借鉴.一丶爆款的形成自从有了淘宝的"爆款"一说,淘宝各路商家出现以"单品为王"的疯杀.其实在其它领域均早有爆款的迹象,但在淘宝上唯有爆款尚和"秒杀"的开创一般,受到商家还有买家的热烈追捧,这就是我们常说的羊群效应.二丶爆款的意义

利用Python实现简单的相似图片搜索的教程

  利用Python实现简单的相似图片搜索的教程         这篇文章主要介绍了利用Python实现简单的相似图片搜索的教程,文中的示例主要在一个图片指纹数据库中实现,需要的朋友可以参考下 大概五年前吧,我那时还在为一家约会网站做开发工作.他们是早期创业公司,但他们也开始拥有了一些稳定用户量.不像其他约会网站,这家公司向来以洁身自好为主要市场形象.它不是一个供你鬼混的网站--是让你能找到忠实伴侣的地方. 由于投入了数以百万计的风险资本(在US大萧条之前),他们关于真爱并找寻灵魂伴侣的在线广告

.NET Core的文件系统[5]:扩展文件系统构建一个简易版“云盘”

FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为我们构建了一个物理文件系统和程序集内嵌文件系统.总的来说,它们针对的都是"本地"文件,接下来我们通过自定义FileProvider构建一个"远程"文件系统,我们可以将它视为一个只读的"云盘".由于文件系统的目录结构和文件内容都是通过HTTP请求的方式读取的,所以我们将这个自定义的FileP

利用网络打造企业品牌

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 现如今品牌对于企业来说越来越重要了,有了1782.html">品牌企业才可以长久的生存下去,而互联网发达的今天,可以说很多人大部分信息都来源于网络,那么企业该如何利用网络打造自己的品牌? 一,品牌定位 制作品牌之前,先考虑清楚你的品牌,有什么优点,在行业里的情况,有没有什么特殊的优点,在这个产品丰富的时代,如果找不出你自己的优

全球首款‘中国版Zite’阅米亮相

记者获悉,每讯公司计划将此款智能化阅读工具"阅米"逐步升级,未来将结合Fliboard和Zite阅读模式的各自优势,适配中国人的阅读习惯,利用丰富的本土化经验,创新性地将定制化阅读和智能化阅读的优势进行充分融合,给中国读者更为优化的个性化阅读体验. 不用事先定制,打开电脑或手机,看到的就是你自己喜欢看和习惯看的文字.图片.视频--这听起来有些梦幻和不可思议吧,但个性化智能阅读工具的出现将这样的想象变成了现实. 据悉,5月17日,中国领先的移动媒体运营商每讯公司正式在特定人群内推出个性化

Illustrator利用钢笔工具打造漂亮字体教程

给各位Illustrator软件的使用者们来详细的解析分享一下利用钢笔工具打造漂亮字体的教程. 教程分享:   好了,以上的信息就是小编给各位Illustrator的这一款软件的使用者们带来的详细的利用钢笔工具打造漂亮字体的教程解析分享的全部内容了,各位看到这里的使用者们,小编相信各位是很清楚了打造方法了吧,那么大家就快去按照小编的教程自己去试试效果吧.