● 每周一言

智能所体现的思维与认知,没有标准。

导语

围棋,起源于我国尧舜时期,自古以来备受追捧,蕴含着中华文化的丰富内涵。有别于象棋和国际象棋,围棋棋盘之大,玩法千变万化,其落子的可能性更是不可估量,因此一直以来都是棋类AI无法攻克的一道屏障。

随着深度学习的快速发展及计算机硬件技术的突飞猛进,DeepMind团队研发的AlphaGo围棋AI程序于去年一月以5:0优势横扫欧洲围棋专业二段棋手樊麾,之后的三月份则以4:1大胜围棋专业九段、世界排名第四的韩国棋手李世石。

最近,新版AlphaGo又与世界排名第一的我国棋手柯洁对弈三局:5月23日第一局柯洁以四分之一子的半目差距憾负;25日第二局柯洁中盘认负;27日第三局209手柯洁投子。最终柯洁0:3败于AlphaGo。

那么,AlphaGo为何如此之强?其背后的算法思想是什么?能横扫当今的人类最强棋手柯洁,是否意味着已经开启强AI时代之门?

AlphaGo

其实网上已经有很多介绍AlphaGo背后技术的文章,不过其中大部分文章一上来就把AlphaGo分成策略网络(Policy Network)和价值网络(Value Network)两个部分来讲,个人感觉有点过于抽象和笼统。本着学习交流的态度,想从技术角度为大家剖析一下AlphaGo的内部实现机制,若有理解偏差之处,还请留言相告。

揭开AlphaGo的神秘外衣,它是一个机器学习项目。既然是一个机器学习项目,那么至少包含这三个模块:特征提取,模型训练和模型预测。我们不妨就从这三个方面展开,来讲讲这个“神秘的”机器学习项目。

特征提取

对于围棋数据来说,特征提取就是把每一步下棋状态数值化、结构化。 AlphaGo所用的原始围棋数据取自KGS围棋服务器上6到9段的对局,共16万盘近3000万步走棋。根据不同子模型的需求,AlphaGo从这些原始的棋局中一共提取了两份特征数据。

首先,我们不难想到第一个最直观的棋盘特征,那就是落子情况。如上图所示,围棋棋盘大小为19×19,每一个位置的可能落子情况有三种:黑子、白子或留白。因此一个样本的落子特征数据就是3个19×19的矩阵,每个矩阵分别描述棋盘上的一种落子情况。

除了落子情况,当前棋盘本身的状态也可以提取出许多特征,比如当前执黑还是执白、每个落子经过的轮次、落子后预计吞子数目以及落子是否合法等。拿“每个落子经过的轮次”特征举例,一个8位的二进制串足以表示任一方在整盘棋中所下的轮数,因此该特征可以用8个19×19的矩阵表示。下图举例展示了落子情况的特征矩阵形式,其他特征以此类推。

加上落子情况,AlphaGo一共提取了48种特征,构成一个19×19×48的特征空间。为了方便后文叙述,这份特征数据集先命名为SetASetA相当于一份图片数据集,作为卷积神经网络的输入。

除开图片数据集,AlphaGo还根据围棋的领域知识提取了另一份喂给softmax回归网络的局部特征,用来实现快速走棋,为后面的蒙特卡洛树搜索 (MCTS)做准备。对于这些局部特征,AlphaGo只提供了数目统计,并未给出这些特征的具体提取方法,数目统计如下图所示。

同样,为了便于后文描述,这份特征数据集命名为SetB

模型训练

一上来就分为策略网络与价值网络来讲,只会加“厚”AlphaGo的神秘面纱。讲道理,AlphaGo的子模型其实一共有四个:卷积策略网络、增强策略网络、softmax回归网络和卷积价值网络。下面我将逐一讲解这四个网络结构及其训练过程。

卷积策略网络

这里有必要先铺垫几句,自从机器学习的泰山北斗Hinton在06年重新掀起深度学习的热潮以来,伴随着计算机硬件技术的迅猛发展,作为深度学习代表之一的卷积神经网络(Convolutional Neural Network,CNN),在算法界可谓无人不知无人不晓。CNN擅长解决的问题是图像识别和图片分类,在这些问题上有着惊人的效果,因此DeepMind团队选择了CNN来训练AlphaGo的base模型。这个模型的网络结构如下图所示。

可知,输入数据集为setA,卷积策略网络共有13个卷积层,一个softmax全连接层。其中第1个卷积层使用5×5的卷积核同尺寸Relu输出,第2~12个卷积层均使用3×3的卷积核同尺寸Relu输出,第13层使用1×1的单元核做了一个线性归一的过滤,最后softmax全连接层预测输出下一步落子位置的可能性。

可想而知,这个卷积策略网络所形成的围棋AI水平已经很高了,起码它已经学会了大部分人类高手的下法。但是,这对于AlphaGo来说还远远不够。

增强策略网络

如果说卷积策略网络是一个学习他人、超越他人的阶段,那么增强策略网络就是一个自我学习、超越自我的阶段。据说AlphaGo的内部测试结果为,增强策略网络对上卷积策略网络的胜率高达80%!那么其究竟是如何实现自我学习的呢?

这里不得不说一下增强学习了。增强学习又称强化学习,是通过一种不断地自我试错方式,来找到最佳策略并加以激励的机器学习方式。就以下围棋为例,好比两个完全不会下棋的人,一开始都随机落子,直到一方获胜。获胜的一方根据走法来优化自己的落子策略,然后两人再继续不停地下棋、优化、下棋,重复这样的过程,直到满足某一条件。最终,不会下棋的人也能知道哪一步是好棋,哪一步是臭棋。这就是增强学习的一种通俗解释,有点像周伯通的双手互搏术。

增强策略网络使用增强学习进行训练,这里可不是随机落子,而是用卷积策略网络这个基础AI开始落子。具体方法是先复制一份卷积策略网络参数给增强策略网络初始化,最终输赢标签和棋为0、赢棋为1、输棋为-1,然后用增强策略网络反复和自己弈棋,根据输赢结果反向传播更新网络参数。经过若干次迭代之后更新一份参数至对手网络,直至满足一定的条件后结束。

据说单凭该网络的下棋水准就已经达到了KGS的3d水平。不过,AlphaGo并没有在最后的系统中使用这个增强策略网络,理由是增强策略网络的走棋风格缺乏变化,对后面的蒙特卡洛树的搜索不利。

softmax回归网络

大家或许会问,上面已经有了一个很强的走棋网络,为什么还需要一个softmax回归网络来走棋呢?我想可能有如下两点原因:

第一,回归网络结构只有一个隐层,相比卷积神经网络的13层结构,其落子的速度实在是快太多了,根本不在一个数量级上,且准确率还不错,而后面要讲的蒙特卡洛树搜索方法对搜索的时间要求很高,卷积网络无法满足要求;

第二,**softmax回归网络的数据集是**setB,与setA处于完全不同的特征空间,因此能提高走棋策略的多样性,增加了是落子的不同可能性。

事实证明,用softmax回归网络单独落子,也达到了KGS的3d水平。

卷积价值网络

这是AlphaGo的又一个厉害之处,就是说AlphaGo不仅要有高效的落子方案,还要有这么一个网络来评估当前棋局的获胜概率,来双重保证当前的落子方案是最优方案。

卷积价值网络的算法思想是:每次随机一盘棋局之中的轮次T,棋局的第1轮到T-1轮落子由卷积策略网络生成;然后在第T轮随机落子,第T+1轮一直到该局结束则使用增强策略网络生成落子;最后计算输赢,赢棋为1,输棋为0,反向传播误差调整网络参数。这个卷积价值网络的结构如下图所示。

观察上图可知,除了输出层把softmax层替换成了256的全连接层外加一个Tanh激活层,其它层的结构与卷积策略网络一模一样。此外,需要注意的是,这里的输入数据集全部是由卷积策略网络和增强策略网络共同生成。而且为了避免同一对局下,输入不同但结局相同所带来的过拟合现象,每一个对局只会取一个样本进行训练,这也是为什么单独采集了3000万个对局的样本作为训练集的原因。

模型预测

打造好了上述四件兵器,卷积策略网络、增强策略网络、softmax回归网络和卷积价值网络,AlphaGo披挂上阵。它走进了人类顶级围棋道场与顶级棋手较量,采用的战术策略就是前面提到的蒙特卡洛树搜索 (MCTS),其搜索示意图如下所示。

蒙特卡洛树搜索

MCTS的基本思想是:多次模拟未来棋局,然后选择模拟次数最多的落子方案作为当前走法。具体步骤如下:

首先,用卷积策略网络生成到未来T轮的落子方案; 
然后,用卷积价值网络评估该落子方案的胜率,用softmax回归网络基于该落子方案继续快速走棋,直至棋局结束得到输赢结果,综合两个结果算出该T轮落子方案的胜率; 
接着,结合该胜率,用卷积策略网络重新生成到未来T轮的落子方案,若出现相同走法,则胜率取平均值; 
最后,循环上述过程若干次,选择模拟次数最多的胜率最高的落子方案作为当前走法。

现在这里可以总结说一下了,如果单纯把AlphaGo分成策略网络和价值网络,那么策略网络指的就是上面所说的卷积策略网络,而价值网络则是卷积价值网络与softmax回归网络的结合。其中策略网络负责计算当前的落子位置,价值网络则负责评估落子该位置的最终胜率,MCTS则利用这两个结果进行搜索,给出最终的落子方案。

据说最近对战柯洁的AlphaGo Master版本要胜去年的李世石版本三目,与柯洁三局下来也没有出现像去年第四局那样,因昏招而落败的情况。推测原因,一是在MCTS的时候做了优化,结合快速走棋来搜索节点而不是只用卷积策略网络,这样就能避免短期内落入局部思维而完全忽略人类的“神来之笔”;二是数据集已经完全弃用人类棋局,而是用从AlphaGo自我对弈中挑选出的样本来构成,因此策略网络也会更加强大。

这里多说一句,只用卷积策略网络搜索节点存在弊端,是因为卷积核一般都很小,导致棋盘不同位置的局部视野需要在若干轮之后才能相互影响,因此才出现了所谓的昏招。

文末,想表达一下我对下面这个问题的观点。

先后胜樊麾、李世石与柯洁,是否意味着AlphaGo已具备自主意识,走向强AI时代?

对于这个问题,我想用两点来回答一下。 
其一,一个能识别出美女图片的图像识别系统,是否就是好色呢? 
其二,Facebook黑暗森林的负责人田渊栋老师说,AlphaGo在去年三月和李世石对局的时候要求用中国规则,因为如果换成别的规则,预测目标发生改变,AlphaGo就需要重新训练价值网络了。

智能所体现的思维与认知,没有标准。而目前各大公司的人工智能项目,更像是标准化的产物。所以从这些方面看,无论是AlphaGo、Google Brain,还是百度大脑,离真正的智能其实都还很遥远。

AlphaGo技术剖析:揭开围棋大脑的神秘面纱相关推荐

  1. 揭开人类语言的神秘面纱:从理解到处理自然语言

    https://www.toutiao.com/a6709740042509615619/ 随着人工智能的进步和技术变得越来越复杂,我们希望现有的概念能够接受这种变化或者改变自己.同样,在自然语言的计 ...

  2. 揭开webRTC媒体服务器的神秘面纱——WebRTC媒体服务器开源项目介绍

    揭开webRTC媒体服务器的神秘面纱--WebRTC媒体服务器&开源项目介绍 WebRTC生态系统是非常庞大的.当我第一次尝试理解WebRTC时,网络资源之多让人难以置信.本文针对webRTC ...

  3. 小编带你一起揭开DLL木马的神秘面纱(转)

    在这个万"马"奔腾的时代,网络上充斥着各种各样的木马,不过随着杀毒技术的进步和大家防毒意识的提高,传统木马已渐渐失去市场,而DLL木马则"与时俱进"以其强大的生 ...

  4. 揭开均线系统的神秘面纱_揭开依赖注入的神秘面纱,并通过此快速介绍了解它的实际应用...

    揭开均线系统的神秘面纱 by Sankalp Bhatia 通过Sankalp Bhatia 揭开依赖注入的神秘面纱,并通过此快速介绍了解它的实际应用 (Demystify Dependency In ...

  5. 揭开均线系统的神秘面纱_在应用程式审查API中揭开新玩法的神秘面纱

    揭开均线系统的神秘面纱 During the #11WeeksOfAndroid the new Play In-App Review API was announced. This was a lo ...

  6. html5实现单点登录,图文并茂,为你揭开“单点登录“的神秘面纱

    概念 单点登录( Single Sign On ,简称 SSO),是目前比较流行的企业业务整合的解决方案之一,用于多个应用系统间,用户只需要登录一次就可以访问所有相互信任的应用系统. 前置介绍 同源策 ...

  7. android mimi 病毒如何,迷你脑将揭开人类朊病毒的神秘面纱

    原标题:迷你脑将揭开人类朊病毒的神秘面纱 朊病毒病是一种可传染的致命性神经退行性疾病,会感染人类和动物.该疾病可自发发生,也可遗传或由于暴露于受污染的物质而获得.朊病毒病的进展会导致尿蛋白酶抵抗性朊蛋 ...

  8. 揭开 Growth Hacking 的神秘面纱(番外篇)+ 大结局

    揭开 Growth Hacking 的神秘面纱(番外篇)+ 大结局 覃超帝国兴亡史  12月11日 11:45 FACEBOOK  互联网  分类 :互联网 阅读:1527 抢沙发 Growth Ha ...

  9. 揭开Java 泛型类型擦除神秘面纱

    转载自   揭开Java 泛型类型擦除神秘面纱 泛型,一个孤独的守门者. 大家可能会有疑问,我为什么叫做泛型是一个守门者.这其实是我个人的看法而已,我的意思是说泛型没有其看起来那么深不可测,它并不神秘 ...

最新文章

  1. 【Jekyll搭建GITHUB个人博客】安装Ruby 环境、包管理器 RubyGems、Jekyll与错误解决...
  2. python 实时显示声音
  3. 拒绝“魏则西悲剧”, 产品经理支招,根解百度医疗“莆田系”漏洞
  4. 百练OJ:2964:日历问题
  5. shell如果文件夹不存在则创建
  6. 4.非关系型数据库(Nosql)之mongodb:普通索引,唯一索引
  7. ubuntu下docker环境、php环境以及laravel的安装
  8. java学习(22):if语句
  9. 【emWin】例程一:emWin系列教程简介
  10. ASP.NET程序中常用的三十三种代码一
  11. 报表开发导出各种格式文件的API
  12. vue利用Bscroll开发一个城市列表组件,带右侧字母导航栏
  13. word怎样删除向下的箭头“↓”
  14. 从零开始学习html(十)CSS格式化排版——下
  15. easyui combobox 查询传递json对象
  16. ES对比两个索引的数据差
  17. JAVA消息(第一篇)JMS 很重要!!!!包教包会!!不闹!!!下一篇-AMQP(wire-level protocol)
  18. python—you-get下载工具、wget下载工具
  19. 5G/NR PDSCH之频域资源分配
  20. java echarts 生成图片_java如何在后台生成echarts图表?实际代码展示

热门文章

  1. labuladong的算法小抄pdf_真漂亮!这份GitHub上爆火的算法面试笔记,助你圆满大厂梦...
  2. focal loss dice loss源码_Detection学习之七-FCOS论文源码解读
  3. javascript小游戏_javaScript小游戏——网页版别踩白块
  4. Web服务 源码编译安装LAMP架构
  5. python笔记之if语句及嵌套浅析
  6. 最新Linux教程发布下载【最后更新4月12日
  7. 停止从域服务器同步文件,域控制器不同步处理办法
  8. 微信支付宝服务器在哪里,支付宝支付与微信支付服务端回调notify_url数据的区别...
  9. linux realvnc教程,Linux下RealVNC Enterprise 的安装和使用
  10. oracle更改文件,Oracle修改数据文件名以及移动数据文件