李勇华的互联网思维 - 关于互联网的深度思考和践行
  • 首页
  • 微语
  • 关于

现在位置:首页 » 下一个浪潮 » 如何通过 Python 打造一款简易版 AlphaGo?

如何通过 Python 打造一款简易版 AlphaGo?
liyonghua   2017年1月17日   下一个浪潮   评论(0)   浏览(1795)  

选自github

机器之心编译

参与:吴攀


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


MuGo 项目地址:https://github.com/brilee/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 文件中的特征提取步骤,你还需要重新预处理。


python main.py preprocess data/kgs-*


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


监督学习(策略网络)


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


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


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


python main.py train processed_data/ --read-file=/tmp/savedmodel

--save-file=/tmp/savedmodel --epochs=10 --logdir=logs/my_training_run


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


tensorboard --logdir=logs/


与 MuGo 对弈


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


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


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


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 的有趣方式。


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


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


BLACK="gnugo --mode gtp"

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

TWOGTP="gogui-twogtp -black \"$BLACK\" -white \"$WHITE\" -games 10 \

-size 19 -alternate -sgffile gnugo"

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 查看你自己的游戏。



·END·

  • 上一篇:50个基本动作,写好广告案例解说文
  • 下一篇:那些“洗脑”全国的电视广告,偷偷用了这3个心理学技巧
  • 本文固定链接:http://www.liyonghua.com/?post=652
    本文由liyonghua原创或编辑,互联分享,尊重版权,转载请以链接形式标明本文地址

    取消回复

    发表评论:

    • 搜索

    • 最新微语

      • 秋高气爽的时节到了,适合户外各类运动!

        2024-09-26 09:06

      • updated my blog on 6/17/2024

        2024-06-17 23:23

      • 天生的产品经理:1、对产品槽点的忍耐度,是否可以察觉细微的槽点;2、新产品和行业趋势的探索欲;3、用户同理心,随时考虑到用户的各类场景;4、直击问题本源,化繁为简的能力;5、把任何事物都看成产品的独特视角;

        2022-03-17 03:01

      • 工作中如何持续保持自身价值的成长,才是需要考虑的最重要的点。

        2022-02-16 15:36

      • 不要把希望放在别人身上,只有自己的强大才是立身之本。

        2021-01-16 01:26

      • 更多»


    Copyright © 2015 李勇华的互联网思维