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

How to train a bad reward with a classifying Neural Net?

我正在尝试通过 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 准确率。

我可以训练 "bad reward" 吗?或者如果用 -1 做不到,我应该怎么做呢?

提前致谢。

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

简而言之,从本教程开始:

# 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) 之前的所有步骤中以衰减率反向传播(不是导数意义上的) .这是要走的路,因为 tic-tac-toe 是一种具有 delayed 奖励的游戏,与经典的强化学习环境相反,在经典的强化学习环境中,我们通常在每一步。这里在 T 处行动的奖励取决于在 T+something 处的最终行动。如果最终行动以胜利结束游戏,则此最终行动给予奖励 1,如果对手采取最后行动并获胜,则给予 -1 奖励。

至于准确性,我们不将其用作强化学习的指标。一个好的指标是观察平均累积奖励(如果你的代理赢了一半时间,则为 0,如果它学到了一些东西,则为 > 0,否则为 < 0)。