【转载】AlphaZero实战:从零学下五子棋(附代码)
原文:

相关:
https://github.com/junxiaosong/AlphaZero_Gomoku
2017年10月,AlphaGo Zero横空出世,完全从零开始,仅通过自我对弈就能天下无敌,瞬间刷爆朋友圈,各路大神分分出来解读,惊叹于其思想的简单、效果的神奇。很快就有大神放出了开源版的AlphaGo Zero,但是只有代码,没有训练出来的模型,因为据大神推算,在普通消费级的电脑上想训练出AlphaGo Zero的模型需要1700年!然而DeepMind在AlphaGo Zero的论文里只强调运行的时候需要4个TPU,而完全没有提及训练过程的最大计算需求在于生成self-play数据,还引起了一点小争议。还好,过了不到两个月,在12月初,DeepMind就在Arxiv上低调放出了更加通用的AlphaZero的论文。AlphaZero几个小时就征服围棋、国际象棋和日本将棋的壮举再次惊叹世人,但同时DeepMind大方公开的self-play阶段使用的5000个TPU也让大家纷纷感叹,原来是“贫穷限制了我们的想象力”!
扯得有点远了,让我们回到这篇文章的正题:AlphaZero实战,通过自己动手从零训练一个AI,去体会AlphaZero自我对弈学习成功背后的关键思想和一些重要技术细节。这边选择了五子棋作为实践对象,因为五子棋相对比较简单,大家也都比较熟悉,这样我们能更专注于AlphaZero的训练过程,同时也能通过亲自对阵,来感受自己训练出来的AI慢慢变强的过程。经过实践发现,对于在6*6的棋盘上下4子棋这种情况,大约通过5001000局的self-play训练(2小时),就能训练出比较靠谱的AI;对于在8*8的棋盘上下5子棋这种情况,通过大约20003000局自我对弈训练(2天),也能得到比较靠谱的AI。所以虽然贫穷,但我们还是可以去亲身感受最前沿成果的魅力!完整代码以及4个训练好的模型已经上传到了github:https://github.com/junxiaosong/

每一步棋执行400次MCTS模拟
从上面的对局样例可以看到,AI已经学会了怎么下五子棋,知道什么时候要去堵,怎么样才能赢,按我自己对阵AI的感受来说,要赢AI已经不容易了,经常会打平,有时候稍不留神就会输掉。这里有一点需要说明,上面展示的两局AI对弈中,AI执行每一步棋的时候分别只执行了400次和800次MCTS模拟,进一步增大模拟次数能够显著增强AI的实力,参见AlphaZero论文中的Figure 2(注:AlphaZero在训练的时候每一步只执行800次MCTS simulations,但在评估性能的时候每一步棋都会执行几十万甚至上百万次MCTS模拟)。
下面,我结合AlphaZero算法本身,以及github上的具体实现,从自我对局和策略价值网络训练两个方面来展开介绍一下整个训练过程,以及自己实验过程中的一些观察和体会。
自我对局(self-play)

self-play过程示意图
完全基于self-play来学习进化是AlphaZero的最大卖点,也是整个训练过程中最关键也是最耗时的环节。这里有几个关键点需要说明:
1. 使用哪个模型来生成self-play数据?
在AlphaGo Zero版本中,我们需要同时保存当前最新的模型和通过评估得到的历史最优的模型,self-play数据始终由最优模型生成,用于不断训练更新当前最新的模型,然后每隔一段时间评估当前最新模型和最优模型的优劣,决定是否更新历史最优模型。而到了AlphaZero版本中,这一过程得到简化,我们只保存当前最新模型,self-play数据直接由当前最新模型生成,并用于训练更新自身。直观上我们可能会感觉使用当前最优模型生成的self-play数据可能质量更高,收敛更好,但是在尝试过两种方案之后,我们发现,在6*6棋盘上下4子棋这种情况下,直接使用最新模型生成self-play数据训练的话大约500局之后就能得到比较好的模型了,而不断维护最优模型并由最优模型生成self-play数据的话大约需要1500局之后才能达到类似的效果,这和AlphaZero论文中训练34小时的AlphaZero胜过训练72小时的AlphaGo Zero的结果也是吻合的。个人猜测,不断使用最新模型来生成self-play数据可能也是一个比较有效的exploration手段,首先当前最新模型相比于历史最优模型一般不会差很多,所以对局数据的质量其实也是比较有保证的,同时模型的不断变化使得我们能覆盖到更多典型的数据,从而加快收敛。








另外,在漫长的训练过程中,我们最希望看到的当然是我们训练的AI正在慢慢变强。所以虽然在AlphaZero的算法流程中已经不再需要通过定期评估来更新最优策略,在我们的实现中还是每隔50次self-play对局就对当前的AI模型进行一次评估,评估的方式是使用当前最新的AI模型和纯的MCTS AI(基于随机rollout)对战10局。pure MCTS AI最开始每一步使用1000次模拟,当被我们训练的AI模型10:0打败时,pure MCTS AI就升级到每一步使用2000次模拟,以此类推,不断增强,而我们训练的AlphaZero AI模型每一步始终只使用400次模拟。在上面那次3050局自我对局的训练实验中,我们观察到:
经过550局,AlphaZero VS pure_MCTS 1000 首次达到10:0
经过1300局,AlphaZero VS pure_MCTS 2000 首次达到10:0
经过1750局,AlphaZero VS pure_MCTS 3000 首次达到10:0
经过2450局,AlphaZero VS pure_MCTS 4000 取得8胜1平1负
经过2850局,AlphaZero VS pure_MCTS 4000 取得9胜1负。
OK,到这里整个AlphaZero实战过程就基本介绍完了,感兴趣的小伙伴可以下载我github上的代码进行尝试。为了方便大家直接和已经训练好的模型进行对战体验,我专门实现了一个纯numpy版本的策略价值前向网络,所以只要装了python和numpy就可以直接进行人机对战啦,祝大家玩的愉快!_
参考文献:
-
AlphaZero: Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm
-
AlphaGo Zero: Mastering the game of Go without human knowledge
训练时间大概2个小时多10分钟左右

posted on 2026-03-01 11:05 Angry_Panda 阅读(82) 评论(0) 收藏 举报
浙公网安备 33010602011771号