自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 查看你自己的游戏。
边不少朋友都有学围棋的想法,付诸于行动的也有,但真正靠自己学会的却并不多。
有工作、有家庭的成年人真的很难保证有足够的时间和精力投入到一份的全新的爱好中,围棋不像网络游戏那样容易上手,身边也不是那么容易就能找到一起学习的小伙伴,很多人因此断断续续学了几年,依然谈不上入门。
成年人的学习能力明显要比小孩子强,但是同样的成年人也有自己的致命弱点——浮躁。一般一年级左右的小朋友学习围棋每周一次课,每天回家自己按要求做完老师布置的作业,按照老师教的按部就班循序渐进的学习,坚持一年左右达到业余一级是没有问题的。成年人却完全相反,大多数人是不会沉下心来一点点去学,在了解基础的规则以后就投入到实战中去了,而且一去不复返。实战能够帮助提高棋艺,但是如果不能在实战中发现自己的问题,不断改正与提高,那么时间长了很多毛病就会根深蒂固,很多欠缺的技术技巧也难以掌握提高。
很多朋友学棋的时候会刚学会吃子就立马注册围棋对弈平台账户,然后直接大棋盘开打,这里不建议初学者直接下大棋盘。
理由一:没有布局基础,对弈时很迷茫
初学者往往刚学会吃子规则,刚理解气是什么,吃子是什么,对布局没有一点概念,甚至可能连死活都不是很明白,这时候去下大棋盘,会很迷茫,根本不知道该怎么走,只会跟着对方落子,两个人要是都不会,就会从一个角一直下到一整盘。
理由二:花的时间很长,效果却不好
19路大棋盘有361个点,下完一盘棋需要的时间很长,前面说了对成年人来说时间是很奢侈的,如果花这么长时间能有相应的效果还好,但是现实往往是效果不大。下完棋已经累了,加上步数很多,时间比较长,之前下棋时的想法早已经忘在脑后,即使去复盘也没多大效果,而且看到一满盘的棋子,更是没有一点复盘的想法了,而复盘是发现问题,解决问题,提高自己最好的途径。
建议初学者一开始下9路的小棋盘,棋盘小,一盘棋花的时间就相对少很多,而且目标很明确,不至于看着棋盘不知所措。在小棋盘里厮杀对提高局部作战能力,计算能力以及死活水平都有巨大的帮助,在有一定的局部作战能力和死活基础以后再开始学习布局是非常好的方法。
有想学围棋的朋友可以看看我的专栏文章https://learning.snssdk.com/feoffline/toutiao_wallet_bundles/toutiao_learning_wap/online/album_detail.html?content_id=6725345244637823235
也可以私信我免费加入零基础围棋学习群,和小伙伴们一起学习围棋,喜欢的朋友点个关注哦~
址:https://kahoku.news/articles/20240619khn000009.html
原题:一力遼の一碁一会 世界アマ 盤上で国際交流、末永く
摘自:河北新报
作者:一力辽九段
围棋的一大重要特点是它在世界各地的普及。这一次我将介绍5月18日至22日在东京都千代田区日本棋院举办的“第44届世界业余围棋锦标赛”的情况。
世界业余围棋锦标赛始于1979年在日本举行。最初的参赛国家有15个,逐渐增加,到2000年代已超过60个。近几年由于疫情影响,参赛国家有所减少,但这次时隔五年在日本举办的比赛中,有来自60个国家和地区的选手参赛。
我是本次比赛的裁判长。我的主要工作是宣布比赛开始、确认比赛结果,并在比赛后给各国选手提供技术指导。自2013年在仙台担任裁判以来,这是我时隔11年再次参与世界业余围棋锦标赛的工作。
每个国家的选手各有一人参加,通过八轮比赛的总成绩决定排名。60名参赛者的水平从职业水准到业余水平,除了围棋盛行的东亚国家,欧洲的代表也经常排名前列。
今年多米尼加共和国和吉尔吉斯斯坦是首次参赛。十年前在多米尼加共和国、四年前在吉尔吉斯斯坦几乎没有人下围棋,但由于人工智能(AI)的影响,围棋在这些国家快速普及。
吉尔吉斯斯坦的代表是一名14岁的少年,他非常热心地询问学习方法以及在日本学习围棋的地方。他在两年内达到了接近初段的水平,进步速度之快和对进一步成长的渴望让我印象深刻。他这次只赢了两场比赛,但我期待他在未来的表现。
冠军争夺战在日本业余第一人大关稔、四次夺得世界业余围棋锦标赛冠军的中国选手白宝祥和上届冠军韩国的金正善之间展开。最终三人都以7胜1败并列,通过对手分差异决定名次,中国、韩国和日本分别位居前三。
虽然大关稔未能夺冠,但他是唯一击败白宝祥的选手,展现了实力。
这次乌克兰也时隔三年再次参赛。虽然当前国际形势不稳定,但我希望棋盘上的交流能长久持续下去。
*请认真填写需求信息,我们会在24小时内与您取得联系。