前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用神经网络和深度学习构造围棋智能算法:实现棋盘落子编码

使用神经网络和深度学习构造围棋智能算法:实现棋盘落子编码

作者头像
望月从良
发布2019-04-28 10:42:19
9110
发布2019-04-28 10:42:19
举报
文章被收录于专栏:Coding迪斯尼Coding迪斯尼

在前面章节中,我们引入不少算法和数据结构用以支持围棋机器人实现。由于围棋的步骤组合太多,几乎没有确定性的算法能在合理的时间内给出好的走法。从本节开始,我们将像AlphGo那样引入深度学习技术,通过训练神经网络的方式打造出一个强大的围棋机器人,使得这个机器人的围棋技能能够超越人类智慧之上。

在如下课程中对深度学习技术进行了非常详细详尽的讲解,在这里我们不再对深度学习技术进行启蒙似讲解,而是认为你已经比较好的掌握和理解了深度学习技术:

深度学习课程,请点击当前链接

我们看看神经网络如何应用到围棋落子算法上,首先我们先获得当前棋盘:

然后我们将棋盘转换为二维向量:

上面编码的二维向量对弈网络输入,训练神经网络时,我们必须将输入数据和标签配对,网络对输入进行计算后输出,如果输出结果与输入数据对应的标签不一致,那么网络就可以自我修改,上面二维数组对应的标签就是当前落子方的下一步走法。

此时落子方只有右上角一处走法,于是我们将走法编码为一维向量:[0,0,1,0,0,0,0,0,0]。这个一维向量就是上面二维向量对弈的标签,如果网络得出的一维向量与编码的向量不同,它就可以根据它输出的结果与我们编码向量的差异进行自我调整

然后我们将上面二维向量输入到一个训练好的神经网络:

网络识别输入的二维数组后,在输出端给出一个向量,向量中的分量指明下一步走法。对神经网络而言,它需要配备对应的数据结构,那就是向量。因此我们将使用代码将棋盘转换成一个二维向量,其中黑棋所在的位置用1表示,白棋所在位置用-1表示,空余点用0表示。

这种方法并不是很有利于网络做出精准预测,但在后续的章节中,我们会不断改进数据结构和网络形态,从而使得网络的预测越来越精准。神经网络还有一个问题是,它需要大量的训练数据,此时我们可以运用前面章节创造随机机器人的方法,让两个机器人随机博弈,把博弈过程产生的棋盘和结果当做数据对网络进行训练。

在前面我们尝试使用蒙特卡洛树搜索时,我们让机器人模拟对弈500盘,然后根据胜率统计来决定下一步走法。这种方法很管用,特别是模拟的次数越多,最后得出的胜率越准确,于是选择出的走法就越好。但它有一大缺陷是,速度非常慢,模拟博弈的次数越多,程序运行得就越慢,我们上节使用500次模拟博弈时,已经是几分钟才能算出一步走法来。

俗话说长痛不如短痛。本节开始使用的神经网络方法就是以短痛的方式解决长痛。我们会集中一大块时间执行蒙特卡洛树搜索算法,让两个机器人随机对弈,同时增加一次落子时模拟对弈的次数,例如把500次提升到1000次。显然这会大大增加运行时长。

但我们把所有运行结果存储起来,然后使用这些数据训练神经网络,让神经网络识别出蒙特卡洛树搜索的精髓。当网络掌握其规律后,我们以后可以直接使用网络快速得出符合蒙特卡洛树搜索的落子算法,而不需要每一步都要执行500次模拟对弈,从而能大大加快落子速度。由此可见,强大的神经网络,在背地里有着艰苦卓绝的训练过程。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Coding迪斯尼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档