如何用分类神经网络训练不良奖励?

nailuj05

我想训练神经网络上通过强化学习与玩井字KerasPython当前,网络获取当前板的输入:

    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怎么办呢?

提前致谢。

丹妮·亚蒂姆(Dany Yatim)

您需要向后传播在游戏结束时获得的奖励。看一下教程。

简而言之,在本教程中:

# 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章