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

时间:2019-04-21 01:12:02

标签: python reinforcement-learning reward

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

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

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

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

<html>
<head>
<title>My Web App</title>
<link rel="stylesheet" type="text/css" href="css/login.css">
</head>
<body>
    <form class="login_form" action="LoginController" method="post">
        <div class="form_container">
            <label for="input_username">User name</label><br> 
            <input id="input_username" type="text" name="username" required><br><br> 
            <label for="input_password">Password</label><br> 
            <input id="input_password" type="password" name="password" required><br>
            <input id="btn_submit" type="submit" value="Submit">
        </div>
    </form>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

您似乎对代码正在解决的问题有一些误解。我将尝试清理有关打折奖励的内容。

让我们首先假设我们不折价奖励。在给定状态下采取行动的价值被定义为代理商在采取这种行动并遵循固定策略时期望获得的奖励总和。

我们可以使用此定义并学习值函数。但是一个问题是,如果代理人永远存在,它可能会获得无限的回报。而且,代理人没有压力采取行动。如果它有助于缓慢地进入可以永久保留的良好状态,它将很乐意经历一百万个不良状态。如果我们期待数百万个时间步长,则很难学习这样的动作值(并使它们稳定)。

因此,这可以通过打折奖励来解决。修改代理程序的目标是不最大化奖励总和,而是最大化立即奖励加上下一个奖励的0.9倍,再加上下一个奖励的0.9 * 0.9倍,依此类推。因此,在一百万个时间步长之后,折现奖励对于所有实际操作都是表示与代理的当前决定无关。这与情节的开始或结束无关。奖励折扣总是从当前状态开始。

您正在查看的这行:

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

正在计算作用值的更好估计。这是标准的教科书公式(例如,参见Sutton和Barto的“强化学习”)。它使用预测器本身(仍在训练中)来估计以后将要执行的动作的价值(折现奖励的总和),并用伽玛将其折价一次。