来源:
http://headlines.yahoo.co.jp/hl?a=20160317-00000049-cnippou-kr
http://headlines.yahoo.co.jp/hl?a=20160317-00000050-cnippou-kr

作者:首尔大学计算机系教授 文炳魯

这场世纪的对决以人工智能的胜利而落幕。然而笔者仍然认为如果李世石九段能够发挥出全盛时期的实力与创意的话,是不会输给AlphaGO的。虽然李世石输掉了比赛,但仍然展现出了作为过去10年世界围棋第一人的那份宽容和品格。这次的对决中虽然也并非没有规则限制等不完美的地方,但是我们应该多看开一些,为人工智能的胜利毫不吝啬的送上祝福和赞许。
    如果不知道棋盘上变数的庞大性,也就不会明白为什么这次的对决会如此的让人瞩目。在围棋里,光是第一手的放置方式就有将近37个位置。随后稍微有所增加,然后越到终盘放置的可能性就会逐渐减少。这里假设一次需要考虑的落点位置大概有40个,如果如果计算机一秒钟能考虑一万种情况的话,那么连下7步所需考虑的情况大概需要多少时间来计算呢?
    问过一圈周边的熟人,一般的回答是仅需数秒,然而实际上却需要近5年的时间。如果扩展到下30步棋,所需时间就已经超过了10的36次方年。即使候选放子的位置缩小到10个,最初的7步仍然需要17分钟,而30步棋则超过了10的18次方年的时间。没有尽头的时间消耗啊。一般来说,围棋都会进行到200手左右,但仅仅是考虑30手就已经如此难堪,那怎样才能完整的计算200手棋的计算呢。就结论而言,非常细致的搜索和推断仍然是不可或缺的,即便是AlphaGO也并没有回避这个问题。
    AlphaGO之所以敢于挑战这个巨大的领域,其背景在于近几年卓越的技术进步。对于人类来说,图片的分类是比较容易的做到的,但对计算机而言却并不简单。拿当年的发展速度来说,每一年能把识别的错误率降低个0.5%就很了不起了。然而在2012年的ILSVRC(就是2015年百度被踢的比赛)大赛中,多伦多大学的hinton教授组将错误率从26%一口气压到了15%,并因此赢得了竞赛。取得了本应花上20年才能取得的进步。hinton教授所使用的技术正是深度学习和通用GPU运算。到了2015年(的比赛中),错误率已经被压制到了3%以内,仅仅3年的时间就获得了近50年的进步。
    AlphaGO得益于这个爆发式的技术进步,并在规模上堆到了极致。AlphaGO所使用的深度神经网络,仅仅输入层的节点数量就超过了2万5千个,而处理这些输入情报的中间层(hidden layer)有将近830万个。而它们之间的连接边(weight edge)竟然达到了14亿条。如此巨大的神经网络直到最近都是不可训练的。而AlphaGO使用3000万个落点、即将近16万分棋谱对这个网络进行一次训就需要大约一个月的时间。
通过这个惊人的过程,人工智能掌握了本来认为是人类专属的抽象思考能力。本次对局中,AlphaGO下一手所需的时间在平均一分钟或者稍微超过一点。通过论文内容逆向推,AlphaGO在一分钟内大约做了近5亿次的局势判断。5亿次看上去很巨大的数字,但如果每一手棋需要考虑30个左右落点的话,大概也就平均6.5手而已,只考虑10个落点的话也大概仅仅能推测8.5手。最终只能以推测的结果来确定落子点。这是这种检索方式与生俱来的界限。
    而能够突破这个界限的正是AlphaGO的另一个厉害的地方。仅仅上面那种程度的检索其实很难说能够战胜人类最高等级的棋手,因为人类也有很多很多使用推测能力的地方,甚至比人工智能程序更加精巧。然而AlphaGO有着比其他围棋软件领先一个时代的推测精度。可即便如此仍然可能还要比人类要差一些,这其中的差距已经可以使用强大的计算能力进行补全了。这个结果给予了我们一个重要的启示。人类的抽象思维能力这种东西,可能并非我们所想的那么复杂。
    职业围棋界想必受到了巨大的冲击,从今以后也会成为围棋界的重要资产吧。通过与AlphaGO的五盘对局,它展现出了职业棋手所下不出来的创意下法。也许会让职业棋手们从下法的固定观念里面觉悟出来,甚至有扩展思考边界的机会。围棋的水平也会更进一步的发展吧。
    也有人担心如果就这样发展下去,数十年后人类被人工智能所支配。从产业发展的历史来看,例如纺织业,信息化的初期也经常会有人对工作受到威胁产生恐惧。但是最终孕育出了新的工种,技术发展的同时,也为人类带来更加富裕的生活。以深度学习为代表的人工智能技术突然来到了我们的生活中,已经到了这些技术的基本含义应该像常识一样被知晓的时代。突然之间进步50年的发展速度,或许能够让我们享受到本应在有生之年连看都看不到的技术产物。

[翻译]AlphaGO留给我们的东西的更多相关文章

  1. 服务发现与健康监测框架Consul-DNS转发的应用

    关于Consul Consul是一个提供服务注册与发现,健康监测,Key/Value存储以及多数据中心存储的分布式框架.官网地址是https://www.consul.io/,公司初步应用后我们老大觉 ...

  2. Notepad++中NppExec的使用之一:基本用法

    一直用NPP,很长时间了,最近才学习它的各种插件,这篇文章是根据NppExec的用户指南写的.很多地方是翻译的,但不全是翻译,同时也有些东西没有翻译. 一.何为NppExec 简单的说,这个插件可以让 ...

  3. iOS 使用Storyboard 和 xib时的一些知识

    以前不太使用xib和storyboard进行布局,后来在工作中参与到了一个项目的维护工作,那个项目就是使用stroyboard的,再加上xcode5对stroyboard的大力支持,就在这里对于使用s ...

  4. cocos2dx 2.x 版本+Windows+ADT Bundle 配置

    昨天解决了cocos2dx 3.x版本+Windows+ADT Bundle的配置,今天来解决cocos2dx 2.x版本的配置. 整体来说,2.x的配置相对麻烦一点,不过一旦解决了,就一路畅通无阻了 ...

  5. JSP(一)

    一.JSP概要 一]JSP的概念 1>JSP是SUN公司开发的一个基于服务端的一种动态WEB开发技术.         2>JSP的代码结构/内容 = HTML内容+JSP特有元素内容   ...

  6. 目标管理剖析与实践– 献给追梦的人 (转)

      好久没写日志了. 最近总算在忙碌的日子中小小的松了一口气, 过来补起这几个月的空缺. 上次写的Cover Letter & Resume 重点诠释 - 深度剖析没想到居然超过了一万的阅读量 ...

  7. struts2 全局格式化,格式化时间,金钱,数字

    //在前台页面去控制时间,数字,小数,金钱,是极其不明智的选择,除非你是写了良好的 js api 像freemarker , struts 都有良好的标签,我们应该好好利用,才发现的,给大家分享一下 ...

  8. C#重的数组、集合(ArrayList)、泛型集合(list<T>)三者比较及扩展延伸……

    本来我只想总结下数组.集合(ArrayList).泛型集合(list<T>)三者的比较的,可以一写下来要扩展的知识点有点多了,只能写一个小的知识点列表了如下: 1.数组.集合(ArrayL ...

  9. C#入门基本概念

    一.版本号的命名规则 大部分时候是在名字后面加些数字表示不同的版本.其中以加上年份号最为简单明了.比如 Visual Studio 2008.但是大部分人还是不用这个方式.因为年份号中没有带来跟多的信 ...

随机推荐

  1. AngularJs中的服务

    一.angularJs中的简单服务应用 下面的例子让我们明白在AngularJs中如何去调用文件中的数据,从而将文件中的数据显示在页面上;改变url的地址,也可以去调用后台接口. 实例: <!D ...

  2. redhat编译安装cmake

    将RHEL的yum软件源更换为CentOS的软件源之后,其中的cmake版本太低,为2.6.4版本,编译较新的软件时会提示cmake版本太低,所以有必要编译安装最新版的cmake.   1. 更换yu ...

  3. gcc杂谈

    1. -l选项自动给库文件名增加lib前缀和.a/.so后缀.所以如果你有一个lib叫做libusb.a,那么编译选项是-lusb.另一方面,如果你有一个文件叫做libusb.o(是目标文件而不是库文 ...

  4. 减小Gcc编译程序的体积

    众所周知,Gcc编译的原始程序一般很大,其实有几种方法能大大减小目标代码的体积,一般有以下几种方法. 基本知识来源:http://www.mingw.org/wiki/Large_executable ...

  5. 进程间的通讯(IPC)方式

    内存映射 为什么要进行进程间的通讯(IPC (Inter-process communication)) 数据传输:一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间共享数据 ...

  6. activiti自定义流程之自定义表单(二):创建表单

    注:环境配置:activiti自定义流程之自定义表单(一):环境配置 在上一节自定义表单环境搭建好以后,我就正式开始尝试自己创建表单,在后台的处理就比较常规,主要是针对ueditor插件的功能在前端进 ...

  7. (二)java特征

    java的核心是面向对象,与之相对的是面向过程的编程,在对整个java编程没有足够的理解和运用的情况下恐怕没办法很好的理解这两个概念.     在我的初步理解中,写一个程序就例如做一件事情,面向过程的 ...

  8. 拖拽碰撞--原声js(自身理解上新的方法)

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  9. ADF_Starting系列2_使用ADF开发富Web应用程序之建立Business Services

    2013-05-01 Created By BaoXinjian

  10. M2M协议

    1, M2M协议 M2M是Machine-to-Machine/Man的简称,是一种以机器终端智能交互为核心的.网络化的应用与服务.M2M协议规定了人机和机器之间交互需要遵从的通信协议.随着科学技术的 ...