三千年围棋只用三天走过 最简洁的AlphaGo最美
本文来源:知乎 作者:不会功夫的潘达
在2017年10月19日DeepMind发布了其最新成果AlphaGo zero, 该算法不再需要学习人类棋手的下法,而直接采用自对弈进行训练。AlphaGo zero在训练效率与最终表现上相比之前都有了非常大的进步……
我读着新论文,对比前一个版本的论文(即AlphaGo Fan版本)。直观感受如下:
旧版AlphaGo:
策略网络和价值网络,结构和功能很接近啊,为什么不合并成一个呢?
为什么要用专家的棋谱作为初始训练样本?从一张白纸开始训练岂不是更具有普遍性?
快速走子是什么鬼?只用价值网络评估不是更有效率吗?
为什么要输入围棋知识?AlphaGo的强化学习过程难道学不到这些知识吗?
旧版的AlphaGo,虽然神功小成,但斧凿痕迹显著。好似一只机器人女友,虽有绝色容颜,却长着机械手、声音冷如谷歌娘(误)。理想的围棋人工智能,应该是简洁、优雅、浑然天成,就像死宅们的老婆新垣结衣一样(大雾)。
而新版的AlphaGo,真的造出了栩栩如生的Gakki(误)。
具体地说,AlphaGo Zero相比于初代AlphaGo,有以下几点改进:
1、将策略网络和价值网络合并,组成一个可以同时输出策略p和价值v的新网络。
1.1、简化了新网络的结构。新策略·价值网络的输入特征平面由48个减少到了17个。其中,涉及围棋知识的输入特征(气(liberty)、征子(ladder))被删去。
2、新策略·价值网络只需通过强化学习来训练,无需监督学习。即无需输入人类高手棋谱作为初始训练样本,只需用随机落子作为初始训练样本。
3、优化了蒙特卡洛搜索树,主要是省去了快速走子(rollout policy),节约大量实战计算成本。
3.1、 快速走子策略也需要输入大量人类已知的围棋知识,比如如何点死大眼(Nakade, 如点死直三、丁四、刀把五等棋型的唯一招法)。省去快速走子,也就省去了输入这些知识的麻烦。
4、改卷积网络为残差网络,提高训练效率。
留下的,是一个从零开始训练的神经网络,以及用简单到不能再简单的MCTS算法行棋的AlphaGo Zero。
知易行难。这些改进貌似不难想到,是因为AlphaGo Zero本来就是研究者理想中的女神。而初版AlphaGo不够女神,不是因为研究者不想,而是暂时做不到。举个例子,AlphaGo Fan版本中,神经网络的输入由48个特征平面构成。其中两个平面分别表示,某一步棋是否是成功的征子,和某一步棋是否是成功的逃征子。
这是征子的基本图。白1逃跑,黑2、4以下分别从两侧叫吃白棋,使白方始终只有一口气。一直追到棋盘尽头,白方最终无路可逃。黑棋大获全胜。
征子是围棋的基本知识,初学者在前两三节课就会学到。但实战的征子可以非常复杂,甚至搞晕职业棋手。
这张图来自职业棋谱,赵善津胜王铭琬。注意,白棋中央一大坨已经被征死了。白方看错了引征,招致全盘皆输。
征子也能搞晕神经网络。我刚才在某计算机围棋的讨论区看到Joona Kiiski网友的观点,和大家分享一下:
- The learning was based on self-play。 Understanding ladders is perhaps not so important if your opponent doesn‘t understand them either。。。 Every time a decisive ladder appears on the board, the result is practically a coin toss。- And as others have pointed out, unlike almost all other go features, ladders are not at all a local feature。 The features need to build up through a huge number of convolution layers, before it works。 And it’s difficult to build this understanding incrementally (unlike e.g。 life & death where you can start with simple cases and then move to more difficult cases), so we lack bias to direct the learning to the right direction。
大意如下:
和绝大部分围棋的特征(比如死活、官子、定式等)不同,征子完全不是局部特征,而是全局特征。这就意味着,在神经网络能正确处理征子之前,征子的特征需要通过大量卷积层来慢慢建立。这会给神经网络的训练带来潜在的麻烦。
更要命的是,在征子上一旦出现失误,大胜的棋局会直接变成大败。
据此可以推测,征子的这些麻烦特性,使得初代AlphaGo不得不把征子作为输入神经网络的特征之一。(另一个软件Zen,即使和初代AlphaGo做了类似的处理,实战的征子依然会偶尔出错,被人类棋手逆袭了好多盘。)
AlphaGo Zero的神经网络,大胆省去了征子特征的输入。细细品味训练过程,略微吃惊:神经网络直到训练的(相对)后期才学会征子。
如果对局双方(黑AlphaGo-白AlphaGo)都不懂征子,那么总体结果也不会差太多吧。每个征子的结果就好像投硬币一样随机,总的胜负加起来差不多是零(大误)。
或许是开发团队好运,更有可能是反复尝试以后才成功。总之,在征子上,AlphaGo Zero涉险过关。
同理,分拆策略、价值网络,以及采用快速走子,是旧版AlphaGo的暂时妥协,而在新版终于得以解决。
DeepMind,及其母公司谷歌的终极目标不是破解围棋,而是造出通用人工智能。通用智能不需要额外专业知识。AlphaGo Zero在无围棋知识输入的前提下达到如此高度,可以说离通用智能又近了一步。
大道至简。对于AlphaGo,最简洁的,就是最美的。
说棋。
摒弃人类棋谱输入,从零(Zero因此得名)开始训练阿尔法狗。去年谷李大战以来,棋迷翘首以盼的“纯净版”阿尔法狗终于问世。
更恐怖的是,Zero经过三天训练就达到AlphaGo Lee的水平 (即去年战胜李世乭的版本,ELO ~3750。对比今日柯洁ELO ~3660。),节约了90%+的时间。见下图。
四十天之后,Zero甚至超越了姐妹版本Master,对Master实现90%胜率。Master和Zero的主要区别是,Master有人类棋谱输入,经历监督学习(SL)而非强化学习(RL)。
我在论文中学到了一句拉丁语,starting tabula rasa, 从一张白纸开始。看Zero的训练过程,就像看一个婴儿成长,妙趣横生。
第三个小时,如同幼儿堆石子。第二十小时,有板有眼。第70小时,复杂局面处理自如,已是顶尖高手。
看AlphaGo学会的定式,更是有趣。A行是AlphaGo在训练过程中学会的人类定式。B行则是在训练的不同阶段,AlphaGo最喜欢的定式。
B行第一个,黑棋下在1,1,显然是卖萌,此时大概是第10个小时。B行第二个,黑星位,白棋外靠(!),黑退,白扳粘的变化。此变化不在人类课本当中,白2略惊悚,直观看也是白棋稍亏。果然,在40小时以后,本定式被无情淘汰(见下图)。
20小时以后此变化出现频率猛增,并一度达到3%,此后缓慢回落,最终稳定在0.5%。这是我曾经最喜欢的定式之一,也是定式书上必介绍的一个基本型。黑地白势,各得其所。
作为对比,点三三的另一变如下:
在五十小时后,黑5飞的频率大增。至70小时,此变频率达0.2%。从最终的自战对弈来看,此变的频率似乎超过了黑5扳(有待查证)。很有意思,AlphaGo对此定式的认识过程和人类有些相似。长久以来,黑5扳都是点三三的标准变化。直到最近十年左右,黑5飞才开始变得频繁起来。由于Master的影响,人类棋手开始频繁点三三,并且把黑5飞作为标准变化。上图的后续只是此定式的一变,在Zero自战谱中还看到了一些微小的改动。
下一个“定式”最有意思。
1-5正常。白6奇思妙想!人类绝少在开局阶段往二路下。白10贴以后,黑棋需要补断,白棋活角。局部尚未定型,得失不明。可惜此变昙花一现,不知AlphaGo是否发现了局部更好的手段。
欣赏一局完全体Zero的棋谱
37-41,潇洒、放肆、不拘一格。状态爆表的一流棋手偶尔也有如此表演,而这对于AlphaGo只是正常操作。
白130。 官子同样滴水不漏。(黑只能在A位接。若在B位吃,白O17即可出棋。白棋点完以后,T17有先手味道。)
Zero的Elo等级分是5000分,人间已无敌手。但其左右互搏仍互有胜负,可见离围棋上帝尚有距离。Zero当为近阶段围棋人工智能的高峰,但尚不是围棋的终点。
于我,AlphaGo Zero还有以下几个悬念:
1、Zero的策略·价值网络是否对所有贴目值都生效,还是只针对7.5目。(论文中未指明)再进一步,AlphaGo Zero心目中的最佳贴目是多少。
2、Zero的官子,特别是小官子阶段,是否会犯错。重点是,有无因为官子失误而被翻盘的棋局。
3、以大贴目为前提,Zero会如何应对白方的模仿棋。
希望明天能在Reddit上得到解答。
三千年的围棋,AlphaGo只用三天走过。谨以《贺新郎·读史》结束本文:
人猿相揖别。只几个石头磨过,小儿时节。铜铁炉中翻火焰,为问何时猜得?不过几千寒热。人世难逢开口笑,上疆场彼此弯弓月。流遍了,郊原血。
一篇读罢头飞雪,但记得斑斑点点,几行陈迹。五帝三皇神圣事,骗了无涯过客。有多少风流人物?盗跖庄屩流誉后,更陈王奋起挥黄钺。歌未竟,东方白。