[译] AlphaGo 的确是一个大事件

转自:http://www.jianshu.com/p/157a15de47df

字数3797 阅读696 评论0 喜欢4

作者:Michael Nielsen,源地址:https://www.quantamagazine.org/20160329-why-alphago-is-really-such-a-big-deal/

围棋程序刻画了人类直觉的元素,这是能够产生深远影响的进步。

1997 年,IBM 的 Deep Blue 系统击败了国际象棋世界冠军,Garry Kasparov。当时,这场胜利被广泛当做是人工智能发展中的里程碑。但是 Deep Blue 的技术仅仅对棋类有用,不可推广。计算机科学并没因此产生革命。

而近期打败了历史上最强的棋手的 AlphaGo 有没有特别之处呢?

我相信答案是有,但是并不是依照和你们可能听到的那些理由。很多的文章提出专家观点认为围棋比国际象棋更难,从而让这次胜利显得更加令人瞩目。或者有人说我们并没有认为在十年内在围棋中机器能够打败人类,所以这是一个重大突破。一些文章给出了正确的观察,在围棋中存在更多的可性位置状态,但是他们并没有解释为何这个是对机器而不是人类更难的问题。

换言之,这些观点都没有解决核心问题:AlphaGo 成功的技术进步是否有更加广泛的影响?为了回答这个问题,我们必须认识到 AlphaGo 的技术进步比让 Deep Blue 成功的技术是质的飞跃同时也更加重要。

在国际象棋中,初学棋手被教导棋子的值这个概念。在一系统中,骑士或者象值三个卒。而车,因为能够覆盖的移动范围很大,值五个卒。然后皇后有最大的范围,值九个卒。国王有无穷的值,因为失去国王就输了比赛。

你可以使用这些值来评估可行的走子。弃掉一个象吃掉对手的车?通常是好的选择。弃掉骑士和象换对手的车?那就不是一个好的选择了。

在计算机国际象棋中值的概念是很重要的。大多数计算机象棋程序搜索数以百万计或者数十亿的走子的组合。程序的目标是找到一个走子的序列最大化最终程序的棋盘状态的值,而不管对手的走子的情况。

早期的国际象棋程序通过上面给出的规则来评价棋盘状态。但后期的程序使用更加细节的象棋知识。Deep Blue 组合了超过 8,000 种不同的因素在评价棋盘状态的函数之中。Deep Blue 不会仅仅说一个象等于五个卒。如果同一方的卒在象前面,卒实际上会限制象的移动,因此让象本身的价值降低。如果卒是被捕获的,意思是他可以通过捕获一个敌方卒来打开车的路,Deep Blue 将卒看做是半透明的,并不会降低车的值太多。

像这样依赖细节知识的想法对 Deep Blue 非常关键。根据他们团队的技术报告,这种半透明施压卒在他们和 Kasparov 第二场比赛中发挥了关键作用。

最终,Deep Blue 团队使用了两个主要的想法。第一个是构建一个函数可以使用很多细节的象棋只是来评价任意给定的棋盘状态。第二个是使用强大的计算资源来评价很多可能的位置,选择最佳最终棋盘状态的那个走子。

那么用这个策略来下围棋呢?

使用这样的策略你会很快进入到一个困难的境地。问题出在如何评价棋盘状态上。顶级的围棋棋手使用很多的直觉来评判特定的棋盘状态的好坏。例如,他们会做出关于一个棋盘位置是“好的形态”的模糊描述。并且也不会是像国际象棋那样的非常清晰的表达直觉方式。

现在你可能会认为这仅仅是多花时间精力就可以获得很好的评价棋盘状态的方法。不幸的是,并没有显而易见的方式能够像国际象棋那样成功,所以围棋程序一直比较低迷。而所有的变化源自 2006 年 Monte Carlo Tree Search 算法的出现,MCTS 基于一种更加聪明的随机模拟比赛的方式进行。但是这种方式仍然离人类棋手的实力很远。所以看起来对棋盘状态很强的直觉感才是取得胜利的关键。

有关 AlphaGo 中提出的新的和重要的东西是人们设计出了一种可以将直觉层面的概念刻画的方式。

为了解释其工作机制,我们先描述 AlphaGo 系统,主要内容参见 AlphaGo 团队发表于今年一月份的 论文(系统的细节和 AlphaGo 与李世石的比赛有不同,但是主要的原理是一致的)。

AlphaGo 拿来了人类玩家的 150,000 比赛的数据,使用人工神经网络发现其中的模式。特别地,它学会了预测人类玩家在任意给定的位置(状态)走子的概率。AlphaGo 的设计者们然后通过和自己更早的版本进行重复比赛来提升神经网络的性能,不断调整网络来逐步提升其胜利的机会。

那么这个策略网络如何学习预测好的走子的?

简而言之,神经网络是一个非常复杂的数学模型,有数百万的参数可以调整来改变模型的行为。当我说这个网络“学习了”的时候,我是指计算机一直在不断地对模型的参数做出微小的调整,试着找到一种在比赛时给出微小进步的方式。学习的第一阶段,网络试着去提升做出和人类棋手同样的走子的概率。而第二阶段,网络会尝试提升在自我对弈中赢得比赛的概率。这看起来非常疯狂——不断重复对某个相当复杂的函数进行微小调整——但是如果持续足够长的时间学习,并借助足够的计算资源,网络会表现得越来越好。另外这儿有一个奇特的现象:网络变得更好的原因无人理解,因为这些优化是数十亿微小的自动调整产生的结果。

在这两个训练过程后,策略网络就可以下中规中矩的一盘棋了,可能和人类的业余棋手水平相当。但仍然离职业水平有很大的差距。在某种意义上,这是一种不对未来走子过程进行搜索且不评估结果棋盘状态的下法。为了超越业余水平,AlphaGo 需要一种衡量棋盘状态的方法。

为了越过这个障碍,设计者们研究出了 AlphaGo 的核心想法——将策略网络和自身进行对弈,来获得一个给定的棋盘状态是否为胜利的概率估计。胜利的概率就提供了一种关于棋盘状态的评估的方法。(实际上,AlphaGo 使用了一个更加复杂的实现方式)接着,AlphaGo 将这个观点和对很多可能的走子过程的搜索进行组合,将搜索放在策略网络认为更加可能的路径上。然后选择那个给出最高棋盘状态评价的走子。

我们可以从中看到 AlphaGo 并没有像 Deep Blue 对国际象棋那样从一个基于很多围棋细节知识的评价系统开始。相反,通过预先分析成千场的比赛,并引入相当多的自我对弈,AlphaGo 通过数十亿的微小调整不断地做出微小改进的方式构建了策略网络。然后,策略网络帮助 AlphaGo 构建了一个刻画了非常类似于人类棋手所谓的关于不同棋盘状态的直觉的概念。

按照这样的方式,AlphaGo 比 Deep Blue 更具突破性。因为计算机发展的早期,计算机就已经被用来搜索优化已有的函数的方式。Deep Blue 的观点仅仅是:搜索的目标是优化尽管复杂但是形式大多数由已有的国际象棋知识表达的函数。当然完成搜索的方式也是很聪明的,但是与 1960 年代的多数程序相比却没什么不同。

尽管搜索方式上更加聪明一些,不过 AlphaGo 也还是使用了搜索和优化的思想。但是这里新颖且不同寻常之处是在前期(prior stage)使用了神经网络来学习帮助刻画好的棋盘状态的函数函数。通过组合这两个部分,AlphaGo 才能达到现在的状态。

复现直觉模式识别的能力其实非常重要的。这也是更加广泛的趋势的一部分。在更早的一篇论文 中,Google DeepMind 的团队构建了神经网络学会玩 49 种经典的 Atari 2600 视频游戏,在很多的游戏中达到了超过人类专家玩家的水平。解决这个问题的保守观点和 Deep Blue 类似:人类程序员分析每个游戏然后给出游戏的细节控制策略。

对比看来,DeepMind 的神经网络简单地探索了很多玩游戏的方式。刚开始,网络和人类初学者很像,玩得非常糟糕,完全是瞎玩。但是网络偶然也会给出几个精彩的操作。它学会了识别好的玩法——就是能够获得高分的玩法——这其实和 AlphaGo 学会好的棋盘状态的方式很像。并且当这个情况出现后,网络会强化这个行为,不断地提升玩游戏的水平。

这种获得直觉和识别模式的能力也已经被使用到其他的场景中了。在 2015 年,Leon Gatys、Alexander Ecker 和 Matthias Bethge 在 arXiv 上发表了一篇论文,描述了一种使用神经网络学习艺术风格并能够应用这种风格到其他图片上。这个想法非常简单:网络会展示给大量的图片,获得识别类似风格的图片的能力。然后可以应用风格信息到新的图像上。例如,下图给出了当你将中间那副梵高的画的风格作用在左边的埃菲尔铁塔的照片上时就得到了右边的复合图片。

Neural Art

这虽然不是非常好的艺术,但是对展示神经网络刻画直觉并作用到各个领域确实是一个很棒的例子。

在过去的几年里,神经网络已经被用来在很多领域中刻画直觉和识别模式。很多使用这些网络的项目都已经出现,涉及的任务包括比如识别艺术风格或者开发好的视频游戏策略上。但是同样也有在不同的领域如音频和自然语言中惊人的例子。

由于这样的多样性,我认为 AlphaGo 本身并不是一个革命性的突破,但是更像是一种前沿的极度重要的发展:构建能够刻画直觉并学会模式识别的系统的能力。计算机科学家尝试这个任务其实已有数十年,但并没能取得大的进展。但是现在,神经网络的成功表明有潜力去扩大可以用计算机解决的问题的范围。

现在去疯狂欢呼去声称通用人工智能在几年后就会出现其实是危险的。总之,假设你将思考的方式分解成合乎逻辑的计算机能够胜任的方式和“直觉”。如果我们将 AlphaGo 和类似的系统看做是计算机可以模拟直觉的证据,看起来所有需要的基础都已经形成了:计算机现在可以执行逻辑和直觉。那么肯定通用人工智能就在不远的地方了!

但是这里其实有个措辞上的错误:我们将很多精神活动都归为“直觉”了。但仅仅因为神经网络可以刻画某些特定类型的直觉就认为它能够在所有类型的直觉上可行那就不合适了。可能神经网络在某些我们认为需要直觉的任务上一点都没有作用。

实际上,我们现在对神经网络的理解上不少方面都很欠缺。例如,2014 年的一篇论文描述了某些可以欺骗神经网络的“对手样本”。作者从一个表现很好的神经网络模型开始。看起来这样的神经网络已经具备刻画出模式识别的能力了。但是他们的工作表明,通过对图片进行微小的改变是可以欺骗神经网络的。例如,下面的图片中神经网络可以正确地识别左边的小狗,但是如果加上中间突破中的微小的扰动,得到的右边那副图片网络就不能正确地识别了。

对手样本

另一个现有系统的极限是他们通常需要对很多的人类样本进行学习。例如,AlphaGo 从 150,000 场人类比赛中学习。这是相当大的一个数目了!但是,人类是可以从很少的比赛中学习非常多的。类似地,识别和操作图像的网络一般都需要数百万的样本图像,每个图像有着对应的标注信息。所以重要挑战是让系统不需要更少的辅助信息从少量的人类提供的样本数据集中学习。

诸如 AlphaGo 这样的系统是真正让人兴奋的。我们已经学会使用计算机系统重现人类直觉的某些形式。现在我们也面临许多巨大的挑战:扩展计算机能够表示的直觉的范围,让系统更加稳定,理解他们工作的原理和机制,学习将这些模型和已有的计算机系统组合的更好的方式。我们可能很快就可以学会刻画给出数学证明、写出故事或者好的解释的直觉判断了吗?现在正是人工智能最为光明的时刻。

[译] AlphaGo 的确是一个大事件的更多相关文章

  1. 调用Android自带日历功能(日历列表单、添加一个日历事件)

    调用Android自带日历功能  觉得这篇文章不错,转载过来. 转载:http://blog.csdn.net/djy1992/article/details/9948393 Android手机配备有 ...

  2. hadoop大事件

    大事件:  Hadoop新一代(2.x)计算平台YARN 一代hadoop存在的问题: 1.Jobtracker单点,容易导致崩溃,节点较多时造成性能瓶颈 2.作业分配基于槽位(slot),分配粒度 ...

  3. yii2 注册一个新事件(trigger Event)

    有些时候我们需要在某个方法的中间注册一个新事件,确保某些业务的可拓展性. 下面我介绍一下注册一个新事件的方法: 第一步:需要的地方(比如控制器或模型)中定义一个事件常量(如:const EVENT_C ...

  4. 60行python代码分析2018互联网大事件

    2018年是改革开放四十周年,也是互联网发展的重要一年.经历了区块链,人工智能潮的互联网行业逐渐迎来了冬天.这一年里有无数的事件发生着,正好学了python数据处理相关,那么就用python对18年的 ...

  5. 如何基于Go搭建一个大数据平台

    如何基于Go搭建一个大数据平台 - Go中国 - CSDN博客 https://blog.csdn.net/ra681t58cjxsgckj31/article/details/78333775 01 ...

  6. 你是猴子请来的逗比么!IT跳槽大事件

       3月招聘大战早已硝烟四起,互联网职场摇身一变成了跳蚤市场,猎头们告诉跳蚤们,跳不跳不是不问题,往哪儿跳才是重点,跳对了高薪期权都如过眼云烟.不过小编不得不说,劳资最痛恨那些跳槽的人啦!就因为加班 ...

  7. 用Python实现一个大数据搜索引擎

    用Python实现一个大数据搜索引擎 搜索是大数据领域里常见的需求.Splunk和ELK分别是该领域在非开源和开源领域里的领导者.本文利用很少的Python代码实现了一个基本的数据搜索功能,试图让大家 ...

  8. 回顾 2020 年 GitHub 的大事件,你知道多少?

    作者:HelloGitHub-小鱼干 这里是 HelloGitHub 出品的年度盘点系列,本期我们将盘点 GitHub 在 2020 发生的大事件,回顾一下今年 GitHub 给我们带来了那些惊喜.故 ...

  9. 团队nabcd(校园大事件)

    我们团队项目名称是TD校园通,作为辅助功能校园大事件,一样是一个亮眼的功能. 我们的大事件功能主要解决了大家qq微信群聊过多,信息杂,很多时候错过了校园内的大事件,错失了好的活动的痛苦. 我们计划在主 ...

随机推荐

  1. PAT 07-3 求素数

    求素数,这是一个“古老”的问题,每个学过编程的人都应该碰到过,这里是求第M+1到第N个素数,这么经典的问题,当然得给它写上一笔,下面是题设要求及代码实现 /* Name: Copyright: Aut ...

  2. [super init]方法的调用

    当重新覆盖父类的init方法时,需要调用[super init]方法确认父类中的init是返回一个实例,而不是一个空的实例. 那为什么要调用这个呢? 我得猜测是这样的:因为这是一个初始化方法,需要对对 ...

  3. BZOJ 3181 BROJ

    像我这种SB还是早点退役. #include<iostream> #include<cstdio> #include<cstring> #include<al ...

  4. susy 学习之进阶

    由于现在对susy的教程有限,只有官网指南性质的文档,然后就是w3cplus对她的翻译,所以我从零安装susy并调试项目到与从github上克隆susy项目同时进行,主要是为了参考susy放在git上 ...

  5. swift系统学习控件篇:UIProgressView+NSTimer+UIstepper+UIAlertController

    工作之余,学习下swift大法.把自己的学习过程分享一下.当中的布局很乱,就表在意这些细节了.直接上代码: UIProgressView+NSTimer+UIstepper UIStepper UIP ...

  6. IOS 用正则表达式解析HTML等文件,得到所有文本

    获得网页内容 NSURL *url=[NSURL URLWithString:@"http://121.199.34.52/wordpress/?json=core.get_post_con ...

  7. C# UdpClient 设置超时时间

    /********************************************************************** * C# UdpClient 设置超时时间 * 说明: ...

  8. 传智springMVC笔记

    springmvc 第一天 springmvc的基础知识 课程安排: 第一天:springmvc的基础知识 什么是springmvc? springmvc框架原理(掌握) 前端控制器.处理器映射器.处 ...

  9. 【avalon源码】

    1. document.getElementsByTagName('head')[0] document.head 2. 3. var IEVersion = NaN if (window.VBArr ...

  10. 常用的Hash算法

    1.RSHash unsigned int RSHash(const std::string& str) {    unsigned int b    = 378551;    unsigne ...