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



我正在尝试通过强化学习来训练神经网络玩井字游戏,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做到这一点,我应该怎么做?

提前谢谢。

您需要反向传播游戏结束时赢得的奖励。看看这个教程。

简而言之,从本教程中:

# 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<(。

相关内容

最新更新