人机大战之AlphaGo的硬件配置和算法研究
AlphaGo的硬件配置
最近AlphaGo与李世石的比赛如火如荼,关于第四盘李世石神之一手不在我们的讨论范围之内。我们重点讨论下AlphaGo的硬件配置:
AlphaGo有多个版本,其中最强的是分布式版本的AlphaGo。根据DeepMind员工发表在2016年1月Nature期刊的论文,分布式版本(AlphaGo Distributed)使用了1202个CPU和176个GPU,同时可以有40个搜素线程。
维基百科上有各种版本的AlphaGo硬件配置 :

最后一列是等级分,代表了论文送审时(2015年11月)的水平。
下面是2016年3月14日GoRatings 发布的全球等级分列表,AlphaGo也被列在其中,排在第四位,可以看见各个版本AlphaGo的实力。

硬件配置Google官方没有给出明确说明,根据各方报道跟李世石对战的应该是最强的两个分布式“阿法狗”之一:
-(1920 CPUs + 280 GPUs,同时有64个搜索线程)
-(1202 CPUs + 176 GPUs,同时有40个搜索线程)
有Twitter网友作图:

从这个角度来看韩国人抗议比赛时间对于李世石不公平,也是可以理解的。
AlphaGo的算法结构
本文尝试用最简单的方法来讲述AlphaGo的算法,了解AlphaGo是如何下棋的。
AlphaGo的技术总体架构如果一句话总结的话就是:深度CNN神经网络架构结合蒙特卡洛搜索树(Monte Carlo Tree Search)。
深度学习神经网络训练出两个落子策略和一个局面评估模型,这三个策略的神经网络架构基本相同,这是参数不同而已。
两个落子策略:SL(supervised-learning policy network),RL(Reinforcement learning policy network)。
落子策略SL是通过学习人类对弈棋局,来模拟给定当前棋局局面,人如何落子的思路,这是纯粹的学习人类下棋经验,它的学习目标是:给定某个棋局形式,人会怎么落子?那么AlphaGo通过人类对弈棋局来学习这些落子策略,也就是说SL策略学习到的是像人一样来下下一步棋。

(数字表示人类棋手会下在该地方的可能性)
落子策略RL是通过AlphaGo自己和自己下棋来学习的,是在SL落子策略基础上的改进模型,RL策略的初始参数就是SL落子策略学习到的参数,就是它是以SL落子策略作为学习起点的,然后通过自己和自己下棋,要进化出更好的自己,它的学习目标是:不像SL落子策略那样只是学习下一步怎么走,而是要两个AlphaGo不断落子,直到决出某盘棋局的胜负,然后根据胜负情况调整RL策略的参数,使得RL学习到如何能够找到赢棋的一系列前后联系的当前棋局及对应落子,就是它的学习目标是赢得整盘棋,而不是像SL策略那样仅仅预测下一个落子。
局面评估网络(Position Evaluator Value Network)采用类似的深度学习网络结构,只不过它不是学习怎么落子,而是给定某个棋局盘面,学习从这个盘面出发,最后能够赢棋的胜率有多高,所以它的输入是某个棋局盘面,通过学习输出一个分值,这个分值越高代表从这个棋盘出发,那么赢棋的可能性有多大。

(局面评估是怎么看这个棋盘的。深蓝色表示下一步有利于赢棋的位置)
有了上面的三个深度学习策略,AlphaGo把这三个策略引入到蒙特卡洛搜索树中,所以它的总体架构还是蒙特卡洛搜索树,只是在应用蒙特卡洛搜索树的时候在几个步骤集成了深度学习学到的落子策略及盘面评估。
在AlphaGo与李世石的第四局中,李下出78手神之一手的时候,Google DeepMind 的 Hassabis 是这样说的:
@demishassabis 26m26 minutes ago
Lee Sedol is playing brilliantly! #AlphaGo thought it was doing well, but got confused on move 87. We are in trouble now...
@demishassabis 7m7 minutes ago
Mistake was on move 79, but #AlphaGo only came to that realisation on around move 87

简单来说就是狗没有及时认知到78的威胁,直到到87手才发现胜率下跌。这个说明狗在好几步后都不知道自己已经不妙了,计算结果里没有后来的发展。
这不是狗的bug,是标准的多算胜少算,这应该不算是bug而是value network和policy network还有待完善。
参考文献:
https://www.dcine.com/2016/01/28/alphago/
http://www.afenxi.com/post/8713
http://geek.csdn.net/news/detail/59308
http://blog.csdn.net/malefactor/article/details/50631180
http://www.leiphone.com/news/201603/Q1cWFZjnGl1wc4m1.html
人机大战之AlphaGo的硬件配置和算法研究的更多相关文章
- 人机大战中AlphaGo及其执子人黄士杰
2016年3月9日注定要写入围棋界的历史.IT界的历史以及科学界的历史.当天,韩国著名围棋棋手李世石VS谷歌AlphaGo的人机大战赛在韩国首尔举行.对弈的一方为拥有1200多个处理器的谷歌人工智能系 ...
- 随便谈谈alphago与人机大战
3月16日历时8天的人机大战终于落下帷幕,alphago以4:1的比分击败了当年如日中天的李世石.这个结果让我这个围棋爱好者+计算机爱好者百感交集…… ——一个时代落幕了,一个新的时代开启了. 这次人 ...
- 世界围棋人机大战、顶峰对决第二战:围棋世界冠军Lee Sedol(李世石,围棋职业九段)对战Google DeepMind AlphaGo围棋程序,AlphaGo再次胜出!
感觉在哔哩哔哩(bilibili)上看比赛直播比较好,一直可以看到比赛的直播画面,还能听到英文解说和中文主持人的解说.YouTube上是不错,但是一方面爬梯子比较卡,另一方面只能听到英文解说. 韩国著 ...
- 我与小娜(36):人机大战第五局,AlphaGo必胜!
我与小娜(36):人机大战第五局,AlphaGo必胜! 小娜知道,细致阅读论文"Mastering the game of Go with deep neural network ...
- 如何查看LINUX 硬件配置信息
如何查看LINUX 硬件配置信息 在网上找了N久,发现了一篇不错的文档,转载一下: 1.查看机器所有硬件信息: dmidecode |more dmesg |more 这2个命令出来的信息都非常多,所 ...
- C/C++通过WMI和系统API函数获取获取系统硬件配置信息
转载:http://www.cnblogs.com/renyuan/archive/2012/12/29/2838716.html 转载:http://blog.csdn.net/jhqin/arti ...
- 【Spark学习】Apache Spark集群硬件配置要求
Spark版本:1.1.1 本文系从官方文档翻译而来,转载请尊重译者的工作,注明以下链接: http://www.cnblogs.com/zhangningbo/p/4135912.html 目录 存 ...
- C#程序中获取电脑硬件配置信息的一种方法
本文介绍获取cpu信息和内存信息的方法,根据本文所举例的代码可以举一反三获取更多信息. 获取cpu名称的方法: public string GetCpuInfo() { ManagementObjec ...
- LINUX查看硬件配置命令
LINUX查看硬件配置命令 系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinf ...
随机推荐
- 先学习下一些基础的js和xpath语法
这两个方法到底是在做什么呢?其实就是克隆了当前指令的节点,并生成子作用域.克隆的节点由transclude定义,如果你的属性是true,则克隆的是指令模板中的ng-transclude所在的DOM节点 ...
- gcc与gdb版本兼容问题
今天在用gdb调试C++程序的时候,想用"p i”命令打印出程序的一个局部变量i,却一直提示: No symbol "i" in current context. 我愣了 ...
- 也说说angularJs里的evalAsync
虽说angular都快出2.0了,到了2.0这些东东都会被干掉.不过我们眼前的事还是要处理. $evalAsync和$timeout到底什么区别,网上说法很多,最近看到的是说在directive里就怎 ...
- jekyll安装的斗智斗勇
jekyll---将纯文本转化为静态网站和博客,GitHub Pages 可以运行 Jekyll,你很简单就可以完全免费的在 GitHub 上发布网站. 小白安装jekyll时的若干问题,有错误欢迎指 ...
- c++ chap1 to chap 3
#ifndef MAIN_H_INCLUDED#define MAIN_H_INCLUDED struct Course{ int id; std::string name;}; const int ...
- java TreeMap用法
转自:http://huchenqiang90.blog.163.com/blog/static/11250080020101025956498/ 最近工作遇到需要按一个model中不同的列进行排序的 ...
- JSP/Servlet相关
1 简介 JSP(Java Server Page)和Servlet是JavaEE规范的两个基本成员,是JavaWeb开发的重点. JSP的本质是Servlet,当用户向指定的Servlet发送请求时 ...
- flask_日期和时间
不知道大家有没有发现,在我们学习flask的过程中,post的timestamp字段添加时间时一直用的是datetime.utcnow()来获取时间,但是它获取的时间跟本地时间不一样,下面我们来测试一 ...
- java程序操作Geometry对象
Geometry 空间地理对象,Oracle中存储Geometry对象的字段类型是 MDSYS.SDO_GEOMETRY,在数据库中构建Geometry对象的方法: v_pointarray MDSY ...
- Oracle case when的用法
select xm,sex,(case sex when '男' then '1' when '女' then '2' end ) as xb, birthdayfrom student