前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【前沿】用AlphaGo Zero方法实现增强学习下棋

【前沿】用AlphaGo Zero方法实现增强学习下棋

作者头像
WZEARW
发布2018-04-10 18:00:58
1.4K0
发布2018-04-10 18:00:58
举报
文章被收录于专栏:专知专知

【导读】Google DeepMind AlphaGo团队在Nature上发表两篇论文《Mastering the game of Go without Human Knowledge》 和《Mastering the game of Go with deep neural networks and tree search》,这两篇划时代的论文,将成为永恒经典,在第一篇文章中,其介绍了迄今最强最新的版本AlphaGo Zero,不使用人类先验知识,使用纯强化学习,将价值网络和策略网络整合为一个架构,3天训练后就以100比0击败了上一版本的AlphaGo。近期,Samuel Graván使用Keras/TensorFlow实现了用AlphaGo Zero方法实现增强学习下棋,让我们来看下。

▌前言


  • 视频

先看下Google DeepMind 研究人员David Silver介绍 AlphaGo Zero:

视频内容
  • 论文

Mastering the game of Go without Human Knowledge

不使用人类知识

精通围棋!

摘要

长久以来,人工智能的目标是在富有挑战性的领域中学习出一种从无知幼儿到超级专家的算法。最近,AlphaGo成为了在围棋游戏中打败人类世界冠军的第一个程序。其中,AlphaGo对下棋位置的预估和选定下棋位置所使用的树搜索算法使用了神经网络。这些网络利用高段位棋手的走棋通过有监督学习的方式来训练,然后通过自我对弈来完成进行增强学习。本篇论文中我们提出了一种完全独立的增强学习算法,算法不需要人工数据,或是基于游戏规则的引导或领域知识。AlphaGo变成了自己的老师:训练一个神经网络用来完成AlphaGo的落子预测和对弈的赢家。这个网络同时还提高了树搜索的能力,带来的结果就是能够在下一手中有更高质量的落子选择和更强的自我对弈能力。从无知幼儿开始,我们新的程序—AlphaGo Zero达到了超级专家的水平,在与之前开发的AlphaGo(指代和李世石对弈的AlphaGo)的对弈中,取得了100-0的完胜。

▌Github实现代码


用AlphaGo Zero方法实现增强学习下棋

关于 (Keras/TensorFlow)

用AlphaGo Zero方法实现增强学习下棋

本工程主要基于下面两项研究:

  1. DeepMind的10月19号的期刊:Mastering the Game of Go without Human Knowledge
  2. @mokemokechicken在他的repo中做的对DeepMind想法的扩展: https://github.com/mokemokechicken/reversi-alpha-zero

注:该项目仍在建设中!!

环境

  • Python 3.6.3
  • tensorflow-gpu: 1.3.0
  • Keras: 2.0.8

模块

强化学习

AlphaGo Zero接口的实现包含三个变量 self , opt , eval.

  • self 是通过使用最佳模型(BestModel)自我生成训练数据。
  • opt 是训练模型的训练器(Trainer ),并生成下一代模型。
  • eval 是评估器(Evaluator )评估下一代模型是否比BestModel好。如果更好,则替换BestModel。

评估

  • 在评估阶段,你可以用最佳模型(BestModel)下象棋。

数据

  • data/model/model_best_*: BestModel(最佳模型).
  • data/model/next_generation/*: next-generation models.(下一代模型)
  • data/play_data/play_*.json: generated training data(生成的训练数据).
  • logs/main.log: log file(日志文件).

如果你想从一开始就自己训练模型,就删除上面的目录。

如何使用

安装:

安装库: pip install -r requirements.txt

如果想使用GPU,用下面的语句: pip install tensorflow-gpu

设置环境变量: 创建 .env 文件, 并写文件如下: KERAS_BACKEND=tensorflow

基本用法

对于训练模型,执行Self-Play, Trainer 和 Evaluator

Self-Play

python src/chess_zero/run.py self 当执行上述语句时,Self-Play将开始使用最佳模式。如果最好的模型不存在,那么将创建新的随机模型作为最好的模型。

选项设置

  • --new: 创建新的最佳模型(BestModel)
  • --type mini: 为测试使用最小配置 (see src/chess_zero/configs/mini.py)

Trainer

python src/chess_zero/run.py opt

当执行训练器的时候,则开始训练。将从最新保存的下一代模型加在基础模型。如果不存在,则使用最佳模型。训练模型每隔2000次迭代(mini-batch)保存一次。

Trainer 选项设置

  • --type mini: 使用最小配置进行测试。( src/chess_zero/configs/mini.py)
  • --total-step: 指定mini-batch总数。mini-batch会影响模型训练的学习速度。

Evaluator

python src/chess_zero/run.py eval

在执行时,评估开始。在进行到200次时,评估BestModel和最近一次的模型。如果下一代模型获胜, 下一代模型就当作BestModel。

Play Game

python src/chess_zero/run.py play_gui

当执行的时候,普通国际象棋棋盘将会显示在ASCII码中,你可以与最好的模型(BestModel)下棋。

技巧和备忘录

GPU 内存

通常情况下,会有内存不足引起的警告,而不是错误。如果发生了错误, 可以尝试改变 src/worker/{evaluate.py,optimize.py,self_play.py}中的 per_process_gpu_memory_fraction 如下语句:

tf_util.set_session_config(per_process_gpu_memory_fraction=0.2)

较少的batch_size 将会减少opt的内存使用,尝试改变NormalConfig中的TrainerConfig #batch_size。

模型性能

下表是最好的模型的记录。

参考文献

文章链接:https://www.nature.com/articles/nature24270

Github代码:https://github.com/Zeta36/chess-alpha-zero

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 专知 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 摘要
    • 用AlphaGo Zero方法实现增强学习下棋
      • 关于 (Keras/TensorFlow)
        • 环境
          • 模块
            • 强化学习
            • 评估
          • 数据
            • 如何使用
              • 安装:
                • 基本用法
                  • Self-Play
                    • Trainer
                      • Evaluator
                        • Play Game
                          • 技巧和备忘录
                            • GPU 内存
                              • 模型性能
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档