自学围棋的AlphaGoZero,你也能用PyTorch造一个|附代码实现(4)
2023-05-04 来源:飞速影视
代码长这样——
1class ValueNet(nn.Module):2 def __init__(self, inplanes, outplanes): 3 super(ValueNet, self).__init__() 4 self.outplanes = outplanes 5 self.conv = nn.Conv2d(inplanes, 1, kernel_size=1) 6 self.bn = nn.BatchNorm2d(1) 7 self.fc1 = nn.Linear(outplanes - 1, 256) 8 self.fc2 = nn.Linear(256, 1) 91011 def forward(self, x):12 x = F.relu(self.bn(self.conv(x)))13 x = x.view(-1, self.outplanes - 1)14 x = F.relu(self.fc1(x))15 winning = F.tanh(self.fc2(x))16 return winning
未雨绸缪的树
狗零,还有一个很重要的组成部分,就是蒙特卡洛树搜索(MCTS) 。
它可以让AI棋手提前找出,胜率最高的落子点。
在模拟器里,模拟对方的下一手,以及再下一手,给出应对之策,所以提前的远不止是一步。
节点 (Node)
树上的每一个节点,都代表一种不同的局势,有不同的统计数据:
每个节点被经过的次数n,总动作值w,经过这一点的先验概率p,平均动作值q (q=w/n) ,还有从别处来到这个节点走的那一步,以及从这个节点出发、所有可能的下一步。
1class Node:2 def __init__(self, parent=None, proba=None, move=None):3 self.p = proba4 self.n = 05 self.w = 06 self.q = 07 self.children = []8 self.parent = parent9 self.move = move
部署 (Rollout)
第一步是PUCT (多项式上置信树) 算法,选择能让PUCT函数 (下图) 的某个变体 (Variant) 最大化,的走法。
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)
www.fs94.org-飞速影视 粤ICP备74369512号