我想知道强化学习的折扣奖励实际上是如何工作的。我相信这个想法是,一集中后期的奖励比早期的奖励更重。这对我来说很有意义。在我所看到的示例中,我很难理解它是如何工作的。
我假设下面的代码是进行强化学习的标准方法。我按以下方式解释此代码:遍历每个动作,训练模型预测动作的好坏。
这似乎是在做的事情是将我的所有预测均匀地乘以任何伽玛值,加上奖励,然后使用它来训练模型。
鉴于奖励总是在每个步骤上进行更新,因此我很难理解这是如何实现使该情节中的早期行动比后来的情况更少受到鼓励/痛苦的目标的。难道不应该逐步将奖励加在一起,然后再乘以伽玛来实现吗?
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
最佳答案
您似乎对代码正在解决的问题有一些误解。我将尝试清理有关打折奖励的内容。
首先,我们假设我们不折价奖励。在给定状态下采取行动的价值被定义为代理商在采取该行动并遵循固定策略时预期获得的奖励总和。
我们可以使用此定义并学习值函数。但是一个问题是,如果代理永远存在,它可能会获得无限的回报。而且,代理人没有压力采取行动。如果它有助于缓慢地进入可以永久保留的良好状态,它将很乐意经历一百万个不良状态。如果我们期待数百万个时间步长,那么学习这样的动作值(并使它们稳定)将变得更加困难。
因此,这可以通过打折奖励来解决。修改代理程序的目标是不最大化奖励总和,而是最大化立即奖励加上下一个奖励的0.9倍,再加上下一个奖励的0.9 * 0.9倍,依此类推。因此,在一百万个时间步长之后的折现奖励是可行的表示与代理的当前决定无关。这与情节的开始或结束无关。奖励折扣总是从当前状态开始。
您正在查看的这行:
target = reward + self.gamma * np.amax(self.model.predict(next_state))
正在计算更好的行动价值估算。这是标准的教科书公式(例如,参见Sutton和Barto的“强化学习”)。它使用预测器本身(仍在训练中)来估计以后将要执行的动作的价值(折现奖励的总和),并用伽玛将其折价一次。
关于python - 基础强化学习中的折扣奖励,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55779079/