阿尔法狗2016版本使用人类高手棋谱数据初步训练策略网络,并使用深度强化学习中的REINFORCE算法进一步训练策略网络。策略网络训练好之后,使用策略网络辅助训练价值网络。零狗(AlphaGo Zero)使用MCTS控制两个玩家对弈,用自对弈生成的棋谱数据和胜负关系同时训练策略网络和价值网络。

在机巧围棋中,训练策略网络和价值网络的方法原理与零狗基本相同。

本文将详细讲解阿尔法狗2016版本和零狗中两个神经网络的训练方法。

1. 阿尔法狗2016版本的训练方法

2016年3月,阿尔法狗以4 : 1战胜了世界冠军李世石九段。赛前(2016年1月27日)DeepMind公司在nature上发表论文Mastering the game of Go with deep neural networks and tree search详细介绍了阿尔法狗的算法原理。

阿尔法狗的训练分为三步:

  1. 随机初始化策略网络π(a∣s;θ)\pi(a|s;\theta)π(a∣s;θ)的参数之后,使用行为克隆(Behavior Cloning)从人类高手棋谱中学习策略网络;
  2. 让两个策略网络自我博弈,使用REINFORCE算法改进策略网络;
  3. 使用两个已经训练好的策略网络自我博弈,根据胜负关系数据训练价值网络v(s;ω)v(s;\omega)v(s;ω)。

1.1 行为克隆

REINFORCE算法会让两个策略网络博弈直至游戏结束,使用游戏结束后实际观测到的回报uuu对策略梯度中的动作价值函数QπQ_{\pi}Qπ​做蒙特卡洛近似,从而计算出策略梯度的无偏估计值,并做随机梯度上升更新策略网络参数。

一开始的时候,策略网络的参数都是随机初始化的。假如直接使用REINFORCE算法学习策略网络,会让两个随机初始化的策略网络博弈。由于策略网络的参数是随机初始化的,它们会做出随机的动作,要经过一个很久的随机摸索过程才能做出合理的动作。因此,阿尔法狗2016版本使用人类专家知识,通过行为克隆初步训练一个策略网络。

行为克隆是一种最简单的模仿学习,目的是模仿人的动作,学出一个随机策略网络π(a∣s;θ)\pi(a|s;\theta)π(a∣s;θ)。行为克隆的本质是监督学习(分类或回归),其利用事先准备好的数据集,用人类的动作指导策略网络做改进,目的是让策略网络的决策更像人类的决策。

在这个网站上可以下载到K Go Server(KGS,原名Kiseido Go Server)上大量6段以上高手玩家的对局数据,每一局有很多步,每一步棋盘上的格局作为一个状态sks_ksk​,下一个棋子的位置作为动作aka_kak​,这样得到数据集{(sk,ak)}\{(s_k,a_k)\}{(sk​,ak​)}。

设362维向量fk=π(⋅∣sk;θ)=[π(0∣sk;θ),π(1∣sk;θ),⋯,π(361∣sk;θ)]f_k=\pi(\cdot|s_k;\theta)=[\pi(0|s_k;\theta),\pi(1|s_k;\theta),\cdots,\pi(361|s_k;\theta)]fk​=π(⋅∣sk​;θ)=[π(0∣sk​;θ),π(1∣sk​;θ),⋯,π(361∣sk​;θ)]是策略网络的输出,aˉk\bar{a}_kaˉk​是对动作aka_kak​的独热编码(one-hot)。可以使用aˉk\bar{a}_kaˉk​和fkf_kfk​的交叉熵H(aˉk,fk)H(\bar{a}_k,f_k)H(aˉk​,fk​)作为损失函数,计算损失函数关于策略网络参数的梯度,使用随机梯度下降更新策略网络参数,最小化损失函数的值,使策略网络的决策更接近人类高手的动作。

行为克隆得到的策略网络模仿人类高手的动作,可以做出比较合理的决策。根据阿尔法狗的论文,它在实战中可以打败业余玩家,但是打不过职业玩家。由于人类高手在实际对局中很少探索奇怪的状态和动作,因此训练数据集上的状态和动作缺乏多样性。在数据集{(sk,ak)}\{(s_k,a_k)\}{(sk​,ak​)}上做完行为克隆之后,策略网络在真正对局时,可能会见到陌生的状态,此时做出的决策可能会很糟糕。如果策略网络做出的动作ata_tat​不够好,那么下一时刻的状态st+1s_{t+1}st+1​可能会比较罕见,于是做出的下一个动作at+1a_{t+1}at+1​会很差;这又导致状态st+2s_{t+2}st+2​非常奇怪,使得动作at+2a_{t+2}at+2​更糟糕。如此“错误累加”,进入这种恶性循环。

为了克服上述行为克隆的缺陷,还需要用强化学习训练策略网络。在行为克隆之后再做强化学习改进策略网络,可以击败只用行为克隆的策略网络,胜算是80%。

为什么可以使用策略网络输出和人类高手动作独热编码的交叉熵作为损失函数,可以参见我的另一篇博客:为什么交叉熵常被用作分类问题的损失函数。

1.2 使用REINFORCE算法改进策略网络

REINFORCE是一种策略梯度方法,其使用实际观测到的回报uuu对策略梯度的无偏估计g(s,a;θ)≜Qπ(s,a)⋅∇θln⁡π(a∣s;θ)g(s,a;\theta)\triangleq{Q_\pi(s,a)}\cdot\nabla_\theta{\ln\pi(a|s;\theta)}g(s,a;θ)≜Qπ​(s,a)⋅∇θ​lnπ(a∣s;θ)中QπQ_\piQπ​做蒙特卡洛近似,并通过下面的公式做随机梯度上升,更新策略网络:
θnew←θnow+β⋅∑t=1nut⋅∇ln⁡π(at∣st;θnow)(1)\theta_{new}\leftarrow\theta_{now}+\beta\cdot\sum_{t=1}^nu_t\cdot\nabla\ln\pi(a_t|s_t;\theta_{now})~~~~~~~~~~~~~~~~~~~~~~~(1) θnew​←θnow​+β⋅t=1∑n​ut​⋅∇lnπ(at​∣st​;θnow​)                       (1)
其中,β\betaβ是学习率,nnn是游戏至终局共进行的步数,π(at∣st;θnow)\pi(a_t|s_t;\theta_{now})π(at​∣st​;θnow​)是策略网络的输出,ln⁡π(at∣st;θnow)\ln\pi(a_t|s_t;\theta_{now})lnπ(at​∣st​;θnow​)是策略网络输出值的对数,∇ln⁡π(at∣st;θnow)\nabla\ln\pi(a_t|s_t;\theta_{now})∇lnπ(at​∣st​;θnow​)是策略网络输出值的对数对策略网络参数求的梯度。

如图一所示,阿尔法狗使用两个策略网络进行博弈,将胜负作为奖励,计算回报utu_tut​的值。参与博弈的一个策略网络叫做“玩家”,用最新的参数θnow\theta_{now}θnow​;另一个叫做“对手”,它的参数是从过时的参数中随机选出来的,记作θold\theta_{old}θold​。“对手”的作用相当于模拟器(环境)的状态转移函数,在训练过程中,只更新“玩家”的参数,不更新“对手”的参数。

让“玩家”和“对手”博弈,将一局游戏进行到底,根据博弈的胜负关系可以确定公式(1)中回报utu_tut​的值。假设一局游戏“玩家”共走了nnn步,设游戏未结束时,奖励r1=r2=⋯=rn−1=0r_1=r_2=\cdots=r_{n-1}=0r1​=r2​=⋯=rn−1​=0。游戏结束时,如果“玩家”赢了,则奖励rn=+1r_n=+1rn​=+1。“玩家”输了,则奖励rn=−1r_n=-1rn​=−1。设定折扣率γ=1\gamma=1γ=1,当“玩家”赢了,所有的回报u1=u2=⋯=un=+1u_1=u_2=\cdots=u_n=+1u1​=u2​=⋯=un​=+1,当“玩家”输了,所有的回报u1=u2=⋯=un=−1u_1=u_2=\cdots=u_n=-1u1​=u2​=⋯=un​=−1。

回报的定义是ut=rt+γrt+1+γ2rt+2⋯+γnrnu_t=r_t+\gamma{r_{t+1}}+\gamma^2r_{t+2}\cdots+\gamma^nr_nut​=rt​+γrt+1​+γ2rt+2​⋯+γnrn​,在阿尔法狗中,设定折扣率γ=1\gamma=1γ=1。

REINFORCE算法是深度强化学习领域的一种策略梯度方法,策略梯度的推导比较麻烦,因此本文不会讲解公式(1)的由来。或许以后有时间会系统地讲解深度强化学习相关算法,可以关注我哟~

1.3 训练价值网络

在阿尔法狗中,价值网络v(s;ω)v(s;\omega)v(s;ω)是对状态价值函数Vπ(s)V_\pi(s)Vπ​(s)的近似,用于评估状态sss的好坏。状态价值函数Vπ(s)V_\pi(s)Vπ​(s)依赖于状态sss,状态sss越好,那么价值Vπ(s)V_\pi(s)Vπ​(s)就越大;Vπ(s)V_\pi(s)Vπ​(s)还依赖于策略函数π\piπ,策略π\piπ越好,同样价值Vπ(s)V_\pi(s)Vπ​(s)也就越大。如果策略π\piπ是固定的,则可以用状态价值函数Vπ(s)V_\pi(s)Vπ​(s)评估状态sss的好坏。因此,阿尔法狗在完成第二步——训练策略网络π\piπ之后,用π\piπ辅助训练vvv。

让训练好的策略网络做自我博弈,每对弈完一局,可以记录(状态—回报)二元组(sk,uk)(s_k,u_k)(sk​,uk​)。自我博弈需要重复非常多次,将最终得到的数据集记作{(sk,uk)}k=1m\{(s_k,u_k)\}_{k=1}^m{(sk​,uk​)}k=1m​。根据定义,状态价值Vπ(sk)V_\pi(s_k)Vπ​(sk​)是回报UkU_kUk​的期望:Vπ(sk)=E[Uk∣Sk=sk]V_\pi(s_k)=\mathbb{E}[U_k|S_k=s_k]Vπ​(sk​)=E[Uk​∣Sk​=sk​]。训练价值网络v(s;w)v(s;w)v(s;w)的目标是使其接近VπV_\piVπ​,即让v(s;ω)v(s;\omega)v(s;ω)拟合回报uku_kuk​。

定义回归问题:
ωmin12m∑k=1m[v(sk;ω)−uk]2\overset{min}{_\omega}\frac{1}{2m}\sum_{k=1}^m[v(s_k;\omega)-u_k]^2 ω​min​2m1​k=1∑m​[v(sk​;ω)−uk​]2
用均方误差(MSE)作为损失函数,训练价值网络v(s;ω)v(s;\omega)v(s;ω),求解这个回归问题。

2. 零狗的训练方法

根据论文Mastering the game of Go without human knowledge可知,零狗和阿尔法狗2016版本的最大区别在于训练策略网络π(a∣s;θ)\pi(a|s;\theta)π(a∣s;θ)的方式。训练π\piπ的时候,不再向人类高手学习,也不用REINFORCE方法,而是向MCTS学习。可以把零狗训练π\piπ的方法看做是模仿学习,被模仿的对象不是人类高手,而是MCTS。

2.1 自我博弈

用MCTS控制两个玩家对弈,每走一步棋,需要进行成千上万次模拟,并记录下每个动作被选中的次数N(a),∀a∈{0,1,2,⋯,361}N(a),\forall{a\in\{0,1,2,\cdots,361\}}N(a),∀a∈{0,1,2,⋯,361}。设当前时刻为ttt,棋盘上状态为sts_tst​,执行MCTS得到362个动作被选中的次数:
N(0),N(1),⋯,N(361)N(0),N(1),\cdots,N(361) N(0),N(1),⋯,N(361)
对这些动作被选中的次数做归一化,得到362个和为1的正数,将这362个数记作362维向量pt=normalize([N(0),N(1),⋯,N(361)]T)p_t=normalize\Big([N(0),N(1),\cdots,N(361)]^T\Big)pt​=normalize([N(0),N(1),⋯,N(361)]T)。

设这一局游戏走了nnn步之后分出胜负,奖励rnr_nrn​要么等于+1+1+1,要么等于−1-1−1,取决于游戏的胜负。游戏结束之后,可以得到回报u1=u2=⋯=un=rnu_1=u_2=\cdots=u_n=r_nu1​=u2​=⋯=un​=rn​。

每自对弈一局可以得到数据:(s1,p1,u1),(s2,p2,u2),⋯,(sn,pn,un)(s_1,p_1,u_1),(s_2,p_2,u_2),\cdots,(s_n,p_n,u_n)(s1​,p1​,u1​),(s2​,p2​,u2​),⋯,(sn​,pn​,un​)。使用这些数训练策略网络π\piπ和价值网络vvv。对π\piπ和vvv的训练同时进行。

2.2 训练策略网络和价值网络

根据我的另一篇博客蒙特卡洛树搜索(MCTS)可知,MCTS做出的决策优于策略网络π\piπ的决策(这也是阿尔法狗使用MCTS做决策,而π\piπ只是用来辅助MCTS的原因)。既然MCTS做出的决策比π\piπ更好,那么可以把MCTS的决策作为目标,让π\piπ去模仿。与1.1节所述行为克隆一致,只不过被模仿的对象不是人类高手,而是MCTS,即训练策略网络的数据不是收集到的人类高手对局数据,而是2.1节所述MCTS控制两个玩家对弈生成的对局数据。

训练价值网络的目标与阿尔法狗2016版本一致,都是让v(st;ω)v(s_t;\omega)v(st​;ω)拟合回报utu_tut​。其中回报utu_tut​不是通过策略网络做自我博弈胜负得到,而是2.1节所述方法生成。

在零狗中,对策略网络和价值网络的训练是同时进行的。将策略网络的损失与价值网络的损失相加,作为训练时优化的目标函数:
l=(u−v)2−πTlogp+c(∣∣θ∣∣2+∣∣ω∣∣2)l=(u-v)^2-\pi^Tlog~p+c\big(||\theta||^2+||\omega||^2\big) l=(u−v)2−πTlog p+c(∣∣θ∣∣2+∣∣ω∣∣2)
其中,uuu是2.1所述通过MCTS自我博弈收集到的回报数据,vvv是价值网络输出,(u−v)2(u-v)^2(u−v)2即为价值网络的损失(均方损失);π\piπ是策略网络输出,ppp是2.1所述通过MCTS自我博弈收集到的被归一化了的每个动作被选中次数数据,−πTlogp-\pi^Tlog~p−πTlog p即为策略网络的损失(交叉熵损失);θ\thetaθ和ω\omegaω分别是策略网络参数和价值网络参数,(∣∣θ∣∣2+∣∣ω∣∣2)\big(||\theta||^2+||\omega||^2\big)(∣∣θ∣∣2+∣∣ω∣∣2)即为防止过拟合的正则项(L2正则);ccc是一个超参数,用于控制L2正则化权重。

零狗论文中所述神经网络fθ(s)=(P(s,⋅),V(s))f_\theta(s)=\big(P(s,\cdot),V(s)\big)fθ​(s)=(P(s,⋅),V(s))由策略网络和价值网络构成,因此论文中神经网络参数θ\thetaθ,等同于本文中的策略网络和价值网络参数θ+ω\theta+\omegaθ+ω。如果读者留意到零狗论文中目标函数l=(u−v)2−πTlogp+c∣∣θ∣∣2l=(u-v)^2-\pi^Tlog~p+c||\theta||^2l=(u−v)2−πTlog p+c∣∣θ∣∣2与文本所述存在一定差别,不必感到疑惑,也不必质疑本文的正确性。

本文对论文中相关原理以更容易理解的方式来表述,但是相关方法在本质上是相同的。

2.3 训练流程

随机初始化策略网络参数θ\thetaθ和价值网络参数ω\omegaω,然后让MCTS自我博弈,玩很多局游戏。每完成一局游戏,更新一次θ\thetaθ和ω\omegaω。具体训练流程如下,训练会重复如下步骤直到收敛:

  1. 让MCTS自我博弈,完成一局游戏,收集到nnn个三元组:(s1,p1,u1),(s2,p2,u2),⋯,(sn,pn,un)(s_1,p_1,u_1),(s_2,p_2,u_2),\cdots,(s_n,p_n,u_n)(s1​,p1​,u1​),(s2​,p2​,u2​),⋯,(sn​,pn​,un​);
  2. 做梯度下降,同时更新策略网络参数θ\thetaθ和价值网络参数ω\omegaω。

3. 结束语

本文介绍了阿尔法狗2016版本和零狗中训练策略网络和价值网络的方法,机巧围棋中训练方法与零狗基本一致。大家可以在GitHub上clone机巧围棋的代码,结合本文理解和学习零狗的训练方法。

最后,期待您能够给本文点个赞,同时去GitHub上给机巧围棋项目点个Star呀~

机巧围棋项目链接:https://github.com/QPT-Family/QPT-CleverGo

训练策略网络和价值网络相关推荐

  1. 价值网络和策略网络的简单融合

    最近alphazero都已经出来了,貌似比alphago zero更厉害,在alphazero和alphago zero中使用了比较 新的策略,将价值网络和策略网络进行了融合,即同一个网络,产生两个不 ...

  2. 【人工智能】基于蒙特卡洛树搜索和策略价值网络的AI五子棋算法设计

    基于蒙特卡洛树搜索和策略价值网络的AI五子棋算法设计 摘要 蒙特卡洛树搜索算法 五子棋博弈的状态价值函数 附1:详细论文说明下载: 附2:实现代码下载(2022.10更新后代码): 摘要 随着人工智能 ...

  3. 【CVPR2022】DAFormer: 改进领域自适应语义分割的网络架构和训练策略

    Code:https://github.com/lhoyer/DAFormer Paper: https://openaccess.thecvf.com/content/CVPR2022/papers ...

  4. CV Code | 本周新出计算机视觉开源代码汇总(语义分割、目标检测、超分辨率、网络结构设计、训练策略等)...

    点击我爱计算机视觉标星,更快获取CVML新技术 CV君汇总了过去一周计算机视觉领域新出的开源代码,涉及到图像增广.医学图像分割.图像恢复.目标检测.语义分割.超分辨率.显著目标检测.轻量级网络结构设计 ...

  5. CSG:清华大学提出通过分化类特定卷积核来训练可解释的卷积网络 | ECCV 2020 Oral

    论文提出类特定控制门CSG来引导网络学习类特定的卷积核,并且加入正则化方法来稀疏化CSG矩阵,进一步保证类特定.从实验结果来看,CSG的稀疏性能够引导卷积核与类别的强关联,在卷积核层面产生高度类相关的 ...

  6. matlab 训练一个用于降维的暹罗网络(孪生网络)

    原文:https://ww2.mathworks.cn/help/deeplearning/ug/train-a-siamese-network-for-dimensionality-reductio ...

  7. 2018-3-12论文(非结构网络中有价值信息数据挖掘)笔记二-----作者:关联规则的非结构网络有价值信息数据挖掘(看不懂,看不懂)

    中国知网:<计算机仿真>----------山西农业大学信息科学与工程学院                    林媛 非结构化网络中有价值信息数据挖掘原理 确定信息数据挖掘的历史样本(? ...

  8. 2018-3-12论文(非结构化网络中有价值信息数据挖掘研究)笔记一总体思路以及三种目前进行价值信息挖掘的研究思想

    文章主要的内容: 提出了基于关联规则的非结构化网路中有价值信息数据挖掘的方法 总体的思想: (1)利用特征提取的方法进行初步的分类与识别,提取出不同文本类型的特征, (2)利用关联规则方法计算各个类型 ...

  9. 《中国制造业走向2025》从构建新价值网络开始

    "中国制造2025","互联网+"两大国家战略指导了中国产业的转型升级,而且两者都提到了传统企业要运用好信息化技术这一重要手段. 在这个大背景下,生产力和生产自 ...

最新文章

  1. 前台特效(2)回到顶部
  2. Stanford UFLDL教程 逻辑回归的向量化实现样例
  3. 【记忆断层、记忆裂痕】
  4. tar time stamp in the future问题
  5. docker 远程连接 文件看不到_开发提升十倍生产力: IDEA 远程一键部署 Spring Boot 到 Docker...
  6. spring的@ControllerAdvice注解
  7. JDK源码(12)-Enum
  8. 德勤元宇宙综观:愿景、技术和应对
  9. 音乐播放插件Aplayer+WebAPI的使用【附下载】
  10. 【记】微信支付服务器证书更换通知的验证流程
  11. 在苹果Mac中如何将html网页转成PDF文件?
  12. 毕业设计,MD2模型动画展示
  13. android studio应用开发案例,Android应用开发案例教程(Android Studio版).pptx
  14. 远程服务器虚拟显示器配置方法
  15. HTML+CSS+JAVASCRIPT 高仿低配网页版网易云音乐播放器
  16. linux触摸屏应用程序开发,linux触摸屏(一)编写触摸屏应用
  17. php 上传图片返回预览,图片上传前的预览(PHP)
  18. (八)高德地图之添加marker标记点
  19. 庄子 汝身非汝有也。
  20. HTML期末大作业课程设计~仿阴阳师游戏官网首页html模板(HTML+CSS)~动漫主题html5网页模板-HTML期末作业课程设计期末大作业动漫主题html5网页模板-html5网页设计源码...

热门文章

  1. verilog阻塞非阻塞赋值在always语句中的表现
  2. Oracle-美团外卖
  3. JS同步任务微任务宏任务
  4. ad16怎么画弧线_16.两直线间的圆弧连接
  5. 电脑什么也没打开,但内存占用很多
  6. 浅论资产定价的两大基石 (I)
  7. Qt5.14_MinGW/MSVC下实现VS2019面板自由拖拽组合功能
  8. android xvideo app,xvideos2019最新免费版
  9. 【C++】STL中 list 反向迭代器的模拟实现
  10. 猴子选大王(增强版)