请教#电脑儿童围棋入门软件软件中的ZEN6的七段,大致相

&figure&&img src=&/50/v2-8cc09c2cfcf1c981eead68_b.png& data-rawwidth=&504& data-rawheight=&254& class=&origin_image zh-lightbox-thumb& width=&504& data-original=&/50/v2-8cc09c2cfcf1c981eead68_r.png&&&/figure&&p&在 AlphaGo Zero 论文发布几天后,著名免费围棋程序 Leela 的作者就已开源了 &a href=&/?target=https%3A///gcp/leela-zero& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&gcp/leela-zero&i class=&icon-external&&&/i&&/a& 项目,基本复制了 AlphaGo Zero 方法(其中还对特征层做了个小改进可能会让黑白棋力更一致)。感兴趣的读者可点击看看。&/p&&p&但是 AlphaGo Zero 的难点不在于它的方法,它的方法是特别简单,我从前在这个专栏的文章也说过应该用 MCTS 去直接强化网络。关键是 DeepMind 的论文其实有点狡猾,没有说训练时的精确配置,结果所有新闻报道都把训练过程说成特别轻而易举。&/p&&p&实际上:&/p&&ol&&li&对弈时只需 4 个 TPU v2(估计相当于 40 张 GTX 1080 Ti?)就可实现超强的实力。&/li&&li&&b&从自我对弈棋谱训练网络,也不需要很强的算力。DeepMind 论文中的 64 个 GPU worker,完全足够。请评论中的朋友看清楚这一点。&/b&&/li&&li&&b&但生成自我对弈的棋谱,需要大量算力,需要的 TPU v2 数未知,经大家估算,需要 10000 张 GTX 1080 Ti 的算力。&/b&&/li&&/ol&&p&如 CGI 团队所计算的:&/p&&figure&&img src=&/50/v2-ddbd1ce84a8f8_b.jpg& data-caption=&& data-rawwidth=&580& data-rawheight=&1031& class=&origin_image zh-lightbox-thumb& width=&580& data-original=&/50/v2-ddbd1ce84a8f8_r.jpg&&&/figure&&figure&&img src=&/50/v2-c28d13fd91eea4dea743e879_b.jpg& data-caption=&& data-rawwidth=&580& data-rawheight=&1031& class=&origin_image zh-lightbox-thumb& width=&580& data-original=&/50/v2-c28d13fd91eea4dea743e879_r.jpg&&&/figure&&figure&&img src=&/50/v2-ce34cca8c183b634e66e7d_b.jpg& data-caption=&& data-rawwidth=&580& data-rawheight=&693& class=&origin_image zh-lightbox-thumb& width=&580& data-original=&/50/v2-ce34cca8c183b634e66e7d_r.jpg&&&/figure&&p&而 Leela 的作者也有类似的估算。&b&所以这需要许多人通力合作,把自我对弈过程做成一个分布式项目。估计除非把虚拟货币和这个挂上钩才会有这么多的算力。&/b&&/p&&p&此外,AlphaGo Zero 的 39 层(20 block)和 79 层(40 block)版本的棋力也有一定区别。下面是 20 block 版本,看上去极限小于 5000 ELO:&/p&&figure&&img src=&/50/v2-ce7cc14d316_b.jpg& data-caption=&& data-rawwidth=&273& data-rawheight=&238& class=&content_image& width=&273&&&/figure&&p&下面是 40 block 版本,看上去极限在 5500 ELO 或以上:&/p&&figure&&img src=&/50/v2-6ed0bf1ddf411c017e431c7e252d773d_b.jpg& data-caption=&& data-rawwidth=&510& data-rawheight=&252& class=&origin_image zh-lightbox-thumb& width=&510& data-original=&/50/v2-6ed0bf1ddf411c017e431c7e252d773d_r.jpg&&&/figure&&p&据 Zen 的作者所言,DeepMind 团队曾告诉他 Master 使用的是 20 block 版本的网络,而 ELO 在 4858。&b&所以 Zero 和 Master 在相同架构下棋力并没有区别,人类棋谱并没有反作用&/b&。&/p&
在 AlphaGo Zero 论文发布几天后,著名免费围棋程序 Leela 的作者就已开源了
项目,基本复制了 AlphaGo Zero 方法(其中还对特征层做了个小改进可能会让黑白棋力更一致)。感兴趣的读者可点击看看。但是 AlphaGo Zero 的难点不在于它的方法…
&p&号更新:完善了网络结构和MCTS搜索中的叶子节点选择的细节说明,加了几个有趣的细节&/p&&p&&b&评价,首先得看懂AlphaGo Zero是如何设计。先懂再评,否则口说无凭&/b&&/p&&p&这篇回答包含了详细的&b&原论文翻译及解析&/b&(几乎全篇论文,包括一些方法附录),如果想直接看&b&排版更加完美的版本&/b&欢迎移步&a href=&///?target=https%3A//charlesliuyx.github.io//%25E6%25B7%25B1%25E5%%25E6%25B5%%2587%25BA%25E7%259C%258B%25E6%AlphaGo%25E5%/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&我的博客&i class=&icon-external&&&/i&&/a& ,知乎&b&不支持文内跳转超链接&/b&,在一些我希望获得关联的时候,没有办法在知乎答案里实现这种交互方式(吐槽一下知乎编辑器对公式和行内代码块的支持真心让人很沮丧&/p&&p&如有疏漏请各位大神前辈指正!&/p&&hr&&p&在之前的详解:&a href=&///?target=https%3A//charlesliuyx.github.io//AlphaGo%25E8%25BF%%25A1%258C%25E5%258E%259F%25E7%E8%25A7%25A3%25E6%259E%2590/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入浅出看懂AlphaGo&i class=&icon-external&&&/i&&/a&中,详细定义的DeepMind团队定义围棋问题的结构,并且深入解读了AlphaGo1.0每下一步都发生了什么事,就在最近,AlphaGo Zero横空出世。个人观点是,如果你看了之前的文章,你就会觉得这是一个水到渠成的事情&/p&&p&&b&【上限置信区间算法(UCT)】&/b&&/p&&p&&b&一种博弈树搜索算法&/b&,是AlphaGo中一个重要组成部分:&b&MCTS搜索算法&/b&中的核心&/p&&p&法国南巴黎大学的数学家西尔万·热利(SylvainGelly)与巴黎技术学校的王毅早(YizaoWang,音译)将&b&UCT&/b&集成到一个他们称之为&b&MoGo&/b&的程序中。该程序的胜率竟然比先前最先进的蒙特卡罗扩展算法&b&几乎高出了一倍&/b&。&/p&&p&&b&2007年春季&/b&,MoGo在大棋盘比赛中也击败了实力稍弱的业余棋手,充分展示了能力。&b&科奇什(UCT算法发明者)预言,10年以后,计算机就能攻克最后的壁垒,终结人类职业棋手对围棋的统治&/b&。今年是2017年,AlphaGo系列横空出世。10年,总有着天才的人具有先知般的远见。&a href=&///?target=https%3A///item/UCT%25E7%25AE%%25B3%0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&详见UTC算法&i class=&icon-external&&&/i&&/a&&/p&&p&【小发现】&/p&&p&看完论文发现,这篇文章的&b&接受时间是号&/b&,审核完成时间是号,而在&b&乌镇对阵柯洁(号)&/b&用的可能是AlphaGo Master(这里没法证据来证明到底是AlphaGo Zero还是AlphaGo Master)。这个团队也是无情啊,有一种被戏耍的感觉……&/p&&p&根据Elo得分,Deepmind团队可能在赛前就透露过AlphaGo的棋力,即使是Master也有4858分啊,对于一个棋手来说,&b&选择接受&/b&这样一场对决,我感受到的是&b&风萧萧兮易水寒决绝的背影&/b&。&b&为柯洁的勇气打Call,当真围棋第一人,天下无双&/b&&/p&&h2&【1】论文正文内容详细解析&/h2&&p&先上干货论文:&a href=&///?target=https%3A///documents/119/agz_unformatted_nature.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Mastering the Game of Go without Human Knowledge&i class=&icon-external&&&/i&&/a& ,之后会主要&b&以翻译论文&/b&为主,在语言上&b&尽量易懂,避免翻译腔&/b&&/p&&p&AlphaGo Zero,从本质上来说完全不同于打败樊麾和李世石的版本&/p&&ul&&li&算法上,&b&自对弈强化学习,完全从随机落子开始&/b&,不用人类棋谱。之前使用了大量棋谱学习人类的下棋风格)&/li&&li&数据结构上,只有&b&黑子白子两种状态&/b&。之前包含这个点的气、征子情况等相关棋盘信息&/li&&li&模型上,使用&b&一个&/b&神经网络。之前使用了&b&策略网络(基于深度卷积神经网)&/b&学习人类的下棋风格,&b&局面网络&/b&(基于左右互搏生成的棋谱,为什么这里需要使用左右互搏是因为现有的数据集不够,没法判断落子胜率这一更难的问题)来计算在&b&当前局面下每一个不同落子的胜率&/b&&/li&&li&策略上,基于训练好的这个神经网,进行简单的&b&树形搜索&/b&。之前会使用蒙特卡洛算法实时演算并且&b&加权得出落子的位置&/b&&/li&&/ul&&h2&【1.1】AlphaGo Zero 的强化学习&/h2&&h2&【1.1.1】问题描述&/h2&&p&在开始之前,必须再过一遍如何符号化的定义一个围棋问题&/p&&p&围棋问题,棋盘 19×19=361 个交叉点可供落子,每个点三种状态,白(用1表示),黑(用-1表示),无子(用0表示),用 &img src=&///equation?tex=%5Cvec+s& alt=&\vec s& eeimg=&1&&&b&描述&/b&此时&b&棋盘的状态&/b&,即棋盘的&b&状态向量&/b&记为 &img src=&///equation?tex=%5Cvec+s& alt=&\vec s& eeimg=&1&& (state首字母)&br&&img src=&///equation?tex=%5Cvec+s+%3D+%28%5Cunderbrace%7B1%2C0%2C-1%2C%5Cldots%7D_%7B%5Ctext%7B361%7D%7D%29& alt=&\vec s = (\underbrace{1,0,-1,\ldots}_{\text{361}})& eeimg=&1&&&br&假设状态 &img src=&///equation?tex=%5Cvec+s& alt=&\vec s& eeimg=&1&& 下,暂不考虑不能落子的情况, 那么下一步可走的位置空间也是361个。将下一步的&b&落子行动&/b&也用一个361维的向量来表示,记为 &img src=&///equation?tex=%5Cvec+a& alt=&\vec a& eeimg=&1&& (action首字母)&br&&img src=&///equation?tex=%5Cvec+a+%3D+%280%2C%5Cldots%2C0%2C1%2C0%2C%5Cldots%29+& alt=&\vec a = (0,\ldots,0,1,0,\ldots) & eeimg=&1&&&br&假设其中1在向量中位置为39,则 &img src=&///equation?tex=%5Cvec+a& alt=&\vec a& eeimg=&1&& 表示在棋盘3行1列位置落&b&白子&/b&,黑白交替进行&/p&&p&有以上定义,我们就把围棋问题转化为。&/p&&blockquote&任意给定一个状态 &img src=&///equation?tex=%5Cvec+s+& alt=&\vec s & eeimg=&1&& ,寻找最优的应对策略 &img src=&///equation?tex=%5Cvec+a& alt=&\vec a& eeimg=&1&& ,最终可以获得棋盘上的最大地盘&/blockquote&&p&简而言之&/p&&blockquote&看到 &img src=&///equation?tex=%5Cvec+s& alt=&\vec s& eeimg=&1&& ,脑海中就是&b&一个棋盘,上面有很多黑白子&/b&&br&看到 &img src=&///equation?tex=%5Cvec+a& alt=&\vec a& eeimg=&1&& ,脑海中就想象一个人&b&潇洒的落子&/b&&/blockquote&&h2&【1.1.2】网络结构&/h2&&p&新的网络中,使用了一个参数为 &img src=&///equation?tex=%5Ctheta+& alt=&\theta & eeimg=&1&& (需要通过训练来不断调整) 的&b&深度神经网络 &/b&&img src=&///equation?tex=f_%5Ctheta+& alt=&f_\theta & eeimg=&1&&&/p&&ul&&li&【&b&网络输入&/b&】 &img src=&///equation?tex=19+%5Ctimes+19+%5Ctimes+17+%5C%3B%5C%3B%5C%3B+1%2F0%E5%80%BC& alt=&19 \times 19 \times 17 \;\;\; 1/0值& eeimg=&1&&:现在棋盘状态的 &img src=&///equation?tex=%5Cvec+s& alt=&\vec s& eeimg=&1&& 以及&b&包含现在状态的8步历史落子记录&/b&。最后一个位置记录黑白,0白1黑(这里选择8步历史数据,可能是由于围棋&b&循环劫&/b&存在的原因)&/li&&li&【&b&网络输出&/b&】两个输出:&b&落子概率(362个输出值)&/b&和&b&一个评估值([-1,1]之间)&/b&记为 &img src=&///equation?tex=f_%7B%5Ctheta%7D%28%5Cmathbf+%7B%5Cvec+s%7D%29+%3D+%28%5Cmathbf+p%2Cv%29& alt=&f_{\theta}(\mathbf {\vec s}) = (\mathbf p,v)& eeimg=&1&&&/li&&ul&&li&【落子概率 &img src=&///equation?tex=%5Cmathbf+p& alt=&\mathbf p& eeimg=&1&& 】 向量表示下一步在每一个可能位置&b&落子的概率,又称先验概率&/b& (加上不下的选择),即 &img src=&///equation?tex=p_a+%3D+Pr%28%5Cvec+a%7C%5Cmathbf+%7B%5Cvec+s%7D%29+& alt=&p_a = Pr(\vec a|\mathbf {\vec s}) & eeimg=&1&& (公式表示在当前输入条件下在每个可能点落子的概率)&/li&&li&【评估值
&img src=&///equation?tex=v& alt=&v& eeimg=&1&& 】 表示现在准备下当前这步棋的选手&b&在局面&/b& &img src=&///equation?tex=%5Cvec+s& alt=&\vec s& eeimg=&1&&&b&下的胜率&/b&(我这里强调局面是因为网络的输入包含历史对战过程)&/li&&/ul&&li&【&b&网络结构&/b&】基于&b&Residual Network&/b&(大名鼎鼎ImageNet冠军ResNet)的卷积网络,包含20或40个Residual Block(残差模块),加入&b&批量归一化&/b&Batch normalisation与&b&非线性整流器&/b&rectifier non-linearities模块(围棋的棋形)&/li&&/ul&&h2&【1.1.3】改进的强化学习算法&/h2&&p&自对弈强化学习算法(&a href=&///?target=https%3A///doc/WNKomuDNl& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&什么是强化学习&i class=&icon-external&&&/i&&/a&,非常建议先看看强化学习的一些基本思想和步骤,有利于理解下面策略、价值的概念,推荐&a href=&///?target=http%3A///steven-yang/p/6481772.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&系列笔记&i class=&icon-external&&&/i&&/a&)&/p&&p&在每一个状态 &img src=&///equation?tex=%5Cvec+s& alt=&\vec s& eeimg=&1&& ,利用&b&深度神经网络 &/b&&img src=&///equation?tex=f_%5Ctheta+& alt=&f_\theta & eeimg=&1&&&b&预测作为参照&/b&执行MCTS搜索(&a href=&///?target=https%3A//charlesliuyx.github.io//AlphaGo%25E8%25BF%%25A1%258C%25E5%258E%259F%25E7%E8%25A7%25A3%25E6%259E%2590/%23MCTS-%25E8%E7%%25E5%258D%25A1%25E6%25B4%259B%25E6%E7%25B4%25A2%25E6%25A0%%E2%E8%25B5%25B0%25E5%25AD%%25BC%%25AE%2597%25EF%25BC%2588Rollout%25EF%25BC%2589& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&蒙特卡洛搜索树算法&i class=&icon-external&&&/i&&/a&),&b&MCTS搜索的输出是每一个状态下在不同位置对应的概率&/b& &img src=&///equation?tex=%5Cboldsymbol+%5Cpi+& alt=&\boldsymbol \pi & eeimg=&1&&&b&(注意这里是一个向量,里面的值是MCTS搜索得出的概率值)&/b&,一种策略,从人类的眼光来看,就是看到现在局面,选择下在每个不同的落子的点的概率。如下面公式的例子,下在 &img src=&///equation?tex=%281%2C3%29& alt=&(1,3)& eeimg=&1&& 位置的概率是0.92,有很高概率选这个点作为&b&落子点&/b& &/p&&p&&img src=&///equation?tex=%5Cboldsymbol+%5Cpi_i+%3D+%28%5Cunderbrace%7B0.01%2C0.02%2C0.92%2C%5Cldots%7D_%7B%5Ctext%7B361%7D%7D%29+& alt=&\boldsymbol \pi_i = (\underbrace{0.01,0.02,0.92,\ldots}_{\text{361}}) & eeimg=&1&&&/p&&p&MCTS搜索得出的&b&落子概率&/b&比 &img src=&///equation?tex=f_%5Ctheta& alt=&f_\theta& eeimg=&1&& 输出的&b&仅使用神经网络输出的落子概率&/b& &img src=&///equation?tex=%5Cmathbf+p& alt=&\mathbf p& eeimg=&1&& 更强,因此,MCTS可以被视为一个强力的&b&策略改善(policy improvement)过程&/b&&/p&&p&使用基于MCTS提升后的策略(policy)来进行落子,然后用自对弈最终对局的胜者 &img src=&///equation?tex=z& alt=&z& eeimg=&1&& 作为价值(Value),作为一个强力的&b&策略评估(policy evaluation)过程&/b&&/p&&p&并用上述的规则,完成一个&b&通用策略迭代&/b&算法去更新神经网络的&b&参数&/b& &img src=&///equation?tex=%5Ctheta& alt=&\theta& eeimg=&1&& ,使得神经网络输出的&b&落子概率和评估值&/b&,即 &img src=&///equation?tex=f_%7B%5Ctheta%7D%28%5Cmathbf+%7B%5Cvec+s%7D%29+%3D+%28%5Cmathbf+p%2Cv%29+& alt=&f_{\theta}(\mathbf {\vec s}) = (\mathbf p,v) & eeimg=&1&& 更加贴近&b&能把这盘棋局赢下的落子方式(使用不断提升的MCST搜索落子策略ππ&/b& &b&和自对弈的胜者&/b& &img src=&///equation?tex=z& alt=&z& eeimg=&1&&&b&作为调整依据)&/b&。并且,在下轮迭代中使用&b&新的参数&/b&来进行自对弈&/p&&p&在这里补充&b&强化学习&/b&的&b&通用策略迭代&/b&(Generalized Policy Iteration)方法&/p&&ul&&li&从策略 &img src=&///equation?tex=%5Cpi_0& alt=&\pi_0& eeimg=&1&& 开始&/li&&li&&b&策略评估(Policy Evaluation)&/b&- 得到策略 &img src=&///equation?tex=%5Cpi_0& alt=&\pi_0& eeimg=&1&& 的价值 &img src=&///equation?tex=v_%7B%5Cpi_0%7D+& alt=&v_{\pi_0} & eeimg=&1&& (对于围棋问题,即这一步棋是好棋还是臭棋)&/li&&li&&b&策略改善(Policy Improvement)&/b&- 根据价值 &img src=&///equation?tex=v_%7B%5Cpi_0%7D+& alt=&v_{\pi_0} & eeimg=&1&& ,优化策略为 &img src=&///equation?tex=%5Cpi_%7B0%2B1%7D& alt=&\pi_{0+1}& eeimg=&1&& (即人类学习的过程,加强对棋局的判断能力,做出更好的判断)&/li&&li&迭代上面的步骤2和3,直到找到最优价值 &img src=&///equation?tex=v_%2A& alt=&v_*& eeimg=&1&& ,可以得到最优策略 &img src=&///equation?tex=%5Cpi_%2A& alt=&\pi_*& eeimg=&1&&&/li&&/ul&&figure&&img src=&/v2-852dacfe25e90ebcb89285_b.jpg& data-rawwidth=&2062& data-rawheight=&1854& class=&origin_image zh-lightbox-thumb& width=&2062& data-original=&/v2-852dacfe25e90ebcb89285_r.jpg&&&figcaption&Figure 1 【图1】&/figcaption&&/figure&&blockquote&【 a图】表示自对弈过程 &img src=&///equation?tex=s_1%2C%5Cldots%2Cs_T& alt=&s_1,\ldots,s_T& eeimg=&1&& 。在每一个位置 &img src=&///equation?tex=s_t& alt=&s_t& eeimg=&1&& ,使用最新的神经网络 &img src=&///equation?tex=f_%5Ctheta& alt=&f_\theta& eeimg=&1&& 执行一次MCTS搜索 &img src=&///equation?tex=%5Calpha_%5Ctheta& alt=&\alpha_\theta& eeimg=&1&& 。根据搜索得出的概率 &img src=&///equation?tex=a_t+%5Csim+%5Cboldsymbol+%5Cpi_i& alt=&a_t \sim \boldsymbol \pi_i& eeimg=&1&& 进行落子。终局 &img src=&///equation?tex=s_T& alt=&s_T& eeimg=&1&& 时根据围棋规则计算胜者 &img src=&///equation?tex=z& alt=&z& eeimg=&1&&&img src=&///equation?tex=%5Cboldsymbol+%5Cpi_i& alt=&\boldsymbol \pi_i& eeimg=&1&& 是每一步时执行MCTS搜索得出的结果(柱状图表示概率的高低)&br&【b图】表示更新神经网络参数过程。使用原始落子状态 &img src=&///equation?tex=%5Cvec+s_t& alt=&\vec s_t& eeimg=&1&& 作为输入,得到此棋盘状态 &img src=&///equation?tex=%5Cvec+s_t& alt=&\vec s_t& eeimg=&1&& 下&b&下一步所有可能落子位置的概率分布&/b& &img src=&///equation?tex=%5Cmathbf+p_t& alt=&\mathbf p_t& eeimg=&1&&
和&b&当前状态&/b& &img src=&///equation?tex=%5Cvec+s_t& alt=&\vec s_t& eeimg=&1&&&b&下选手的赢棋评估值&/b& &img src=&///equation?tex=v_t& alt=&v_t& eeimg=&1&&&b&以最大化&/b& &img src=&///equation?tex=%5Cmathbf+p_t& alt=&\mathbf p_t& eeimg=&1&&&b&与&/b& &img src=&///equation?tex=%5Cboldsymbol+%5Cpi_t& alt=&\boldsymbol \pi_t& eeimg=&1&&&b&相似度和最小化预测的胜者&/b& &img src=&///equation?tex=v_t& alt=&v_t& eeimg=&1&&&b&和局终胜者&/b& &img src=&///equation?tex=z& alt=&z& eeimg=&1&&&b&的误差来更新神经网络参数&/b& &img src=&///equation?tex=%5Ctheta& alt=&\theta& eeimg=&1&&&b&(详见公式1)&/b& ,更新参数 &img src=&///equation?tex=%5Ctheta+& alt=&\theta & eeimg=&1&& ,下一轮迭代中使用新神经网络进行自我对弈&/blockquote&&p&我们知道,最初的蒙特卡洛树搜索算法是&b&使用随机&/b&来进行模拟,在AlphaGo1.0中使用&a href=&///?target=https%3A//charlesliuyx.github.io//AlphaGo%25E8%25BF%%25A1%258C%25E5%258E%259F%25E7%E8%25A7%25A3%25E6%259E%E5%%25E7%%25E5%25BC%25BA%25E5%258C%%25AD%25A6%25E4%25B9%25A0%25E5%25A2%259E%25E5%25BC%25BA%25E6%25A3%258B%25E5%258A%259B& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&局面函数辅助策略函数作为落子的参考&i class=&icon-external&&&/i&&/a&进行模拟。在&b&最新的模型中,蒙特卡洛搜索树使用神经网络&/b& &img src=&///equation?tex=f_%5Ctheta& alt=&f_\theta& eeimg=&1&&&b&的输出来作为落子的参考&/b&(详见下图Figure 2)&/p&&p&每一条边 &img src=&///equation?tex=%28%5Cvec+s%2C%5Cvec+a%29& alt=&(\vec s,\vec a)& eeimg=&1&& (每个状态下的落子选择)保存的是三个值:先验概率 &img src=&///equation?tex=P%28%5Cvec+s%2C%5Cvec+a%29+& alt=&P(\vec s,\vec a) & eeimg=&1&& ,访问次数
&img src=&///equation?tex=N%28%5Cvec+s%2C%5Cvec+a%29+& alt=&N(\vec s,\vec a) & eeimg=&1&& ,行动价值 &img src=&///equation?tex=Q%28%5Cvec+s%2C%5Cvec+a%29+& alt=&Q(\vec s,\vec a) & eeimg=&1&&&/p&&p&每次&b&模拟&/b&(模拟一盘棋,直到分出胜负)从根状态开始,每次落子最大化&a href=&///?target=https%3A///item/UCT%25E7%25AE%%25B3%0%3Ffr%3Daladdin& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&上限置信区间&i class=&icon-external&&&/i&&/a& &img src=&///equation?tex=Q%28%5Cvec+s%2C%5Cvec+a%29+%2B+U%28%5Cvec+s%2C%5Cvec+a%29& alt=&Q(\vec s,\vec a) + U(\vec s,\vec a)& eeimg=&1&&
其中 &img src=&///equation?tex=U%28%5Cvec+s%2C%5Cvec+a%29%5Cpropto%5Cfrac%7BP%28%5Cvec+s%2C%5Cvec+a%29%7D%7B%7B1%7D%2B%7BN%28%5Cvec+s%2C%5Cvec+a%29%7D%7D& alt=&U(\vec s,\vec a)\propto\frac{P(\vec s,\vec a)}{{1}+{N(\vec s,\vec a)}}& eeimg=&1&& 直到遇到叶子节点 &img src=&///equation?tex=%5Cvec+s%27& alt=&\vec s'& eeimg=&1&&&/p&&p&叶子节点(终局)只会被产生一次用于产生&b&先验概率和评估值&/b&,符号表示即 &img src=&///equation?tex=f_%5Ctheta%28s%E2%80%99%29+%3D+%28P%28s%E2%80%99%2C%5Ccdot%29%2C+V%28s%E2%80%99%29%29+& alt=&f_\theta(s’) = (P(s’,\cdot), V(s’)) & eeimg=&1&&&/p&&p&模拟过程中&b&遍历每条边&/b& &img src=&///equation?tex=%28%5Cvec+s%2C%5Cvec+a%29& alt=&(\vec s,\vec a)& eeimg=&1&& 时更新&b&记录的统计数据&/b&。访问次数加一 &img src=&///equation?tex=N%28%5Cvec+s%2C%5Cvec+a%29+%2B%3D+1+& alt=&N(\vec s,\vec a) += 1 & eeimg=&1&& ;更新行动价值为整个模拟过程的平均值,即 &img src=&///equation?tex=Q%28%5Cvec+s%2C%5Cvec+a%29%3D%5Cfrac%7B1%7D%7BN%28%5Cvec+s%2C%5Cvec+a%29%7D%5CSigma_%7B%5Cvec+s%27%7C%5Cvec+s%2C%5Cvec+a%5CRightarrow+%5Cvec+s%27%7DV%28%5Cvec+s%27%29& alt=&Q(\vec s,\vec a)=\frac{1}{N(\vec s,\vec a)}\Sigma_{\vec s'|\vec s,\vec a\Rightarrow \vec s'}V(\vec s')& eeimg=&1&&&/p&&p&&img src=&///equation?tex=%5Cvec+s%27%7C%5Cvec+s%2C+%5Cvec+a+%5CRightarrow+%5Cvec+s%27& alt=&\vec s'|\vec s, \vec a \Rightarrow \vec s'& eeimg=&1&& 表示在模拟过程中从 &img src=&///equation?tex=%5Cvec+s& alt=&\vec s& eeimg=&1&& 走到 &img src=&///equation?tex=%5Cvec+s%27& alt=&\vec s'& eeimg=&1&& 的所有落子行动 &img src=&///equation?tex=%5Cvec+a& alt=&\vec a& eeimg=&1&&&/p&&figure&&img src=&/v2-a8db92fe3f4d_b.jpg& data-rawwidth=&3086& data-rawheight=&850& class=&origin_image zh-lightbox-thumb& width=&3086& data-original=&/v2-a8db92fe3f4d_r.jpg&&&figcaption&Figure 2【图2】&/figcaption&&/figure&&blockquote&【a图】表示模拟过程中遍历时选 &img src=&///equation?tex=Q%2BU& alt=&Q+U& eeimg=&1&& 更大的作为落子点&br&【b图】叶子节点 &img src=&///equation?tex=s_L& alt=&s_L& eeimg=&1&& 的扩展和评估。&b&使用神经网络对状态&/b& &img src=&///equation?tex=s_L& alt=&s_L& eeimg=&1&&&b&进行评估&/b&,即 &img src=&///equation?tex=f_%5Ctheta%28s_L%29+%3D+%28P%28s_L%2C%5Ccdot%29%2C+V%28s_L%29%29& alt=&f_\theta(s_L) = (P(s_L,\cdot), V(s_L))& eeimg=&1&& ,&b&其中&/b& &img src=&///equation?tex=P& alt=&P& eeimg=&1&&&b&的值存储在叶子节点扩展的边中&/b&&br&【c图】更新&b&行动价值&/b& &img src=&///equation?tex=Q& alt=&Q& eeimg=&1&& 等于此时根状态 &img src=&///equation?tex=%5Cvec+s& alt=&\vec s& eeimg=&1&& 所有子树评估值 &img src=&///equation?tex=V& alt=&V& eeimg=&1&& 的平均值&br&【d图】当MCTS搜索完成后,&b&返回这个状态&/b& &img src=&///equation?tex=%5Cvec+s& alt=&\vec s& eeimg=&1&&&b&下每一个位置的落子概率&/b& &img src=&///equation?tex=%5Cboldsymbol+%5Cpi& alt=&\boldsymbol \pi& eeimg=&1&& ,成比例于 &img src=&///equation?tex=N%5E%7B1%2F%5Ctau%7D+& alt=&N^{1/\tau} & eeimg=&1&& ( &img src=&///equation?tex=N& alt=&N& eeimg=&1&& 为访问次数, &img src=&///equation?tex=%5Ctau& alt=&\tau& eeimg=&1&& 为控温常数)&br&更加具体的详解见:&a href=&///?target=https%3A//charlesliuyx.github.io//%25E6%25B7%25B1%25E5%%25E6%25B5%%2587%25BA%25E7%259C%258B%25E6%AlphaGo%25E5%/%23%25E6%E7%25B4%25A2%25E7%25AE%%25B3%2595& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&搜索算法&i class=&icon-external&&&/i&&/a&&/blockquote&&p&MCTS搜索可以看成一个自对弈过程中决定每一步如何下的依据,根据神经网络的参数 &img src=&///equation?tex=%5Ctheta& alt=&\theta& eeimg=&1&& 和根的状态 &img src=&///equation?tex=%5Cvec+s& alt=&\vec s& eeimg=&1&& 去计算&b&每个状态下落子位置的先验概率&/b&,记为 &img src=&///equation?tex=%5Cboldsymbol+%5Cpi+%3D+%5Calpha_%5Ctheta%28%5Cvec+s%29& alt=&\boldsymbol \pi = \alpha_\theta(\vec s)& eeimg=&1&& ,幂指数&b&正比于&/b&访问次数
&img src=&///equation?tex=%5Cpi_%7B%5Cvec+a%7D+%5Cpropto+N%28%5Cvec+s%2C+%5Cvec+a%29%5E%7B1%2F%5Ctau%7D+& alt=&\pi_{\vec a} \propto N(\vec s, \vec a)^{1/\tau} & eeimg=&1&& , &img src=&///equation?tex=%5Ctau& alt=&\tau& eeimg=&1&&
是温度常数&/p&&h2&【1.1.4】训练步骤总结&/h2&&p&使用MCTS下每一步棋,进行自对弈,&b&强化学习算法(必须了解通用策略迭代的基本方法)的迭代过程中&/b&训练神经网络&/p&&ul&&li&神经网络参数&b&随机初始化&/b& &img src=&///equation?tex=%5Ctheta_0& alt=&\theta_0& eeimg=&1&&&/li&&li&每&b&一轮迭代&/b& &img src=&///equation?tex=i+%5Cgeqslant+1& alt=&i \geqslant 1& eeimg=&1&& ,都&b&自对弈一盘&/b&(见&a href=&///?target=https%3A//charlesliuyx.github.io//%25E6%25B7%25B1%25E5%%25E6%25B5%%2587%25BA%25E7%259C%258B%25E6%AlphaGo%25E5%/%23Figure1& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Figure-1a&i class=&icon-external&&&/i&&/a&)&/li&&li&第 &img src=&///equation?tex=t& alt=&t& eeimg=&1&& 步:MCTS搜索 &img src=&///equation?tex=%5Cboldsymbol+%5Cpi_t+%3D+%5Calpha+%5Ctheta_%7Bi-1%7D%28s_t%29& alt=&\boldsymbol \pi_t = \alpha \theta_{i-1}(s_t)& eeimg=&1&& 使用&b&前一次迭代的神经网络&/b& &img src=&///equation?tex=f_%7B%5Ctheta_%7Bi-1%7D%7D+& alt=&f_{\theta_{i-1}} & eeimg=&1&& ,根据MCTS结构计算出的&b&落子策略&/b& &img src=&///equation?tex=%5Cboldsymbol+%5Cpi_t+& alt=&\boldsymbol \pi_t & eeimg=&1&&&b&的联合分布进行【采样】再落子&/b&&/li&&li&在
&img src=&///equation?tex=T& alt=&T& eeimg=&1&&
步 :双方都选择跳过;搜索时评估值低于投降线;棋盘无地落子。根据胜负得到&b&奖励值&/b&Reward &img src=&///equation?tex=r_T+%5Cin+%5C%7B-1%2C%2B1%5C%7D+& alt=&r_T \in \{-1,+1\} & eeimg=&1&&。&/li&&li&MCTS搜索下至中盘的过程的每一个第
&img src=&///equation?tex=t& alt=&t& eeimg=&1&&
步的数据存储为 &img src=&///equation?tex=%5Cvec+s_t%2C%5Cmathbf+%5Cpi_t%2C+z_t+& alt=&\vec s_t,\mathbf \pi_t, z_t & eeimg=&1&& ,其中 &img src=&///equation?tex=z_t+%3D+%5Cpm+r_T+& alt=&z_t = \pm r_T & eeimg=&1&& 表示在第 &img src=&///equation?tex=t& alt=&t& eeimg=&1&& 步时的胜者&/li&&li&同时,从上一步 &img src=&///equation?tex=%5Cvec+s& alt=&\vec s& eeimg=&1&& 迭代时自对弈棋局过程中产生的数据&img src=&///equation?tex=%28%5Cvec+s%2C+%5Cboldsymbol+%5Cpi%2C+z%29& alt=&(\vec s, \boldsymbol \pi, z)& eeimg=&1&&( &img src=&///equation?tex=%5Cvec+s& alt=&\vec s& eeimg=&1&&&b&为训练数据,&/b& &img src=&///equation?tex=%5Cboldsymbol+%5Cpi%2C+z+& alt=&\boldsymbol \pi, z & eeimg=&1&&&b&为标签&/b&)中&b&采样&/b&(这里的采样是指选Mini-Batch)来训练网络参数
&img src=&///equation?tex=%5Ctheta_i& alt=&\theta_i& eeimg=&1&& ,&/li&&li&神经网络 &img src=&///equation?tex=f_%7B%5Ctheta_i%7D%28%5Cvec+s%29+%3D+%28%5Cmathbf+p%2C+v%29+& alt=&f_{\theta_i}(\vec s) = (\mathbf p, v) & eeimg=&1&& 以&b&最大化&/b& &img src=&///equation?tex=%5Cmathbf+p_t& alt=&\mathbf p_t& eeimg=&1&&&b&与&/b& &img src=&///equation?tex=%5Cboldsymbol+%5Cpi_t& alt=&\boldsymbol \pi_t& eeimg=&1&&&b&相似度和最小化预测的胜者&/b& &img src=&///equation?tex=v_t& alt=&v_t& eeimg=&1&&&b&和局终胜者&/b& &img src=&///equation?tex=z& alt=&z& eeimg=&1&&&b&的误差来更新神经网络参数&/b& &img src=&///equation?tex=%5Ctheta& alt=&\theta& eeimg=&1&& ,损失函数公式如下&/li&&/ul&&p&&img src=&///equation?tex=l+%3D+%28z+-+v%29%5E2+-+%5Cboldsymbol+%7B%5Cpi%7D%5ET+%5Clog%28%5Cmathbf+p%29+%2B+c+%5CVert+%5Ctheta+%5CVert+%5E2+%5Ctag+1& alt=&l = (z - v)^2 - \boldsymbol {\pi}^T \log(\mathbf p) + c \Vert \theta \Vert ^2 \tag 1& eeimg=&1&&&/p&&blockquote&其中
&img src=&///equation?tex=c& alt=&c& eeimg=&1&&
是L2正则化的系数&/blockquote&&h2&【1.2】AlphaGo Zero训练过程中的经验&/h2&&p&最开始,使用完全的随机落子&b&训练持续了大概3天&/b&。训练过程中,产生490万场自对弈,每次MCTS大约1600次模拟,每一步使用的时间0.4秒。使用了2048个位置的70万个Mini-Batches来进行训练&/p&&p&训练结果如下,图3&/p&&figure&&img src=&/v2-1d2d1ddcbb00a7be6d48_b.jpg& data-rawwidth=&3280& data-rawheight=&1050& class=&origin_image zh-lightbox-thumb& width=&3280& data-original=&/v2-1d2d1ddcbb00a7be6d48_r.jpg&&&figcaption&Figure 3【图3】&/figcaption&&/figure&&blockquote&【a图】表示随时间AlphaGo Zero棋力的增长情况,&b&显示了每一个不同的棋手&/b& &img src=&///equation?tex=%5Calpha_%7B%5Ctheta_i%7D& alt=&\alpha_{\theta_i}& eeimg=&1&&&b&在每一次强化学习迭代时的表现&/b&,可以看到,它的增长曲线非常平滑,没有很明显的震荡,稳定性很好&br&【b图】表示的是&b&预测准确率&/b&基于不同迭代第 &img src=&///equation?tex=i& alt=&i& eeimg=&1&& 轮的 &img src=&///equation?tex=f_%7B%5Ctheta_i%7D& alt=&f_{\theta_i}& eeimg=&1&&&br&【c图】表示的MSE(平方误差)&/blockquote&&p&在24小时的学习后,无人工因素的强化学习方案就打败了通过模仿人类棋谱的监督学习方法&/p&&p&为了分别评估结构和算法对结构的影响,得到了,下图4&/p&&figure&&img src=&/v2-5d6c621e8b8e33b91c1f7c44d5b9992c_b.jpg& data-rawwidth=&3170& data-rawheight=&1542& class=&origin_image zh-lightbox-thumb& width=&3170& data-original=&/v2-5d6c621e8b8e33b91c1f7c44d5b9992c_r.jpg&&&figcaption&Figure 4 【图4】&/figcaption&&/figure&&blockquote&【dual-res】表示 AlphaGo Zero(20个模块),策略头和评估值头由一个网络产生&br&【sep-res】表示使用20个残差模块,策略头和评估值头被分成两个不同的网络&br&【dual-conv】表示不用ResNet,使用&b&12层卷积网&/b&,同时包括策略头和评估值头&br&【sep-conv】表示 AlphaGo Lee(击败李世乭的)使用的网络结构,策略头和评估值头被分成两个不同的网络&/blockquote&&p&&a href=&///?target=https%3A//charlesliuyx.github.io//%25E6%25B7%25B1%25E5%%25E6%25B5%%2587%25BA%25E7%259C%258B%25E6%AlphaGo%25E5%/%23%25E6%25B7%25B1%25E5%25BA%25A6%25E7%25A5%259E%25E7%25BB%258F%25E7%25BD%%25BB%%259E%2584& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&头的概念详见网络结构&i class=&icon-external&&&/i&&/a&&/p&&h2&【1.3】AlphaGo Zero学到的知识&/h2&&p&在训练过程中,AlphaGo Zero可以一步步的学习到一些&b&特殊的围棋技巧(定式)&/b&,如图5&/p&&figure&&img src=&/v2-06e5ac7cb0d42d7ab74abe_b.jpg& data-rawwidth=&2090& data-rawheight=&1846& class=&origin_image zh-lightbox-thumb& width=&2090& data-original=&/v2-06e5ac7cb0d42d7ab74abe_r.jpg&&&figcaption&Figure 5【图5】&/figcaption&&/figure&&blockquote&中间的黑色横轴表示的是学习时间&br&【a图】对应的5张棋谱展现的是不同阶段AlphaGo Zero在自对弈过过程中展现出来的&b&围棋定式&/b&上的新发现&br&【b图】展示在右星位上的定式下法的进化。可以看到训练到50小时,&b&点三三出现了&/b&,但再往后训练,b图中的&b&第五种定式&/b&高频率出现,在AlphGa Zero看来,这一种形式似乎更加强大&br&【c图】展现了前80手自对弈的棋谱伴随时间,明显有很大的提升,在第三幅图中,已经展现出了比较明显的&b&围&/b&的倾向性&br&具体频率图见:&a href=&///?target=https%3A//charlesliuyx.github.io//%25E6%25B7%25B1%25E5%%25E6%25B5%%2587%25BA%25E7%259C%258B%25E6%AlphaGo%25E5%/%23Figure5& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&出现频率随训练时间分布图&i class=&icon-external&&&/i&&/a&&/blockquote&&h2&【1.4】AlphaGo Zero的最终实力&/h2&&p&之后,最终的AlphaGo Zero 使用40个残差模块,训练接近40天。在训练过程中,产生了2900万盘的自对弈棋谱,使用了310万个Mini-Batches来训练神经网络,每一个Mini-Batch包含了2048个不同的状态。(覆盖的状态数是63亿 &img src=&///equation?tex=%5Capprox10%5E%7B10%7D& alt=&\approx10^{10}& eeimg=&1&& ,但和围棋的解空间 &img src=&///equation?tex=2%5E%7B361%7D+%5Capprox+10%5E%7B108%7D& alt=&2^{361} \approx 10^{108}& eeimg=&1&& 相比真的很小,也从侧面反映出,&b&围棋中大部分选择都是冗余的&/b&。在一个棋盘局面下,根据&b&先验概率&/b&,估计只有15-20种下法是&b&值得考虑&/b&的)&/p&&p&被评测不同版本使用计算力的情况,AlphaGo Zero和AlphaGo Master被部署到有&b&4个TPUs&/b&的单机上运行(主要用于做&b&模型的输出预测Inference和MCTS搜索&/b&),AlphaGo Fan(打败樊麾版本)和AlphaGo Lee(打败李世乭版本) &b&分布式部署到机器群&/b&里,总计有176GPUs和48GPUs(Goolge真有钱)。还加入了&b&raw network,它是每一步的仅仅使用训练好的深度学习神经网的输出&/b& &img src=&///equation?tex=%5Cmathbf+p_%7B%5Cvec+a%7D& alt=&\mathbf p_{\vec a}& eeimg=&1&&&b&为依据选择最大概率点来落子,不使用MCTS搜索&/b&(Raw Network裸用深度神经网络的输出已经十分强大,甚至已经接近了AlphaGo Fan)&/p&&p&下图6展示不同种AlphaGo版本的棋力情况&/p&&figure&&img src=&/v2-e9cddfafe1a898d3cfc8c02_b.jpg& data-rawwidth=&3234& data-rawheight=&1306& class=&origin_image zh-lightbox-thumb& width=&3234& data-original=&/v2-e9cddfafe1a898d3cfc8c02_r.jpg&&&figcaption&Figure 6【图6】&/figcaption&&/figure&&blockquote&【a图】随着训练时间棋力的增强曲线&br&【b图】裸神经网络得分3055,AlphaGo Zero得分5185,AlphaGo Master得分4858,AlphaGo Lee得分3738,AlphaGo Fan得分3144&/blockquote&&p&最终,AlphaGo Zero 与 AlphaGo Master的&b&对战比分为89:11&/b&,对局中限制一场比赛在&b&2小时之内&/b&(新闻中的&b&零封&/b&是下赢李世乭的AlphaGo Lee)&/p&&h2&【2】论文附录内容&/h2&&p&我们知道,Nature上的文章一般都是很强的可读性和严谨性,每一篇文章的正文可能只有4-5页,但是附录一般会远长于正文。基本所有你的&b&技术细节疑惑&/b&都可以在其中找到结果,这里值列举一些我自己比较感兴趣的点,如果你是专业人士,甚至想复现AlphaGo Zero,读原文更好更精确&/p&&h2&【2.1】围棋领域先验知识&/h2&&p&AlphaGo Zero最主要的贡献是&b&证明了没有人类的先验知识机器也可以在性能上超越人类&/b&。为了阐释清楚这种贡献来自于何处,我们列举一些AlphaGo Zero使用到的&b&知识&/b&,无论是训练过工程中的还是MCTS搜索中的。如果你想把AlphaGo Zero的思路&b&应用的到解决其他游戏问题&/b&上,这些内容可能需要被替换&/p&&h2&【2.1.1】围棋基本规则&/h2&&p&无论实在MCTS搜索中的模拟还是自对弈的过程,都依赖游戏最终的胜负规则,并且在落子过程中,根据规则还可以&b&排除一部分不可以落子的点&/b&(比如已经落子的点,无法确认在AlphaGo Zero还有气为零的点不能下这个规则,因为&b&不记录气的信息&/b&了。但可以&b&写一个函数来判断&/b&当前局面 &img src=&///equation?tex=%5Cvec+s& alt=&\vec s& eeimg=&1&& 下&b&下一步所有可能的落子点&/b&,不一定非得计算这个信息,这个过程可以&b&完全多线程&/b&)&/p&&h2&【2.1.2】Tromp-Taylor规则&/h2&&p&在AlphaGo Zero中使用的是PSK(Positional Superko)禁全同规则(中国,韩国及日本使用),只要这一手(不包括跳过)会导致再现之前的局面,就禁止。&/p&&h2&【2.1.3】旋转与镜面&/h2&&p&对于围棋来说,&b&几个状态 &/b&&img src=&///equation?tex=%5Cvec+s& alt=&\vec s& eeimg=&1&&&b&在经过旋转或反射后是完全相同的&/b&,这种规律可以用来优化训练数据和MCTS搜索中的子树替换策略。并且因为&b&贴目(黑棋先下优势贴目7目半)规则&/b&存在,不同状态
&img src=&///equation?tex=%5Cvec+s& alt=&\vec s& eeimg=&1&&&b&换颜色也是相同的&/b&。这个规则可以用来使用当前下子的棋手的角度来表示棋盘&/p&&p&除了以上的三个规则,AlphaGo Zero &b&没有使用其他任何先验知识&/b&,它仅仅使用深度神经网络对叶子节点进行评估并选择落子位置。它没有使用任何Rollout Policy(这里指的应该是AlphaGo之前版本的快速走子策略)或者树形规则,MCTS搜索也没有使用&b&其他的标准启发式规则&/b&或者&b&先验常识规则&/b&去进行增强&/p&&p&整个算法从随机初始化神经网络参数开始。&a href=&///?target=https%3A//charlesliuyx.github.io//%25E6%25B7%25B1%25E5%%25E6%25B5%%2587%25BA%25E7%259C%258B%25E6%AlphaGo%25E5%/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&网络结构&i class=&icon-external&&&/i&&/a&和&a href=&///?target=https%3A//charlesliuyx.github.io//%25E6%25B7%25B1%25E5%%25E6%25B5%%2587%25BA%25E7%259C%258B%25E6%AlphaGo%25E5%/%23%25E4%25BC%%258C%%258F%%& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&超参数选择&i class=&icon-external&&&/i&&/a& 见下一节。MCTS搜索的超参数 &img src=&///equation?tex=c_%7Bpuct%7D& alt=&c_{puct}& eeimg=&1&& 由&a href=&///?target=http%3A//ieeexplore.ieee.org/document/Freload%3Dtrue& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&高斯过程优化&i class=&icon-external&&&/i&&/a&决定,为了&b&优化自对弈的性能&/b&,使用了一个神经网络进行&b&预训练&/b&。对于一个大规模网络的训练过程(40个残差模块,40天),使用一个小规模网络(20个残差模块,3天)来&b&反复优化MCTS搜索的超参数&/b& &img src=&///equation?tex=c_%7Bpuct%7D& alt=&c_{puct}& eeimg=&1&& 。整个&b&训练过程没有任何人工干预&/b&&/p&&h2&【2.1】自对弈训练工作流&/h2&&p&AlphaGo Zero的工作流由三个模块构成,可以异步多线程进行:&/p&&ul&&li&深度神经网络&b&参数&/b& &img src=&///equation?tex=%5Ctheta_i& alt=&\theta_i& eeimg=&1&& 根据自对弈数据&b&持续优化&/b&&/li&&li&持续对棋手&img src=&///equation?tex=%5Calpha_%7B%5Ctheta_i%7D+& alt=&\alpha_{\theta_i} & eeimg=&1&&&b&棋力值&/b&进行&b&评估&/b&&/li&&li&使用表现最好的 &img src=&///equation?tex=%5Calpha_%7B%5Ctheta_%2A%7D+& alt=&\alpha_{\theta_*} & eeimg=&1&& 用来产生新的&b&自对弈数据&/b&&/li&&/ul&&h2&【2.1.1】优化参数&/h2&&p&每一个神经网络 &img src=&///equation?tex=f_%7B%5Ctheta_i%7D+& alt=&f_{\theta_i} & eeimg=&1&& 在&b&64个GPU工作节点&/b&和&b&19个CPU参数服务器&/b&上进行优化。&/p&&p&&b&批次(batch)每个工作节点32个&/b&,每一个&b&mini-batch大小为2048&/b&。每一个 &b&mini-batch 的数据&/b&从最近&b&50万盘&/b&的自对弈棋谱的状态中联合随机采样。&/p&&p&&b&神经网络权重&/b&更新使用带有&b&动量(momentum)和学习率退火(learning rate annealing)的随机梯度下降法(SGD)&/b&,损失函数见公式1&/p&&p&学习率退火比率见下表&/p&&img src=&/v2-68eaf20ca5edee32b1d38_b.jpg& data-caption=&& data-rawwidth=&1219& data-rawheight=&566& class=&origin_image zh-lightbox-thumb& width=&1219& data-original=&/v2-68eaf20ca5edee32b1d38_r.jpg&&&p&动量参数设置为&b&0.9;&/b&L2正则化系数设置为
&img src=&///equation?tex=c+%3D+10%5E%7B-4%7D+& alt=&c = 10^{-4} & eeimg=&1&&&/p&&p&&b&方差项&/b&和&b&交叉熵项&/b&的权重相同,原因是奖励值被归一化到 r ∈ [-1,+1]&/p&&p&&b&优化过程每1000个训练步数&/b&执行一次,并使用这个&b&新模型&/b&来生成下一个Batch的&b&自对弈棋谱&/b&&/p&&h2&【2.1.2】评估器&/h2&&p&为了保证生成数据的质量(不至于棋力反而下降),在使用&b&新的神经网络去生成自对弈棋谱前&/b&,用&b&现有的最好网络 &/b&&img src=&///equation?tex=f_%7B%5Ctheta_%2A%7D+& alt=&f_{\theta_*} & eeimg=&1&& 来对它进行评估&/p&&p&【评估神经网络 &img src=&///equation?tex=f_%7B%5Ctheta_i%7D+& alt=&f_{\theta_i} & eeimg=&1&& 的方法】是使用 &img src=&///equation?tex=f_%7B%5Ctheta_i%7D+& alt=&f_{\theta_i} & eeimg=&1&& 进行MCTS搜索得出
&img src=&///equation?tex=%5Calpha_%7B%5Ctheta_i%7D+& alt=&\alpha_{\theta_i} & eeimg=&1&&的&b&性能&/b&(得到 &img src=&///equation?tex=%5Calpha_%7B%5Ctheta_i%7D+& alt=&\alpha_{\theta_i} & eeimg=&1&& 的MCTS搜索过程中使用 &img src=&///equation?tex=f_%7B%5Ctheta_i%7D+& alt=&f_{\theta_i} & eeimg=&1&& 去估计&b&叶子节点的位置&/b&和&b&先验概率&/b&,&a href=&///?target=https%3A//charlesliuyx.github.io//%25E6%25B7%25B1%25E5%%25E6%25B5%%2587%25BA%25E7%259C%258B%25E6%AlphaGo%25E5%/%23MCTS%25E6%E7%25B4%25A2%25E7%25AE%%25B3%2595& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&详见MCTS搜索这一节&i class=&icon-external&&&/i&&/a&)&/p&&p&每一个评估由&b&400盘对局&/b&组成,MCTS搜索使用&b&1600次模拟&/b&,将温度参数设为无穷小
&img src=&///equation?tex=%5Ctau+%5CRightarrow+0+& alt=&\tau \Rightarrow 0 & eeimg=&1&& (目的是为了使用&b&最多访问次数&/b&的落子下法去下,追求最强的棋力),如果新的选手 &img src=&///equation?tex=%5Calpha_%7B%5Ctheta_i%7D& alt=&\alpha_{\theta_i}& eeimg=&1&& 胜率大于 55%,将这个选手更新为最佳选手 &img src=&///equation?tex=%5Calpha_%7B%5Ctheta_%2A%7D& alt=&\alpha_{\theta_*}& eeimg=&1&& ,用来产生下一轮的自对弈棋谱,并且设为下一轮的比较对象&/p&&h2&【2.1.3】自对弈&/h2&&p&通过评估器,现在已经有一个&b&当前的最好棋手&/b& &img src=&///equation?tex=%5Calpha_%7B%5Ctheta_%2A%7D& alt=&\alpha_{\theta_*}& eeimg=&1&& ,使用它来产生数据。在每一次迭代中,
&img src=&///equation?tex=%5Calpha_%7B%5Ctheta_%2A%7D& alt=&\alpha_{\theta_*}& eeimg=&1&&
自对弈&b&25000盘&/b&,其中每一步MCTS搜索模拟1600次(模拟的每次落子大约&b&0.4秒&/b&,这里的一次表示的就是MCTS搜索中走到叶子节点,得出胜负结果)&/p&&p&&b&前30步&/b&,温度 &img src=&///equation?tex=%5Ctau+%3D+1& alt=&\tau = 1& eeimg=&1&& ,与MCTS搜索中的访问次数成正比,目的是保证&b&前30步下法的多样性&/b&。在之后的棋局中,温度设为无穷小。并在&b&先验概率中加入狄利克雷噪声&/b& &img src=&///equation?tex=P%28%5Cvec+s%2C+%5Cvec+a%29+%3D+%281+-+%5Cepsilon%29+p_%7B%5Cvec+a%7D+%2B+%5Cepsilon+%5Ceta_%7B%5Cvec+a%7D+& alt=&P(\vec s, \vec a) = (1 - \epsilon) p_{\vec a} + \epsilon \eta_{\vec a} & eeimg=&1&& ,其中 &img src=&///equation?tex=%5Ceta+%5Csim+Dir%280.03%29+& alt=&\eta \sim Dir(0.03) & eeimg=&1&& 且 &img src=&///equation?tex=%5Cepsilon+%3D+0.25& alt=&\epsilon = 0.25& eeimg=&1&& 。这个噪声保证所有的落子可能都会被尝试,但可能下出臭棋&/p&&p&&b&投降阈值&/b& &img src=&///equation?tex=v_%7Bresign%7D& alt=&v_{resign}& eeimg=&1&& 自动设为&b&错误正类率(如果AlphaGo没有投降可以赢的比例)&/b&小于5%,为了测量错误正类(false positives),在10%的自对弈中关闭投降机制,必须下完&/p&&h2&【2.2】MCTS搜索算法&/h2&&p&这一部分详解的AlphaGo Zero的算法核心示意图&a href=&///?target=https%3A//charlesliuyx.github.io//%25E6%25B7%25B1%25E5%%25E6%25B5%%2587%25BA%25E7%259C%258B%25E6%AlphaGo%25E5%/%23Figure2& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Figure2&i class=&icon-external&&&/i&&/a&&/p&&p&AlphaGo Zero使用的是&b&比AlphaGo1.0中更简单&/b&的&b&异步策略价值MCTS搜索算法&/b&(APV-MCTS)的变种&/p&&p&搜索树的中的节点 &img src=&///equation?tex=%5Cvec+s& alt=&\vec s& eeimg=&1&& 包含一条边 &img src=&///equation?tex=%28%5Cvec+s%2C%5Cvec+a%29+& alt=&(\vec s,\vec a) & eeimg=&1&& 对应所有可能的落子 &img src=&///equation?tex=%5Cvec+a+%5Cin+%5Cmathcal+A%28%5Cvec+s%29+& alt=&\vec a \in \mathcal A(\vec s) & eeimg=&1&& ,每一条边中&b&存储一个数据,包含下列公式的四个值&/b& &img src=&///equation?tex=%7BN%28%5Cvec+s%2C%5Cvec+a%29%2C+W%28%5Cvec+s%2C%5Cvec+a%29%2C+Q%28%5Cvec+s%2C%5Cvec+a%29%2C+P%28%5Cvec+s%2C%5Cvec+a%29%7D+& alt=&{N(\vec s,\vec a), W(\vec s,\vec a), Q(\vec s,\vec a), P(\vec s,\vec a)} & eeimg=&1&&&/p&&blockquote&&img src=&///equation?tex=N%28%5Cvec+s%2C%5Cvec+a%29& alt=&N(\vec s,\vec a)& eeimg=&1&& 表示&b&MCST搜索模拟走到叶子节点的过程中的访问次数&/b& &img src=&///equation?tex=W%28%5Cvec+s%2C%5Cvec+a%29& alt=&W(\vec s,\vec a)& eeimg=&1&& 表示&b&行动价值(由路径上所有的&/b& &b&vv&/b& &b&组成)的总和&/b& &img src=&///equation?tex=Q%28%5Cvec+s%2C%5Cvec+a%29& alt=&Q(\vec s,\vec a)& eeimg=&1&& 表示&b&行动价值的均值&/b& &img src=&///equation?tex=P%28%5Cvec+s%2C%5Cvec+a%29& alt=&P(\vec s,\vec a)& eeimg=&1&& 表示选择这条边的&b&先验概率&/b&(一个单独的值)&/blockquote&&p&&b&多线程(并行)执行多次模拟&/b&,每一次迭代过程先重复执行&b&1600次&/b&Figure 2中的前3个步骤,计算出一个 &img src=&///equation?tex=%5Cboldsymbol+%5Cpi& alt=&\boldsymbol \pi& eeimg=&1&& ,根据这个向量下现在的这一步棋&/p&&h2&【2.2.1】Selcet - Figure2a&/h2&&p&MCTS中的&b&选择步骤&/b&和之前的版本相似,详见&a href=&///?target=https%3A//charlesliuyx.github.io//AlphaGo%25E8%25BF%%25A1%258C%25E5%258E%259F%25E7%E8%25A7%25A3%25E6%259E%2590/%23AlphaGo& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&AlphaGo之前的详解文章&i class=&icon-external&&&/i&&/a&,这篇博文&b&详细通俗&/b&的解读了这个过程。概括来说,假设L步走到叶子节点,当走第 &img src=&///equation?tex=t%EF%BC%9CL& alt=&t<L& eeimg=&1&& 步时,根据&b&搜索树的统计概率落子&/b& &img src=&///equation?tex=%5Cvec+a_t+%3D+%5Coperatorname%2A%7Bargmax%7D_%7B%5Cvec+a%7D%28Q%28%5Cvec+s_t%2C+%5Cvec+a%29+%2B+U+%28%5Cvec+s_t%2C+%5Cvec+a%29%29& alt=&\vec a_t = \operatorname*{argmax}_{\vec a}(Q(\vec s_t, \vec a) + U (\vec s_t, \vec a))& eeimg=&1&&&/p&&p&其中计算
&img src=&///equation?tex=U+%28%5Cvec+s_t%2C+%5Cvec+a%29& alt=&U (\vec s_t, \vec a)& eeimg=&1&&
使用PUCT算法的变体&/p&&p&&img src=&///equation?tex=U%28%5Cvec+s%2C+%5Cvec+a%29+%3D+c_%7Bpuct%7DP%28%5Cvec+s%2C+%5Cvec+a%29+%5Cfrac%7B%5Csqrt%7B%5CSigma_%7B%5Cvec+b%7D+N%28%5Cvec+s%2C+%5Cvec+b%29%7D%7D%7B%7B1%7D%2B%7BN%28%5Cvec+s%2C+%5Cvec+a%29%7D%7D+& alt=&U(\vec s, \vec a) = c_{puct}P(\vec s, \vec a) \frac{\sqrt{\Sigma_{\vec b} N(\vec s, \vec b)}}{{1}+{N(\vec s, \vec a)}} & eeimg=&1&&&/p&&p&其中 &img src=&///equation?tex=c_%7Bpuct%7D+& alt=&c_{puct} & eeimg=&1&& 是一个常数。这种搜索策略落子选择&b&最开始&/b&更趋向于&b&高先验概率&/b&和&b&低访问次数&/b&的,但逐渐的会更加趋向于选择有着&b&更高行动价值&/b&的落子&/p&&p&&img src=&///equation?tex=c_%7Bpuct%7D& alt=&c_{puct}& eeimg=&1&& 使用&a href=&///?target=http%3A//ieeexplore.ieee.org/document/Freload%3Dtrue& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&贝叶斯高斯过程优化&i class=&icon-external&&&/i&&/a&来确定,并且上面已经提到过用小规模网络进行超参数的选择&/p&&h2&【2.2.2】Expand and evaluate - Figure 2b&/h2&&p&将叶子节点 &img src=&///equation?tex=%5Cvec+s_L+& alt=&\vec s_L & eeimg=&1&& 加到&b&队列&/b&中等待输入至神经网络&b&进行评估&/b&, &img src=&///equation?tex=f_%5Ctheta%28d_i%28%5Cvec+s_L%29%29+%3D+%28d_i%28p%29%2C+v%29& alt=&f_\theta(d_i(\vec s_L)) = (d_i(p), v)& eeimg=&1&& ,其中 &img src=&///equation?tex=d_i& alt=&d_i& eeimg=&1&& 表示一个&b&1至8的随机数&/b&来表示&b&双方向镜面&/b&和&b&旋转&/b&(从8个不同的方向进行评估,如下图所示,围棋棋型在很多情况如果&b&从视觉角度来提取特征&/b&来说是同一个节点,极大的缩小了搜索空间)&/p&&figure&&img src=&/v2-cb43aad8de8d_b.jpg& data-rawwidth=&1172& data-rawheight=&1501& class=&origin_image zh-lightbox-thumb& width=&1172& data-original=&/v2-cb43aad8de8d_r.jpg&&&figcaption&八种不同的观察角度&/figcaption&&/figure&&p&队列中&b&8个不同位置&/b&组成一个&b&大小为8的mini-batch&/b&输入到神经网络中&b&进行评估&/b&。整个&b&MCTS搜索线程被锁死&/b&直到评估过程完成(这个锁死是保证并行运算间同步)。叶子节点被&b&展开(Expand)&/b&,每一条边 &img src=&///equation?tex=%28%5Cvec+s_L%2C%5Cvec+a%29+& alt=&(\vec s_L,\vec a) & eeimg=&1&& 被初始化为&img src=&///equation?tex=%5C%7BN%28%5Cvec+s_L%2C%5Cvec+a%29+%3D+0%2C+W%28%5Cvec+s_L%2C%5Cvec+a%29+%3D+0%2C+Q%28%5Cvec+s_L%2C%5Cvec+a%29+%3D+0%2C+P%28%5Cvec+s_L%2C%5Cvec+a%29+%3D+p_a%5C%7D+& alt=&\{N(\vec s_L,\vec a) = 0, W(\vec s_L,\vec a) = 0, Q(\vec s_L,\vec a) = 0, P(\vec s_L,\vec a) = p_a\} & eeimg=&1&& 。&/p&&p&这里的
&img src=&///equation?tex=p_a& alt=&p_a& eeimg=&1&&
由将 &img src=&///equation?tex=%5Cvec+s& alt=&\vec s& eeimg=&1&&&b&输入神经网络&/b&得出 &img src=&///equation?tex=%5Cmathbf+p& alt=&\mathbf p& eeimg=&1&& (包括所有落子可能的概率值 &img src=&///equation?tex=p_a& alt=&p_a& eeimg=&1&& ),然后将&b&神经网络的输出值&/b& &img src=&///equation?tex=v& alt=&v& eeimg=&1&&&b&传回(backed up)&/b&&/p&&h2&【2.2.3】Backup - Figure 2c&/h2&&p&沿着&b&扩展到叶子节点的路线回溯&/b&将边的统计数据更新(如下列公式所示)&/p&&p&&img src=&///equation?tex=N%28%5Cvec+s_t%2C+%5Cvec+a_t%29+%3D+N%28%5Cvec+s_t%2C+%5Cvec+a_t%29+%2B+1+%5C%5C+W%28%5Cvec+s_t%2C+%5Cvec+a_t%29+%3D+W%28%5Cvec+s_t%2C+%5Cvec+a_t%29+%2B+v+%5C%5C+Q%28%5Cvec+s_t%2C+%5Cvec+a_t%29+%3D+%5Cfrac+%7BW%28%5Cvec+s_t%2C+%5Cvec+a_t%29%7D%7BN%28%5Cvec+s_t%2C+%5Cvec+a_t%29%7D& alt=&N(\vec s_t, \vec a_t) = N(\vec s_t, \vec a_t) + 1 \\ W(\vec s_t, \vec a_t) = W(\vec s_t, \vec a_t) + v \\ Q(\vec s_t, \vec a_t) = \frac {W(\vec s_t, \vec a_t)}{N(\vec s_t, \vec a_t)}& eeimg=&1&&&/p&&blockquote&注解:在 &img src=&///equation?tex=W%28%5Cvec+s_t%2C+%5Cvec+a_t%29& alt=&W(\vec s_t, \vec a_t)& eeimg=&1&& 的更新中,使用了神经网络的输出 &img src=&///equation?tex=v& alt=&v& eeimg=&1&& ,而最后的价值就是策略评估中的这一状态的价值 &img src=&///equation?tex=Q%28%5Cvec+s%2C+%5Cvec+a%29& alt=&Q(\vec s, \vec a)& eeimg=&1&&&/blockquote&&p&使用虚拟损失(virtual loss)确保每一个线程评估不同的节点。实现方法概括为&b&把其他节点的减去一个很大的值&/b&,避免其他搜索进程走相同的路,详见论文:On the scalability of parallel UCT&/p&&h2&【2.2.4】Play - Figure 2d&/h2&&p&进行了一次MCTS搜索后,AlphaGo Zero才从 &img src=&///equation?tex=%5Cvec+s_0& alt=&\vec s_0& eeimg=&1&& 状态下走出第一步 &img src=&///equation?tex=%5Cvec+a_0+& alt=&\vec a_0 & eeimg=&1&& ,与访问次数成幂指数比例&/p&&p&&img src=&///equation?tex=%5Cboldsymbol+%5Cpi%28%5Cvec+a%7C%5Cvec+s_0%29%3D%5Cfrac%7BN%28%5Cvec+s_0%2Ca%29%5E%7B1%2F%5Ctau%7D%7D%7B%5CSigma_%7B%5Cvec+b%7DN%28%5Cvec+s_0%2C%5Cvec+b%29%5E%7B1%2F%5Ctau%7D%7D& alt=&\boldsymbol \pi(\vec a|\vec s_0)=\frac{N(\vec s_0,a)^{1/\tau}}{\Sigma_{\vec b}N(\vec s_0,\vec b)^{1/\tau}}& eeimg=&1&&&/p&&p&其中 &img src=&///equation?tex=%5Ctau& alt=&\tau& eeimg=&1&& 是一个温度常数用来控制探索等级(level of exploration)。它是热力学玻尔兹曼分布的一种变形。温度较高的时候,分布更加&b&均匀(走子多样性强)&/b&;温度降低的时候,分布更加&b&尖锐(多样性弱,追求最强棋力)&/b&&/p&&p&搜索树会在接下来的&b&自对弈走子&/b&中&b&复用&/b&,如果孩子节点和落子的位置吻合,它就成为新的根节点,保留子树的所有统计数据,同时丢弃其他的树。&b&如果根的评价值&/b&和&b&它最好孩子的评价值&/b&都低于 &img src=&///equation?tex=v_%7Bresign%7D& alt=&v_{resign}& eeimg=&1&&&b&AlphaGo Zero就认输&/b&&/p&&h2&【2.2.5】MCTS搜索总结&/h2&&p&与之前的版本的MCTS相比,&b&AlphaGo Zero最大的不同是没有使用走子网络(Rollout),而是使用一个整合的深度神经网络&/b&;叶子节点总会被扩展,而不是动态扩展;每一次MCTS搜索线程需要&b&等待&/b&神经网络的评估,之前的版本性能评估(evaluate)和返回(backup)是异步的;没有树形策略&/p&&p&至于很重要的一个关键点&b&:每一次模拟的中的叶子节点L的深度&/b&&/p&&p&【个人分析】是由时间来决定,根据论文提到的数据,&b&0.4秒执行1600次模拟&/b&,&b&多线程模拟&/b&,在&b&时限内&/b&能走到的深度有多深就是这个&b&叶子节点&/b&。可以类比为AlphaGo 1.0中的局面函数(用来判断某个局面下的胜率的),也就是说不用模拟到终盘,在&b&叶子节点的状态&/b&下,使用深度神经网的输出
&img src=&///equation?tex=v& alt=&v& eeimg=&1&&
来判断现在落子的棋手的胜率&/p&&h2&【2.3】网络结构&/h2&&h2&【2.3.1】网络输入数据&/h2&&p&输入数据的维度 19×19×17,其中存储的两个值0/1, &img src=&///equation?tex=X_t%5Ei%3D1& alt=&X_t^i=1& eeimg=&1&& 表示这个交叉点有子, &img src=&///equation?tex=0& alt=&0& eeimg=&1&& 表示这个交叉点没有子或是对手的子或 &img src=&///equation?tex=t%3C0& alt=&t&0& eeimg=&1&& 。使用 &img src=&///equation?tex=Y_t& alt=&Y_t& eeimg=&1&& 来记录对手的落子情况。&/p&&p&从状态 &img src=&///equation?tex=%5Cvec+s& alt=&\vec s& eeimg=&1&& 开始,记录了倒退回去的15步,双方棋手交替。最后一个19×19的存储了前面16步每一个状态对应的棋子的黑白颜色。1黑0白&/p&&figure&&img src=&/v2-c6bfffcdce_b.jpg& data-rawwidth=&814& data-rawheight=&237& class=&origin_image zh-lightbox-thumb& width=&814& data-original=&/v2-c6bfffcdce_r.jpg&&&figcaption&现在的棋盘状态&/figcaption&&/figure&&p&【个人理解】为了&b&更加直观的解释&/b&,如果是上面的局部棋盘状态 &img src=&///equation?tex=%5Cvec+s& alt=&\vec s& eeimg=&1&& ,接下里一步是黑棋落子,走了4步,那么&b&输入数据&/b&是什么样的呢?&/p&&p&&img src=&///equation?tex=%5Cmathbf+X_2%3D+%5Cbegin%7Bpmatrix%7D+%26+%5Cvdots+%26+%5Cvdots+%26+%5C%5C+%5Ccdots+%26+0+%26+1+%26+%5Ccdots+%5C%5C+%5Ccdots+%26+1+%26+0+%26+%5Ccdots+%5C%5C+%26+%5Cvdots+%26+%5Cvdots+%26%5Cend%7Bpmatrix%7D+%5Cmathbf+Y_2%3D+%5Cbegin%7Bpmatrix%7D+%26+%5Cvdots+%26+%5Cvdots+%26+%5C%5C+%5Ccdots+%26+1+%26+0+%26+%5Ccdots+%5C%5C+%5Ccdots+%26+0+%26+1+%26+%5Ccdots+%5C%5C+%26+%5Cvdots+%26+%5Cvdots+%26%5Cend%7Bpmatrix%7D+%5C%5C+%5Cmathbf+X_1%3D+%5Cbegin%7Bpmatrix%7D+%26+%5Cvdots+%26+%5Cvdots+%26+%5C%5C+%5Ccdots+%26+0+%26+0+%26+%5Ccdots+%5C%5C+%5Ccdots+%26+1+%26+0+%26+%5Ccdots+%5C%5C+%26+%5Cvdots+%26+%5Cvdots+%26%5Cend%7Bpmatrix%7D+%5Cmathbf+Y_1%3D+%5Cbegin%7Bpmatrix%7D+%26+%5Cvdots+%26+%5Cvdots+%26+%5C%5C+%5Ccdots+%26+0+%26+0+%26+%5Ccdots+%5C%5C+%5Ccdots+%26+0+%26+1+%26+%5Ccdots+%5C%5C+%26+%5Cvdots+%26+%5Cvdots+%26%5Cend%7Bpmatrix%7D+%5C%5C+%5Cmathbf+C+%3D+%5Cbegin%7Bpmatrix%7D+%26+%5Cvdots+%26+%5Cvdots+%26+%5C%5C+%5Ccdots+%26+1+%26+0+%26+%5Ccdots+%5C%5C+%5Ccdots+%26+0+%26+1+%26+%5Ccdots+%5C%5C+%26+%5Cvdots+%26+%5Cvdots+%26%5Cend%7Bpmatrix%7D+& alt=&\mathbf X_2= \begin{pmatrix} & \vdots & \vdots & \\ \cdots & 0 & 1 & \cdots \\ \cdots & 1 & 0 & \cdots \\ & \vdots & \vdots &\end{pmatrix} \mathbf Y_2= \begin{pmatrix} & \vdots & \vdots & \\ \cdots & 1 & 0 & \cdots \\ \cdots & 0 & 1 & \cdots \\ & \vdots & \vdots &\end{pmatrix} \\ \mathbf X_1= \begin{pmatrix} & \vdots & \vdots & \\ \cdots & 0 & 0 & \cdots \\ \cdots & 1 & 0 & \cdots \\ & \vdots & \vdots &\end{pmatrix} \mathbf Y_1= \begin{pmatrix} & \vdots & \vdots & \\ \cdots & 0 & 0 & \cdots \\ \cdots & 0 & 1 & \cdots \\ & \vdots & \vdots &\end{pmatrix} \\ \mathbf C = \begin{pmatrix} & \vdots & \vdots & \\ \cdots & 1 & 0 & \cdots \\ \cdots & 0 & 1 & \cdots \\ & \vdots & \vdots &\end{pmatrix} & eeimg=&1&&&/p&&p&同理,如果有8步的话,也就是16个对应的 &img src=&///equation?tex=X& alt=&X& eeimg=&1&& 和 &img src=&///equation?tex=Y& alt=&Y& eeimg=&1&& 加一个
&img src=&///equation?tex=C& alt=&C& eeimg=&1&&
来表示现在的棋盘状态(注意,这里面包含的历史状态)。这里的数据类型是Boolean,非常高效,并且表达的信息也足够&/p&&p&至于使用&b&八步&/b&的原因。个人理解,一方面是为了&b&避免循环劫&/b&,另一方面,选择八步也可能是&b&性能和效果权衡的结果&/b&(从感知上来说当然信息记录的越多神经网络越强,奥卡姆剃刀定理告诉我们,简单即有效,一味的追求复杂,并不是解决问题的最佳途径)&/p&&h2&【2.3.2】深度神经网结构&/h2&&p&整个残差塔使用单独的卷机模块组成,其中包含了19或39个残差模块,详细结构参数如下图所示&/p&&img src=&/v2-0fdb9c26ad788b7_b.jpg& data-caption=&& data-rawwidth=&7829& data-rawheight=&1329& class=&origin_image zh-lightbox-thumb& width=&7829& data-original=&/v2-0fdb9c26ad788b7_r.jpg&&&p&之后接分别的策略输出与评估值输出,详细结构参数如下图所示&/p&&img src=&/v2-259b574ae91fe708c61eee0_b.jpg& data-caption=&& data-rawwidth=&6883& data-rawheight=&2368& class=&origin_image zh-lightbox-thumb& width=&6883& data-original=&/v2-259b574ae91fe708c61eee0_r.jpg&&&h2&【2.4】数据集&/h2&&p&&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GoKifu数据集&i class=&icon-external&&&/i&&/a&和&a href=&///?target=https%3A//u-go.net/gamerecords/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&KGS数据集&i class=&icon-external&&&/i&&/a&&/p&&h2&【2.5】图5更多细节&/h2&&figure&&img src=&/v2-0a8f62eb23dd8cf83d245f92e7ba1538_b.jpg& data-rawwidth=&2192& data-rawheight=&1936& class=&origin_image zh-lightbox-thumb& width=&2192& data-original=&/v2-0a8f62eb23dd8cf83d245f92e7ba1538_r.jpg&&&figcaption&Figure 5a中每种定式出现的频率图&/figcaption&&/figure&&figure&&img src=&/v2-b6ef76c126dc333b632dbaf7_b.jpg& data-rawwidth=&2128& data-rawheight=&1914& class=&origin_image zh-lightbox-thumb& width=&2128& data-original=&/v2-b6ef76c126dc333b632dbaf7_r.jpg&&&figcaption&Figure 5b中每种定式出现的频率图&/figcaption&&/figure&&h2&【3】总结与随想&/h2&&p&&b&AlphaGo Zero = 启发式搜索 + 强化学习 + 深度神经网络&/b&,你中有我,我中有你,互相对抗,不断自我进化。使用&b&深度神经网络的训练作为策略改善&/b&,&b&蒙特卡洛搜索树作为策略评价&/b&的&b&强化学习算法&/b&&/p&&p&之后提出一些我在看论文时带着的问题,最后给出我仔细看完每一行论文后得出的回答,如有错误,请批评指正!&/p&&h2&【3.1】问题与个人答案&/h2&&h2&【3.1.1】训练好的Alpha Zero在真实对弈时,在面对一个局面时&b&如何决定下在哪个位置&/b&?&/h2&&p&&a href=&///?target=https%3A//charlesliuyx.github.io//%25E6%25B7%25B1%25E5%%25E6%25B5%%2587%25BA%25E7%259C%258B%25E6%AlphaGo%25E5%/%23%25E8%25AF%%25BC%25B0%25E5%& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&评估器&i class=&icon-external&&&/i&&/a&的落子过程即最终对弈时的落子过程(自对弈中的落子就是真实最终对局时的落子方式):使用&b&神经网络的输出&/b& &img src=&///equation?tex=%5Cmathbf+p& alt=&\mathbf p& eeimg=&1&&&b&作为先验概率&/b&进行MCTS搜索,每步1600次(最后应用的版本可能和&b&每一步的给的时间&/b&有关)模拟,前30步&b&采样落子&/b&,剩下棋局使用最多访问次数来落子,得到 &img src=&///equation?tex=%5Cboldsymbol+%5Cpi& alt=&\boldsymbol \pi& eeimg=&1&& ,然后选择落子策略中最大的一个位置落子&/p&&h2&【3.1.2】AlphaGo Zero的&b&MCTS搜索算法&/b&和和上个版本的&b&有些什么区别&/b&?&/h2&&p&&a href=&///?target=https%3A//charlesliuyx.github.io//AlphaGo%25E8%25BF%%25A1%258C%25E5%258E%259F%25E7%E8%25A7%25A3%25E6%259E%2590/%23MCTS-%25E8%E7%%25E5%258D%25A1%25E6%25B4%259B%25E6%E7%25B4%25A2%25E6%25A0%%E2%E8%25B5%25B0%25E5%25AD%%25BC%%25AE%2597%25EF%25BC%2588Rollout%25EF%25BC%2589& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&最原始MCTS解析&i class=&icon-external&&&/i&&/a&,&a href=&///?target=https%3A//charlesliuyx.github.io//AlphaGo%25E8%25BF%%25A1%258C%25E5%258E%259F%25E7%E8%25A7%25A3%25E6%259E%2590/%23AlphaGo& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&AlphaGo Lee加上策略函数和局面函数改进后的MCTS解析&i class=&icon-external&&&/i&&/a&&/p&&p&对于AlphaGo Zero来说&/p&&ul&&li&最大的区别在于,&b&模拟过程&/b&中依据神经网络的输出 &img src=&///equation?tex=%5Cmathbf+p& alt=&\mathbf p& eeimg=&1&& 的概率分布&b&采样&/b&落子。&b&采样是关键词&/b&,如果模拟的盘数足够多,那这一步就会越来越强&/li&&li&其次,在&a href=&///?target=https%3A//charlesliuyx.github.io//%25E6%25B7%25B1%25E5%%25E6%25B5%%2587%25BA%25E7%259C%258B%25E6%AlphaGo%25E5%/%23Backup%Figure%25202c& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&返回(Bakcup)部分&i class=&icon-external&&&/i&&/a&每一个点的价值(得分),使用了神经网络的输出 &img src=&///equation?tex=v& alt=&v& eeimg=&1&& 。这个值也是&b&策略评估&/b&的重要依据&/li&&/ul&&h2&【3.1.3】AlphaGo Zero 中的策略迭代法是如何工作的?&/h2&&p&策略迭代法(Policy Iteration)是强化学习中的一种算法,简单来说:以某种&b&策略&/b&( &img src=&///equation?tex=%5Cpi_0& alt=&\pi_0& eeimg=&1&& )开始,计算当前策略下的&b&价值函数&/b&( &img src=&///equation?tex=v_%7B%5Cpi_0%7D+& alt=&v_{\pi_0} & eeimg=&1&& );然后&b&利用这个价值函数,找到更好的策略&/b&(&b&E&/b&valuate和&b&I&/b&mprove);接下来再用这个&b&更好的策略&/b&继续前行,更新价值函数……这样经过若干轮的计算,如果一切顺利,我们的策略会收敛到&b&最优的策略&/b&( &img src=&///equation?tex=%5Cpi_%2A& alt=&\pi_*& eeimg=&1&& ),问题也就得到了解答。&/p&&p&&img src=&///equation?tex=%5Cpi_0+%5Cxrightarrow%7BE%7D+v_%7B%5Cpi_0%7D+%5Cxrightarrow%7BI%7D+%5Cpi_1+%5Cxrightarrow%7BE%7D+v_%7B%5Cpi_1%7D+%5Cxrightarrow%7BI%7D+%5Cpi_2+%5Cxrightarrow%7BE%7D+%5Ccdots+%5Cxrightarrow%7BI%7D+%5Cpi_%2A+%5Cxrightarrow%7BE%7D+v_%2A+& alt=&\pi_0 \xrightarrow{E} v_{\pi_0} \xrightarrow{I} \pi_1 \xrightarrow{E} v_{\pi_1} \xrightarrow{I} \pi_2 \xrightarrow{E} \cdots \xrightarrow{I} \pi_* \xrightarrow{E} v_* & eeimg=&1&&&/p&&p&对于AlphaGo Zero来说,&a href=&///?target=https%3A//charlesliuyx.github.io//%25E6%25B7%25B1%25E5%%25E6%25B5%%2587%25BA%25E7%259C%258B%25E6%AlphaGo%25E5%/%25E6%%25E8%25BF%259B%25E7%259A%%25BC%25BA%25E5%258C%%25AD%25A6%25E4%25B9%25A0%25E7%25AE%%25B3%2595& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&详细可见论文&i class=&icon-external&&&/i&&/a&,简单总结如下&/p&&ul&&li&策略评估过程,即使用MCTS搜索&b&每一次模拟&/b&的&b&对局胜者&/b&,胜者的&b&所有落子&/b&( &img src=&///equation?tex=%5Cvec+s& alt=&\vec s& eeimg=&1&& )都获得&b&更好的评估值&/b&&/li&&li&策略提升过程,即使用MCTS搜索返回的&b&更好策略&/b& &img src=&///equation?tex=%5Cboldsymbol+%5Cpi& alt=&\boldsymbol \pi& eeimg=&1&&&/li&&li&迭代过程,即神经网络输出 &img src=&///equation?tex=%5Cmathbf+p& alt=&\mathbf p& eeimg=&1&& 和 &img src=&///equation?tex=v& alt=&v& eeimg=&1&& 与策略评估和策略提升返回值的对抗(即神经网络的训练过程)&/li&&/ul&&p&总的来说,有点像一个嵌套过程,MCST算法可以用来解决围棋问题,这个深度神经网络也可以用来解决围棋问题,而AlphaGo Zero将两者&b&融合&/b&,你中有我,我中有你,不断对抗,不对自我进化&/p&&h2&【3.1.4】AlphaGo Zero 最精彩的部分哪部分?&/h2&&p&&img src=&///equation?tex=l+%3D+%28z+-+v%29%5E2+-+%5Cboldsymbol+%7B%5Cpi%7D%5ET+%5Clog%28%5Cmathbf+p%29+%2B+c+%5CVert+%5Ctheta+%5CVert+%5E2+& alt=&l = (z - v)^2 - \boldsymbol {\pi}^T \log(\mathbf p) + c \Vert \theta \Vert ^2 & eeimg=&1&&&/p&&p&毫无悬念的,我会选择这个漂亮的公式,看懂公式&b&每一项的来历,即产生的过程&/b&,就读懂了AlphaGo Zero。&b&你中有我,我中有你&/b&来是对这个公式最简练最精彩的概括。这是一个完美的对抗,完美的自我进化&/p&&p&第二我觉得很精彩的点子是将&b&深度神经网络作为一个模块&/b&嵌入到了&b&强化学习的策略迭代法中&/b&。最关键的是,&b&收敛速度快,效果好,解决各种复杂的局面&/b&(比如一个关于围棋棋盘的观看角度可以从八个方向来看的细节处理的很好,又如神经网络的输入状态选择了使用&b&历史八步&/b&)&/p&&h2&【3.2】随想和评论&/h2&&p&&a href=&/p/?group_id=968896& class=&internal&&量子位汇集各家评论&/a&&/p&&ul&&li&不是&b&无监督学习&/b&,带有明显胜负规则的强化学习是&b&强监督&/b&的范畴&/li&&li&无需&b&担心快速的攻克其他领域&/b&,核心还是&b&启发式搜索&/b&&/li&&li&&b&模型简约漂亮,充满整合哲学的优雅&/b&,可怕的是效果和效率也同样极高&/li&&li&AlphaGo项目在经历了&b&把书读厚&/b&的过程后,已经取得了瞩目的成就依旧不满足现状,现通过AlphaGo Zero&b&把书读薄&/b&,简约而不简单,大道至简,九九归一,已然位列仙班了&/li&&/ul&&p&随着AlphaGo Zero的归隐,DeepMind已经正式转移精力到其他的任务上了。期待这个天才的团队还能搞出什么大新闻!&/p&&p&对于围棋这项运动的影响可能是:以后的学围棋手段会发生变化,毕竟世界上能复现AlphaGo Zero的绝对很多,那么AlphaGo Zero的实力那就是棋神的感觉,向AlphaGo Zero直接学习不是更加高效嘛?另,围棋受到的关注也应该涨了一波,是利好&/p&&p&感觉强化学习会越来越热,对于和环境交互这个领域,强化学习更加贴近于人类做决策的学习方式。个人预测,强化学习会在未来会有更多进展!AlphaGo Zero 可能仅仅是一个开头&/p&&p&以上!鞠躬!&/p&
号更新:完善了网络结构和MCTS搜索中的叶子节点选择的细节说明,加了几个有趣的细节评价,首先得看懂AlphaGo Zero是如何设计。先懂再评,否则口说无凭这篇回答包含了详细的原论文翻译及解析(几乎全篇论文,包括一些方法附录),如果想直接看排版…
&figure&&img src=&/50/v2-a6c2a5c2df76ccfec6b260_b.png& data-rawwidth=&552& data-rawheight=&348& class=&origin_image zh-lightbox-thumb& width=&552& data-original=&/50/v2-a6c2a5c2df76ccfec6b260_r.png&&&/figure&&p&AlphaGo的神秘之处在于策略网络和价值网络,它们可以实现一个惊人的事情:&b&即使你对围棋基本一窍不通&/b&(只要你会数气)&b&,也没有任何逻辑推理能力,只要你会做加法和乘法,就可以达到相当强的棋力。&/b&&/p&&p&不过确实要做相当多的加法和乘法!在此我们简化一下,看一个最简化的策略网络是如何具体运作,虽然它的棋力很低,但也能让读者体验到一点“半人半狗”的感觉。&/p&&p&&b&如果觉得此文有帮助,请记得点个赞噢。&/b&如需转载本文,请先与本人联系,谢谢。&/p&&h2&&b&1. 局面&/b&&/h2&&p&看一个相对简单的局面,来自于AlphaGo与柯洁的第2局对局的第27手。图中带红点的Q15是刚下的一手,来自于持黑的AlphaGo。&/p&&figure&&img src=&/50/v2-61a604de5f61d44c782f8d1ffb2ad777_b.png& data-rawwidth=&1054& data-rawheight=&1054& class=&origin_image zh-lightbox-thumb& width=&1054& data-original=&/50/v2-61a604de5f61d44c782f8d1ffb2ad777_r.png&&&/figure&&p&如果读者对于围棋的基本规则有了解,此时持黑的AlphaGo在叫吃白方的P17 P16 Q16这3子,因为这3子此时只有1口气了,如果白置之不理,黑再走P15就会把它们彻底围起来,吃掉。&/p&&p&弃这3个子的代价太大,所以持白的柯洁的下一手可以说只有2种选择:&/p&&ul&&li&要么走P15,逃出3子。如果黑再走O15叫吃,则白可走P14成功逃出。&/li&&li&要么走R15,把黑的R16吃掉,也可以暂时解除威胁。但黑一定会再走P15叫吃,则白必须走R16连回,然后黑可走O18把自己连上,于是白有“一团棋被封在右边”的感觉。&/li&&/ul&&p&柯洁最终的选择是P15。让我们看策略网络对此有何看法。&/p&&p&&br&&/p&&h2&&b&2. 最简化的策略网络&/b&&/h2&&p&前文讲了将使用的8个特征层(见:&a href=&/p/& class=&internal&&走近 AlphaGo 系列 (7.1) :从围棋盘看卷积神经网络CNN的具体工作过程 (上)&/a&),于是有最简化的策略网络模型:&/p&&h2&&b&【注:如果不懂这里的内容,可以直接跳过看后面,后面有例子,会容易理解】&/b&&/h2&&blockquote&8个特征层 =& 3*3卷积(只有1个神经元) =& SoftMax =& 输出&/blockquote&&p&确实简单得不能再简单了,整个网络只有1个神经元,接近于一个Logistic回归模型。关于卷积请看:&a href=&/p/& class=&internal&&走近 AlphaGo (7.2) :教你快速理解卷积和卷积神经网络(图像篇)&/a&。&/p&&p&这个网络,对于人类高手棋谱,平均可以实现16.49%的预测准确率。&/p&&p&这是什么概念?&/p&&p&整盘棋下来,棋盘上平均有一百多个点可以走,柯洁会选择其中一个,所以乱猜猜对的可能性只有一百多分之一。&/p&&p&&b&现在你用下面的特别傻的方法,只要做一点加法(乘法都不用做了!),竟然可以有16.49%的概率和柯洁的选择一模一样&/b&(实际来说,由于柯洁的棋力强,预测准确率会略低一些)&b&。&/b&&/p&&p&&br&&/p&&h2&&b&3. 特征层:本方棋子(白棋)&/b&&/h2&&p&第一个特征层,是本方棋子。它对应的卷积核,以及解释:&/p&&figure&&img src=&/50/v2-f8c39ee3_b.png& data-rawwidth=&889& data-rawheight=&185& class=&origin_image zh-lightbox-thumb& width=&889& data-original=&/50/v2-f8c39ee3_r.png&&&/figure&&p&看图(为了清晰,只展示右上角)。特征层,特征层单独显示,以及特征层在卷积和SoftMax后的效果:&/p&&figure&&img src=&/50/v2-8c8e96c36416fcd0edfe79_b.png& data-rawwidth=&792& data-rawheight=&181& class=&origin_image zh-lightbox-thumb& width=&792& data-original=&/50/v2-8c8e96c36416fcd0edfe79_r.png&&&/figure&&p&说说这是什么意思。&b&策略网络是给每个点打分,分数越高就代表越应该走在这里。&/b&&/p&&p&上面左边和中间是先把本方棋子(白棋)标记出来。然后在此基础上做“卷积”,就可以给每个点打分。打的分数在上面的右图展示,分数越高就蓝色越深。&/p&&p&“卷积”具体怎么做,就是:&/p&&ul&&li&每个点的初始分数为 0 分。&/li&&li&每颗白子给自己所在的点贡献 -2.47 分。&/li&&li&每颗白子给自己上下左右邻近的4个点贡献 0.55 分。&/li&&li&每颗白子给自己斜位的4个点(可以叫肩位)贡献 0.47 分。&/li&&/ul&&p&看几个例子:&/p&&ul&&li&L15 R19这样的点,周围没有白子,所以分数为0。&/li&&li&L19,它收到斜位的白子(M18)的影响,所以分数为0.47。&/li&&li&O18,它收到N18(直接接触,贡献为 0.55)和 N17 P17(斜位接触,贡献都为 0.47)的影响,所以分数为 0.55 + 0.47 + 0.47 = 1.49分,分数很高啊,所以在右图的颜色很深。&/li&&li&O17的分数更高,是 0.55+0.55+0.47+0.47=2.04分!等一下!这个地方已经有棋子了!怎么可以走在现有的棋子上面!没关系,后面有修正的办法。&/li&&li&M18的分数是多少?首先它本身是白子,白子自己给自己所在的点贡献 -2.47,然后它的两个白子邻居给它贡献 0.47+0.55,最后分数是 -1.45分,低于正常值,确实不适合走。&/li&&li&读者会问,为什么不干脆让白子自己给自己所在的点共享负无穷大分?这样就肯定不会走在自己上面了!这是因为我们这里的贡献值都是训练出来的,后面会看到 -2.47 其实已经足够小了,网络在这种情况下会“没有什么动力”再去缩小这个值。&/li&&/ul&&p&最后我们把结果美化一下,显示出来就是上面的右图。&/p&&p&&br&&/p&&h2&&b&4. 特征层:对方棋子(黑棋)&/b&&/h2&&p&卷积核及解释:&/p&&figure&&img src=&/50/v2-23878a9acda14e0006d47ddb_b.png& data-rawwidth=&627& data-rawheight=&145& class=&origin_image zh-lightbox-thumb& width=&627& data-original=&/50/v2-23878a9acda14e0006d47ddb_r.png&&&/figure&&p&看图:&/p&&figure&&img src=&/50/v2-497aab169ecbbbf7e011d4_b.png& data-rawwidth=&764& data-rawheight=&168& class=&origin_image zh-lightbox-thumb& width=&764& data-original=&/50/v2-497aab169ecbbbf7e011d4_r.png&&&/figure&&p&和前面一样:&/p&&ul&&li&每个点的初始分数为 0 分。&/li&&li&每颗黑子给自己所在的点贡献 -2.27 分。&/li&&li&每颗黑子给自己上下左右邻近的4个点贡献 0.49 分。&/li&&li&每颗黑子给自己斜位的4个点(可以叫肩位)贡献 0.23 分。&/li&&/ul&&p&例如 P17 的得分很高,因为它周围都是黑子,而且自己不是黑子。等一下,这里好像也已经有棋子了吧!&/p&&p&说明一下,总共有8个特征层,最后会把8个特征层的分数加起来,加起来之后就会发现这个会得到解决。&/p&&p&&br&&/p&&h2&&b&5. 特征层:空点&/b&&/h2&&figure&&img src=&/50/v2-dc2c695b39a0f921fe41176_b.png& data-rawwidth=&629& data-rawheight=&145& class=&origin_image zh-lightbox-thumb& width=&629& data-original=&/50/v2-dc2c695b39a0f921fe41176_r.png&&&/figure&&p&&br&&/p&&figure&&img src=&/50/v2-bd2a36eed6eb1de412de6a_b.png& data-rawwidth=&757& data-rawheight=&166& class=&origin_image zh-lightbox-thumb& width=&757& data-original=&/50/v2-bd2a36eed6eb1de412de6a_r.png&&&/figure&&p&这个来解决问题了。由于空点给自己所在的位置贡献5.78分,因此非空点的位置就享受不到这5.78分,这意味着什么?这意味着我们会非常偏向于选择空点。&/p&&p&策略网络最后是看哪个点的分数相对最大(SoftMax是负责这个),所以“给空点加5.78分”,其实等价于“给非空点减5.78分”。&/p&&p&上面右边的输出很有意思,我们发现,它避开有棋子的地方,避开拥挤的空点(如P15 R15),也避开棋盘最外圈(一路),因为最外圈周围的空点不够多。&/p&&p&不信就算一下:&/p&&ul&&li&L15是空点,附近8个点也是空点,所以它的分数是 5.78+0.09+0.09+0.09+0.09+0.41+0.41+0.41+0.41=7.78分。&/li&&li&T19是空点,但是因为在角落,所以附近的空点只有S19 S18 T18。所以它的分数是5.78+0.09+0.09+0.41=6.37分,确实低了一些,低了整整1.41分。&/li&&li&说明一下,如果两个点的分数差X,选择的概率就差e^X倍。所以,如果差1.41分,选择的概率是差e^1.41=4.10倍!&/li&&/ul&&p&那么,请看将前3个特征平面的打分相加后的结果:&/p&&figure&&img src=&/50/v2-adf6d4efd87a_b.png& data-rawwidth=&1054& data-rawheight=&1054& class=&origin_image zh-lightbox-thumb& width=&1054& data-original=&/50/v2-adf6d4efd87a_r.png&&&/figure&&p&震惊了。颜色最蓝的,分数最高的,是O18 R15这样的与双方棋子都有直接接触的空点。这两个地方确实有重要性,鉴于我们的方法如此简单,真是令人惊讶地准确。&/p&&p&其实很久以前的围棋程序就是类似这样写的(例如“手谈”)。但是当时的计算机处理能力太低,也没有人收集这么多的高手棋谱,没有人拿这么多的棋谱去训练,所以当时的开发者只能去手工一个个实验各种参数(就是像这里的具体要加多少分数),无疑是很低效率和效果差的过程。&/p&&p&这就是数据的威力。&b&深度学习的威力,很大程度上是数据的威力。&/b&&/p&&p&&br&&/p&&h2&&b&6. 特征层:剩下的几个&/b&&/h2&&p&只有1气的棋子:&/p&&figure&&img src=&/50/v2-54d6a598b709b93d540e36_b.png& data-rawwidth=&687& data-rawheight=&194& class=&origin_image zh-lightbox-thumb& width=&687& data-original=&/50/v2-54d6a598b709b93d540e36_r.png&&&/figure&&p&&br&&/p&&figure&&img src=&/50/v2-8e75e3eea_b.png& data-rawwidth=&766& data-rawheight=&177& class=&origin_image zh-lightbox-thumb& width=&766& data-original=&/50/v2-8e75e3eea_r.png&&&/figure&&p&可见,倾向于走在它们的旁边。另外,如前所述,P16在加起来的时候会消失。&/p&&p&==========================&/p&&p&只有2气的棋子: &/p&&figure&&img src=&/50/v2-9beb6ace0f9a08d7e3a01167fa78aeb4_b.png& data-rawwidth=&633& data-rawheight=&143& class=&origin_image zh-lightbox-thumb& width=&633& data-original=&/50/v2-9beb6ace0f9a08d7e3a01167fa78aeb4_r.png&&&/figure&&p&&br&&/p&&figure&&img src=&/50/v2-cceee65146aa09_b.png& data-rawwidth=&762& data-rawh}

我要回帖

更多关于 苹果电脑围棋打谱软件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信