繁体   English   中英

基础强化学习中的折扣奖励

[英]Discounted rewards in basic reinforcement learning

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

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

这似乎是在做的事情是将我的所有预测均匀地乘以任何伽玛值,添加奖励,并使用其来训练模型。

鉴于奖励总是在每个步骤上进行更新,因此我很难理解这是如何实现使该情节中的早期行动比后来者少受到鼓励/痛苦的目标的。 难道不应该逐步将奖励加在一起,然后再乘以伽玛来实现吗?

    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的“强化学习”)。 它使用预测器本身(仍在训练中)来估计以后将要执行的动作的价值(折现奖励的总和),并用伽玛将其折价一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM