用AlphaGo Zero方法实现增强学习下棋
本工程主要基于下面两项研究:
注:该项目仍在构建中!!
AlphaGo Zero接口的实现包含三个变量 self , opt , eval.
如果你想从一开始就自己训练模型,就删除上面的目录。
安装库: pip install -r requirements.txt
如果想使用GPU,用下面的语句: pip install tensorflow-gpu
设置环境变量: 创建 .env 文件, 并写文件如下: KERAS_BACKEND=tensorflow
对于训练模型,执行Self-Play, Trainer 和 Evaluator
python src/chess_zero/run.py self 当执行上述语句时,Self-Play将开始使用最佳模式。如果最好的模型不存在,那么将创建新的随机模型作为最好的模型。
选项设置
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会影响模型训练的学习速度。
python src/chess_zero/run.py eval
在执行时,评估开始。在进行到200次时,评估BestModel和最近一次的模型。如果下一代模型获胜, 下一代模型就当作BestModel。
python src/chess_zero/run.py play_gui
当执行的时候,普通国际象棋棋盘将会显示在ASCII码中,你可以与最好的模型(BestModel)下棋。
通常情况下,会有内存不足引起的警告,而不是错误。如果发生了错误, 可以尝试改变 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。
下表是最好的模型的记录。
best model generation | winning percentage to best model | Time Spent(hours) | note |
---|---|---|---|
1 | - | - |