在之前的文章中分享了BP神经网络和CNN卷积神经网络,这一篇来分享残差神经网络(Resnet).
在实际的应用中,卷积神经网络的结构大体是这样的:
卷积层 – 池化层- 卷积层 – 池化层 – 卷积层 – 全连接层
一般来说,神经网络层数设计的越深,图像识别率越高。但神经网络设计的太深了,容易出现梯度衰减等各种问题让网络的性能大幅度下滑。为了解决这个问题,微软研究院的何恺明等人提出了残差卷积神经网络(resnet). 从而解决了因网络设计的太深而导致的性能下降的问题。
在Resnet之前,神经网络最多可以设计到22层,而采用了resnet的思想,神经网络可以设计到1000层。
从上图可以看出,残差单元的输出由多个卷积层级联的输出和输入元素间相加(保证卷积层输出和输入元素维度相同),再经过ReLU激活后得到。将这种结构级联起来,就得到了残差网络。
围棋AI 40b的权重就有40个这样的block. Talk is check, showme the code.
如下是围棋AI建立残差神经网络的tensorflow代码 :
以上代码首先建立输入层的卷积块,然后建立残差块。建立残差块的代码如下:
通过以上的代码建立的神经网络如下:
残差神经网络建立起来以后,然后就需要根据自对弈的棋谱在预处理,归一化后进行学习训练。
神经网络的权重训练好后,保存成文件。
在下棋时,当引擎启动后,会把权重读入内存。在蒙特卡洛搜索树搜索时,会去访问这个神经网络,从而拿到当前棋形的胜率和每个点的策略值。蒙特卡洛搜索树将会在以后的文章中分享。
如下代码是引擎去神经网络拿胜率和策略。
今天就先分享到这里吧,有些复杂,需要慢慢理解