AlphaGo 的棋局,与人工智能有关,与人生无关
另外一个问题就是多个线程很可能同时走一样的路径(因为大家都选择目前看起来 Promising 的孩子),一种方法就是临时的修改 virtual loss,比如线程 1 在搜索孩子 a,那么就给它的 Q(v) 减一个很大的数,这样其它线程就不太可能选择它了。当然线程 1 搜索完了之后要记得改回来。 《A Lock-free Multithreaded Monte-Carlo tree Search Algorithm》使用了一种 lock-free 的算法,这种方法比加锁的方法要快很多,AlphaGo 也用了这个方法。 Segal [195] investigates why the parallelisation of MCTS across multiple machines has proven surprisingly difficult. He finds that there is an upper bound on the improvements from additional search in single-threaded scaling for FUEGO, that parallel speedup depends criti- cally on how much time is given to each player, and that MCTS can scale nearly perfectly to at least 64 threads when combined with virtual loss. Segal 研究了为什么多机的 MCTS 算法很难,并且实验得出结论使用 virtual loss 的多线程版本能比较完美的 scale 到 64 个线程(当然这是单机一个进程的多线程程序)。后面我们讨论 AlphaGo 的 scalable 的时候会用到这些结论。 使用了 UCT 算法之后,计算机围棋的水平能提高到 KGS 2d 的水平(估计是 1k 的水平?)。 CNN 和 Move Prediction 之前我们说了 MCTS 回避了局面估值的问题,但是人类下围棋显然不是这样的,所以真正要下好围棋,如此从模仿人类的角度来说,这个问题是绕不过去的。人类是怎么学习出不同局面的细微区别的呢?当然不能由人来提取特征或者需要人来编写估值函数,否则还是回到之前的老路上了。我们的机器能自动学习而不需要领域的专家手工编写特征或者规则来实现估值函数呢? 眼下最火热的深度学习也许可以给我们一条路径(当然可能还有其它路径,但深度学习目前看起来解决 feature 的自动学习是最 promising 的方法之一)。 深度学习和 CNN 简介 在机器学习流行之前,都是基于规则的系统,因此做语音的需要了解语音学,做 NLP 的需要很多语言学知识,做深蓝需要很多国际象棋大师。 而到后来统计方法成为主流之后,领域知识就不再那么重要,但是我们还是需要一些领域知识或者经验来提取合适的 feature,feature 的好坏往往决定了机器学习算法的成败。对于 NLP 来说,feature 还相对比较好提取,因为语言本身就是高度的抽象;而对于 Speech 或者 Image 来说,我们人类自己也很难描述我们是怎么提取 feature 的。比如我们识别一只猫,我们隐隐约约觉得猫有两个眼睛一个鼻子有个长尾巴,而且它们之间有一定的空间约束关系,比如两种眼睛到鼻子的距离可能差不多。但怎么用像素来定义”眼睛“呢?如果仔细想一下就会发现很难。当然我们有很多特征提取的方法,比如提取边缘轮廓等等。 但是人类学习似乎不需要这么复杂,我们只要给几张猫的照片给人看,他就能学习到什么是猫。人似乎能自动”学习“出 feature 来,你给他看了几张猫的照片,然后问题猫有什么特征,他可能会隐隐预约的告诉你猫有什么特征,甚至是猫特有的特征,这些特征豹子或者老虎没有。 深度学习为什么最近这么火,其中一个重要的原因就是不需要(太多)提取 feature。 从机器学习的使用者来说,我们以前做的大部分事情是 feature engineering,然后调一些参数,一般是为了防止过拟合。而有了深度学习之后,如果我们不需要实现一个 CNN 或者 LSTM,那么我们似乎什么也不用干。 Deep Neural Network 能自动学习出层次化的 feature CNN 最早是 Yann Lecun 提出用来解决图像识别的问题的一种深度神经网络。由 Yann LeCun 提出,通过卷积来发现位置无关的 feature,而且这些 feature 的参数是相同的,从而与全连接的神经网络相比大大减少了参数的数量。 CNN 深度神经网络 因此 CNN 非常适合围棋这种 feature 很难提取问题,比如图像识别。用 CNN 来尝试围棋的局面评估似乎也是很自然的想法。 Move Prediction using CNN 之前也分析过了,围棋搜索如果不到游戏结束,深的局面并不比浅的容易评估,所以我们不需要展开搜索树,而可以直接评估一个局面下不同走法的好坏。这样做的好处是很容易获得训练数据。我们有大量人类围棋高手的对局(海量中等水平的对局),每一个局面下“好”的走法直接就能够从高手对局库里得到,认为他们的对局都是“好”的走法。但是要得到一个局面的“绝对”得分却很难,因为我们只知道一盘对局最终的结果。一盘游戏最终的胜负可能是因为布局就下得很好,也可能是因为最后的官子阶段下得好,中间具体某个局面的好坏是很难判断的(当然强化学习试图解决这个问题,但是还是很难的,下面在讨论 AlphaGo 的时候会有涉及)。对于一个局面,如果能知道这个局面下最好的走法(或者几个走法),那么我们对弈时就直接选择这个走法(当然这个最好的走法可能得分也很差,比如败局已定的情况下怎么走都是输)。 所以大部分研究都是用 CNN 来预测一个局面下最好的走法。【预测走法比估值一个局面容易,如果我们能够准确估值局面,那么最佳走法就是从走之后的局面中选择对自己最有利的走法。或者用我们做问答系统常用的比喻,预测走法是搜索引擎,局面评估是问答系统。搜索引擎只要把好的排前面就行了(甚至不一定要求排在第一,排在第一页也就差不多了),而问答不仅要把好的排前面,而且还要知道这个最“好”的结果是否足够“好”,因为排序的好是相对“好”,问答的好必须是绝对的“好”,是唯一正确答案】。 Van Der Werf 等(2003) (编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |