【计算机围棋神经网络的构建分析案例5800字】_第1页
【计算机围棋神经网络的构建分析案例5800字】_第2页
【计算机围棋神经网络的构建分析案例5800字】_第3页
【计算机围棋神经网络的构建分析案例5800字】_第4页
【计算机围棋神经网络的构建分析案例5800字】_第5页
已阅读5页,还剩16页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1计算机围棋神经网络的构建分析案例 1 11.1.1TensorFlow与Ker 2 21.1.3神经相关算法 31.2监督学习与围棋 41.2.1监督学习训练围棋 41.2.2监督学习神经网络构建 6 1.3.1强化学习概念 11.1神经网络基础理论神经网络是一种计算模型,由大量的神经元节点互联形成。每个节点代表一种特定的输出函数,称为激励函数。每层的神经元都由上层的多个神经元加权运算后得到。计算机神经网络是仿照生物神经网络工作原理所设计的一种学习模型,生物获得的化学或物理信号通过神经元的层层传递进行工作,而计算机神经网络通过多层神经元的加权计算,最终拟合出输入值和输出值存在的复杂关系,通过这种工作方式,计算机可以仿照人类思想进行学习,得到更逼近显示的计算机模型。神经网络结构如图4.1所示:2及C++程序开发语言,并且支持Windows、Mac、Linux以及移动手机端等多种平台。通过安装TensorFlow,我们可以调度电脑资源进行机器学习训练,Keras是基于TensorFlow和Theano的深度学习库,是由python编写而成的高层神经网络API。它是为了支持快速实践而对TensorFlow的再次封装,方便我话,可以利用Cuda加速模型训练。(当安装TensorFlow-GPU后,电脑上有可用的GPU,代码会自动调度GPU进行并行目前Keras已经被TensorFlow收①对于图像矩阵N(尺寸为S*S),选取一个尺寸较小的矩阵a(称为过滤器或卷积核),尺寸为s*s(s<S);②用过滤器a检测图像矩阵N中尺寸为s*s的所有分块,生成一个新的矩阵3规律(比如矩阵R存在一行为全为1或其他特征),则可以将这个过滤器用于检卷积被广泛应用于从图像数据中抽取由价值的信息,在预测围棋行棋位置正需要这个功能。在上面的例子中,我们需要选取一个特定的过滤器,但对于比较复杂的情况,这个过滤器是比较难以寻找的。不过在神经网络中,过滤器并不人为指定,而是通过方向传播算法从训练数据中学习出来。卷积层正是用于实现这个过程。在KerasAPI中,可以使用Conv2D()方法对二维的围棋编码数据进行卷积运算,以寻找围棋中存在的复杂特征!一般为了更好的拟合数据或者特征比较模糊、难以寻找,实际神经网络的设计往往包含多个卷积层。通过卷积和池化,然后得到了众多特征,稠密层的每一个节点都与这些特征节点相连构成稠密层。稠密层的作用就是分类,每一个特征节点占有一定权重来决定输入属于那个分类,最终全部特征的加权共同决定了输入所属分类的权重或概率。在KerasAPI中,可以使用Dense()方法添加稠密层。神经网络中的每个神经元接受上一层神经元的输出值作为本神经元的输入值,并将输入值传递给下一层。如果不使用激励函数,每一层节点的输入都是上层输出的线性函数,无论神经网络有多少层,最终得到的输入输出模型都将是线假设神经网络输入为x,输出为y,有多个隐藏层,每个隐藏层输出为xi,4权重和偏置项分别为ki、bi。第一层得出的输入输出关系为:x₁=k₁x+b₁,之后的隐藏层得出的输入输出关系为:xi=k;xi-1+bi,最终输出层得到的关系为:y=kxi+b,经过层层带入不难发现,无论加入多少的隐藏层,得出的都是线性关系!而实际应用中更多的是非线性的关系,所以需要使用非线性函数作为激活函数,这样每一层都可以得到更为复杂的函数关系,神经网络表达能力就更加强大,研究表明使用激活函数激活几乎可以模拟任意函数。损失函数是用来评估模型的预测值与真实值的误差程度,损失函数越小,模型的数据拟合能力越强,神经网络中常用的损失函数有均方误差损失函数、交叉熵损失函数等。(1)Relu激活函数Relu函数又称为线性整流函数,一般解析式为f(x)=max(0,x),即在x>0时候y=x,x≤0时y=0,图像如图4.3所示:(2)Softmax激活函数Softmax激活函数将多个神经元的输出映射到(0,1)区间内,可以看成是当前输出是属于各个分类的概率,因为广泛应用于多分类问题,解析1.2.1监督学习训练围棋AlphaGo的初代版本前期是基于监督学习的实现过程,简单来说,监督学5习就是一个有输入且有对应输出的数据拟合过程,无监督学习因为训练数据没有输出,而是更像是一种“聚类”过程。我们本次的设计也是采用监督学习进行初始模型的构建:正如3.3中分析的过程一样,以棋局状态为输入,以下一步落子点为输出,二者作为训练数据进行监督学习训练。这个训练阶段是通过分析近些年来的人类棋谱的特征,通过神经网络训练机器模型,使机器能够根据棋局状态对下一步的行棋动作进行预测。通过初期监督学习训练出的机器模型可以称为一个快速走子网络,它的作用是针对棋局状态,预测出下一步最有可能落子的几个位置,这些行棋位置对于当前的机器模型和棋局深度来讲并不一定是较优选择,但是这些是根据人类棋谱进行数学运算后得出的“普遍”选择,这里所说的“普遍”是指通过神经网络训练的机器认为这些落点符合某种规律,所以选择这些落点。以图4.4的引征为例,下列蓝色标记点都可以作为征子进行选择,而当前机器的模型通过训练可以得出这几个落点概率较大可供选择,但是并不能通过思考棋局深度来选出对后续行棋过程价值较高的点,而只是根据监督学习得来的公式计算出一个概率值,然后选择概率最大的进行落所以当前阶段的模型是不具备思考深度的,无法对后续棋局进行运算。而这个初级模型得到的这些位置的选择,也是为后续强化学习中蒙特卡洛树搜索过程提供采样依据,使后续能够高效地采样模拟,模拟更加真实的博弈过程,构建更有效的价值网络,以提高博弈机器人的智能度。61.2.2监督学习神经网络构建在第3章节我们已经进行了围棋数据的处理,训练数据由两部分组成:①表征棋局多个特征的19*19的矩阵②经过独热编码后的代表落子位置的长度为361的向量本次设计我们选择构建卷积神经网络对训练数据进行拟合,之所以选择构建卷积神经网络,卷积层的参数通常比与其复杂度相似的稠密曾要少的多,在设计之初进行了一次实验,在同样的数据量,当使用卷积模型后,正确率提高3倍的同时,参数数量仅仅是线性模型的75%左右,这大大提高了模型的训练速度。但是在计算上比稠密层所使用的常规矩阵乘法代价更高昂。本次博弈系统的卷积神经网络主要由多层卷积层和稠密层以及填零层组成,具体设计过程为:①使用填零层扩充输入数据:输入数据为19*19的矩阵,考虑到需要使用多层卷积层,而每次卷积之后会将上一层输入图像缩小,我们在每次使用卷积层之前,首先需要对输入图像进行扩充,即在原输入矩阵的外围进行多层的填0操作。KerasAPI提供了一个非常实用的填0层工具——ZeroPadding2D(填0层),所以我们在每次建立卷积层前,都先使用填0层认为地增加卷积层的输入尺寸,以此来避免卷积操作过度地缩小输入数据,如下面代码所示(神经网络的第一层需要指定输入参数的形状,我们在第一层就使用了填0层,所以需要在第一个填0层指定input_shape参数):②卷积层设计:通过查阅资料我们得知,在19*19的围棋数据训练中,过滤器的大小为5~10相对比较合适,所以我们选择5*5和7*7的卷积核,而对于过滤器数量的选择,100以下相对比较合适。如果过滤器的数量选择过多的话,构建出的模型参数的数量将会非常庞大,当然我们也可以选择使用池化层(Pooling)缩减空间、减少模型的参数:池化层(Pooling)是在卷积深度学习中比较常用的一种技术,他是通过将图像的各个分块合并成单个值,来对图像进行向下采样,以此缩小输入数据的尺寸,减少上一层的神经元的数量。以一个8*8的矩阵为例,我们采用一个2*2的分块、以最大池化策略进行空间缩减,具体过程为:将8*8的矩阵分成16个2*2的块,每一个块级矩阵都取其中的最大值来代替当前分块,最终形成一个4*4的矩阵,原来的64个参数就被缩减为16个参数。考虑到围棋的变化非常复杂,可能需要更多的参数来对围棋数据进行拟合,所以本次设计并没有采用池化层对每一个卷积层的输出参数进行缩减,对于每一个卷积层,使用ReLU激活函数进行激活错误!未找到引用源。,具体代码如下:③稠密层的设计:经过多个卷积层对输入数据进行处理后,我们可以得到多维的输出参数,但是Dense层的输入为向量(一维数据),所以我们需要先将卷7后首先使用KerasAPI的Flatten(),然后再传入Dense层。关于Dense层,我们也使用ReLU激活函数进行激活,并设置输出参数为1024,代码如下所示:keras.layers.Dense(1keras.layers.Activation('r④输出层的设计:对于整个机器模型,我们希望通激活层,因为棋盘大小为19*19,所以最终的输出应该是一个361的向量,表示go_board_rows,go_board_cols=19,19num_classes=go_board_rows*go_board_colsmodel.add(keras.layers.Dense(num_classes,activation='s至此监督学习阶段的神经网络已经基本构建完毕,核心层神经网络层代码如importtensorflowastffromtensorflow.python.keras.layersimportZeroPadding2D,Conv2D,Activation,Flatten,Densedeflayers(input_shape):ZeroPadding2D((3,3),input_shape=input_shape,data_format='channelsConv2D(64,(7,7),padding='valid',data_format='chanZeroPadding2D((2,2),data_format='channels_fConv2D(64,(5,5),data_format='channZeroPadding2D((2,2),data_format='channels_fConv2D(64,(5,5),data_format='channZeroPadding2D((2,2),data_format='channels_fConv2D(48,(5,5),data_format='chann8ZeroPadding2D((2,2),data_format='channels_fConv2D(48,(5,5),data_format='channZeroPadding2D((2,2),data_format='channels_fConv2D(32,(5,5),data_format='channZeroPadding2D((2,2),data_format='channels_fConv2D(32,(5,5),data_format='channkeras.layers.Dense(1keras.layers.Activation('r]input_shape=(encoder.num_planes,go_board_rows,go_bmodel=keras.Sequentnetwork_layers=layers(input_shape)model.add(keras.layers.Dense(num_classes,activation='so然后调用Keras模型的summary()方法查看模型,如下图4.5所示:9========================0000000000000000对应棋盘上的一个交叉点。如果使用SGD随机梯度下降,所有神经元的学习率太多,以至于在终盘阶段第1、2行上的动作再也无法得到有用的更新,即再也在数据集中出现的频率并不高。所以使用Adadelt③评估条件的选择:以accuracy评估模型实时训练过程的能力;通过监督学习得到的围棋机器人模型可以根据棋局状态对下一步的行棋动MDP是一个代理采取行动从而改变自己的状态获得奖励与环境发生交互的循环过程。求解强化学习问题所使用的算法可分为策略搜索算法和值函数算法两1.3.2强化学习实现本次博弈系统的强化学习部分的具体实现过程为:(1)价值网络构建本次设计选择以棋局最终结果作为反馈进行价值网络的构建,在博弈游戏中收获只有两种可能一一赢或输,而且都是在游戏结束时一次性获得的,而且一局棋的胜利必定有一部分要归功于棋局早期的表现,因此在构建价值网络的过程中,必须将最终收获回溯到之前的每一次动作,并且要计算一次行动的回报,应该将这次行动之后的所有收获累加起来。计算行动回报的部分代码如下所示:另外在博弈游戏中,一手棋对未来n个回合的影响是不一样的,一般情况下,越远离某一次行动,受到这手棋的影响应当越小,所以在计算回报的过程中,应当对每次行动进行加权处理,行动里的越远,权重应当越小,这样未来的收获就会比近期的收获影响小。我们可以采用收获打折的技巧对行动加权,比如每一步行动获得下一步行动的全部收获,再下一步的行动只获得80%,以此进行收获加权处理。更改代码如下所示:(2)模型自对弈强化学习需要足够多的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论