当前位置:   article > 正文

深度学习与围棋,零开始一步步实现自己的“AlphaGo”

深度学习与围棋

AlphaGo引领了近年来机器学习领域的几次标志性突破,并被爆出一系列令人难忘的大新闻,包括与樊麾、李世石、柯洁等围棋大师的对决。这一系列比赛为围棋带来了深远的影响,改变了围棋在全世界范围内的格局,而且也让更多人了解并喜欢上了人工智能这个领域,这些都令我们感到自豪。

但读者可能会问,为什么要关注游戏呢?答案是,儿童通过游戏来了解真实世界,与之类似,机器学习研究者也通过游戏来训练人工智能软件。沿着这个脉络,DeepMind公司的整体策略也是用游戏来模拟真实世界。而AlphaGo项目正是这个策略的一部分。这能帮助我们更好地研究人工智能,训练学习代理,以期望将来的某一天,我们能构建真正的通用学习系统,可以解决真实世界中最复杂的问题。

诺贝尔经济学奖获得者Daniel Kahnemann在他关于人类认知的《思考,快与慢》一书中描述了两种思维方式,而AlphaGo的工作方式正是类似于这两种思维方式。在AlphaGo中,慢的思考模式是通过一种名为蒙特卡洛树搜索(Monte Carlo Tree Search)的算法来实现的。对于某个棋盘布局,这个算法可以通过扩展一个游戏树来规划下一步动作。游戏树代表了未来所有可能的落子动作与回应动作。但由于围棋大约有10170(即1后面有170个0)种可能的棋盘布局,因此要搜索全部的可能动作序列,其实是不可能实现的。为了解决这个问题,需要缩减搜索空间,我们给蒙特卡洛树搜索配套了一个深度学习组件——训练两个神经网络,其中一个用来预测对弈双方的获胜概率,另一个用来预测最有希望获胜的落子动作。

AlphaGo的更新版AlphaZero,依照强化学习的原理,完全靠自我对弈来进行学习。这样就不再需要任何人工训练数据了。它从零开始学习下围棋(以及国际象棋、将棋等),在与自己对弈的学习过程中,它常常能独立发现(之后再抛弃)人类棋手几百年来积累下来的策略,也独立地创造了许多属于它自己的独特策略。

刚刚上架的《深度学习与围棋》就是让你从零开始一步步实现自己的“AlphaGo”的一本书。

 

《深度学习与围棋》的两位作者Max Pumperla和Kevin Ferguson将引领读者踏上从AlphaGo到它的后期扩展的美好旅程。读完本书之后,读者不仅能够了解如何实现AlphaGo风格的围棋引擎,还能对现代人工智能算法最重要的几个组成部分——蒙特卡洛树搜索、深度学习和强化学习,有深入的理解与实践。作者精心地组织了这几个人工智能话题,并选取围棋作为实践案例,使之既富有趣味,又浅显易懂。除此之外,读者还能学会围棋(这个人类有史以来发明的最美丽、最具挑战性的棋类游戏之一)的基础知识。

另外,本书从一开始就构建了一个可以运行的、简单的围棋机器人,并随着本书内容对它进行逐步的强化:从完全随机地选择动作,逐渐进化成一个复杂的、有自我学习能力的围棋AI。作者对基础概念做了精彩的阐述,再加上可执行的Python代码,带着读者一步一步地前进。必要时,他们也会深入阐述数据格式、部署和云计算等细节话题,使读者可以把围棋机器人真正地运行起来,并享受弈棋的乐趣。

适合读者群

本书适合于那些想要尝试机器学习算法,但相比数学内容来说,更喜欢实践内容的软件开发人员。本书假定读者已经掌握了Python的基础知识。当然,书中的算法也可以用其他现代语言来实现。本书不要求读者有任何围棋基础。如果你喜欢的是国际象棋或其他棋类游戏,也可以将本书介绍的方法与技巧应用到这些棋类游戏中。当然,如果你是围棋爱好者,那么观察自己开发的围棋机器人学会下棋的过程,将会非常开心!两位作者都深有同感。

学习路线图

本书分为3部分,共包括14章和5个附录。

第一部分介绍本书涉及的主要概念。

第1章简明扼要地介绍人工智能的几个分支领域:人工智能、机器学习和深度学习。我们将解释这几个领域之间的关系,以及利用这些领域中的技术所能够解决与无法解决的问题。

第2章介绍围棋的基本规则,并说明我们能够教会计算机哪些知识来学习下棋。

第3章将使用Python来实现围棋棋盘和落子的逻辑,最终可以进行完整的对弈。在本章的最后,我们将编写出最弱的围棋AI。

第二部分介绍创建一个强大的围棋AI所需的技术和理论基础。我们会着重介绍AlphaGo所采用的三大技术支柱:树搜索(第4章)、神经网络(第5章至第8章)、深度学习机器人和强化学习(第9章至第12章)。

第4章概要介绍几种搜索和评估棋局序列的算法。我们将从简单的极小化极大搜索开始介绍,然后介绍更高级的算法,如α-β剪枝算法、蒙特卡洛树搜索等。

第5章是人工神经网络话题的实践性介绍。我们将讲述如何用Python从零开始实现一个神经网络,用来预测手写的数字字符。

第6章解释围棋数据与图像数据的共通特征,并引入卷积神经网络对落子动作进行预测。从本章开始,我们将基于深度学习库Keras来构建我们的模型。

第7章将应用第5章和第6章中学到的实践知识来构建一个由深度神经网络驱动的围棋机器人。我们使用业余高阶棋手的实盘数据进行训练,并分析这种方法的局限性。

第8章讲述如何实现一个围棋软件,让人类棋手能够通过用户界面与围棋机器人进行对弈。读者还将学会如何与其他机器人在本地或远程围棋服务器上进行对弈。

第9章涵盖强化学习的基础知识,并介绍如何在围棋中使用它进行自我对弈。

第10章详细介绍策略梯度的概念。它是改进第7章中落子动作预测的关键方法。

第11章展示如何使用所谓的价值评估方法来评估棋局。这个方法是一种可以与第4章介绍的树搜索相结合的强力工具。

第12章介绍预测给定棋局与下一手落子时预测评估其长期效果的技巧。这将有助于我们更有效地选择下一手落子动作。

第三部分是本书的最终部分,我们将把之前开发的所有部件整合起来,成为一个接近AlphaGo的应用。

第13章的内容无论从技术角度上看还是从数学角度上看,都是本书的巅峰。我们首先将讨论如何在围棋数据上训练神经网络(第5章至第7章),接着继续进行自我对弈(第8章至第11章),最后我们将结合一个更聪明的树搜索方法(第4章),创建超越人类极限的围棋机器人。

第14章是本书的最后一章,描述棋盘游戏AI的最前沿技术。我们深入探讨AlphaGo Zero背后的理论基础:开创性地将树搜索和强化学习相结合。

在附录中,我们还将涵盖下面几个话题。

附录A温习线性代数和微积分的一些基础知识,并展示如何在Python库NumPy中表示常用的线性代数结构。

附录B介绍反向传播算法。这个算法描述了大多数神经网络所采用的学习过程,从第5章开始,我们就一直需要用到它。附录B会详述更多关于这个算法的数学细节。

附录C为想要更深入了解围棋的读者提供一些在线资源。

附录D简要介绍如何在Amazon Web Services(AWS)上运行围棋机器人。

附录E展示如何将机器人连接到流行的围棋服务器上,这样就可以与世界各地的玩家进行对弈,并检验自己的成果了。

图0-1总结了各章对附录的依赖关系。

 

图0-1 各章对附录的依赖关系

详细目录

  1. 第 一部分 基础知识
  2. 第 1章 走近深度学习:机器学习入门 3
  3. 11 什么是机器学习 4
  4. 111 机器学习与AI的关系 5
  5. 112 机器学习能做什么,不能做什么 6
  6. 12 机器学习示例 7
  7. 121 在软件应用中使用机器学习 9
  8. 122 监督学习 11
  9. 123 无监督学习 12
  10. 124 强化学习 12
  11. 13 深度学习 13
  12. 14 阅读本书能学到什么 14
  13. 15 小结 15
  14. 第 2章 围棋与机器学习 16
  15. 21 为什么选择游戏 16
  16. 22 围棋快速入门 17
  17. 221 了解棋盘 17
  18. 222 落子与吃子 18
  19. 223 终盘与胜负计算 19
  20. 224 理解劫争 20
  21. 225 让子 20
  22. 23 更多学习资源 20
  23. 24 我们可以教会计算机什么 21
  24. 241 如何开局 21
  25. 242 搜索游戏状态 21
  26. 243 减少需要考虑的动作数量 22
  27. 244 评估游戏状态 22
  28. 25 如何评估围棋AI的能力 23
  29. 251 传统围棋评级 23
  30. 252 对围棋AI进行基准测试 24
  31. 26 小结 24
  32. 3章 实现第 一个围棋机器人 25
  33. 31 在Python中表达围棋游戏 25
  34. 311 实现围棋棋盘 28
  35. 312 在围棋中跟踪相连的棋组:棋链 28
  36. 313 在棋盘上落子和提子 30
  37. 32 跟踪游戏状态并检查非法动作 32
  38. 321 自吃 33
  39. 322 劫争 34
  40. 33 终盘 36
  41. 34 创建自己的第 一个机器人:理论上最弱的围棋AI 37
  42. 35 使用Zobrist哈希加速棋局 41
  43. 36 人机对弈 46
  44. 37 小结 47
  45. 第二部分 机器学习和游戏AI
  46. 4章 使用树搜索下棋 51
  47. 41 游戏分类 52
  48. 42 利用极小化极大搜索预测对手 53
  49. 43 井字棋推演:一个极小化极大算法的示例 56
  50. 44 通过剪枝算法缩减搜索空间 58
  51. 441 通过棋局评估减少搜索深度 60
  52. 442 利用α-β剪枝缩减搜索宽度 63
  53. 45 使用蒙特卡洛树搜索评估游戏状态 66
  54. 451 在Python中实现蒙特卡洛树搜索 69
  55. 452 如何选择继续探索的分支 72
  56. 453 将蒙特卡洛树搜索应用于围棋 74
  57. 46 小结 76
  58. 5章 神经网络入门 77
  59. 51 一个简单的用例:手写数字分类 78
  60. 511 MNIST手写数字数据集 78
  61. 512 MNIST数据的预处理 79
  62. 52 神经网络基础 85
  63. 521 将对率回归描述为简单的神经网络 85
  64. 522 具有多个输出维度的神经网络 85
  65. 53 前馈网络 86
  66. 54 我们的预测有多好?损失函数及优化 89
  67. 541 什么是损失函数 89
  68. 542 均方误差 89
  69. 543 在损失函数中找极小值 90
  70. 544 使用梯度下降法找极小值 91
  71. 545 损失函数的随机梯度下降算法 92
  72. 546 通过网络反向传播梯度 93
  73. 55 在Python中逐步训练神经网络 95
  74. 551 Python中的神经网络层 96
  75. 552 神经网络中的激活层 97
  76. 553 在Python中实现稠密层 98
  77. 554 Python顺序神经网络 100
  78. 555 将网络集成到手写数字分类应用中 102
  79. 56 小结 103
  80. 6章 为围棋数据设计神经网络 105
  81. 61 为神经网络编码围棋棋局 107
  82. 62 生成树搜索游戏用作网络训练数据 109
  83. 63 使用Keras深度学习库 112
  84. 631 了解Keras的设计原理 112
  85. 632 安装Keras深度学习库 113
  86. 633 热身运动:在Keras中运行一个熟悉的示例 113
  87. 634 使用Keras中的前馈神经网络进行动作预测 115
  88. 64 使用卷积网络分析空间 119
  89. 641 卷积的直观解释 119
  90. 642 用Keras构建卷积神经网络 122
  91. 643 用池化层缩减空间 123
  92. 65 预测围棋动作概率 124
  93. 651 在最后一层使用softmax激活函数 125
  94. 652 分类问题的交叉熵损失函数 126
  95. 66 使用丢弃和线性整流单元构建更深的网络 127
  96. 661 通过丢弃神经元对网络进行正则化 128
  97. 662 线性整流单元激活函数 129
  98. 67 构建更强大的围棋动作预测网络 130
  99. 68 小结 133
  100. 7章 从数据中学习:构建深度学习机器人 134
  101. 71 导入围棋棋谱 135
  102. 711 SGF文件格式 136
  103. 712 从KGS下载围棋棋谱并复盘 136
  104. 72 为深度学习准备围棋数据 137
  105. 721 从SGF棋谱中复盘围棋棋局 138
  106. 722 构建围棋数据处理器 139
  107. 723 构建可以高效地加载数据的围棋数据生成器 146
  108. 724 并行围棋数据处理和生成器 147
  109. 73 基于真实棋局数据训练深度学习模型 148
  110. 74 构建更逼真的围棋数据编码器 152
  111. 75 使用自适应梯度进行高效的训练 155
  112. 751 在SGD中采用衰减和动量 155
  113. 752 使用Adagrad优化神经网络 156
  114. 753 使用Adadelta优化自适应梯度 157
  115. 76 运行自己的实验并评估性能 157
  116. 761 测试架构与超参数的指南 158
  117. 762 评估训练与测试数据的性能指标 159
  118. 77 小结 160
  119. 8章 实地部署围棋机器人 162
  120. 81 用深度神经网络创建动作预测代理 163
  121. 82 为围棋机器人提供Web前端 165
  122. 83 在云端训练与部署围棋机器人 169
  123. 84 与其他机器人对话:围棋文本协议 170
  124. 85 在本地与其他机器人对弈 172
  125. 851 机器人应该何时跳过回合或认输 172
  126. 852 让机器人与其他围棋程序进行对弈 173
  127. 86 将围棋机器人部署到在线围棋服务器 178
  128. 87 小结 182
  129. 9章 通过实践学习:强化学习 183
  130. 91 强化学习周期 184
  131. 92 经验包括哪些内容 185
  132. 93 建立一个有学习能力的代理 188
  133. 931 从某个概率分布中进行抽样 189
  134. 932 剪裁概率分布 190
  135. 933 初始化一个代理实例 191
  136. 934 在磁盘上加载并保存代理 191
  137. 935 实现动作选择 193
  138. 94 自我对弈:计算机程序进行实践训练的方式 194
  139. 941 经验数据的表示 194
  140. 942 模拟棋局 197
  141. 95 小结 199
  142. 第 10章 基于策略梯度的强化学习 200
  143. 101 如何在随机棋局中识别更佳的决策 201
  144. 102 使用梯度下降法修改神经网络的策略 204
  145. 103 使用自我对弈进行训练的几个小技巧 208
  146. 1031 评估学习的进展 208
  147. 1032 衡量强度的细微差别 209
  148. 1033 SGD优化器的微调 210
  149. 104 小结 213
  150. 第 11章 基于价值评估方法的强化学习 214
  151. 111 使用Q学习进行游戏 214
  152. 112 在Keras中实现Q学习 218
  153. 1121 在Keras中构建双输入网络 218
  154. 1122 用Keras实现ε贪婪策略 222
  155. 1123 训练一个行动-价值函数 225
  156. 113 小结 226
  157. 第 12章 基于演员-评价方法的强化学习 227
  158. 121 优势能够告诉我们哪些决策更加重要 227
  159. 1211 什么是优势 228
  160. 1212 在自我对弈过程中计算优势值 230
  161. 122 为演员-评价学习设计神经网络 232
  162. 123 用演员-评价代理下棋 234
  163. 124 用经验数据训练一个演员-评价代理 235
  164. 125 小结 240
  165. 第三部分 一加一大于二
  166. 第 13章 AlphaGo:全部集结 243
  167. 131 为AlphaGo训练深度神经网络 245
  168. 1311 AlphaGo的网络架构 246
  169. 1312 AlphaGo棋盘编码器 248
  170. 1313 训练AlphaGo风格的策略网络 250
  171. 132 用策略网络启动自我对弈 252
  172. 133 从自我对弈数据衍生出一个价值网络 254
  173. 134 用策略网络和价值网络做出更好的搜索 254
  174. 1341 用神经网络改进蒙特卡洛推演 255
  175. 1342 用合并价值函数进行树搜索 256
  176. 1343 实现AlphaGo的搜索算法 258
  177. 135 训练自己的AlphaGo可能遇到的实践问题 263
  178. 136 小结 265
  179. 第 14章 AlphaGo Zero:将强化学习集成到树搜索中 266
  180. 141 为树搜索构建一个神经网络 267
  181. 142 使用神经网络来指导树搜索 268
  182. 1421 沿搜索树下行 271
  183. 1422 扩展搜索树 274
  184. 1423 选择一个动作 276
  185. 143 训练 277
  186. 144 用狄利克雷噪声改进探索 281
  187. 145 处理超深度神经网络的相关最新技术 282
  188. 1451 批量归一化 282
  189. 1452 残差网络 283
  190. 146 探索额外资源 284
  191. 147 结语 285
  192. 148 小结 285
  193. 附录A 数学基础 286
  194. 附录B 反向传播算法 293
  195. 附录C 围棋程序与围棋服务器 297
  196. 附录D 用AWS来训练和部署围棋程序与围棋服务器 300
  197. 附录E 将机器人发布到OGS 307

作者简介

马克斯•帕佩拉(Max Pumperla)就职于Skymind公司,是一名专职研究深度学习的数据科学家和工程师。他是深度学习平台Aetros的联合创始人。

凯文•费格森(Kevin Ferguson)在分布式系统和数据科学领域拥有18年的工作经验。他是Honor公司的数据科学家,曾就职于谷歌和Meebo等公司。

Max和Kevin是BetaGo的共同创造者。BetaGo是用Python开发的极少数开源围棋机器人之一。

关于阿尔法围棋

阿尔法围棋(AlphaGo)是第一个击败人类职业围棋选手、第一个战胜围棋世界冠军的人工智能机器人,由谷歌(Google)旗下DeepMind公司戴密斯·哈萨比斯领衔的团队开发。其主要工作原理是“深度学习”。

2016年3月,阿尔法围棋与围棋世界冠军、职业九段棋手李世石进行围棋人机大战,以4比1的总比分获胜;2016年末2017年初,该程序在中国棋类网站上以“大师”(Master)为注册账号与中日韩数十位围棋高手进行快棋对决,连续60局无一败绩;2017年5月,在中国乌镇围棋峰会上,它与排名世界第一的世界围棋冠军柯洁对战,以3比0的总比分获胜。围棋界公认阿尔法围棋的棋力已经超过人类职业围棋顶尖水平,在GoRatings网站公布的世界职业围棋排名中,其等级分曾超过排名人类第一的棋手柯洁。

2017年5月27日,在柯洁与阿尔法围棋的人机大战之后,阿尔法围棋团队宣布阿尔法围棋将不再参加围棋比赛。2017年10月18日,DeepMind团队公布了最强版阿尔法围棋,代号AlphaGo Zero。

2017年7月18日,教育部、国家语委在北京发布《中国语言生活状况报告(2017)》,“阿尔法围棋”入选2016年度中国媒体十大新词。——来自百度

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/369984
推荐阅读
相关标签
  

闽ICP备14008679号