1

我想知道强化学习的折扣奖励实际上是如何工作的。我相信这个想法是,在一集后面的奖励比早期的奖励更重要。这对我来说很有意义。在我看到的示例中,我很难理解这实际上是如何工作的。

我假设下面的代码是进行强化学习的标准方法。我将这段代码解释如下:遍历每个动作,训练模型预测动作的好坏。

这似乎正在做的是将我所有的预测均匀地乘以任何 gamma,添加奖励,并使用它来训练模型。

看到奖励总是在每一步更新,我很难理解这是如何实现使情节中的早期行动比后来的行动更不鼓励/不鼓励的目标。奖励不应该一步一步地加在一起,然后乘以伽玛来实现这一点吗?

    def replay(self, batch_size):
        minibatch = random.sample(self.memory, batch_size)

        for state, action, reward, next_state, done in minibatch:
            target = reward
            if not done:
                target = reward + self.gamma * np.amax(self.model.predict(next_state))
            target_f = self.model.predict(state)
            target_f[0][action] = target

            self.model.fit(state, target_f, epochs=1, verbose=0)

        if self.epsilon > self.epsilon_min:
            self.epsilon *= self.epsilon_decay
4

1 回答 1

0

您似乎对代码解决的问题有一些误解。我将尝试澄清有关折扣奖励的问题。

让我们首先假设我们不打折奖励。在给定状态下采取行动的价值被定义为代理在采取该行动并遵循固定策略时预期收集的奖励的总和。

我们可以使用这个定义并学习价值函数。但是一个问题是,如果代理永远活着,它可能会获得无限的奖励。此外,代理人将没有采取行动的压力。如果它有助于慢慢进入一个可以永远停留的好状态,它会很高兴地经历一百万个坏状态。如果我们向前看数百万个时间步,就更难学习这样的动作值(并使它们稳定)。

因此,这是通过折扣奖励来解决的。代理的目标被修改为最大化不是奖励的总和,而是立即奖励加上下一个奖励的 0.9 倍,加上下一个奖励的 0.9*0.9 倍,等等。所以一百万时间步后的折扣奖励是,对于所有实际意味着,与代理当前的决策无关。这与一集的开始或结束无关。奖励折扣总是从当前状态开始。

您正在查看的这一行:

target = reward + self.gamma * np.amax(self.model.predict(next_state))

正在计算对行动价值的更好估计。这是标准的教科书公式(参见例如 Sutton 和 Barto 的“强化学习”)。它使用预测器本身(仍在训练中)来估计未来较晚的动作的价值(折扣奖励的总和),用伽马值按一个时间步进行折扣。

于 2019-04-21T07:59:51.943 回答