阿尔法狗(AlphaGo)的意思是“围棋王”,俗称“阿尔法狗”,它是世界上第一个打败人类围棋冠军的AI。2015年10月,阿尔法狗以5 : 0战胜了欧洲围棋冠军樊麾二段,在2016年3月,阿尔法狗以4 : 1战胜了世界冠军李世石九段。2017年,新版不依赖人类经验完全从零开始自学的零狗(AlphaGo Zero)以100 : 0战胜阿尔法狗。

阿尔法狗使用策略网络和价值网络辅助蒙特卡洛树搜索,以降低搜索的深度和宽度。机巧围棋落子策略完全基于零狗算法,本文将用强化学习的语言描述围棋游戏的状态和动作,并介绍阿尔法狗和机巧围棋中构造的策略网络和价值网络。

1. 动作和状态

围棋的棋盘是19 X 19的网格,黑白双方轮流在两条线的交叉点处放置棋子。一共有19 X 19 = 361个可以放置棋子的位置,同时可以选择PASS(放弃一次当前落子的权利),因此动作空间是A={0,1,2,⋯,361}\mathcal{A}=\{0,1,2,\cdots,361\}A={0,1,2,⋯,361},其中第iii种动作表示在第iii个位置(从0开始)放置棋子,第361种动作表示PASS。

机巧围棋是基于9路围棋的人工智能程序,即棋盘是9 X 9的网格。相应地动作空间A={0,1,2,⋯,81}\mathcal{A}=\{0,1,2,\cdots,81\}A={0,1,2,⋯,81}。

阿尔法狗2016版本使用19 X 19 X 48的张量(tensor)表示一个状态,零狗使用19 X 19 X 17的张量表示一个状态。如图一所示,零狗中使用的状态张量的意义如下:

  • 状态张量的每个切片(slice)是19 X 19的矩阵,对应19 X 19的棋盘。一个19 X 19的矩阵可以表示棋盘上所有黑色棋子的位置,如果一个位置上有黑色棋子,则矩阵对应位置的元素为1,否则为0。同样的道理,可以用一个19 X 19的矩阵表示棋盘上所有白色棋子的位置。
  • 在零狗的状态张量中,一共存在17个矩阵。其中8个矩阵记录最近8步棋盘上黑子的位置,8个矩阵记录最近8步白子的位置。还有一个矩阵表示下一步落子方,如果接下来由黑方落子,则该矩阵元素全部等于1,如果接下来由白方落子,则该矩阵的元素全部都等于0。

为了减少计算量,机巧围棋对状态张量做了一定的简化。在机巧围棋中,使用9 X 9 X 10的张量表示一个状态,其中4个9 X 9的矩阵记录最近4步棋盘上黑子的位置,4个矩阵记录白子的位置。一个矩阵表示下一步落子方,如果接下来由黑方落子,则该矩阵元素全部等于0,由白方落子则等于1。还有最后一个矩阵表示上一步落子位置,即上一步落子位置元素为1,其余位置元素为0,若上一步为PASS,则该矩阵元素全部为0。

阿尔法狗2016版本的状态张量意义比较复杂,本文不详细展开,具体可参加下图:

2. 策略网络

策略网络π(a∣s;θ)\pi(a|s;\theta)π(a∣s;θ)的结构如图三所示。零狗策略网络的输入是19 X 19 X 17的状态sss,输出是362维的向量fff,它的每个元素对应动作空间中的一个动作。策略网络的输出层激活函数为Softmax,因此向量fff所有元素均是正数,而且相加等于1。

3. 价值网络

在阿尔法中还有一个价值网络vπ(s;ω)v_\pi(s;\omega)vπ​(s;ω),它是对状态价值函数Vπ(s)V_\pi(s)Vπ​(s)的近似,价值网络的结构如图四所示。价值网络的输入是19 X 19 X 17的状态sss,输出是一个[−1,+1][-1, +1][−1,+1]的实数,它的大小评价当前状态sss的好坏。

策略网络和价值网络的输入相同,都是状态sss。而且它们都用卷积层将sss映射到特征向量,因此零狗中让策略网络和价值网络共用卷积层。

零狗中策略网络和价值网络共用卷积层,但是在阿尔法狗2016版本中没有共用。因为零狗中策略网络和价值网络是一起训练的,而阿尔法狗2016版本中是先训练策略网络,然后用策略网络来训练价值网络,二者不是同时训练的,因此不能共用卷积层。后续会详细介绍阿尔法狗中神经网络训练方法。

4. 机巧围棋网络结构

零狗训练用了5000块TPU,在机巧围棋中为了减少计算量,大幅简化了策略网络和价值网络。在机巧围棋中,使用了3个卷积层从状态sss中提取特征,分别是:

  • 3 X 3步长1的32通道卷积;
  • 3 X 3步长1的64通道卷积;
  • 3 X 3步长1的128通道卷积。

在策略网络部分,首先使用1 X 1的8通道卷积对信息进行夸通道整合,再接一个全连接层将特征向量维度压缩成256,最后再接入输出层;在价值网络部分,首先使用1 X 1的4通道卷积对信息进行夸通道整合,再接入两个全连接层,最后接入输出层。具体代码如下:

# -*- coding: utf-8 -*-
# @Time    : 2021/3/29 21:01
# @Author  : He Ruizhi
# @File    : policy_value_net.py
# @Software: PyCharmimport paddleclass PolicyValueNet(paddle.nn.Layer):def __init__(self, input_channels: int = 10,board_size: int = 9):""":param input_channels: 输入的通道数,默认为10。双方最近4步,再加一个表示当前落子方的平面,再加上一个最近一手位置的平面:param board_size: 棋盘大小"""super(PolicyValueNet, self).__init__()# AlphaGo Zero网络架构:一个身子,两个头# 特征提取网络部分self.conv_layer = paddle.nn.Sequential(paddle.nn.Conv2D(in_channels=input_channels, out_channels=32, kernel_size=3, padding=1),paddle.nn.ReLU(),paddle.nn.Conv2D(in_channels=32, out_channels=64, kernel_size=3, padding=1),paddle.nn.ReLU(),paddle.nn.Conv2D(in_channels=64, out_channels=128, kernel_size=3, padding=1),paddle.nn.ReLU())# 策略网络部分self.policy_layer = paddle.nn.Sequential(paddle.nn.Conv2D(in_channels=128, out_channels=8, kernel_size=1),paddle.nn.ReLU(),paddle.nn.Flatten(),paddle.nn.Linear(in_features=9*9*8, out_features=256),paddle.nn.ReLU(),paddle.nn.Linear(in_features=256, out_features=board_size*board_size+1),paddle.nn.Softmax())# 价值网络部分self.value_layer = paddle.nn.Sequential(paddle.nn.Conv2D(in_channels=128, out_channels=4, kernel_size=1),paddle.nn.ReLU(),paddle.nn.Flatten(),paddle.nn.Linear(in_features=9*9*4, out_features=128),paddle.nn.ReLU(),paddle.nn.Linear(in_features=128, out_features=64),paddle.nn.ReLU(),paddle.nn.Linear(in_features=64, out_features=1),paddle.nn.Tanh())def forward(self, x):x = self.conv_layer(x)policy = self.policy_layer(x)value = self.value_layer(x)return policy, value

5. 结束语

本文介绍了阿尔法狗中的两个深度神经网络——策略网络和价值网络,并讲解了机巧围棋中的网络实现。在阿尔法狗或者机巧围棋中,神经网络结构并不是一层不变的,可以依据个人经验或喜好随意调整。总的来说,浅的网络能够减少计算量,加快训练和落子过程,深的网络可能更有希望训练出更高水平狗。

最后,期待您能够给本文点个赞,同时去GitHub上给机巧围棋项目点个Star呀~

机巧围棋项目链接:https://github.com/QPT-Family/QPT-CleverGo

阿尔法狗与机巧围棋的网络结构相关推荐

  1. 机巧围棋(CleverGo)项目总览及介绍

    1. 项目简介 2016年3月,阿尔法狗以4:1战胜围棋世界冠军李世石.自此开始,深度强化学习受到空前的关注并成为AI领域的研究热点,彻底引爆了以深度学习为核心技术的第三次人工智能热潮. 机巧围棋利用 ...

  2. 从“汽转球”、“差分机”到“机巧伊武”——蒸汽朋克补完计划

    多数人对瓦特改良蒸汽机的事迹烂熟于心,却鲜有人知,其实早在将近2000年前,蒸汽机就曾以另一种面貌问世. 蒸汽机简史--从希罗的零号机到瓦特的三号机 在距今约2000年前的公元一世纪,古罗马时代的希腊 ...

  3. 训练策略网络和价值网络

    阿尔法狗2016版本使用人类高手棋谱数据初步训练策略网络,并使用深度强化学习中的REINFORCE算法进一步训练策略网络.策略网络训练好之后,使用策略网络辅助训练价值网络.零狗(AlphaGo Zer ...

  4. PPDE迎新 | 欢迎18位AI开发者加入飞桨开发者技术专家计划!

    PPDE计划是飞桨开发者技术专家的荣誉认证体系,无论是热爱编程开发的资深程序员.大型技术社区的引领者,还是顶级开源软件的Committer.新兴科技公司创始人或CTO,这些开发者技术专家将通过线上线下 ...

  5. 人脑拆机三部曲:为什么我支持马斯克,而人类应该畏惧人工智能

    转自:http://36kr.com/p/5088581.html 就像所有人类发明的机器一样,任何一个功能一旦被超越,人类再没有机会反超回去了 编者按:本文来自微信公众号"新智元" ...

  6. “阿法狗”之父:关于围棋,人类3000年来犯了一个错

    读:AlphaGo之父杰米斯·哈萨比斯(Demis Hassabis),2017年的时候曾在母校英国剑桥大学做了一场题为"超越人类认知的极限"的演讲,解答了世人对于人工智能.对于阿 ...

  7. 阿尔法围棋是人工智能吗,围棋智能机器人阿法狗

    阿尔法狗什么意思? 阿尔法狗是第一个击败人类职业围棋选手.第一个战胜围棋世界冠军的人工智能机器人.其英文名为AlphaGo,音译中文后戏称为阿尔法狗. 人工智能围棋项目:小发猫 阿尔法狗其主要工作原理 ...

  8. “阿法狗”之父:关于围棋,人类3000年来犯了一个错!

    AlphaGo与柯洁之战开始之前一个多月,AlphaGo之父杰米斯·哈萨比斯(Demis Hassabis)在其母校英国剑桥大学做了一场题为"超越人类认知的极限"的演讲,解答了世人 ...

  9. 19 冲动:像阿尔法狗一样,兼顾直觉和理性

    6# 引言 上一讲,我们讲了应对非理性的七种策略,跟随这七种策略我们提升应对自己非理性的能力. 这一讲,我要跟你聊的人生难题,是我们每个人都容易犯的错误,那就是冲动. 冲动 我们很容易不过脑子就决定一 ...

最新文章

  1. R语言自定义变成进行决策曲线分析DCA曲线绘制(Decision Curve Analysis)
  2. 20165315 第八周考试课下补做
  3. 2021高考成绩一分段查询陕西省,2021年陕西高考一分一段表查询排名方法 成绩排名位次什么时候公布...
  4. Abiword对话框资源
  5. Apache Flink 零基础入门(十一)Flink transformation
  6. VC++制作DLL具体解释
  7. php 栏目循环,帝国CMS listshowclass循环栏目标签_PHP教程
  8. jsonarray转liast_jsonArray转换成List
  9. C#DateTime.ToString格式化时间字符串
  10. 命运2服务器维护时间2019,《命运2》今晚将停机维护 为多平台共用存档做准备...
  11. mie散射粒子消光系数 matlab代码,一种球形粒子GMie散射效率极值的算法
  12. scipy回归分析_业余时间学数据分析,如何快速上手
  13. python打开ie浏览器_python-IE浏览器调用
  14. 深度学习deep learning
  15. c51为啥要宏定义时钟_C51 DS1302实时时钟的应用(2-26)
  16. 矩阵可逆与行列式关系的一个直观推导
  17. 原研哉:设计是什么?
  18. VMware win7 x64虚拟机安装
  19. ble zephyr lbs样例,一上电进入广播状态,发送的HCI命令
  20. LeetCode 1155. 掷骰子的N种方法 每日一题

热门文章

  1. linux java 时间戳_Linux/Unix关于时间和时间戳的命令行
  2. 和刘诗诗无竞争友情最珍贵
  3. 这个年均开销3500万美元的 FBI 机密部门,将结合面部识别与大数据技术来调查案件...
  4. javascript实现 早上好,中午好代码
  5. flex大小变化动画_Flex 4的十大变化
  6. php开发勋章插件,BiliBili-直播间勋章增强
  7. 如何在网页标题栏中插入图片图标
  8. Windows提权--小迪权限提升--烂土豆--DLL劫持--udf提权
  9. C# FastReport.Net使用
  10. 年终工作总结的一点感悟