我试图理解 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 个步骤)?