雷锋网按:Petr Baudis是捷克布拉格技术大学的一名博士生,他也是创业公司Rossum.ai的创始人。近日,Petr在Medium上发表了一篇博客,结合自己在强化学习方面的研究以及在围棋方面的应用讲述了如何按AlphaGo Zero的原理打造自己的AlphaGo Zero,以下则是由雷锋网整理的相关内容:
多年来,我一直聚焦于强化学习领域——尤其在让计算机玩围棋的棋盘游戏领域。我之前就被这个游戏迷住了,它被认为是我们最终可以解决、但又是最棘手的挑战之一。
我当时编写了当时最强大的开源程序Pachi,后来又发布了一个演示性程序Michi(这是一个简约的围棋蒙特卡洛搜索引擎,仅有550行Python代码)。几个月后,Google DeepMind宣布了他们的AlphaGo程序在神经网络应用方面取得的重大突破(雷锋网按:即AlphaGo战胜欧洲冠军樊麾);同时我也将神经网络的研究应用在了自然语言处理领域上。
DeepMind的AlphaGo Zero在一个月前再次引爆了了人工智能社区——这一次,他们的神经网络能够在没有人类的知识(监督学习或手工数据)的情况下从头开始完全学习,所需要的计算量也更少。正如DeepMind在其博客中所说:
“无需人类知识即可精通围棋游戏”
人工智能的一个长期目标是通过后天的自主学习(雷锋网注:tabula rasa,意为“白板”,指所有的知识都是逐渐从他们的感官和经验而来),在一个具有挑战性的领域创造出超越人类的精通程度学习的算法。此前,AlphaGo成为首个战胜人类围棋世界冠军的程序......我们将介绍一种仅基于强化学习的算法,而不使用人类的数据、指导或规则以外的领域知识。AlphaGo成为自己的老师,这一神经网络被训练用于预测AlphaGo自己的落子选择,提高了树搜索的强度,使得落子质量更高,具有更强的自我对弈迭代能力。从一块白板开始,我们的新程序AlphaGo Zero表现惊人,并以100:0击败了此前版本的AlphaGo。
当天晚上我很兴奋地阅读了这篇发表在《Nature》上的论文。结合我将神经网络应用于围棋AI的经验,我可以很快了解AlphaGo Zero的原理,其算法比之前的AlphaGo更简单,其神经网络训练的循环也更精致,我很快对Nochi进行了调整,当我凌晨5点终于睡下时,新版本的Nochi围棋程序已经在Rossum的GPU集群中开始训练了。
AlphaGo Zero的原理很简单:一个单一的、可以同时评估位置并建议接下来的走法的神经网络,而通过经典的蒙特卡罗树搜索算法可以构建游戏走法树,探索变化及找到应手——只有在这种情况下,它只使用神经网络,而不是进行随机的游戏模拟(而之前所有强大的围棋程序都是如此)。
AlphaGo从一个完全随机、只能进行混沌的预测的神经网络开始,在一次又一次地迭代中自我对弈。神经网络可以根据预测正确或错误的结果来进行训练并建立强化学习策略,随着时间的推移从混沌中形成自己的规则。
通过这样的“第一原则”进行学习并达到超过人类水平的做法实际上要比原来的AlphaGo快得多,这真是太神奇了。同时令人惊讶的是,所发现的策略实际上与人类数千年来的发展非常相似——这也说明我们的做法是正确的!
如果将AlphaGo与AlphaGo Zero进行比较时,很容易发现AlphaGo Zero的三大主要进展:
不要基于人类游戏的游戏记录进行训练。
用一个简单的神经网络代替之前AlphaGo中使用的两个神经网络的复杂联锁。
在围棋局势评估的卷积神经网络中使用剩余单元(ResNet-like)。
用于图像识别的深度残差学习(arxiv)
最后我有一个一般性建议:如果您使用Pre-ResNet的卷积神经网络进行视觉任务,请考虑升级精度是否重要!在Rossum,我们持续看到所有这些工作的准确性都有所提高,AlphaGo团队也是如此。
在这个用Python写的围棋程序Michi中包含了围棋规则的实现,蒙特克洛树搜索算法和用于评估的随机游戏模拟。这是理想的状况 —— 只需用基于Keras的神经网络来代替随机游戏模拟,并为程序添加一个“自我演奏”训练循环即可(当然,把它写出来只花了一个晚上,但这并不是说我们在接下来的几个星期里没有进行过调试...)
但还有一个问题:尽管AlphaGo Zero比老款Alphago要求低得多,但按常规硬件手段,运行相同的设置仍然需要1700 GPU年的训练时间。 (考虑一下Google的计算能力,以及他们用TPU所做的加速)。因此,我们做了相应的简化,我们不是使用全尺寸的19x19板,而是仅在最小的灵敏板7x7上训练Nochi 。
同时我们还对原始方法进行了调整:基于我们在Rossum的实践,我们稍微修改了神经网络的架构,以及采用了一个更激进的训练过程,确保自我游戏期间的神经网络尽快收敛,使得Nochi成为第一个达到GNU Go基准水平的AlphaGo复现版本(GNU Go是一个经典的中级程序,通常用于其他算法的基准测试)。另外,Nochi的水平随着每次移动所的分配时间提高而得到提高,这表明神经网络不仅仅记住了游戏,而且学会了概括和计算抽象策略。
下面说重点。Nochi已经在GitHub上开源,而且仍然是一个任何人易于上手学习的小型Python程序。目前我们正在进行其他复制AlphaGo Zero的其他成功工作,例如 Leela Zero和Odin Zero。毕竟,我们还需要一个任何人都可以安装和学习的、超人类的围棋软件,尽管我们主业是在文档处理(我们的愿望是消除所有的手动数据输入)上,我们将视其作为我们一项可以长期发展的衍生成果进行更新。
关于AlphaGo和Nochi的更多信息,可关注以下链接:
DeepMind最新的《Nature》论文及AlphaGO Zero Cheat Sheet(原理表单)
我在Machine Learning Meetup上演讲的PPT以及相关视频(见下)