导读:关于Alfa Go的评论文章不少,但真正可以与开发团队交流的却很少,感谢Alfa Go开发团队DeepMind的朋友对我这篇文章内容的关注与探讨,指出我在以前那一版文章中用字上的不够较精确,因此在此又做调整。我以前文章提到的「全局」指的是跨时间点的整场赛局,很容易被误认为是某个特定时点整个棋盘的棋局,因此后面所有都修改成「总体棋局」。此外,关于总体棋局评估,除了透过脱机数据学习的评价网络以外,还能够透过根据目前状态实时计算的不一样策略评价差别(这项技术称之为Rollouts),它透过将计算结果进行快取,也能作到局部考虑总体棋局的效果。再次感谢DeepMind朋友的斧正。html
在人类连输AlphaGo三局后的今天,正好是一个好时机,可让你们对于AlphaGo所涉及的深度学习技术可以有更多的理解(而不是想象复仇者联盟中奥创将到来的恐慌)。在说明Alpha Go的深度学习技术以前,我先用几个简单的事实总结来厘清你们最常误解的问题:前端
●AlphaGo此次使用的技术本质上与深蓝大相径庭,再也不是使用暴力解题法来赢过人类。算法
●没错,AlphaGo是透过深度学习可以掌握更抽象的概念,可是计算机仍是没有自我意识与思考。网络
●AlphaGo并无理解围棋的美学与策略,他只不过是找出了2个美丽且强大的函数来决定他的落子。架构
什么是类神经网络?分布式
其实类神经网络是很古老的技术了,在1943年,Warren McCulloch以及Walter Pitts首次提出神经元的数学模型,以后到了1958年,心理学家Rosenblatt提出了感知器(Perceptron)的概念,在前者神经元的结构中加入了训练修正参数的机制(也是咱们俗称的学习),这时类神经网络的基本学理架构算是完成。类神经网络的神经元实际上是从前端收集到各类讯号(相似神经的树突),而后将各个讯号根据权重加权后加总,而后透过活化函数转换成新讯号传送出去(相似神经元的轴突)。函数
至于类神经网络则是将神经元串接起来,咱们能够区分为输入层(表示输入变量),输出层(表示要预测的变量),而中间的隐藏层是用来增长神经元的复杂度,以便让它可以仿真更复杂的函数转换结构。每一个神经元之间都有连结,其中都各自拥有权重,来处理讯号的加权。学习
传统的类神经网络技术,就是透过随机指派权重,而后透过递归计算的方式,根据输入的训练数据,逐一修正权重,来让总体的错误率能够降到较低。随着倒传导网络、无监督式学习等技术的发展,那时一度类神经网络蔚为显学,不过人类很快就遇到了困难,那就是计算能力的不足。由于当隐藏层只有一层的时候,其实大多数的情况,类神经网络的分类预测效果其实并不会比传通通计的罗吉斯回归差太多,可是却要耗费更庞大的计算能力,可是随着隐藏层神经元的增长,或者是隐藏层的增长,那么所须要计算权重数量就会严重暴增。因此到了八十年代后期,整个类神经网络的研究就进入了寒冬,各位可能只能在洗衣机里体会到它小小威力(如今洗衣机里根据倒入衣物评估水量与运行时间不少都是用类神经网络做的),说真的,类神经网络一点都没有被认为强大。测试
这个寒冬一直持续到2006年,在Hinton以及Lecun小组提出了「A fast learningalgorithm for deep belief nets」论文以后,终于有了复苏的但愿,它们提出的观点是若是类神经网络神经元权重不是以随机方式指派,那么应该能够大幅缩短神经网络的计算时间,它们提出的方法是利用神经网络的非监督式学习来作为神经网络初始权重的指派,那时因为各家的论文期刊只要看到类神经网络字眼基本上就视为垃圾不刊登,因此他们才提出深度学习这个新的字眼突围。除了Hinton的努力以外,得力于摩尔定律的效应,咱们能够用有更快的计算能力,Hinton后来在2010年使用了这套方法搭配GPU的计算,让语音识别的计算速度提高了70倍以上。深度学习的新一波高潮来自于2012年,那年的ImageNet大赛(有120万张照片做为训练组,5万张当测试组,要进行1000个类别分组)深度学习首次参赛,把过去好几年只有微幅变更的错误率,一下由26%下降到15%。而同年微软团队发布的论文中显示,他们透过深度学习将ImageNet 2012数据集的错误率降到了4.94%,比人类的错误率5.1%还低。而去年(2015年)微软再度拿下ImageNet 2015冠军,此时错误率已经降到了3.57%的超低水平,而微软用的是152层深度学习网络(我当初看到这个数字,吓都吓死了)….优化
卷积神经网络(Convolutional Neural Network)
在图像识别的问题上,咱们处理的是一个二维的神经网络结构,以100*100像素的图片来讲,其实输入数据就是这10000像素的向量(这仍是指灰阶图片,若是是彩色则是30000),那若是隐藏层的神经元与输入层至关,咱们等于要计算10的8次方的权重,这个数量想到就头疼,即便是透过并行计算或者是分布式计算都恐怕很难达成。所以卷积神经网络提出了两个很重要的观点:
1.局部感知域:从人类的角度来看,当咱们视觉聚焦在图片的某个角落时,距离较远的像素应该是不会影响到咱们视觉的,所以局部感知域的概念就是,像素指须要与邻近的像素产生连结,如此一来,咱们要计算的神经连结数量就可以大幅下降。举例来讲,一个神经元指须要与邻近的10*10的像素发生连结,那么咱们的计算就能够从10的8次方下降至100*100*(10*10)=10的6次方了。
2.权重共享:可是10的6次方仍是不少,因此这时要引入第二个观念就是权重共享。由于人类的视觉并不会去认像素在图片上的位置,当图片发生了平移或者是位置的变化,咱们都仍是能够理解这个图片,这表示我从一个局部所训练出来的权重(例如10*10的卷积核)应该是能够适用于照片的各个位置的。也就是说在这个10*10范围所学习到的特征能够变成一个筛选器,套用到整个图片的范围。而权重共享形成这10*10的卷积核内就共享了相同的权重。一个卷积核能够理解为一个特征,因此神经网络中能够设计多个卷积核来提取更多的特征。下图是一个3*3的卷积核在5*5的照片中提取特征的示意图。
卷积层找出了特征后,就能够作为输入变量到通常的类神经网络进行分类模型的训练。不过当网络结构愈来愈复杂,样本数若是不是极为庞大,很容易会发生过分学习的问题(over-fitting,神经网络记忆的建模数据的结构,而非找到规则)。所以咱们后来引入池化 (pooling)或是局部取样(subsampling)的概念,就是在卷积核中再透过n*n的小区域进行汇总,来凸显这个区域的最显著特征,以免过分学习的问题。
因此常见的图像识别技术(例如ImageNet)就是透过多阶段的卷积层+池化层的组合,最后在接入通常的类神经网络架构来进行分类预测。下图是一个图像识别的范例。其中的C二、C四、C6都是卷积层,而S3与S5则是池化层。卷积神经网络建构了一个透过二维矩阵来解决抽象问题的神经网络技术。而图像识别再也不须要像过去同样透过人工先找出图像特征给神经网络学习,而是透过卷积网络结构,它们能够本身从数据中找出特征,并且卷积层越多,可以辨识的特征就越高阶越抽象。因此你要训练神经网络从照片中辨识猫或狗,你再也不须要本身找出猫或狗的特征注记,而是只要把大量的猫或狗的照片交给神经网络,它本身会找出猫或狗的抽象定义。
讲到这里有没有发现卷积神经网络做图像识别与围棋有甚么类似性?没错,围棋是一个19*19的方阵,而围棋也是一个规则不像象棋或西洋棋般的明确,并且具有了很高的须要透过直觉才能判断落子的特性。这个时候,深度学习就能发挥极佳的做用,由于程序设计师不须要本身把围棋的游戏规则输入给计算机,它能够透过大量的棋谱本身找出对应的逻辑与抽象概念。
为何围棋比较困难?
为何深蓝能够在西洋棋赢过人类可是却没法赢围棋,这是由于深蓝透过强大的计算能力,将将来局势的树状架构,推导出后面胜负的可能性。可是各位要知道,以西洋棋或中国象棋来讲,它的分支因子大概是40左右,这表示预测以后20步的动做须要计算40的20次方(这是多大,就算是1GHz的处理器,也要计算3486528500050735年,请注意,这仍是比较简单的西洋棋),因此他利用了像是MinMax搜索算法以及Alpha-Beta修剪法来缩减可能的计算范围,基本上是根据上层的胜率,可能胜的部分多算几层、输的少算,无关胜负不算,利用暴力解题法来找出较佳策略。可是很不幸的是,围棋的分支因子是250,以围棋19*19的方阵,共有361个落子点,因此整个围棋棋局的总排列组合数高达10的171次方,有很多报导说这比全宇宙的原子数还多,这是采用了以前的一个古老的研究说全宇宙原子数是10的75次方,不过我对此只是笑笑,我以为这也是低估了宇宙之大吧。
AlphaGo的主要机制
在架构上,AlphaGo能够说是拥有两个大脑,两个神经网络结构几乎相同的两个独立网络:策略网络与评价网络,这两个网络基本上是个13层的卷积神经网络所构成,卷积核大小为5*5,因此基本上与存取固定长宽像素的图像识别神经网络同样,只不过咱们将矩阵的输入值换成了棋盘上各个坐标点的落子情况。
第一个大脑「策略网络」基本上就是一个单纯的监督式学习,用来判断对手最可能的落子位置。他的作法是大量的输入这个世界上职业棋手的棋谱,用来预测对手最有可能的落子位置。在这个网络中,彻底不用去思考「赢」这件事,只须要可以预测对手的落子便可。目前AlphaGo预测对手落子位置的正确率是57%(这是刊登在Nature文章时的数据,如今想必更高了)。那各位可能认为AlphaGo的弱点是否应该就在策略网络,一方面是预测准确率不高,再者是若是下了以前他没看过的棋局是否是就有机会能够赢过他。惋惜并非,由于AlphaGo的策略网络有作了两个层面加强,第一个层面是利用了名为加强策略网络(reinforced-learning (RL) policynetwork)的技术,他先使用部分样本训练出一个基础版本的策略网络,以及使用完整样本创建出来的进阶版策略网络,而后让两个网络对弈,后者进阶版策略网络等因而站在基础版前的「高手」,所以可让基础网络能够快速的熟即到高手可能落子的位置数据,进而又产生一个加强版,这个加强版又变成原有进阶版的「高手」,以此循环修正,就能够不断的提高对于对手(高手)落子的预测。第二个层面则是如今的策略网络再也不须要在19*19的方格中找出最可能落子位置,改良过的策略网络能够先透过卷积核排除掉一些区域不去进行计算,而后再根据剩余区域找出最可能位置,虽然这可能下降AlphaGo策略网络的威力,可是这种机制却能让AlphaGo计算速度提高1000倍以上。也正由于Alpha Go一直是根据总体局势来猜想对手的可能落子选择,也所以人类耍的当心机像是刻意下几步但愿扰乱计算机的落子位置,其实都是没有意义的。
第二个大脑是评价网络。在评价网络中则是关注在目前局势的情况下,每一个落子位置的「最后」胜率(这也是我所谓的总体棋局),而非是短时间的攻城略地。也就是说策略网络是分类问题(对方会下在哪),评价网络是评估问题(我下在这的胜率是多少)。评价网络并非一个较精确解的评价机制,由于若是要算出较精确解可能会耗费极大量的计算能力,所以它只是一个近似解的网络,并且透过卷积神经网络的方式来计算出卷积核范围的平均胜率(这个作法的目的主要是要将评价函数平滑化,同时避免过分学习的问题),最终答案他会留到最后的蒙利卡罗搜索树中解决。固然,这里提到的胜率会跟向下预测的步数会有关,向下预测的步数越多,计算就越庞大,AlphaGo目前有能力本身判断须要展开的预测步数。可是如何能确保过去的样本可以正确反映胜率,并且不受到对弈双方实力的事前判断(可能下在某处会赢不是由于下在这该赢,而是这我的比较厉害),所以。这个部分它们是透过两台AlphaGo对弈的方式来解决,由于两台AlphaGo的实力能够看成是相同的,那么最后的输赢必定跟原来的两人实力无关,而是跟下的位置有关。也所以评价网络并非透过这世界上已知的棋谱做为训练,由于人类对奕会受到双方实力的影响,透过两台对一的方式,他在与欧洲棋王对弈时,所使用的训练组样本只有3000万个棋谱,可是在与李世石比赛时却已经增长到1亿。因为人类对奕动则数小时,可是AlphaGo间对奕可能就一秒完成数局,这种方式能够快速地累积出正确的评价样本。因此先前提到机器下围棋较大困难点评价机制的部分就是这样透过卷积神经网络来解决掉。
AlphaGo技术的最后环节就是蒙地卡罗搜索树,相较于之前深蓝所使用的搜索(搭配MinMax搜索算法以及Alpha-Beta修剪法,这里就再也不赘述),因为咱们并不是具备无限大的计算能力(请注意,若是是有限的排列组合,蒙地卡罗搜索树的确有可能针对全部组合进行通盘评估,可是在围棋的场景下是没有办法的,就算这样作,恐怕也会形成计算时间的大幅增长),所以不多是适用于旧的方法,不过在前面策略网络以及评价网络中,AlphaGo已经能够针对接下来的落子(包括对方)可能性缩小到一个可控的范围,接下来他就能够快速地运用蒙地卡罗搜索树来有限的组合中计算较佳解。通常来讲蒙地卡罗搜索树包括4个步骤:
1.选取:首先根据目前的状态,选择几种可能的对手落子模式。
2.展开:根据对手的落子,展开至咱们胜率较大的落子模式(咱们称之为一阶蒙地卡罗树)。因此在AlphaGo的搜索树中并不会真的展开全部组合。
3.评估:如何评估较佳行动(AlphaGo该下在哪?),一种方式是将行动后的棋局丢到评价网络来评估胜率,第二种方式则是作更深度的蒙地卡罗树(多预测几阶可能的结果)。这两种方法所评估的结果可能大相径庭,AlphaGo使用了混合系数(mixing coefficient)来将两种评估结果整合,目前在Nature刊出的混合系数是50%-50%(可是我猜实际必定不是)
4.倒传导:在决定咱们较佳行动位置后,很快地根据这个位置向下透过策略网络评估对手可能的下一步,以及对应的搜索评估。因此AlphaGo其实最恐怖的是,李世石在思考本身该下哪里的时候,不但AlphaGo可能早就猜出了他可能下的位置,并且正利用他在思考的时间继续向下计算后面的棋路。
根据AlphaGo团队的实测,若是单独使用一个大脑或是蒙利卡罗搜索树技术,都能达到业余(段)的等级(欧洲棋王樊摩强度等级大概是在2500~2600,而李世石是在3500以上)。可是当这些技术整合就能呈现更强大的力量。可是在刊登Nature论文时他的预估强度大概也只有职业3~4段(李世石是9段),不过刚刚提到他透过加强技术强化策略网络、透过两台AlphaGo来优化评价网络,这均可以让他能够在短期变得更增强大。并且计算机没有情感也不怕压力,更不会由于对手表现而轻敌(AlphaGo的策略网络一贯只预测强者),因此人类就算有更强大的实力也未必可以承受输赢压力而作较好的发挥。
李世石有没有赢的机会?
在不少评论中,我以为对于AlphaGo都有不少不正确的猜想,首先是AlphaGo有没有「总体棋局」评估的能力,必须说的是以整台AlphaGo来讲是有的,这主要是来自于评价网络的计算结果(由于它计算的是最后胜率),可是得到的是个池化区域的平滑化后平均胜率。在AlphaGo的策略网络主要是针对对手接下来的落子进行评估,至于蒙地卡罗搜索树则是使用了评价网络的参数(脱机训练的结果)以及根据目前状态实时计算价值差别的Rollouts技术,因此能够作出具备总体棋局考虑的模拟试算。可是人类对于「总体棋局」的掌控是透过直觉,这一点应该仍是比计算机强大,并且若是利用目前AlphaGo是透过卷积核池化事后结果评估平均胜率(主要是为了平滑化以及避免过分学习),若是李世石有办法利用AlphaGo会预测他的行为作后面决策,做出陷阱,来制造胜率评估的误区(在池化范围内平均是高胜率,可是某个位子下错就形成「总体棋局」翻覆的情况,这就是胜率预测的误区),那么人类就有可能获胜(固然啦,我这里只是提出可能性,可是知易行难,这样的行动的实际执行可能性是偏低的)。如今李世石必输的缘由在于它一直在猜想AlphaGo的棋路,可是事实上反而是AlphaGo一直在靠猜想李世石的下一步来作决策,因此他应该改变思路,透过本身的假动做来诱骗AlphaGo,这才有可能有胜利的可能性。
如今计算机在围棋这个号称人类最后的堡垒中赛过了人类,那咱们是否是要担忧人工智能统治人类的一天到来,其实没必要杞人忧天,由于在人工智能的分类上来讲,区分为弱人工智能(ArtificialNarrow Intelligence)与强人工智能(Artificial General Intelligence)(事实上还有人提出高人工智能Artificial Super Intelligence,认为是比人类智力更强大,具有创造创新与社交技能的人工智能,但我以为这太科幻了,再也不讨论范围内),其中较大的差异在于弱人工智能不具有自我意识、不具有理解问题、也不具有思考、计划解决问题的能力。各位可能要质疑AlphaGo若是不能理解围棋他是如何能够下的那么好?请注意,AlphaGo本质上就是一个深度学习的神经网络,他只是透过网络架构与大量样本找到了能够预测对手落子(策略网络)、计算胜率(评价网络)以及根据有限选项中计算较佳解的蒙地卡罗搜索树,也就是说,他是根据这三个函数来找出较佳动做,而不是真的理解了什么是围棋。因此AlphaGo在本质上与微软的Cortana或iPhone的Siri其实差异只是专精在下围棋罢了,并无多出什么思考机制。我也看到一些报导乱说AlphaGo是个通用性的网络,因此以后叫他学打魔兽或是学医都可以快速上手,那这也是很大的谬误,若是各位看完了上面的说明,就会知道AlphaGo根本就是为了下围棋所设计出来的人工智能,若是要拿它来解决其余问题,势必神经结构以及算法都必需要从新设计。因此李世石与其说是输给了AlphaGo,还不如说是输给了数学,证实其实直觉仍是不如数学的理性判断。有人以为人类输掉了最后的堡垒,围棋这项艺术也要毁灭了…其实各位真的不用太担忧。人类跑不过汽车的时候为什么没有那么恐慌呢?跑步这项运动到如今也好好的,奥运推荐也不是都被法拉利拿走了…因此真的没必要太过紧张。
那么会有强人工智能出现的一天吗?在2013年Bostrom对全球数百位最前沿的人工智能专家作了问卷,问了到底他们预期强人工智能何时会出现,他根据问卷结果推导出了三个答案:乐观估计(有10%的问卷中位数)是2022年,正常估计(50%的问卷中位数)是2040年,悲观估计(90%的问卷中位数)是2075年。因此离咱们还久的呢。不过当弱人工智能的发展进入到成本下降可商业化的时候,你们与其关心人工智能会不会统治地球,还不如先关心本身的工做技能会不会被计算机取代来实际些吧。
转自:http://f.dataguru.cn/thread-719041-1-1.html