最新公告
  • 欢迎您光临欧资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • AlphaGoZero需要依赖人类专家的游戏数据库了吗?|大数据

    大数据文摘作品

    编译:叶一、Chloe、彭向伟、钱天培

    2016 年 3 月,Deepmind 开发的 AlphaGo 以 4:1 击败 18 届世界围棋冠军李世石。超过2亿观众见证了这一历史性时刻。机器学习了一种优于人类的围棋策略。这以前被认为是一项不可能完成的任务,或者至少需要十年的努力。

    AlphaGo 与李世石的第三场比赛

    这是一项了不起的成就。然而,2017 年 10 月 18 日,DeepMind 又取得了突破。

    这篇名为《在没有人类知识的情况下掌握围棋游戏》的论文揭示了一种新算法 AlphaGo Zero,它以惊人的 100:0 击败了 AlphaGo。更让人匪夷所思的是,它从零开始,通过自我博弈,逐渐学会了击败之前的策略。至此,开发超级AI不再需要依赖人类专家的游戏数据库。

    仅仅 48 天后,也就是 2017 年 12 月 5 日,DeepMind 发布了另一篇论文,“Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm”。),它展示了 AlphaGo Zero 如何学习国际象棋(StockFish 和 Elmo)和国际象棋。整个学习过程,从第一次玩游戏到成为世界上最强大的计算机程序,只用了 24 小时。

    就这样,AlphaZero 华丽的诞生了——它可以通过通用的算法完成快速的自我升级,而不需要存储任何人类棋谱。

    这项成就最令人惊讶的有两点:

    AlphaZero 根本不需要人类的游戏体验

    这一点的重要性怎么强调都不为过。也就是说,对于任何消息灵通的游戏(双方对手都完全控制了游戏状态),AlphaGo Zero 的方法论可以完美应用!因为除了游戏规则之外,人类不需要任何游戏经验。

    AlphaGo Zero 的基本方法可以应用于任何具有完全信息的游戏(游戏状态在任何时候都为双方玩家完全了解),因为在游戏规则之外不需要先验专家知识。

    这就是 DeepMind 在发表 AlphaGo Zero 论文 48 天后发表第二篇论文的方式。毫不夸张地说,需要改变的只是新的游戏规则以及与神经网络和蒙特卡洛树搜索相关的超参数。

    这个算法的优雅秒杀众生

    尽管 AlphaZero 使用了世界上很少有人能理解的超复杂算法,但它仍然是一项了不起的成就。与它相比,之前的算法并没有太复杂而无法生存换到代码参数打开,这才是它真正的魅力所在。其核心无非就是以下极简优美的学习逻辑:

    集思广益,选择能够获胜的道路,思考他人的反应,不断探索未知。

    在考虑可能的未来情景时,优先考虑有希望的路径,同时考虑其他人最有可能如何回应您的行为,并继续探索未知领域。

    遇到一个不熟悉的情况,评估它的风险,并将它与之前让你走到这一步的场景进行比较。

    用尽你对未来的想象力,并使用你尝试过的最多的技巧来应对它。

    在你考虑了未来的可能性之后,采取你已经探索过的行动。

    在游戏结束时,回头看看你犯错的地方,然后清理并刷新你的想法。

    在游戏结束时,返回并评估您错误判断未来位置的地方并相应地更新您的理解。

    这听起来不像你学习玩游戏的方式吗?当你走错一步时,要么是因为你误判了这一步的后果,要么是你误判了对手可能会做什么。这两点正是 AlphaZero 学会如何玩这个游戏的。

    如何构建自己的 AlphaZero

    首先,我们需要学习和理解 AlphaGo Zero 的原理。之前写过AlphaGo Zero的知识点快速参考手册:

    Tim Wheeler 博客中的一篇文章也很详细:

    代码

    基于以下代码库进行说明:

    首先在 Jupyter 笔记本中运行 run.ipynb 的前两个面板。一旦它完成了足够多的游戏回合,神经网络就会开始训练。通过后续的自我对战和训练,它会逐渐在预测胜率和下一步动作方面变得越来越好,从而做出更好的决策。

    现在,我们需要更详细地查看我们面前的代码,并展示 AI 如何随着时间的推移变得更好。

    四个儿子(连接4)

    我们的算法将学习如何玩这个游戏。虽然没有围棋那么复杂,但也有 4531985219092 个棋步。

    连续四个儿子

    游戏规则很简单。玩家轮流将他们的颜色放在任何列的顶部。第一个在垂直、水平或对角线上放置一排相同颜色的棋子的玩家获胜,如果没有发生这种情况,则游戏为平局。

    以下是构成代码库的关键文件:

    game.py – 此文件包含连续四场比赛的规则

    每个方块被分配一个从 0 到 41 的数字,如下图所示:

    game.py 文件给出了从一种游戏状态到另一种游戏状态的逻辑,并提供了动作选择。例如,给定空棋盘和动作编号 38,takeAction 方法返回到新的游戏状态,即底行的中心。

    您可以将game.py文件替换为任何符合相同API和算法的游戏文件,并按照您给它的规则自学。

    run.ipynb – 此文件包含启动学习过程的代码

    它通过算法中的主环节加载游戏规则,由三个阶段组成:

    1、与自己对战

    2、重新训练神经网络

    3、评估神经网络

    此会话还涉及两个代理,它们是 best_player 和 current_player。

    best_player 包含性能最好的神经网络,可用于生成自我游戏记忆。然后,current_player 在与 best_player 比赛之前,根据这些记忆重新训练其神经网络。如果获胜,则将 best_player 内的神经网络转换为 current_player 内的神经网络,并重新开始循环。

    agent.Py – 此文件包含游戏中的玩家代理类

    在游戏中换到代码参数打开,每个玩家都使用自己的神经网络和蒙特卡罗搜索树进行初始化。

    我们需要以模拟的方式运行蒙特卡洛树搜索过程。具体来说,代理移动到树的一个叶节点,用其神经网络评估该节点,并通过树返回该节点的值。

    之后,我们还需要用 act 方法重复模拟几次,让智能体从当前位置了解最有利的移动。然后它将最终选择的动作返回给游戏以执行该动作。

    换到代码参数打开_硬盘无法打开 参数错误_打开exe提示参数错误

    最后,重播方法使用以前游戏的记忆来重新训练神经网络。

    model.py – 这个文件包含了residual_cnn 类,它定义了如何构建神经网络的实例

    使用 Keras 构建残差卷积网络的示例

    它使用了 AlphaGoZero 论文中神经网络结构的浓缩版本——即一个卷积层,然后是多个残差层,然后拆分为一个数字和指挥中心。

    卷积滤波器的深度和数量可以在配置文件中指定。

    Keras 库用于在后台构建一个带有 tensorflow 的网络。

    要查看具有卷积滤波器和密集连接层的单个神经网络,请在 run.ipynb 笔记本中运行以下代码:

    current_player.model.viewLayers()

    神经网络中的卷积核

    MCTS.py – 该文件包含构成蒙特卡洛树搜索的 Node、Edge 和 MCTS 类

    MCTS 类包含前面提到的 moveToLeaf 和 backFill 方法,Edge 类的一个实例存储有关每个潜在移动的统计信息。

    config.py – 这是您设置影响算法的关键参数的地方

    调整这些变量会影响运行时间、神经网络的准确性以及整个算法的成功。上述参数产生了一个高质量的四人组球员,但这样做需要很长时间。要加快算法速度,请尝试以下参数。

    funcs.py – 包含 playMatches 和 playMatchesBetweenVersions 函数,可以在两个代理之间进行比赛

    如果你想挑战之前创建的智能算法,可以运行以下代码(在 run.ipynb notebook 中)

    from game import Gamefrom funcs import playMatchesBetweenVersions import loggers as lgenv = Game()playMatchesBetweenVersions(env, 1 #电脑玩家所在的运行版本号,-1 #第一个玩家的版本号(-1代表人类),12 # 第二个玩家的版本号(-1 人类),10 # 玩多少场比赛,lg.logger_tourney # 将游戏记录到哪里,0 # 先去哪个玩家 – 0 表示随机)

    initialise.py – 运行算法时,所有模型和存储文件都存储在运行文件夹的根目录中

    要稍后从该检查点重新运行算法,请将运行文件夹传输到 run_archive 文件夹并将运行编号附加到文件夹名称中。然后在initialise.py文件中输入运行号、型号版本号、内存版本号,对应run_archive文件夹中相关文件的位置。像往常一样运行算法并从这个检查点开始。

    内存.py

    Memory 类的一个实例存储以前游戏的记忆,该算法用于重新训练 current_player 的神经网络。

    损失.py

    该文件包含一个自定义损失函数,该函数在传递给交叉熵损失函数之前屏蔽非法移动的预测。

    设置.py

    run 和 run_archive 文件夹的位置。

    记录器.py

    日志文件保存在运行文件夹内的日志文件夹中。

    要打开日志记录,请在此文件中将 logger_disabled 变量的值设置为 False。

    查看日志文件将帮助您了解算法的工作原理并了解其“思维”。例如,这里是 logger.mcts 文件中的一个示例。

    logger.mcts 文件的输出

    同样从 logger.tourney 文件中,您可以看到评估阶段每一步的概率:

    logger.tourney 文件的输出

    训练结果惊人

    经过几天的训练,得到如下小批量迭代次数与损失图:

    小批量迭代次数与损失的关系图

    第一行是策略标头中的错误(MCTS 移动概率的交叉熵,相对于神经网络的输出)。底线是值标题(实际游戏值和神经网络预测之间的均方误差)。中间的线是两者的平均值。

    显然,神经网络在预测每个游戏状态的价值和可能的下一步行动方面做得越来越好。为了说明这个结果如何变得越来越强大,我让 17 名参与者组成了一个联盟,从神经网络的第 1 次迭代到第 49 次。每组比赛两次,两名球员都有机会先比赛。

    以下是最终排名:

    显然,最新版本的神经网络优于早期版本,并赢得了大部分比赛。这似乎也表明学习过程并没有达到极限——随着训练时间的进一步延长,玩家会不断变得更强,学习越来越复杂的策略。

    例如,随着时间的推移,神经网络会选择较早占据中间列的策略。观察算法第一版和第三十版的区别:

    第一个神经网络版本

    三十个神经网络样本

    这是一个很好的策略,因为许多车道都需要中间排 – 及早占领这一排可确保您的对手无法利用这一点。神经网络在没有人类指导的情况下学会了这一点。

    学习其他游戏

    在游戏文件中有一个名为“Metasquares”的 game.py 文件。X 和 O 用于形成不同大小的正方形。更大的方块意味着更多的棋子被丢弃,当棋盘已满时,拥有最多棋子的一方获胜。

    如果将 Connect4 的 game.py 文件替换为 Metasquares 的 game.py 文件,将使用相同的算法来学习玩 Metasquares。

    快来亲自试试吧!

    站内大部分资源收集于网络,若侵犯了您的合法权益,请联系我们删除!
    欧资源网 » AlphaGoZero需要依赖人类专家的游戏数据库了吗?|大数据

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    欧资源网
    一个高级程序员模板开发平台

    发表评论