本篇文章4238字,读完约11分钟
2016年3月,深度思维的阿尔法围棋以4-1击败了18次围棋世界冠军李世石,吸引了全球2亿多观众。机器学习围棋的策略,打败顶尖的人类高手,这在过去被认为是不可能的壮举,或者至少在十年后才被认为是不可能的。
阿尔法戈队在第三盘迎战李世石队
这本身就是一个历史性的时刻。但是在2017年10月18日,深度思维迈出了又一大步。
在论文《掌握围棋却没有人类知识》中,deepmind宣布了一种新的算法变体,即alphago zero,它可以用100-0的分数来滥用alphago。令人难以置信的是,阿尔法戈零号完全通过自学掌握了围棋技能,也就是说,他从白板开始,通过战胜自己来学习。通过这种方式,超人人工智能可以在没有人类围棋专家提供的数据库的情况下成为现实。
仅仅48天后,deepmind在2017年12月5日发表了另一篇题为“通过自我强化学习算法掌握国际象棋和国际象棋”的论文,展示了alphago zero如何在国际象棋和国际象棋中分别击败了实力最强的程序stockfish和elmo。更可怕的是,从一无所知到成为世界上最强的象棋程序只花了24小时。
凭借如此强大的力量,阿尔法零号正式诞生了。这种通用算法可以快速建立适合特定目标的通用解,而无需使用人工专家策略作为知识库。
这一成就值得称赞的主要原因有两个:1 .阿尔法零号不采用人类专家策略作为输入的能力怎么强调都不为过。这意味着alphago zero的基本方法可以适应任何具有完美信息的游戏(也就是说,游戏双方可以在任何时候知道全部信息),也就是说,除了游戏规则之外,不需要事先提供专业指导。
正因为如此,deepmind能够在最初的alphago零纸发布后48天发布象棋和象棋游戏的版本。毫不夸张地说,我们所需要做的就是转换用来描述游戏机制的输入文件,同时调整与神经网络和蒙特卡罗树搜索相关的超参数。
2.这个算法非常优雅。如果世界上只有少数人能理解阿尔法零号使用的超复杂算法,它不会影响这一杰出的成就。更值得称道的是,它的核心其实相当简单,甚至可以概括如下:
通过潜在的未来场景设计游戏思维,优先考虑更有前途的方式,考虑对方可能的反应行为,并继续探索未知。
在达到一个奇怪的状态后,评估对当前主导地位的信心,并用以前的思维方式来映射分数,以达到当前状态。
在思考了未来的可能性之后,采取探索程度最高的行动。
在游戏结束时,回去评估所有错误的未来头寸价值评估,并相应地更新你自己的理解。
这听起来像是我们每个人玩游戏时的学习过程,对吗?当做出错误的判断时,很可能我们没有准确把握我们所占据位置的未来价值,或者错误判断了对手执行某些操作的可能性,所以我们错过了抓住机会的机会。这是学习和训练阿尔法零游戏的两个基础。
如何建立自己的阿尔法零在今天的文章中,我将尝试探索以下三个内容:
1.阿尔法零号标志着人工智能发展的一大步的两个原因。
2.如何再现阿尔法零法掌握connect4游戏?
3.如何调整代码以适应其他游戏。
首先,查看阿尔法零号备忘录清单,更深入地了解阿尔法零号是如何工作的。显然,我们有必要遍历代码中的所有组件。
代码克隆这个git库,它包含我引用的代码。
要开始整个学习过程,首先运行run.ipyng jupyter记事本的前两面。在建立了足够的游戏位置来填满自己的记忆后,神经网络就可以开始训练了。通过更多的自我对抗和训练,将能够慢慢提高游戏价值和判断后续潜在位置移动的能力,从而做出更好的决策,获得更强的游戏水平。
现在我们将看看具体的代码内容,并展示一些结果来证明随着时间的推移,人工智能变得越来越强大。
备注只是我个人对阿尔法零号工作原理的理解,主要是基于上述论文的内容。如果下面有任何错误,我真诚地向你道歉,希望你能改正!
连接4在这个例子中,我们的算法将学习如何玩连接4游戏(或连续四个游戏)。它的复杂性无法与围棋相比,但它仍然包含总共4531985219092个游戏位置。
游戏规则非常简单。玩家轮流将自己的彩色棋子放在可用的位置,第一个将自己的四个棋子连接成一排的玩家垂直、水平或倾斜获胜。如果整个棋盘已满,但仍有四行,则游戏结束。
让我们看一下组成代码库的关键文件的摘要:
这个文件包含了连接4个游戏的基本规则。
每个正方形被分配一个从0到41的数字,如下所示:
Connect4移动盒
Game.py文件提供了游戏状态之间的转换逻辑,并给出了可选的动作范围。例如,如果它是空棋盘,并且棋子被放置在位置38,则takeaction方法将返回到新的游戏状态,并且开始的玩家在中心列的底部。
你可以用任何具有相同api的游戏文件来代替game.py,算法会根据你提供的规则自动学习,逐渐掌握游戏策略。
Run.ipynb此文件包含启动学习过程的相关代码。它将载入游戏规则,然后迭代通过主算法循环,该循环分为以下三个阶段:
1.自我对抗
2.重新训练神经网络
3.评估神经网络
这个循环涉及两个代理,即最佳玩家和当前玩家。
其中,best_player包含性能最佳的神经网络,用于生成自我对抗记忆。当前玩家将根据记忆重新训练其神经网络,然后做出最佳选择。如果你赢了,best_player中的神经网络将被切换到current_player中的神经网络,然后循环将再次开始。
这个文件包含代理类(游戏中的一个玩家)。每个玩家将使用自己的神经网络和蒙特卡罗树来初始化。
其中模拟方法运行蒙特卡罗树搜索过程。具体来说,代理移动到该对的叶节点,用其神经网络评估该节点,然后通过树回填该节点的值。
act方法多次重复模拟,以了解当前哪个位置是最佳动作。之后,它会将选择的动作返回到游戏中,并实际执行它。
最后,重放方法负责通过使用原始游戏记忆来重新训练神经网络。
这个文件包含残差类,它负责定义如何建立神经网络实例。
它使用alphago zero论文中提到的神经网络体系结构的缩写,即卷积层,然后是大量剩余的层,这些层最终被分成值和策略头。
每个卷积滤波器的深度和数量可以在配置文件中指定。
Keras库负责构建网络,tensorflow作为后端。
要查看该神经网络中的独立卷积滤波器和密集连接层,请在run.ipyng记事本中运行以下命令:
current _ player . model . view layers()
神经网络中的卷积滤波器
Mcts.py包含节点、边和Mcts类,它们共同构成了蒙特卡罗搜索树。
mcts类包含前面提到的movetoleaf和回填方法,edge类的每个实例存储与每个潜在移动相关的统计信息。
在这个文件中,你可以设置影响算法的关键参数。
调整上述变量将影响运行时间、神经网络的精度和算法的整体成功率。上述参数可以产生高质量的connect4播放器,但需要很长时间来学习。要加快算法速度,请尝试使用以下参数。
这个文件包含玩伴和玩伴之间的版本函数,它们负责两个代理之间的对抗。
要对抗自己,请运行以下代码(也位于run.ipynb记事本中):
从游戏导入游戏
从funcs importgaychessbetweversions
将记录器作为lg导入
env =游戏()
玩伴版本(
env
,1#电脑播放器的运行版本号
,-1 #第一个玩家版本号(-1是人类)
,第二个玩家的12 #版本号(-1是人类)
,10 #要玩多少游戏
,lg.logger_tourney #游戏日志记录位置
0#哪个玩家先开始,-0是随机的
(
运行算法时,所有模型和内存文件将保存在根目录下的运行文件夹中。
如果以后需要从此检查点重新启动算法,请将运行文件夹移动到run_archive文件夹,并将运行号添加到文件夹名称中。接下来,在initialise.py文件中输入运行号、型号版本号和内存版本号,与run_archive文件夹中相关文件的位置相对应。这样,在像往常一样运行算法之后,您可以从这个检查点开始。
memory.py记忆类的一个例子是用来存储过去游戏的记忆,以便算法重新训练当前的pkayer神经网络。
该文件包含一个自定义损失函数,在将预测结果发送到交叉熵损失函数之前,它会模糊预测结果,从而避免非法移动。
设置的位置。复制运行和运行存档文件夹。
日志文件保存在运行文件夹的日志文件夹中。
要开始日志记录,请在文件中将logger_disabled变量的值设置为false。
查看日志文件将有助于我们了解算法的工作状态并掌握其思想。例如,下面是一个示例logger.mcts文件。
logger.mcts文件的输出
在logger.tourney中,您可以看到评估阶段每个动作的具体可能性:
logger.tourney文件的输出
结果经过几天的培训,以下是小批量迭代后生成的图表:
小批量迭代中的损失
第一个行为策略头中的错误(MCT移动可能性中的交叉熵,用于神经网络的输出结果)。最低的一行是值头的误差(实际游戏值和神经网络预测值之间的均方误差)。中间的线是两者的平均值。
显然,神经网络在预测每个游戏状态值和潜在的下一个动作方面越来越好。为了展示这个结果的改进过程,我从第一次迭代到第49次迭代选择了17个玩家组成一个联盟。每位选手比赛两次,并有权开始一次。
以下是最终排名:
显然,新版本的神经网络比原来的版本更好,赢得了大多数比赛。此外,学习似乎并不饱和。随着训练时间的进一步延长,他们的游戏水平变得更强,他们可以学习越来越复杂的策略。
例如,神经网络在学习过程中发现的第一个显式策略是尽快抓住中心列。观察算法的原始版本和第30次迭代版本之间的差异,我们可以发现:
神经网络的原始版本
神经网络的第30个迭代版本
这是一个很好的策略,因为大部分的四排安排都需要经过中间一排,所以有必要尽快防止对手利用这一点。神经网络在没有任何人工输入的情况下发现了这条规则。
在“游戏”文件夹中有一个游戏. py文件,用于学习其他游戏。它的基本规则是在网格中画出X和O,尽可能形成不同大小的正方形。正方形面积越大,分数越高。当格子满了,得分最高的玩家获胜。
如果您将connect4 game.py文件切换到metasquares game.py文件,您可以通过相同的算法学习如何玩metasquare游戏。
来源:中等
作者:大卫·福斯特
汇编:技术行者
来源:搜狐微门户
标题:DeepMind公布官方教程,开始创建自己的AlphaZero AI吧
地址:http://www.shwmhw.com/shxw/46573.html