如何使用分类神经网络训练不良奖励?
How to train a bad reward with a classifying Neural Net?
我正在尝试通过 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
准确率。
我可以训练 "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)。
我正在尝试通过 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
准确率。
我可以训练 "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)。