Rss & SiteMap

广象网 http://www.gdchess.com/bbs/

象棋,广东象棋网,象棋棋谱
共10 条记录, 每页显示 10 条, 页签: [1]
[浏览完整版]

标题:电脑是如何下棋的:关乎智力的高级挑战

1楼
jt2925 发表于:2016/1/2 19:39:00

电脑是如何下棋的:关乎智力的高级挑战

2014年07月28日 10:29   新浪科技    我有话说(37人参与) 收藏本文     
<!-- 正文内容 begin -->
<!--视频轮播start--><!--视频轮播end--><!-- 内容模块:单图 begin --><!-- 内容模块:单图 end --><!-- publish_helper name='原始正文' p_id='2' t_id='1' d_id='9520957' f_id='2' -->
藤盒装的中国云子。图/维基百科藤盒装的中国云子。图/维基百科
围棋   围棋起源于中国,是最古老的棋类运动之一,我们常说的“琴棋书画”中的“棋”就是指围棋。 围棋盘由19条横线和19条竖线组成,共有19×19=361个交叉点。此外,也有13×13、9×9的小棋盘。围棋子分为黑白两色,对弈双方各执一种颜色的棋子,轮流将一枚棋子下在交叉点上。终局时,占领(围起)的“地盘”(即其中的交叉点个数)多的一方获胜。   空白的交叉点称为“目”,围到的地盘又称为“空”。对弈过程中,棋手经常会“数目”,也就是计算双方目前所围的“空”的大小,以此判断形势优劣。   对弈双方的水平差距较大时,常会采用让子棋的方式,也就是水平较弱的一方先在棋盘的固定位置放上1~9个子(分别称为让先、让二子、让三子……),然后双方再轮流落子。围棋起源于中国,是最古老的棋类运动之一,我们常说的“琴棋书画”中的“棋”就是指围棋。
“深蓝”在1997年的一场历史性的人机大战中战胜了人类国际象棋冠军卡斯帕罗夫。 图/Peter Morgan“深蓝”在1997年的一场历史性的人机大战中战胜了人类国际象棋冠军卡斯帕罗夫。 图/Peter Morgan
1996年,许峰雄博士(右,现为微软亚洲研究院高级研究员)代表“深蓝”与卡死佩罗夫对弈。1996年,许峰雄博士(右,现为微软亚洲研究院高级研究员)代表“深蓝”与卡死佩罗夫对弈。

  本文转自《科学世界》

  原作者:黄铂钧(微软亚洲研究院)

  你喜欢下棋吗?有没有和计算机下过?现在,弈棋计算机的棋艺日益高强。让我们通过分析以围棋和国际象棋为代表的弈棋计算机,对人工智能的研究有一个更为深入的理解。

  弈棋计算机

  弈棋自古被视为一种关乎智力的高级挑战。和其他智力测试相比,弈棋具有直接对抗的特点,没有什么比在紧张的对局中看到对手一手精妙凶狠的棋招更 能让人感觉到一种智力上的刺激和挑战了。弈棋相比于其他牌类游戏而言,随机和不可控因素更小,因此对局双方的决策能够更直接地控制整个局面的走势,这进一步增强了智力的对抗性。

  毫不意外,在国际象棋更加流行的西方国家,人工智能领域自创建之初就在考虑如何制造一个会下国际象棋的机器。几乎所有人工智能先驱,包括信息论 创始人香农、“人工智能”之父约翰·麦卡锡(John McCarthy)、计算机科学创始人图灵,都曾严肃思考过制造国际象棋机器的问题。20世纪80年代初,贝尔实验室的工程师们(其中包括著名操作系统 Unix的联合创作者肯·汤姆森)开发出历史上第一个具有人类大师级水平的国际象棋机器“Belle”。到80年代末,卡内基梅隆大学的许峰雄博士在 “Bella”的思路基础上(将在后面详细介绍)进一步改进,研制出了第一个特级大师水平的国际象棋机器,取名“深思”(源自《银河系漫游指南》中的超级 计算机)。随后,许博士加入IBM研究院,在那里和其他几个团队成员一起研制出了实力更强的弈棋机器“深蓝”,并最终于1997年的一场历史性的人机大战 中以3.5:2.5的比分战胜了人类国际象棋冠军卡斯帕罗夫(卡斯帕罗夫不但是当时的人类冠军,同时也是人类历史上国际象棋等级分最高的职业选手)。

  在围棋更加流行的东方,围棋大师的头衔同样是智力超群的象征。自从计算机在国际象棋上挑战人类成功之后,所有人的目光就聚焦在了围棋这项古老的 东方棋类运动上。然而对计算机来说,围棋似乎是个比国际象棋更“难”的东西。1985年,企业家应昌期先生悬赏一百万美金寻找能够打败人类职业棋手的计算 机,可时至30年后的今日仍然没有一台计算机能够做到。20世纪90年代,以我国陈志行教授开发的“手谈”程序以及著名开源软件组织GNU开发的“GNU Go”程序为代表的“计算机围棋冠军”们,棋力尚且不及人类的业余初段。进入21世纪之后,研究者们开始探索一套被称为“蒙特卡洛树搜索”的全新思路(将 在后面详细介绍),并终于在2006年在9×9的“小棋盘”上率先产生突破。以法国的MoGo和CrazyStone为代表的新一代围棋程序在9路围棋上 基本已经达到人类职业棋手的水平,甚至曾在公开场合战胜过职业棋手周俊勋九段。另一方面,在真正的19路围棋棋盘上,以日本的ZEN(天顶围棋)和法国的 CrazyStone为代表的一流围棋程序沿着“蒙特卡洛方法”的思路不断改进,在和人类顶尖职业棋手进行的一系列让子棋比赛中屡有佳绩,而近些年人类棋 手能“让”计算机的子数也越来越少。最有趣的是在2013年,计算机程序CrazyStone在受让四子的情况下战胜被称为“人脑计算机”的日本棋手石田 芳夫九段,并被认为已有业余五~六段的水平。

  截至目前,尽管计算机在公平的围棋比赛中还不足以直接抗衡人类职业棋手,但相关的研究热度却很高,大家普遍对近期前景持较为乐观的态度。“深蓝之父”许峰雄博士甚至在2007年10月的一期《IEEE Spectrum》杂志上表示,相信10年内超级计算机将能挑战世界冠军级别的人类棋手。

<!--视频轮播start--><!--视频轮播end--><!-- 内容模块:单图 begin --><!-- 内容模块:单图 end --><!-- publish_helper name='原始正文' p_id='2' t_id='1' d_id='9520958' f_id='2' -->
围棋起源于中国,是最古老的棋类运动之一,我们常说的“琴棋书画”中的“棋”就是指围棋。围棋起源于中国,是最古老的棋类运动之一,我们常说的“琴棋书画”中的“棋”就是指围棋。
左为唐代《围棋仕女图》绢画,1972年出土于吐鲁番阿斯塔那;右为隋代白釉瓷围棋盘,1959年出土于河南安阳。图/维基百科  左为唐代《围棋仕女图》绢画,1972年出土于吐鲁番阿斯塔那;右为隋代白釉瓷围棋盘,1959年出土于河南安阳。图/维基百科
隋代白釉瓷围棋盘隋代白釉瓷围棋盘

  计算机下棋的思考模式

  现在主流弈棋计算机的基本“思考模式”很简单,就是对当前局面下的每一种合法走法所直接导致的局面进行评估,然后选择“获胜概率”最高的局面所 对应的那个走法。也就是说,“准确评估给定局面的胜率”是主流弈棋计算机的核心问题,同时也是主要难点所在。在进一步深入讨论这一核心技术问题之前,我们 先在基本思考模式层面简单比较一下计算机棋手与人类棋手的异同。

  可以说,计算机的基本策略是所有“人类有可能采用”的策略中最原始最简单的一种。毫无疑问,人类的思考模式中必然也包含“局面评估”的部分,然而人类至少还同时拥有另一个重要的思考模式——战略性思考,也就是把一个基本目标有效分解成一系列“子目标”。

  以围棋为例,“获胜”是围棋的最终目的,而胜的定义是“结束比赛时拥有更多棋子和空”(中国规则)。但是人类棋手在对弈时显然并不是每时每刻都 在基于这个“胜”的定义进行思考的——通常我们只在棋局进入中后期时才经常性地“数目”。在对弈的大部分时间里我们是在思考诸如“如何借助右上角黑棋的毛 病扩张”、“如何做活”、“如何侵消对手的模样”、“如何在劫争中转换”、“如何分断”等等一系列具体问题。我们注意到,每一个这样的“具体问题”实际上 是改变了思考的目标,把一个“求胜”的问题转化成了一系列“分断”或者“做活”之类的子问题。这样的一个“战略计划”,其背后的逻辑当然是,我们的大脑相 信在当前情况下“分断对手大龙”是最有可能导致最终赢棋的子目标。一旦确立了子目标,人类棋手便集中精力考虑具体战术走法来完成这个子目标,而不是“赢 棋”这个最终目标。与之不同的是,目前主流的弈棋计算机从基本思考模式上并不依赖于“生成并确定子目标”的战略能力。在大多数时刻,这些弈棋计算机只关心 一个问题,就是按照“胜”的基本定义来赢得比赛*1。“在当前局面下,我走在x点的话最终能赢几子”,计算机就是通过不停地重复问自己这个问题来完成对弈 的。尽管这听起来很“原始”,但正如前面所说,这样思考的计算机却已经在很多棋类中达到了相当令人惊讶的水平!

  现在我们回到“评估局面胜率”这一计算机弈棋的核心问题上。主流方法中一次局面评估通常由被称为“静态评估”和“动态评估”的两个部分协同配合完成。

  基于“特征识别”的静态评估

黑方影响的区域 白方影响的区域黑方影响的区域                                  白方影响的区域
对围棋局面基于“粒子-场”模型的静态评估结果

  局面静态评估好比人类棋手的“感觉”(也叫“第一感”、“棋感”)。

  目前使用的方法很容易理解。就像网上经常遇到的性格测试:让一个人做10道选择题,每道题如果选A加1分,选B不加分,然后根据10道题的总分对这个人的性格进行分类,0~2分的是黏液质性格,8~10分的是多血质性格…… 国际象棋的局面静态评估过程和性格测试非常类似,对于一个给定的局面(对应性格测试里的一个人),评估算法问“当前局面里我方有没有皇后”,有的话加10分,没有不加分;再问“有没有兵”,有的话每个兵加1分,没有不加分……然后评估算法把所有问题的总分加起来,总分越高代表该局面胜率越大。

  我们看到,计算机对国际象棋局面的静态评估过程相当于给局面做了一次测试卷,其中每一道测试题对应了局面的一个特征。一般来说,优秀的国际象棋计算机所使用的“测试卷”中的每一道题都是由人类大师根据自己多年的弈棋经验精心设计的,而里面每道题的“分值”或者由象棋大师直接设定,或者由计算机根据海量棋谱通过被称为“机器学习”的技术自行决定。

  前一种方法往往面临的一个问题是,人类大师其实根本就不用这种“给局面做测试卷”的方式思考,所以他们的经验有时很难直接指导分值设定。而在后一种基于机器学习技术的做法下,象棋大师除了设计用于评估局面的“考题”(每道题分值待定)之外,“只”需要对用于“训练”计算机的棋谱中出现的每一个局面打一个“局面总分”(这个总分并不基于大师为计算机设计的任何“考题”,而是直接根据自己的经验得出),计算机就可以自动为每道考题选择一个合适的分值,使得当我们使用如此学习出来的分值去考察棋谱中的每个局面时,由“考卷”累加得到的分数都恰好比较接近象棋大师根据经验为该局面评估的分数!

  围棋计算机程序使用的静态评估过程一般也基于类似的“打分原理”。只不过围棋里面棋子的“位置特征”比“数量特征”更重要,所以围棋程序在选取特征时往往并不基于单个棋子,而是基于由若干子组成的“基本形状”。更重要的区别是,围棋局面评估并不仅仅是把来自每个特征的得分简单相加,而是基于一些更复杂有趣的综合过程。

  比如,在这方面有一类很有意思的研究叫做“基于动态系统的围棋局面评估”。这种观点把围棋棋盘看作一个二维“静力场”,里面每一个棋子或每一个基本形状拥有一个类似于“电荷”的属性,并根据这个属性向外辐射“影响力”,强度随着距离递减。这样,对于给定局面,棋盘中的每一个点都具有一个“场强”,它根据来自棋盘上所有黑子和白子的影响力相互叠加和抵消后决定。所有点的场强可以通过多轮迭代计算得出(类似于物理中求解“多体问题”的过程),根据这些场强我们就可以决定对于棋盘中每一个点,黑白哪一方“势力”更大。

  从某种意义上讲,基于动态系统的围棋局面评估实际就是在试图建立一套“围棋世界里的物理定律”,使得依据这些定律做出的判断符合顶级高手间的实战经验,或甚至是符合“完美走法”下的结果。当然,目前的“粒子-场”模型可能更多只是对我们所熟知的经典力学模型的简单模仿,也许我们应该基于一套完全不同的理论来描述围棋棋盘里的天地(比如基于概率模型),又或许从原则上根本不存在能够精确描述局面走势的“围棋定律”…… 无论如何,对围棋局面静态评估的研究一旦产生突破,很有可能使得人类对围棋这项古老棋类运动本身产生更深刻的理解,同时也会极大地改变围棋弈棋计算机研究的现状。

  截至目前,对围棋局面的静态评估效果还远远比不上国际象棋,一般只对处于棋局初期的局面有一定作用,而对当棋局进入激烈厮杀后的中后盘,尚未找到有效的静态评估方法。下面马上就要提到,正是由于静态评估部分的缺陷,直接导致了围棋程序在“局面动态评估”部分采用了一套与国际象棋程序差异很大的策略。

  另外值得注意的是,在上述局面静态评估的构建过程中,机器作为一个“智能个体”,最多参与到特征的“权重”设定,而对于更重要的“应该使用什么样的特征”以及“根据什么方式对所有特征进行整合”的问题则完全由人类专家负责。可以说,“特征自动提取”一直是机器学习这个人工智能分支多年来的主要挑战之一。后面还会再次提到这个问题。

  基于“预测分析”的动态评估

  如果说对棋局盘面的静态评估好比人类棋手的“感觉”过程,那么动态评估就好比人类棋手的“推理”过程。在静态评估中机器得益于人类专家的很多帮助,而动态评估的部分可是机器大显身手的地方了。

  简单讲,“动态评估”试图对从当前盘面出发“有可能”出现的大量局面变化所导致的结果进行预判,并综合分析所有这些可能性,对当前盘面进行一次评估。这也是人类在动态环境中做决策时经常使用的策略,也就是希望通过“看得更远”来提前发觉潜在的危险或机会。

  经过高度优化的弈棋计算机每秒钟可以计算数以亿计的变化,即使是运行在普通个人电脑上的弈棋程序也经常可以做到每秒计算几十万种变化,这种高速运算能力极大地弥补了计算机在静态评估时的不足。对于像国际象棋和围棋这种历史悠久的复杂棋类运动,只基于静态评估的计算机程序通常连入门级业余棋手都未必下得过,而一旦配备了动态评估能力之后,弈棋计算机却能达到普通棋手甚至人类世界冠军都无法达到的水平。

  盘面动态评估可以说是计算机弈棋领域的研究重点所在,几十年来人工智能研究者和计算机科学研究者提出了许许多多的方法。这里我们简单介绍一些共通的基本原理,以及围棋和国际象棋这两个最受关注的棋类的主流动态评估方法。

  基于一套给定规则,任意给定的棋局盘面会有一个“合法走法”的集合,其中每个走法都会把棋局引向一个新盘面,而这个新盘面又会有自己的另一个合法走法集合,每个走法又对应一个新的盘面。如果假设每个盘面都有 种合法走法,那么从当前盘面走一步之后一共有b种可能“到达”的盘面,两步之后有b^2种可能盘面,三步之后有b^3种可能……如此展开下去,从最初的给定盘面经过d步之后可能到达b^d种不同的盘面,它们就是在“未来d步内所有可能的局面变化”。

  我们看到,从给定盘面开始的局势变化的复杂度是随考虑的步数呈指数级增长的。对于包括围棋和国际象棋的绝大多数复杂棋类运动而言,这意味着从原则上 不存在准确 计算盘面的最优结果的有效方法。不过,这对于对局双方来说未必是个坏消息——虽然我无法计算最优解,对手也同样无法计算。事实上一个游戏之所以成为游戏, 恰恰就是因为对局双方都相信对手不具备完美决策的能力,而自己要做的只是比对手 “错得更少一些”。

  另一方面,对于弈棋计算机的设计者来说,“不可能对局势变化的所有可能性进行有效计算”意味着想做得比对手更好需要从原理上解决两个关键问题: (1)决定一个“筛选策略”,从所有从当前盘面出发有可能导致的变化中选择一部分作为“我们实际考虑的那些局面变化”;(2)决定一个“汇总策略”,把所 有实际考虑的变化的静态评估结果综合起来,对当前盘面的胜率完成评估。无论是国际象棋、中国象棋、围棋、或者其他如西洋跳棋、黑白棋、五子棋,所有棋类程 序的动态评估方法从根本上都符合由“筛选策略”和“汇总策略”组成的基本框架。它们之间的区别仅在于使用的具体策略不同,以及由此产生的针对实现特定策略 的优化手段的不同。

  下面,我们就来看一下在最具代表性的国际象棋和围棋中,弈棋计算机分别使用的两套截然不同的动态评估策略吧。

  “指数级增长”与“EXPTIME-Complete问题” 

  指数级增长可算是大规模计算第一大“拦路虎”了。在一个著名的传说中,国际象棋的发明者印度人塞萨(Sessa)向他的国王请求赏赐,他说,希望因为发明国际象棋棋盘的第一个格而得到一粒米,因为第二个格得到两粒米,因为第三格得到四粒米,如此在每后一个格都增加一倍的米量。不识指数级增长威力的国王欣然答允,甚至还有些责怪塞萨要求太少,然而事后才发现整个国库的米都倒干净了仍然无法填满整个棋盘。故事的结局是,国王恼羞之下偷偷派人把塞萨杀掉了。学过等比数列的现代人按一按计算器就知道,国王因为这64个棋盘格子总共要支出2^64-1=18446744073709551615>10^19粒米,这据估计已经超出整个人类历史上产米量的总和!

  回到局势变化的复杂度问题上。即使10^19这样的天文数字也“只不过”是一个从当前盘面出发,每次只考虑2种走法,持续64步之后的可能性空间的大小。对于国际象棋和围棋这样的复杂棋类,从初始盘面出发穷尽所有变化的复杂度(也称穷举复杂度)更是大得难以想象。信息论创始人克劳德香农在1950年第一个估计出国际象棋的穷举复杂度大概在10^120种变化左右,具体数字被后人称为“香农数”。而围棋的穷举复杂度又远远超出国际象棋,达到了惊人的10^360。作为比较,目前可观测宇宙中的原子总数据估计“只有”10^75个。 

  有人会问,为了分析当前盘面一定要穷举所有未来走势的可能性吗?有没有可能存在一个高效的算法可以在避免遍历呈指数级增长的可能性空间的同时仍然对当前盘面做出准确评估呢?答案是,对于国际象棋和围棋,我们可以从数学上证明,不仅仅是穷举复杂度,其局势变化的计算复杂度也必须随所考虑的步数呈指数级增长!对于任意一个给定的盘面,我们定义这个盘面的“最优值”为当博弈双方都下出“完美走法”的情况下导致的最终博弈结果。如果一个盘面的最优值是“黑棋胜”,那就是说在黑棋自己不出错的情况下白棋无论如何努力都是必败的。理论计算机科学家先后在1981年和1983年证明国际象棋和围棋都属于EXPTIME-Complete类问题,这意味着“任何”能正确计算盘面最优值的方法所花费的时间“必然”随棋盘大小(亦或棋局的平均步数)呈指数级增长。事实上大部分流行的“双人零和”棋类的计算复杂度都是指数级的。有一些棋类如西洋跳棋、五子棋,它们的规模足够小,所以其初始盘面的最优值已经被计算出来了。但是像国际象棋和围棋这样的复杂棋类,计算其初始盘面的最优值,以现在的硬件计算能力看来还遥遥无期。

<!--视频轮播start--><!--视频轮播end--><!-- 内容模块:单图 begin --><!-- 内容模块:单图 end --><!-- publish_helper name='原始正文' p_id='2' t_id='1' d_id='9520959' f_id='2' -->

  局面动态评估:“激进”与“保守”之间的平衡取舍

  主流的国际象棋程序往往采用一种比较“保守”的局势筛选策略,搭配一种比较“激进”的信息汇总策略。而主流的围棋程序则正好相反,在局势筛选方面相当“大胆”,却对从这些局势变化收集来的信息的使用相当“谨慎”。这主要是由于目前对这两种棋类的盘面静态评估的质量不同导致的。

  对于国际象棋,已经找到了一种在“很多情况”下可以既快速又相对准确地对盘面进行静态评估的方法——当遇到这类“大致可以进行静态评估”的盘面时,这个静态评估方法有相当的可信度,而对于其他情况的盘面却完全不起作用。由于拥有这样一个具有“部分可靠性”的静态评估,国际象棋程序的策略“从概念上”可以理解为是对从当前盘面出发的每一种可能的变化都不停向前展开,直到遇到一个可以大致静态评估的盘面或者超出了一个预定的“最大展开步数”为止。这样的“保守”选择策略使得计算机对于一定阶段之内的所有变化都有了大致评估。接下来计算机在“假设”这些评估是正确的前提下,计算按照完美下法哪一种变化是最优的。

  根据硬件计算能力,计算机还会设定一个“最小展开步数”,即使一个变化在展开不到最小步数时就遇到了一个“比较好评估的局面”,系统依然会继续往前看,而不会就此停止。这是为了最大限度地弥补“对比较好评估的局面进行静态评估时依然有可能出错”的缺陷。在开发第一个人类大师级水平的计算机“Belle”的过程中,人们发现弈棋计算机的最小展开步数越大,其棋力越强。也就是说,原则上只要通过不断增强硬件的计算能力,国际象棋机器就可以通过看得越来越深而下得越来越好。

  1997年的“深蓝”计算机在配备了400多块专门设计的硬件加速卡之后,获得了每秒钟展开并评估2亿次盘面的恐怖计算能力,历史上第一次代表机器战胜了人类国际象棋冠军。在随后的十几年里,按照“摩尔定律”增长的计算机硬件能力变得愈加强大,计算机又先后多次战胜人类国际象棋冠军。越来越多的人相信,机器在国际象棋领域早已超越了人类的弈棋能力。

  然而,计算机能够战胜人类国际象棋冠军并不全靠超强的硬件计算能力,软件算法方面的持续改进同样必不可少,甚至影响更大。

  比如上面提到,国际象棋系统在“概念上”穷尽了一定步数之内的所有变化。但在真实的弈棋计算机中,一系列优化算法使得系统在不完全展开某些变化的同时也能够得到和完全展开一样(或类似)的效果。这样节省下来的时间可以用于把已知变化“看得更深”,从而极大提高了系统在“概念上”的等效计算能力。

  其中最经典的例子是由人工智能先驱约翰·麦卡锡提出的αβ剪枝法,它巧妙利用了“国际象棋是双人零和游戏”的特点,以最优的方式避免所有不必要的变化展开。

  根据计算机科学家唐纳德·克努特(Donald Knuth)的数学分析,在理想情况下,αβ剪枝法仅需评估所有b^d个变化中的b^(d/2)个,就可以保证得到和评估所有b^d个变化完全一样的结果。换句话说,我们需要增加 倍硬件计算能力才能使动态评估加深一步,而使用αβ剪枝法则可以使动态评估轻松增加整整一倍的“思考深度”*2!

  αβ剪枝法成型于20世纪60年代,是国际象棋弈棋的诸多优化算法里最经典的一种。如今的国际象棋程序中还使用了大量其他优化方法,使得实际的动态评估过程远远比简单的“枚举”要高效得多,只是“从概念上”,它们从评估质量上等效(或接近)于一次对未来若干步内所有局势变化的穷举展开而已。

αβ剪枝法的一个简单示例 。假设A盘面下我方行动,并试图最大化我方胜率;而B盘面下对手行动,并试图最小化我方胜率。如果A代表当前盘面,而B代表我方走了某一步之后到达的新盘面。现在假设已知B盘面下对手存在一种走法使得我方胜率至多有30%,同时已知A盘面下我方存在一种走法使得我方胜率至少有40%,那么我们已经可以确定无需再检查B盘面下其他未展开的变化了。在层层展开的动态评估过程中这样的“剪枝”可以反复使用,从而大量减少需要实际评估的变化数量。    αβ剪枝法的一个简单示例。
    假设A盘面下我方行动,并试图最大化我方胜率;而B盘面下对手行动,并试图最小化我方胜率。如果A代表当前盘面,而B代表我方走了某一步之后到达的新盘面。现在假设已知B盘面下对手存在一种走法使得我方胜率至多有30%,同时已知A盘面下我方存在一种走法使得我方胜率至少有40%,那么我们已经可以确定无需再检查B盘面下其他未展开的变化了。在层层展开的动态评估过程中这样的“剪枝”可以反复使用,从而大量减少需要实际评估的变化数量。

  国际象棋的动态评估方法(或其变种)也广泛应用于大多数其他棋类的对弈系统,其中很多达到或超越了人类冠军的水平。然而,这套思路却在围棋博弈中遭遇了滑铁卢。截至目前,没有一个基于国际象棋的动态评估思路的围棋系统可以超过人类业余入门级水平。很多人把这一失败归因于围棋比国际象棋更大的计算复杂度(这当然看起来是最明显的原因之一)。

  但是,根据许峰雄博士在2007年发表的那篇名为“Cracking GO”(破解围棋)的文章,在拥有接近国际象棋的静态评估质量的前提下,我们完全可以在软件和硬件两方面进行一系列优化,使得国际象棋的动态评估方法在围棋中也达到类似的思考深度。如果我们假设围棋大师们的智力并不显著高于国际象棋大师的话,这样的思考深度也许会使机器在围棋上再次战胜人类。也就是说,对于当今的硬件能力,围棋的复杂度并不是不可逾越的鸿沟。那么,到底是什么原因导致国际象棋的策略无法适用于围棋呢?

  笔者的观点是,“穷举型” 策略*3至今未在围棋中广泛应用,更大的障碍恐怕还是缺少一个像国际象棋那样能够对于“一大类”盘面进行“大致准确的评估”的方法。前面介绍静态评估方法的部分已经提到了,目前围棋盘面的静态评估方法一般只在棋局前期黑白双方尚未“短兵相接”时有一定效果。当棋局进入关键的中盘厮杀之后,如果仍然使用现有的静态评估方法,我们就会发现:在达到硬件计算能力可承受的最大预判步数时,大部分棋局变化都处于不能“大致准确评估”的状态。基于这些十分不“靠谱”的评估结果去考虑所谓“完美”走法,得到的结果自然也是不大靠谱的。

  正是由于缺少“靠谱”的静态评估方法,目前所有顶级围棋程序转而采取一种比较“谨慎”的信息汇总策略。

  在国际象棋中,如果一个盘面有两种走法,一个估计胜率30%,另一个估计胜率80%(如图(a)中盘面B所示),计算机会倾向于相信这些结果都是大概“靠谱”的,因此该盘面自身的胜率应该等于所有走法中的最优结果(我方盘面取最大值,对手盘面取最小值),因此认为盘面B的胜率是30%。这是一种比较“激进”的信息汇总策略:当发现了30%胜率的走法时,系统会完全丢弃80%胜率的走法所带来的信息,选择全部相信30%胜率的走法。

相同情况下的不同信息汇总策略。(a)为以国际象棋程序为代表的“激进”策略,取最大(小)值为汇总结果;(b)~(d)为以围棋程序为代表的“保守”策略,取加权平均值为汇总结果。其中(b)对应评估初期等权重下的结果,如果其中30%的静态评估正确,则算法经过150次蒙特卡洛采样后会导向(c)所示结果,否则会导向(d)所示结果。  相同情况下的不同信息汇总策略。(a)为以国际象棋程序为代表的“激进”策略,取最大(小)值为汇总结果;(b)~(d)为以围棋程序为代表的“保守”策略,取加权平均值为汇总结果。其中(b)对应评估初期等权重下的结果,如果其中30%的静态评估正确,则算法经过150次蒙特卡洛采样后会导向(c)所示结果,否则会导向(d)所示结果。

  而在围棋程序中,计算机认为对每个盘面的直接静态评估结果都是不可靠的,但是相信“对该盘面下所有走法的全部评估结果”却整体上仍然对该盘面的胜率 具有指向性。现有围棋程序一般采用对所有评估结果进行加权平均的方式来体现这种指向性,其中“权重”基于对当前评估结果的可信度进行设定。举例来说。在图 (b)中,假设对盘面B下两种走法所直接导致的盘面进行静态评估的结果胜率分别为30%和80%,而盘面C下的两种走法胜率分别为50%和40%。因为这 4个估计值可能都存在偏差,所以我们并不偏信其中任何一个;另一方面,在偏差没有系统性地倒向“某一类盘面”或“某一类走法”的前提下,我们有理由相信这 4个盘面评估结果具有相同的可信度(或“不可信度”),因此应该具有相同的权重。所以在只知道这4个静态评估结果的情况下,我们认为盘面B的评估胜率是 0.5×30%+0.5×80%=55%,盘面C的评估胜率是0.5×50%+0.5×40%=45%。同时,这样做出的对B和C的判断自身仍然有可能存 在偏差,所以在以盘面B和C为基础再评估盘面A时也要考虑到这一点,因此A的评估结果同样是B和C的结果的再次加权平均 0.5×45%+0.5×55%=50%。

  我们看到,这样根据等权重得到的对A的评估结果实际上是综合了所有当前已知信息之后给出的一个“模棱两可”的评估。考虑到“已知信息”本质上的 低可靠度,这也许就是我们在这种情况下“应该”得到的答案。当然,这样一个仅仅基于4次静态评估的结果并不是计算机给出的最终答案。对于一个给定盘面,我 们考察的变化越多,获取的信息量也越大,因此对这个盘面的评估值也倾向于更可靠,从而这个评估值在参与加权平均时也理应获得更大的权重。换句话说,我们根 据对一个盘面“深思熟虑”的程度来量化对其评估结果的“可信度”,认为一个进行大量分析后得到的评估结果在可信度上优于分析较少的评估结果。这就涉及到如 何选择那些需要进一步深思熟虑的变化的问题。

  有意思的是,在采取较为谨慎的信息汇总策略的同时,围棋程序在局势变化的选择策略上却相当“大胆”。如果说国际象棋程序希望考察在一定阶段内的所有变化,那么围棋程序却只通过对所有这些变化进行某种有策略的采样来进行评估,把更多的时间精力投入到那些“看似”更有希望的变化上。这就是被称为蒙特卡洛树搜索的动态评估方法。这种方法在“从当前盘面出发所有有可能的局势变化”组成的巨大可能性空间中进行反复采样。通过巧妙设计的选择策略,配合前面所说的基于加权平均值的信息汇总策略,计算机会根据已有的采样结果调整新一轮采样所选择的变化,从而保证最优走法逐渐获得更多的选择机会,因此获得更大的权重。这样的长期结果是,大量采样之后对当前盘面下所有走法的“加权平均”结果会逐渐逼近当前盘面的最优值!

  仍然回到图10的例子。我们看到图(b)中基于4次静态评估的加权平均结果高于图(a)中按照传统国际象棋思路得到的结果,这主要是因为我们对当前胜率评估为30%的这个盘面“不大信任”导致的。在接下来的动态评估采样中有两种可能:(1)当前的30%的评估结果是正确的,在这种情况下蒙特卡洛树搜索算法对盘面B下的变化采样会更倾向于30%这个走法,因此B的评估值会逐渐下降到接近30%,而这又会导致B的评估值低于C,因此C获得更多采样机会,从而在对A的加权平均评估时获得比B更大的权重。如图(c)所示,在150次采样之后,A的评估值接近C,而C的评估值接近40%——这和图(a)的评估结果一致(因为当初30%的静态评估结果恰好是正确的!)。(2)如果图(b)中30%的结果是错误的,假设机器经过对这个走法进一步考察(75次采样)后发现它的胜率其实应该是80%。这种情况下,B的评估值会逐渐上升到80%,而这导致B相对于A的权重变高,因此A的评估值也随之上升,从而得到和前面不一样的最终评估结果。

  总而言之,目前的主流围棋程序试图用一种系统性的方法去“管理”在评估过程中不可避免带来的“不确定性”。截至目前,所有一流的围棋程序全部采用蒙特卡洛树搜索方法进行盘面动态评估////4。它们从基本“思维模式”和局面胜率评估的“基本框架”上继承了以国际象棋弈棋计算机为代表的传统方法;同时,采用蒙特卡洛采样思想来进一步管理知识中的“不确定性”,在选择策略上化保守为激进,在汇总策略上化激进为保守,在无法对变幻莫测的围棋盘面进行有效静态评估的情况下仍然达到了业余高级水平的棋力。

  弈棋计算机是人工智能吗?

  弈棋是一种刺激性极强的直接对抗。计算机弈棋代表了一种机器对人类的“符号意义上”的挑战,因而备受关注。“人类弈棋大师在整体智力上超出常人”这一事实,也使得“计算机在弈棋上向人类高手发起的挑战”被很自然地认作是一种关乎“智力极限”的挑战。

  那么,从人工智能的角度,我们应该如何看待弈棋系统及其相关的研究活动呢?

  首先我们应该意识到,被我们视为智力挑战的问题,机器做起来往往未必困难;反而是一些人类觉得稀松平常的脑力活动,机器实现起来却可能非常困 难。比如速算曾经同样是智力超群的象征,但是现代计算机无论在计算速度还是准确率上都毫无争议地完胜人类。要理性衡量计算机弈棋与人工智能的关系,还要对 照上期我们总结的人工智能的主要特征来分析。

  根据人工智能的主要特征,虽然弈棋满足了智能行为的标准,但目前的所有计算机弈棋系统都不满足通用性要求,因此还不能算是完整的人工智能系统。 考虑到国际象棋领域里一台“不算完整人工智能系统”的机器已经战胜了人类,那么当围棋机器战胜人类的那一天到来的时候,也未必就意味着什么人工智能新时代 的开始。

  然而,“弈棋系统本身不是人工智能系统”不代表“弈棋系统研究不是人工智能研究”。棋类运动被称为是人工智能领域的“果蝇”,我们对果蝇进行研 究,根本目的并不是为了制造一个“更强壮的果蝇”,而是为了以此探索一些具有普遍性的生物系统规律,帮忙我们认识和研究比果蝇更复杂的生物系统。在笔者看 来,弈棋系统研究在人工智能方面的意义主要有两个,第一个是为相关的自动推理/规划、自动学习、知识表示等等人工智能技术提供实验场所,第二个就是为打败 人类而发明的如“推演”和“规划”部分的相关技术在通用智能中的推广和应用。

  最后,一个经常被提及的话题是关于如何对待人类领域知识在弈棋系统中的作用。有些人认为,使用了“人类职业棋手”的知识的弈棋系统有“作弊”之 嫌,认为弈棋系统只有“零知识”才算真本领。笔者认为没有必要苛求于此。所谓名师出高徒,有几个人类冠军是自学成才的?即使是职业棋手的知识也不一定是他 自己想出来的,毕竟人类已经积累了上千年的领域知识。事实上,能够积累、运用和传授知识正是人类智能最厉害的地方之一,而“知识表示与管理”也是通用人工 智能系统的必要组成部分。

  另一方面,“形式化人类领域知识”也并不是“显然可行”的事情。国际象棋方面,是在深蓝成功之后才真正证明国际象棋大师的经验“可以”形式化表 达(深蓝团队在这方面做了大量工作),而围棋盘面静态评估甚至至今尚未找到有效形式化的方法。可以说,针对围棋弈棋的研究在知识表示上尚处于努力证明“可 以形式化”的阶段;而与此同时,“通用博弈比赛”相关的研究则已经开始对“统一化的知识表示”的初步探索。

  本文由《科学世界》杂志授权转载


<!--视频轮播start--><!--视频轮播end--><!-- 内容模块:单图 begin --><!-- 内容模块:单图 end --><!-- publish_helper name='原始正文' p_id='2' t_id='1' d_id='9520960' f_id='2' -->

  概念解释:

  围棋

围棋围棋

  围棋盘由19条横线和19条竖线组成,共有19×19=361个交叉点。此外,也有13×13、9×9的小棋盘。围棋子分为黑白两色,对弈双方各执一种颜色的棋子,轮流将一枚棋子下在交叉点上。终局时,占领(围起)的“地盘”(即其中的交叉点个数)多的一方获胜。

  空白的交叉点称为“目”,围到的地盘又称为“空”。对弈过程中,棋手经常会“数目”,也就是计算双方目前所围的“空”的大小,以此判断形势优劣。

  对弈双方的水平差距较大时,常会采用让子棋的方式,也就是水平较弱的一方先在棋盘的固定位置放上1~9个子(分别称为让先、让二子、让三子……),然后双方再轮流落子。

  “指数级增长”与“EXPTIME-Complete问题”

  指数级增长可算是大规模计算第一大“拦路虎”了。在一个著名的传说中,国际象棋的发明者印度人塞萨(Sessa)向他的国王请求赏赐,他 说,希望因为发明国际象棋棋盘的第一个格而得到一粒米,因为第二个格得到两粒米,因为第三格得到四粒米,如此在每后一个格都增加一倍的米量。不识指数级增 长威力的国王欣然答允,甚至还有些责怪塞萨要求太少,然而事后才发现整个国库的米都倒干净了仍然无法填满整个棋盘。故事的结局是,国王恼羞之下偷偷派人把 塞萨杀掉了。学过等比数列的现代人按一按计算器就知道,国王因为这64个棋盘格子总共要支出2^64-1=18446744073709551615>10^19粒米,这据估计已经超出整个人类历史上产米量的总和!

  回到局势变化的复杂度问题上。即使10^19这样的天文数字也“只不过”是一个从当前盘面出发,每次只考虑2种走法,持续64步之后的可 能性空间的大小。对于国际象棋和围棋这样的复杂棋类,从初始盘面出发穷尽所有变化的复杂度(也称穷举复杂度)更是大得难以想象。信息论创始人克劳德香农在 1950年第一个估计出国际象棋的穷举复杂度大概在10^120种变化左右,具体数字被后人称为“香农数”。而围棋的穷举复杂度又远远超出国际象棋,达到 了惊人的10^360。作为比较,目前可观测宇宙中的原子总数据估计“只有”10^75个。

  有人会问,为了分析当前盘面一定要穷举所有未来走势的可能性吗?有没有可能存在一个高效的算法可以在避免遍历呈指数级增长的可能性空间的 同时仍然对当前盘面做出准确评估呢?答案是,对于国际象棋和围棋,我们可以从数学上证明,不仅仅是穷举复杂度,其局势变化的计算复杂度也必须随所考虑的步 数呈指数级增长!对于任意一个给定的盘面,我们定义这个盘面的“最优值”为当博弈双方都下出“完美走法”的情况下导致的最终博弈结果。如果一个盘面的最优 值是“黑棋胜”,那就是说在黑棋自己不出错的情况下白棋无论如何努力都是必败的。理论计算机科学家先后在1981年和1983年证明国际象棋和围棋都属于 EXPTIME-Complete类问题,这意味着“任何”能正确计算盘面最优值的方法所花费的时间“必然”随棋盘大小(亦或棋局的平均步数)呈指数级增 长。事实上大部分流行的“双人零和”棋类的计算复杂度都是指数级的。有一些棋类如西洋跳棋、五子棋,它们的规模足够小,所以其初始盘面的最优值已经被计算 出来了。但是像国际象棋和围棋这样的复杂棋类,计算其初始盘面的最优值,以现在的硬件计算能力看来还遥遥无期。

  零和游戏

  又称零和博弈(Zero-Sum Game),是博弈论中的一个概念,指游戏(博弈)双方是竞争而不是合作关系,或者说是一种“你死我活”的状态。例如两人对弈,一方赢,另一方必然是输,不存在“双赢”。赢棋得1分,输棋减1分,两人得分之和就总是0,所以称为零和游戏。

  蒙特卡洛树搜索法

使用蒙特卡罗方法估算π值。图/维基百科使用蒙特卡罗方法估算π值。图/维基百科

使用蒙特卡罗方法估算π值。图/维基百科选取的随机点(n)越多,估计值离π的真值越近。图/维基百科

  这种选择很大程度上跟现有围棋弈棋系统对盘面静态评估方法的整体舍弃有关。前面提到,由于人们在设计具有一定通用性的围棋盘面静态评估函数的问题上长期止步不前,大概在2002年之后人们开始思考采用另一种完全不同的方式对盘面进行快速评估,这就是蒙特卡洛采样。

  做为一种通用的计算方法,蒙特卡洛采样法的思想是当我们在求解一个确定但未知的值的时候,“在概念上”巧妙构造一个随机过程,使得这个随机过程的某个数字特征依概率收敛于我们要求的值,然后“在实际操作中”通过对该随机过程进行采样来对这个值进行统计估计。

  比如说,一种计算圆周率π的蒙特卡洛方法是,在一个二维坐标系中0≤x≤1和0≤y≤1对应的方形区域里随机选取若干个点,并判断每个点(x1,y1)是否落在“以原点为圆心半径为1的单位圆”内(也即判定

   x12+y12是否小于1)。根据中心极限定理,这些随机点落在单位圆内的比例依大概率快速趋于π/4。所以我们选取的随机点数量越多,越有可能得到的一个离的真值更接近的估计。

  相同的“蒙特卡洛”思想也可以用于围棋盘面评估。前面提到了,每个围棋盘面都有一个“最优值”,对应于对弈双方都采用完美走法的情况下该盘面的最终结果。对于围棋已经证明,计算这个最优值的时间至少随该盘面到终盘之间的步数呈指数级数增长(平均200步,每步平均增长200倍数量的可能盘面)。既然从理论上无法得到最优值,有没有可能根据蒙特卡洛思想对整个可能性空间进行某种采样,然后通过统计估值的方法逼近这个最优值呢?人们对这个问题的思考在2006年终于取得了突破性进展,提出了一种称为蒙特卡洛树搜索的动态评估方法。

  需要指出的是,现有的蒙特卡洛树搜索法虽然能保证大量采样的结果最终收敛到盘面最优值,但为达到“足够收敛”所需的采样次数仍然是随整个可能性空间的规模指数级增长的。但是在围棋弈棋系统的实践中,蒙特卡洛树搜索在比赛时间受限的情况下确实表现出远远超过传统方法的棋力。最近几年人们受这一观察的鼓舞,在选择策略中加入更多和围棋相关的专家知识,使得基于蒙特卡洛树搜索的围棋弈棋系统水平不断提高。

  *1 有些围棋软件会在特定条件下触发“死活棋判断”或者“劫争”模式,但这些优化更像是在特殊情况下的一种特殊战术,而不是作为一种基本思考模式。

  *2 这里“思考深度”定义为对每个变化的展开步数。假设一台机器原本一秒钟可以考察b^d个变化,对应思考深度为d。增加b倍硬件能力使得机器一秒钟可以考察b×b^d=b^(d+1)个变化,对应思考深度为d+1。使用αβ剪枝法使得机器仅需考察(b^2d)^(1/2)=b^d个变化就达到和考察b^2d个变化一样的效果,对应的思考深度为2d。

  *3 前面已经强调过了,国际象棋使用的策略只是在“效果上”等价于对一定阶段内所有变化的穷举,而并不在实际运算过程中真的穷举整个可能性空间。

  *4 不仅如此,蒙特卡洛树搜索方法目前已经作为一种通用的动态评估方法广泛应用于“通用博弈比赛”(这种比赛要求为事先不知道具体规则的棋类游戏设计对弈程序)。

2楼
jt2925 发表于:2016/1/2 19:42:00

谷歌Facebook进军围棋人工智能 未来胜人类?

<!-- 正文内容 begin -->
围棋人工智能未来战胜人类?围棋人工智能未来战胜人类?
<!-- 显示附图 --><!-- 显示附图 --><!--${输出内容-新分页_12版}-->

  北京时间1月2日凌晨消息,国外媒体报道,Facebook和谷歌等科技公司正在研究围棋人工智能技术,希望有朝一日能让计算机战胜人类围棋冠军。

  Facebook最近几年进行了不少基础科学研究,最近的一项研究是教计算机下围棋。围棋这项复杂的竞赛活动拥有2500多年的历史,但到目前为止,计算机仍无法战胜人类。

  围棋棋盘盘面有纵横各19九条等距离、垂直交叉的平行线,共构成19×19(361)个交叉点。比赛双方交替落子,目的是在棋盘上占据尽可能大的空间。被完全包围的敌方棋子被移动,所占空间归属另一方。

  围棋虽然是一种典型的极简主义游戏,但这只是表面现象,事实上它具有令人难以置信的深度和微妙之处。当棋盘为空时,先手拥有361个可选方案。在游戏进行当中,它拥有远比国际象棋更多的选择空间。

  马修·本特森(Matthew Bengtson)是一位钢琴家和象棋大师,他28岁时开始玩围棋,目前是费城围棋俱乐部主席。本特森为围棋总结出如下特点:模仿是不现实的,先手并不拥有明显优势,同样的开局顺序和战略基本不会重复出现。

  Facebook并不是唯一一家试图让计算机在围棋比赛中战胜人类的企业。今年11月,谷歌旗下DeepMind研究部门也宣布进行类似的研究。

  Facebook和谷歌的努力不禁让人想起IBM当年对国际象棋的兴趣。1989年,IBM推出了一个名为“深蓝”的研究项目,希望让计算机战胜国际象棋世界冠军。1997年,深蓝真的战胜了国际象棋界公认的棋王格里·卡斯帕罗夫(Garry Kasparov)。

  该项目并未给IBM带来可以销售的产品,但却让我们意识到:基础科学研究所面临的巨大挑战是值得我们去迎接的,虽然企业在这方面的收益还无法量化。

  随着顶级科技公司争相在产品中融入智能技术,Facebook和谷歌在围棋人工智能方面的研究具有极大的代表意义。与国际象棋相比,围棋更具深度。要让计算机掌握相关技巧,需要更多类似于人类的模式识别和直觉判断技巧。

  Facebook对围棋人工智能的研究整合亮相最新的计算技术:深卷积神经网络(deep convolutional neural networks)和蒙特卡洛树搜索(Monte Carlo tree search),前者利用类似于大脑的算法来学习和识别棋盘上各种模式的重要性,而后者相当于一种超前思维,用于计算详细的战略步骤。

  本特森还称,与国际象棋相比,他目前更喜欢围棋,原因之一是:计算机象棋软件越来越优秀,已将揭开了这项游戏的神秘面纱;相比之下,围棋目前更加神秘。

  但将来,围棋的神秘色彩也可能不复存在。(新浪科技 李明)

3楼
jt2925 发表于:2016/1/2 19:44:00

技术向:一文读懂卷积神经网络

自今年七月份以来,一直在实验室负责卷积神经网络(Convolutional Neural Network,CNN),期间配置和使用过theano和cuda-convnet、cuda-convnet2。为了增进CNN的理解和使用,特写此博文,以其与人交流,互有增益。正文之前,先说几点自己对于CNN的感触。先明确一点就是,Deep Learning是全部深度学习算法的总称,CNN是深度学习算法在图像处理领域的一个应用。

第一点,在学习Deep learning和CNN之前,总以为它们是很了不得的知识,总以为它们能解决很多问题,学习了之后,才知道它们不过与其他机器学习算法如svm等相似,仍然可以把它当做一个分类器,仍然可以像使用一个黑盒子那样使用它。

第二点,Deep Learning强大的地方就是可以利用网络中间某一层的输出当做是数据的另一种表达,从而可以将其认为是经过网络学习到的特征。基于该特征,可以进行进一步的相似度比较等。

第三点,Deep Learning算法能够有效的关键其实是大规模的数据,这一点原因在于每个DL都有众多的参数,少量数据无法将参数训练充分。

接下来话不多说,直接奔入主题开始CNN之旅。

卷积神经网络简介(Convolutional Neural Networks,简称CNN)

卷积神经网络是近年发展起来,并引起广泛重视的一种高效识别方法。20世纪60年代,Hubel和Wiesel在研究猫脑皮层中用于局部敏感和方向选择的神经元时发现其独特的网络结构可以有效地降低反馈神经网络的复杂性,继而提出了卷积神经网络(Convolutional Neural Networks-简称CNN)。现在,CNN已经成为众多科学领域的研究热点之一,特别是在模式分类领域,由于该网络避免了对图像的复杂前期预处理,可以直接输入原始图像,因而得到了更为广泛的应用。 K.Fukushima在1980年提出的新识别机是卷积神经网络的第一个实现网络。随后,更多的科研工作者对该网络进行了改进。其中,具有代表性的研究成果是Alexander和Taylor提出的“改进认知机”,该方法综合了各种改进方法的优点并避免了耗时的误差反向传播。

一般地,CNN的基本结构包括两层,其一为特征提取层,每个神经元的输入与前一层的局部接受域相连,并提取该局部的特征。一旦该局部特征被提取后,它与其它特征间的位置关系也随之确定下来;其二是特征映射层,网络的每个计算层由多个特征映射组成,每个特征映射是一个平面,平面上所有神经元的权值相等。特征映射结构采用影响函数核小的sigmoid函数作为卷积网络的激活函数,使得特征映射具有位移不变性。此外,由于一个映射面上的神经元共享权值,因而减少了网络自由参数的个数。卷积神经网络中的每一个卷积层都紧跟着一个用来求局部平均与二次提取的计算层,这种特有的两次特征提取结构减小了特征分辨率。

CNN主要用来识别位移、缩放及其他形式扭曲不变性的二维图形。由于CNN的特征检测层通过训练数据进行学习,所以在使用CNN时,避免了显示的特征抽取,而隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优势。卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络,权值共享降低了网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。

1. 神经网络

首先介绍神经网络,这一步的详细可以参考资源1。简要介绍下。神经网络的每个单元如下:

卷积神经网络

其对应的公式如下:

卷积神经网络

其中,该单元也可以被称作是Logistic回归模型。当将多个单元组合起来并具有分层结构时,就形成了神经网络模型。下图展示了一个具有一个隐含层的神经网络。

卷积神经网络

其对应的公式如下:

卷积神经网络

比较类似的,可以拓展到有2,3,4,5,…个隐含层。

神经网络的训练方法也同Logistic类似,不过由于其多层性,还需要利用链式求导法则对隐含层的节点进行求导,即梯度下降+链式求导法则,专业名称为反向传播。关于训练算法,本文暂不涉及。

2 卷积神经网络

在图像处理中,往往把图像表示为像素的向量,比如一个1000×1000的图像,可以表示为一个1000000的向量。在上一节中提到的神经网络中,如果隐含层数目与输入层一样,即也是1000000时,那么输入层到隐含层的参数数据为1000000×1000000=10^12,这样就太多了,基本没法训练。所以图像处理要想练成神经网络大法,必先减少参数加快速度。就跟辟邪剑谱似的,普通人练得很挫,一旦自宫后内力变强剑法变快,就变的很牛了。

2.1 局部感知

卷积神经网络有两种神器可以降低参数数目,第一种神器叫做局部感知野。一般认为人对外界的认知是从局部到全局的,而图像的空间联系也是局部的像素联系较为紧密,而距离较远的像素相关性则较弱。因而,每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。网络部分连通的思想,也是受启发于生物学里面的视觉系统结构。视觉皮层的神经元就是局部接受信息的(即这些神经元只响应某些特定区域的刺激)。如下图所示:左图为全连接,右图为局部连接。

卷积神经网络

在上右图中,假如每个神经元只和10×10个像素值相连,那么权值数据为1000000×100个参数,减少为原来的千分之一。而那10×10个像素值对应的10×10个参数,其实就相当于卷积操作。

2.2 参数共享

但其实这样的话参数仍然过多,那么就启动第二级神器,即权值共享。在上面的局部连接中,每个神经元都对应100个参数,一共1000000个神经元,如果这1000000个神经元的100个参数都是相等的,那么参数数目就变为100了。

怎么理解权值共享呢?我们可以这100个参数(也就是卷积操作)看成是提取特征的方式,该方式与位置无关。这其中隐含的原理则是:图像的一部分的统计特性与其他部分是一样的。这也意味着我们在这一部分学习的特征也能用在另一部分上,所以对于这个图像上的所有位置,我们都能使用同样的学习特征。

更直观一些,当从一个大尺寸图像中随机选取一小块,比如说 8×8 作为样本,并且从这个小块样本中学习到了一些特征,这时我们可以把从这个 8×8 样本中学习到的特征作为探测器,应用到这个图像的任意地方中去。特别是,我们可以用从 8×8 样本中所学习到的特征跟原本的大尺寸图像作卷积,从而对这个大尺寸图像上的任一位置获得一个不同特征的激活值。

如下图所示,展示了一个33的卷积核在55的图像上做卷积的过程。每个卷积都是一种特征提取方式,就像一个筛子,将图像中符合条件(激活值越大越符合条件)的部分筛选出来。

卷积神经网络

2.3 多卷积核

上面所述只有100个参数时,表明只有1个100*100的卷积核,显然,特征提取是不充分的,我们可以添加多个卷积核,比如32个卷积核,可以学习32种特征。在有多个卷积核时,如下图所示:

卷积神经网络

上图右,不同颜色表明不同的卷积核。每个卷积核都会将图像生成为另一幅图像。比如两个卷积核就可以将生成两幅图像,这两幅图像可以看做是一张图像的不同的通道。如下图所示,下图有个小错误,即将w1改为w0,w2改为w1即可。下文中仍以w1和w2称呼它们。

下图展示了在四个通道上的卷积操作,有两个卷积核,生成两个通道。其中需要注意的是,四个通道上每个通道对应一个卷积核,先将w2忽略,只看w1,那么在w1的某位置(i,j)处的值,是由四个通道上(i,j)处的卷积结果相加然后再取激活函数值得到的。

卷积神经网络

卷积神经网络

所以,在上图由4个通道卷积得到2个通道的过程中,参数的数目为4×2×2×2个,其中4表示4个通道,第一个2表示生成2个通道,最后的2×2表示卷积核大小。

2.4 Down-pooling

在通过卷积获得了特征 (features) 之后,下一步我们希望利用这些特征去做分类。理论上讲,人们可以用所有提取得到的特征去训练分类器,例如 softmax 分类器,但这样做面临计算量的挑战。例如:对于一个 96X96 像素的图像,假设我们已经学习得到了400个定义在8X8输入上的特征,每一个特征和图像卷积都会得到一个 (96 ? 8 + 1) × (96 ? 8 + 1) = 7921 维的卷积特征,由于有 400 个特征,所以每个样例 (example) 都会得到一个 892 × 400 = 3,168,400 维的卷积特征向量。学习一个拥有超过 3 百万特征输入的分类器十分不便,并且容易出现过拟合 (over-fitting)。

为了解决这个问题,首先回忆一下,我们之所以决定使用卷积后的特征是因为图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另一个区域同样适用。因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计,例如,人们可以计算图像一个区域上的某个特定特征的平均值 (或最大值)。这些概要统计特征不仅具有低得多的维度 (相比使用所有提取得到的特征),同时还会改善结果(不容易过拟合)。这种聚合的操作就叫做池化 (pooling),有时也称为平均池化或者最大池化 (取决于计算池化的方法)。

卷积神经网络

至此,卷积神经网络的基本结构和原理已经阐述完毕。

2.5 多层卷积

在实际应用中,往往使用多层卷积,然后再使用全连接层进行训练,多层卷积的目的是一层卷积学到的特征往往是局部的,层数越高,学到的特征就越全局化。

3 ImageNet-2010网络结构

ImageNet LSVRC是一个图片分类的比赛,其训练集包括127W+张图片,验证集有5W张图片,测试集有15W张图片。本文截取2010年Alex Krizhevsky的CNN结构进行说明,该结构在2010年取得冠军,top-5错误率为15.3%。值得一提的是,在今年的ImageNet LSVRC比赛中,取得冠军的GoogNet已经达到了top-5错误率6.67%。可见,深度学习的提升空间还很巨大。

下图即为Alex的CNN结构图。需要注意的是,该模型采用了2-GPU并行结构,即第1、2、4、5卷积层都是将模型参数分为2部分进行训练的。在这里,更进一步,并行结构分为数据并行与模型并行。数据并行是指在不同的GPU上,模型结构相同,但将训练数据进行切分,分别训练得到不同的模型,然后再将模型进行融合。而模型并行则是,将若干层的模型参数进行切分,不同的GPU上使用相同的数据进行训练,得到的结果直接连接作为下一层的输入。

卷积神经网络

上图模型的基本参数为:

输入:224×224大小的图片,3通道
第一层卷积:5×5大小的卷积核96个,每个GPU上48个。
第一层max-pooling:2×2的核。
第二层卷积:3×3卷积核256个,每个GPU上128个。
第二层max-pooling:2×2的核。
第三层卷积:与上一层是全连接,3*3的卷积核384个。分到两个GPU上个192个。
第四层卷积:3×3的卷积核384个,两个GPU各192个。该层与上一层连接没有经过pooling层。
第五层卷积:3×3的卷积核256个,两个GPU上个128个。
第五层max-pooling:2×2的核。
第一层全连接:4096维,将第五层max-pooling的输出连接成为一个一维向量,作为该层的输入。
第二层全连接:4096维
Softmax层:输出为1000,输出的每一维都是图片属于该类别的概率。

4 DeepID网络结构

DeepID网络结构是香港中文大学的Sun Yi开发出来用来学习人脸特征的卷积神经网络。每张输入的人脸被表示为160维的向量,学习到的向量经过其他模型进行分类,在人脸验证试验上得到了97.45%的正确率,更进一步的,原作者改进了CNN,又得到了99.15%的正确率。

如下图所示,该结构与ImageNet的具体参数类似,所以只解释一下不同的部分吧。

卷积神经网络

上图中的结构,在最后只有一层全连接层,然后就是softmax层了。论文中就是以该全连接层作为图像的表示。在全连接层,以第四层卷积和第三层max-pooling的输出作为全连接层的输入,这样可以学习到局部的和全局的特征。

4楼
北方爱棋 发表于:2016/1/2 20:41:00
图片点击可在新窗口打开查看
5楼
棋男 发表于:2016/1/2 21:31:00
 現在改一改概念已可令棋軟去到5,6段。


一早就說了寫圍棋棋軟的人不會下棋。



如果他們來找我,應該2,3年來可解決問題。


他們現在還有一個很大的錯誤概念。

就是並非中正,
而是在取中位數


仍未得正道
6楼
jt2925 发表于:2016/1/3 14:02:00
围棋是目前世界公认一道人工智能尚未突破的高墙,不过在一段Google人工智能团队科学家Demis Hassabis接受访问的影片中,Hassabis透露再过几个月将会有突破性的发展,看来藉由深度学习采用图像分析与神经网络的学习运算方式,可能会继“蒙地卡罗树搜寻”算法后为计算机围棋的突破带来一线曙光。
7楼
jt2925 发表于:2016/1/3 14:02:00
Facebook 透露正在研究中国古代围棋游戏,这被视为比电脑玩象棋更艰难的挑战。Facebook团队利用视觉识别算法,而不仅仅使用“蛮力计算”以预测可能的步骤。Facebook首席技术官Mike Schroepfer指出,最好的人类棋手都是借助视觉模式来完成比赛,通过观察板上的棋子,他们以一种直观的方式了解好的排列和坏的排列,于是,他们将这种模式也移植到在人工智能博弈中。
8楼
jt2925 发表于:2016/1/3 14:06:00
在计算机视觉领域,深层神经网络的方法常常被研究人员用来训练计算机识别物体,微软也不例外。但微软亚洲研究院的研究员们在此次ImageNet挑战赛中使用了一种前所未有,深度高达百层的神经网络。该网络的层数比以往任何成功使用的神经网络的层数多5倍以上。
9楼
jt2925 发表于:2016/1/3 14:22:00
顶尖公司纷纷投入计算机博弈研究是借此发展AI,学术交流、开放的源代码以及技术的积累传承、顶尖数学家的加入都会加速人工智能基础研究和工程应用,电脑围棋战胜人类指日可待
10楼
棋男 发表于:2016/1/3 15:56:00
 其實,facebook說的是加入每格空間密度概念,
然後用類比法,所謂神經網絡視覺對比,
參照出空間密度。

現在,不太準確,
起步點都已經有5,6段。
更加可以證明圍棋深度不高,
只是以前一開始寫棋軟的人未找出正確編程方法

但其實,,facebook還未加入反方向消除隙縫概念,
如果不需要加就可戰勝人類,
圍棋可以說十分顯淺

國象正反相向,仍未封頂。
中象已基本封頂。

而中象用類比圖形參照,只能處理部份問題。
就是人類都知說的所謂棋形
馬後包,釣魚馬,臥槽馬之類

共10 条记录, 每页显示 10 条, 页签: [1]

Copyright © 2000 - 2008 Dvbbs.Net
Powered By Dvbbs Version 8.3.0
Processed in .06250 s, 2 queries.