Q 算法如何考虑未来的奖励?

数据挖掘 机器学习 深度学习 q学习
2022-02-21 22:40:04

我试图理解 Q 学习的基本逻辑(准确地说是深度 Q 学习)。目前,我被未来奖励的概念所困扰。

为了理解逻辑,我正在查看一些现有的代码示例。这个看起来很有趣,所以我经历了它:

https://github.com/keon/deep-q-learning/blob/master/dqn.py

以下是对底层深度神经网络进行实际训练的代码要点:

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)[0]))
        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

在代码的第 5 行,(if not done行后)我们将下一步的折扣奖励添加到当前步骤,并将其设置为要训练的执行动作的目标奖励。因此,在我看来,我们将执行动作的奖励和后续动作的折扣可能奖励结合起来。

据我了解,在每次迭代中,Q-learning 算法使用正在使用的机器学习技术(无论是 CNN、DNN 等)预测下一步(并且仅下一步)的未来奖励。我们将下一步的奖励(以及仅特定的下一步)乘以折扣率,使其不如直接奖励(我们指定的比率)重要。所以,我的问题是,该算法如何提前考虑更进一步的步骤(比如 5 个步骤)?

1个回答

据我了解,在每次迭代中,Q-learning 算法使用正在使用的机器学习技术(无论是 CNN、DNN 等)预测下一步(并且仅是下一步)的未来奖励。

当在状态 S 中采取行动 A 并遵循最优策略时, Q 值最终应该收敛到预期总和未来折扣奖励。分解它:

  • 预期总和与“预测”不完全相同,但对于我们的目的来说足够接近。它确实意味着奖励的总和,而不是单一的奖励。为了区分,这通常被称为“回报”或“效用”

  • 未来-> 从被评估的步骤开始直到剧集结束,或者随着时间的推移,连续任务的折扣无限期。

  • 折扣-> 折扣因子仅对连续任务是必需的。

我们将下一步的奖励(以及仅特定的下一步)乘以折扣率,使其不如直接奖励(我们指定的比率)重要。

不,奖励没有倍增。让我们看一下这条线:

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

reward没有乘以任何东西

乘以什么γ是下一个状态的 Q 值。该值表示从该点开始的所有奖励的总和 - 根本不是一个单一的奖励值。

所以,我的问题是,该算法如何提前考虑更进一步的步骤(比如 5 个步骤)?

它在 Q 值中。您正在查看的代码的伪代码不是:

target_for_Q(s,a) = next_step_reward * gamma

这是:

target_for_Q(s,a) = next_reward + gamma * current_value_of_Q(s',a')

或者:

target_for_Q(s,a) = next_reward + gamma * estimate_all_future_return

这与政策评估的贝尔曼函数密切相关

直觉上发生的事情是,您从(非常差的)预期回报next_reward(不是预期奖励)估计开始,并通过将,s'的观察值插入到a'上面的更新规则中来更新它们。这些值始终代表对总预期回报的学习估计。