文科软妹纸程序员与创业者鼓励师访谈谷歌工程师,详解AlphaGo背后的秘密,各位拍砖? 举报 理由 举报 取消 2017年6月17日 1 条回复 1196 次浏览 Deep,Learning,创业者,学习,机器,深度,程序员
回复 ( 1 )
来自微信公众号《程序员和创业者鼓励师》,文科男可以关注,写的真赞,经常鼓励,有福利
许丞:谷歌中国第三位工程师,之前在谷歌参与谷歌中国地图,谷歌地图以及谷歌光纤网络等项目, 现创业担任心橙互联信息技术有限公司的CEO。
2002.9-2005.7 北京大学计算机
2005.7-2006.2 IBM
2006.2-2010.4 谷歌中国
2010.4-2015.5 美国谷歌
最近,AlphaGo和李世石的围棋大战刷爆了朋友圈,之前的比赛AlphaGo首次击败人类围棋冠军,朋友圈都在转发人工智能的前景有多么乐观,其在未来发生的应用场景会非常多,机器代替人类的一天将在不久会出现。随着2016年3月13日李世石第一次取胜AlphaGo,朋友圈又引起了一片哗然,都是对人类充满了希望,感慨人类未来会越来越好,未来的世界还是人类主宰。AlphaGo的出现,无疑反应了谷歌的技术实力,研究水平之深。今天,我们采访曾经的谷歌中国第三位工程师,许丞,李开复的50大弟子之一,试图从一个谷歌人的角度谈谈AlphaGo与李世石的这场激战。
Q1: 您之前在谷歌有从事过人工智能相关的工作吗?
A1: 老实说,其实没有。。。我在谷歌参与的项目主要有谷歌地图搜索,谷歌生活搜索以及谷歌光纤网络。我参与过使用机器学习的项目,比如条件随机场进行命名实体识别和Logistic Regression做点击概率预测,但是没有直接做跟Deep Learning等相关的项目。
有两个项目可能跟目前热得发紫的深度学习相关的吧: 在谷歌我们有一个去学习深度学习的codelab,工程师都可以去学习如何使用像DistBelief(第一代谷歌大脑项目)来进行实验研究。我研究过如何用DistBelief去完成MINST手写数字识别,我写的程序还进了后来的tutorial。之前的研究者如果要去做手写数字识别,需要自己先定义好各个features, 然后再训练模型。谷歌大脑系统完全不用写features,直接把原始手写数字标注好,直接让机器去寻找最好的features并生成模型。这个过程简直太奇妙了。
第二个项目是在参与谷歌光纤网络项目的时候,我们需要去用计算机视觉的方式去解决一个物体识别的问题。简单来说的话,就是从街景车的全景图里面,用谷歌大脑去识别是不是有电线杆子,听起来这个电线杆子没什么用。。。。嗯。。。在做光纤布线的时候还是有用的。街景图里面去识别物体已经用在了抹去车牌或者说隐私保护的很多场景下,经过对比测试之后,目前我知道的数字是谷歌大脑识别这些数字或者名字的能力已经超过了人眼。
Q2:AlphaGo为什么可以下围棋?之前深蓝击败卡斯帕罗夫的时候是用了什么原理?呃。。。计算机是怎么可以下棋的?
A2: 计算机下棋的一个基本原理就是在状态空间上进行搜索。。。。嗯,太专业了是吧?好吧,那我们用一个简单的方式来描述一下这个过程。
我们把围棋简化一下,简化成一个叫做九宫棋的棋类游戏。
这个棋就是个简化版的五子棋,规则就是谁能把3个棋子连一片,就算赢(这也太简单了吧?围棋比这个可复杂多了。。。嗯,所有的抽象模型都是由简单开始的)。
我们把每个棋的一个形态当做一个状态,把所有的可能性都作为它的子状态。那么久可以形成一个如下类似的一颗树,这颗树就叫做博弈树。
这样的一棵树基本上把自己接下来可能的步数,以及对手可能走的步数都模拟了一遍,这就是大家下棋的时候所说的能够往后看几步了。看得步数越多,显然赢的可能性就越大,因此就越厉害。
对于九宫棋(三子棋),所有的状态空间是一定的,所以其实是能够知道必胜的走法的。但是对于围棋或者象棋来说,每一次可能的步数都很多,这样每多看一步,就产生很多倍的新的状态空间,对于机器来说,可能就会内存不够或者时间不够了。
因此大家会定义一个用来评估当前局面的函数,叫做评估函数。比如拿九宫棋来说,可以有很多,比如那可以是目前已经连成2个子的个数,或者任然空着的行列对角线的个数等等。评估这个局面可以告诉计算机,目前我这一步的情况如何,是不是很好。
对于某些特别不好的局面,那么评估之后就会被剪掉,这叫做剪枝法。因为博弈树是一个下完一个,另外一个跟着下,因此剪枝的方法一般用的是α–β剪枝法(Alpha–beta pruning)
通过这颗搜索树,那么机器就知道如何下子跟走棋了。
Q3: 这样就明白了。那么《自然》论文的AlphaGo的原理是什么样的呢?跟刚刚讲的一样吗?
A3:其实所有的计算机下棋的程序抽象来看都是上面那个的过程。只是因为难度不一样,所以具体的算法复杂性也会有巨大的区别。
AlphaGo最厉害的地方是用人工神经网络来建模了“棋感”这一个完全无法用计算机语言来描述的概念。通过上面的学习我们可以知道,评估一个棋局的局面实际上可以用简单的函数来描述,也可以通过往后看几步来分析。这个评估函数建模了棋局的胜负概率,因此至关重要。人类经过训练之后,能够比较快速的去数目并判断棋盘的局势,但是机器显然很难(对于计算来说,数数显然是很快的,但是围棋的目数和局势显然不是单纯数一下数目)。
AlphaGo的几个核心部分是
1. Policy Network: 用来预测如果是人类最好的选手,他会选择哪一个走法。这个模型是用深层神经网络实现的,其实是建立了最好棋手棋感的一部分。
2. Fast rollout: 快速走子,跟1的功能一样,但是用了不同的模型,这个模型跟预测点击率的Logistic Regression模型没有区别。
3. Value Network: 评估当前的棋局形势。
4. Monte Carlo Tree Search: 蒙特卡洛树搜索。用来进行状态空间的快速搜索的概率模型。
拿着刚刚学习的东西来对比:
Policy/Value Network是对比与上文说的评估函数。在上面的搜索树里面用了一个简单的数数的方式,而在AlphaGo中,用的是棋感和预测走子的方式来进行构建状态空间。
而蒙特卡洛树搜索是一个概率搜索算法,跟上面的博弈树搜索是一个套路的东西,只是用的是概率模型来进行更有效的搜索。
Q3: 太复杂了没看懂,那么你直接告诉我。。。他的贡献是什么吧?
A3:建立了棋感是很重要的贡献。人和机器根本的不一致在于: 如果你给他看一个图片;
对于机器而言,他看到的都是0/1这样的二进制数字,除了最基础的可以去数里面有多少不同颜色什么信息以外,啥都不知道。而人可以从全局的角度看这个图片,这样就能知道这个图片大概是什么东西,是什么内容。
棋感也是一样 – 人工神经网络应用在计算机视觉上的重要突破,就是人不再让计算机用0/1来去识别图像内容了,而是让计算机自动的去抽取图像的语义特征–当然很可能只是一个一个小图块tiles这种组合方式的语义特征。这样计算机就可以开始慢慢的能够开始感知到这个物体可能是什么特征通过线性组合出来的。慢慢的也就形成了概念。而棋感就是类比于这样的概念!
其二是增强学习。也就是说计算机可以开始通过自己和自己进行比赛的方式来提高自己的模型的精度。在此之前,所有的机器学习大部分都可以说是监督学习,人类在扮演着一个家长的角色,不停的告诉自己的计算机模型说这个是对的,这个需要修正。而现在在AlphaGo中,他们实现的无监督学习已经可以让人不用再去当家长,他们左右互搏也能学习到非常强的知识。这个结果非常可怕。
Q4:目前不管是AlphaGo战胜李世石还是李世石战胜了AlphaGo ,这场人机大战对未来会有什么影响呢?
A4:我认为这个影响将会是巨大的。在此之前,虽然人工智能,机器学习也算是人尽皆知的词汇,但是此次新闻的传播影响之大,从来没有过让普通人去这么去关心人工智能的进展。这次人机大战可以说是影响力全面超越了卡斯帕罗夫深蓝大战那次。可以预言人工智能在接下来的几年之内一定是最热的热点话题,可以想象会有更多大学生投入到其中的学习和研究之中,也可能会让投资更多的聚焦于这个领域,更多的应用和场景,进而会产生让人不可思议的结果。
AlphaGo中的技术和算法显然不会只用于下棋,有意思的是历史上的每一次人机棋类大战都会带来更多新技术的进步。1989年我的老师李开复博士带着他的实习生在奥赛罗比赛中,利用统计学习打败了当时的世界冠军。也许当时对大部分的人来说,其实也仅仅是一次人机大战而已。然而那次之后,统计学习在非特定人语音识别系统开始发挥无与伦比的作用,传统的基于规则的语音识别系统被打得找不着北。现在我们能用到的siri, 自动电话应答机都是从此变为现实。更重要的是,从此之后,统计学习理论基本上统治了整个机器学习这个学科的所有研究方向,延续了差不多20多年。今天,风水轮流转,曾经被认为没前途的神经网络技术卷土重来,通过深度学习的方式再次让人类在视觉识别,棋类竞技等项目上败给机器,重新占据了学术研究的焦点。这是一场计算机智能革命,这些比人机大战结果的更有现实意义。我相信,随着这些算法应用到计算机视觉,自动驾驶,自然语言理解等领域,AlphaGo及其带来的人工智能革命必将改善我们所有人的生活。