Re: [心得] 围棋AI AlphaGo 之我见

楼主: fallcolor (秋天走了)   2016-03-13 21:53:31
想透过这篇文章顺着介绍一下这次让围棋AI效能跃升的关键:机器学习(machine
learning)技术。当然现在大家对alphago的算法背景都大致了解了,简单说是类神经网
路(neural network)与蒙的卡罗树状搜寻(monte carlo tree search)的组合。不过如同
一些围棋AI专家提到的,MCTS从2006就被应用于开发围棋AI了,虽然带来搜寻策略的大跃
进,却还是有些盘面(例如打劫)难于处理。NN为alphago带来的最大效益就是搜寻深度/广
度/顺序的优化,使MCTS得以在有限时间内对胜率较高的目标手展开树状预测。从这点来
看,理解alphago成功的关键是NN而不是MCTS,要如何破解alphago的关键也应该在此处。
而NN就是ML技术的其中一种,所以我想提供一点对ML的基础认知。
ML的广义目的是从输入资料中学习出有意义的pattern,要实现此目的的算法种类很多
,但我想介绍的是比较主流的deterministic algorithm。这类算法应用于ML上可以用
清楚的数学模型表达:
y = f(x; theta) ……(1)
其中x是输入资料,f()是需要事先定义的模型函数,theta是f()函数中的参数,y是你希
望f()函数输出的预测值。当中theta是未知的,算法目的就是希望根据给定的输入资料
x与输出资料y自动决定theta,实践的手段则是透过最小化模型预测结果与预期输出之间
的误差值:
Minimize | y – f(x;theta) |^2 …… (2)
这个例子中选择的误差函数只是简单的平方运算,此函数称为目标函数,也是可以选择的
。到此为止,机器学习其实只是一道数学问题,解决公式(2)需要用到的是数值最佳化
(numerical optimization)技巧,但我也不打算从这个方向介绍下去。要理解ML的优缺点
应该从对数学的直观理解出发。这么说吧,先把公式(2)想像成一个简单的联立方程式求
解问题,如果我们有三组(x,y)资料(并且不是线性相依),而未知数theta个数也是3,基
础数学告诉我们恰好有唯一解。若未知数theta个数小于3,此时找不到任何解满足三组方
程式了,但我们可以找到一个使误差值最小的解。若未知数大于3,我们则可以找到无限
多解。
为什么要复习这么简单的数学概念呢?因为这里面其实解释了ML的所有困难与迷人之处。
如果你对资料假设的ML模型很简单,也就是说theta个数少,换言之f()函数无法满足太大
资料量,我们就会说这模型对资料的泛化(generalization)能力差。若相反,f()函数很
复杂,theta个数多到比输入资料多,意味着你可以找到无限多theta满足所有训练资料。
但很不幸它们对算法而言又都一样,此时就容易掉进local optimum,我们就会说这模
型过度拟合(overfitting)了。
到此为止,大家可以思考看看如果你是一个ML的研究者,你会倾向选择一个简单但泛化能
力普通的模型还是一个复杂却容易找到wrong optimum的模型呢?相信有志气的各位一定
是选择后者吧。但现实情况是,十年以前的这个领域人们宁愿选择前者搭配其他技术当作
ML的补丁。这当然有许多因素,包括以前的学术研究通常是在规模较小的数据库上做验证
就可以发论文了,也包括过去处理的ML问题并不复杂,最关键的或许是过去的最佳化技术
还没成长到可以解决复杂模型下的最佳化问题,而对简单模型却几乎保证可以找到
global optimum。种种原因造成当时的学界有另外一种研究面向叫做特征工程(feature
engineering),它关注的是如何表示输入资料x。这一派的研究者相信,透过domain
knowledge先对输入资料设计比较好的特征表示,而不是把原始资料赤裸裸地丢近模型里
进行训练,相当于很大的模型复杂度在这个步骤就解决掉了。基于这个理念十年前的ML其
实比较像feature extraction + model prediction的组合技,前者衍生出降维
(dimension reduction)、特征子(feature descriptor)等技巧,后者更是百家争鸣,包
括logistic regression、support vector machine、decision tree、adaboosting,有
时候我赢你一点点,过阵子你又赢我一点点,不变的是谁也不能统一天下。除了以上还有
个比较特殊的派别叫做kernel machine,它的理念有点像是把两步骤再次合二为一:假设
x可以经过一个mapping转换到无限维度,此时就可以把这个新表示法塞进模型里并且以核
函数(kernel function)取代。……再往下说就离题了,不过因为kernel machine这概念
可以塞进许多ML模型,当时简直掀起一波洗论文的热潮,很有趣。
说了这么多,可能有人想问,那尊爵不凡的NN呢?难道还没被提出吗?
其实正好相反,作为几乎是最早的几种ML模型之一,NN早在1980左右就被提出来了。虽然
我没能躬逢其盛,但听说1990初的ML领域几乎是NN一统天下的时代,直到1995有位叫
Vapnik的研究者提出SVM后才迅速没落。NN的好处在于它的模型复杂度可以设计到非常高
,而对模型参数做最佳化的数学公式经过Hinton等人推导后也变得非常简洁。然而它的缺
点同时出现:即使有了漂亮的最佳化公式,仍无法解决一旦模型复杂度过高就掉入local
optimum的问题,而且这个local optimum还通常很糟。于是,当SVM挟著“我有global
optimum”的口号横空出世之后,NN就慢慢被喜新厌旧的研究者们淡忘了。所幸固执的
Hinton没有放弃,经过十年沉潜,在2006提出pre-training的技巧首次在工程意义上解决
NN会overfitting的问题。或许为了重新出发,他这次为NN的学习技巧下了一个叫deep
learning的口号,甚至呛声与NN相比,那些SVM、boosting、tree什么有的没的模型都只
是shallow learning(…肤浅学习)。后面的事大家就比较熟悉了,学界卷起一股DL旋风,
google/FB/IBM/百度……等大公司纷纷投入可观的资源研究,ML瞬间成为实现AI的希望,
诸如此类。
当然NN在技术层面的故事并不只到此为止。过没多久研究者就发现,原来只要灌大数据加
上对NN模型有一些合理的规范限制,连pre-training都不用做就可以升天啦。灌大数据这
件事在过去是难以想像的,然而仰赖计算机硬件效能一日千里总算可以实现;而对NN模型
采取合理规范这个概念,造就了convolutional NN、recursive NN等新式模型的兴起,其
中CNN就是这次alphago使用的机器学习模型。另外研究者也对NN的最佳化算法进行一些
工程方面的改良,使训练过程更稳定、更不会掉到奇怪的解,也更可以提高模型的复杂度

看上去NN完美无瑕了,不过其中很重要的一点是,这些改良都是透过实验数据的提升来支
持的,背后仍然缺乏优美的数学理论。也就是说,NN会掉到local optimum这件事是它与
身俱来的原罪,不管灌再大的数据、做各式各样算法补强,这件事永远可能发生。于是
有些脑筋不正常的研究者开始找NN麻烦,他们试图透过另外一套算法找出一种输入噪声
n,使得
x ~= x+n (~=:约等于)
y != f(x+n) (!=:不等于)
这个研究的目标当然也可以从善意的一面来理解:分析NN模型究竟会在何时预测失效,并
以此进行改良。相关资料我曾提供于之前的讨论文章中,这边就不重复了。于是我们终于
可以回到围棋AI的问题,在介绍一堆ML的基础认知后,人究竟要如何理解alphago前所未
有的成功呢?
Alphago这次训练出来的类神经网络模型,可以看待成是一个复杂度非常高、泛化能力强
、预测又稳定的数学函数f()。里面的所有参数theta都是根据喂进去的棋谱以及相对应的
棋局胜负一笔一笔学习出来。这样的模型可能已经非常接近完美了,但是请记住,回归数
学本质时,它一定是不完美的。因为NN注定就是会在训练过程中掉进local optimum,而
这个local optimum因为没有完美地拟合围棋游戏这个决策的超平面(hyper-plane),就必
然会在某一种输入资料中发生预测失准的问题。经常看到板上有人质疑,是否alphago没
看过的棋步它就无法应付?这句话从ML的角度来看是不对的,因为就算这个棋步alphago
没看过,若参数的泛化能力强到可以“合成”这一步棋,就还在模型的表示范围之内。直
观一点理解或许可以想像成函数的内插,即使输入资料不在取样资料内,但计算出来的函
数上的每一点都是可以透过取样资料参数化后内插得到的。反之,若是需要外插才能表示
的资料点,就可能造成函数的预测错误。
所以今天李世石九段的胜利──神之一手78,从数学意义上来说可以简单理解为制造了一
个模型函数的外插点,或是说制造了一笔想搞砸NN模型的研究者朝思暮想的x+n的资料,
使得alphago终于无法泛化。在之前的文章中我很悲观地认为这个n一定是得靠另外一套演
算法才能破解得到的。也就是说以一位ML爱好者而言,我认为只有ML算法才能破解ML演
算法,没有机会透过人类的智识归纳。想不到李九段今天立刻狠狠地打我的脸,心情实在
是很激动啊。坦白说对这次比赛的关心是很失敬的,因为我甚至不会下围棋,只是对ML抱
著兴趣就忍不住当了几日棋迷,简直有点蔑视围棋了。然而这四场比赛下来对于李世石的
表现却是真的打从心底十分动容,于是决定写这篇文章。希望透过这篇介绍能让喜欢围棋
的人对ML稍有认识。ML并不神奇,说到底就是资料堆积出来的一个数学模型,因为它仍然
缺乏人最重要的逻辑思维与创作才华(我认为这不同于模型的泛化能力),至少在现阶段它
是远远不需要恐惧的,而是需要与人类的智慧互相参考与提升,一起进步下去。
作者: promener (椪椪)   2016-03-13 21:54:00
推~~
作者: milkdragon (谢谢大家!!)   2016-03-13 21:59:00
推专业科普好文
作者: Dialysis (           )   2016-03-13 22:02:00
推科普好文! 概念超清楚! 但用字似乎仍有点难 XD
作者: Y78 (Y78)   2016-03-13 22:02:00
专业推
作者: Dialysis (           )   2016-03-13 22:03:00
不知我是否可以这样理解:以前的AI,是靠工程师在程式码直接写入接近正解的公式
作者: aaaba (小强)   2016-03-13 22:04:00
其实我感觉破解的重点不是NN,而是很弱的rollout policy
作者: Dialysis (           )   2016-03-13 22:04:00
但现在新的AI,则是靠程式自己去写出那个接近正确的公式因此,重点不在我们是否知道那个正确公式的长相重点反而是在如何让程式能自己写出正确的公式
作者: TS13 (ㄏㄏ)   2016-03-13 22:11:00
推~
作者: ecco (模仿是最好的奉承)   2016-03-13 22:11:00
学了很多 !
作者: kenny2963 (与风吹拂)   2016-03-13 22:12:00
棋谱就是座标,把无数棋谱fitting成一条方程式的fu吧
作者: sadmonkey (下雨天)   2016-03-13 22:12:00
推,围棋九段的算法除Bug能力真的很惊人,只是他靠的是过去对围棋累积的经验与那一点点的运气
作者: jimmycool (北七)   2016-03-13 22:13:00
推好文章,讲local min.有点语病:有可能theta数量很少但f的形状非常复杂(non-convex),使得opt alg没办法找到真正的最小值对于DL的成功有一说是在高维空间大多点都是saddle pt.所以SGD还是有办法找到一个够好的解
作者: sadmonkey (下雨天)   2016-03-13 22:15:00
从第一局就用了很多很多的试探法在看AlphaGO的表现
楼主: fallcolor (秋天走了)   2016-03-13 22:17:00
说的对 除了参数个数 模型复杂度也跟f()形状有关
作者: johnruby (柳丁)   2016-03-13 22:20:00
作者: shonbn   2016-03-13 22:23:00
推!
作者: WindSpread (阳だまりの诗)   2016-03-13 22:26:00
作者: countingtls (北海牧羊人)   2016-03-13 22:27:00
修正一下ANN的起始年代google一下Walter Pitts跟Warren McCulloch再来找 Marvin Minsky 跟 Seymour Papert
作者: shonbn   2016-03-13 22:29:00
越理解这些 就越会对小李这次表现敬佩啊
作者: countingtls (北海牧羊人)   2016-03-13 22:31:00
ANN 1940s年代就有理论, 50, 60年代开始被实作70年代没落,80年代第二复苏,2000s年代又没落,这几年是再次复兴
作者: limingche (dddooo)   2016-03-13 22:32:00
三点,1.梯度消失问题可用特殊半线性函数解决2.区域最佳解可用autoencoder解决,3。计算量问题可用分布式gpu解决。未来深度网络发展无可限量
作者: countingtls (北海牧羊人)   2016-03-13 22:34:00
CNN RNN也是80年代就出现,并不新只是重新挖出来
作者: MOONY135 (谈无欲)   2016-03-13 22:39:00
好科普
作者: countingtls (北海牧羊人)   2016-03-13 22:40:00
ANN也不是ML的分支,自成一个领域。作为分类预测器只是它功能之一。
作者: onelife (旺來)   2016-03-13 22:44:00
感谢科普!~~
楼主: fallcolor (秋天走了)   2016-03-13 22:54:00
说的对 因为ANN被提出时只有AI 没有ML 他目的是仿生不过因为本篇是谈ML 所以我从1980开始算 的确不精确Dialysis的问题我答案可能是NO 因为f()长什么样子还是由人定义
作者: wukevinboy (wukevinboy)   2016-03-13 22:59:00
太专业 可惜看不懂...QQ 我顶多理解一些原理
作者: reinhert (史丹佛的银色子弹)   2016-03-13 23:00:00
应该说人要选定适合的f(),然后透过学习把适合的theta找出来
作者: s93rm6 (Milks)   2016-03-13 23:08:00
推推
作者: utn875 (utn875)   2016-03-13 23:10:00
多谢好文
作者: exlibris (Ex-libris)   2016-03-13 23:19:00
好文推~长知识了
作者: smallsmile (能笑就笑)   2016-03-13 23:20:00
作者: Lauyea (Lauyea)   2016-03-13 23:31:00
概念很清楚
作者: Uizmp (黑袍法师)   2016-03-13 23:40:00
作者: Justisaac (灰色的天空)   2016-03-14 00:39:00
我觉得是人类在对局中成长了~李世石跟他下了三局 应该有感觉出电脑的一些弱著点这一步恰好逼了电脑发疯而已XD
作者: aSKY (Sky)   2016-03-14 09:57:00
超级好文
作者: ZERX (I am from Taiwan!!)   2016-03-14 10:14:00
感谢科普!!!!

Links booklink

Contact Us: admin [ a t ] ucptt.com