我想训练神经网络上通过强化学习与玩井字Keras
,Python
。当前,网络获取当前板的输入:
array([0,1,0,-1,0,1,0,0,0])
1 = X
-1 = O
0 = an empty field
如果网络赢得了一场比赛,它所做的每一个动作(输出)都会得到奖励。[0,0,0,0,1,0,0,0,0]
如果网丢了,我想用不好的回报训练它。[0,0,0,0,-1,0,0,0,0]
但是目前我有很多0.000e-000
精确度。
我可以训练“不好的奖励”吗?或者,如果不能解决该-1
怎么办呢?
提前致谢。
您需要向后传播在游戏结束时获得的奖励。看一下本教程。
简而言之,在本教程中:
# at the end of game, backpropagate and update states value
def feedReward(self, reward):
for st in reversed(self.states):
if self.states_value.get(st) is None:
self.states_value[st] = 0
self.states_value[st] += self.lr * (self.decay_gamma * reward
- self.states_value[st])
reward = self.states_value[st]
正如您所看到的,假设步骤5中的奖励(游戏结束)以衰减率反向传播至(4,3,2,1)之前的所有步骤(并非派生意义)。之所以这样做,是因为井字游戏是一种延迟奖励的游戏,与经典的强化学习环境相反,在经典的强化学习环境中,通常每个步骤我们都会获得奖励(正数或负数)。在这里,T处的动作奖励取决于T +处的最终动作。如果最终游戏以获胜告终,则奖励为1;如果对手玩了最后一局并获胜,则奖励为-1。
至于准确性,我们不会将其用作强化学习的指标。一个好的度量标准是观察平均累积奖励(如果您的代理赢得一半的时间,则为0;如果获悉某些信息,则为> 0,否则为<0)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句