machine-learning - 坚持理解 TD(0) 和 TD(λ) 更新使用之间的区别

标签 machine-learning reinforcement-learning temporal-difference

我正在研究时间差异学习 this post 。这里 TD(0) 的更新规则对我来说很清楚,但在 TD(λ) 中,我不明白如何在一次更新中更新所有先前状态的效用值。

以下是机器人更新比较的图表:

enter image description here

上图解释如下:

In TD(λ) the result is propagated back to all the previous states thanks to the eligibility traces.

我的问题是,即使我们使用带有资格跟踪的以下更新规则,信息如何在一次更新中传播到所有以前的状态?

enter image description here

在一次更新中,我们仅更新单个状态Ut(s)的实用程序,那么之前所有状态的实用程序如何更新?

编辑

根据答案,很明显,此更新适用于每个步骤,这就是传播信息的原因。如果是这种情况,那么它再次让我感到困惑,因为更新规则之间的唯一区别是资格跟踪。

因此,即使先前状态的资格跟踪值不为零,在上述情况下 delta 值也将为零(因为最初奖励和效用函数初始化为 0)。那么先前的状态怎么可能在第一次更新时获得除零之外的其他效用值呢?

此外,在给定的 python 实现中,在单次迭代后给出以下输出:

 [[ 0.       0.04595  0.1      0.     ]
 [ 0.       0.       0.       0.     ]
 [ 0.       0.       0.       0.     ]]

这里只更新了 2 个值,而不是如图所示的所有 5 个先前状态。我在这里缺少什么?

最佳答案

So even if the value of eligibility trace is non zero for previous states, the values of delta will be zero in above case (because initially rewards and utility function is initialized 0). Then how is it possible for previous states to get other utility values than zero in first update?

你是对的,在第一次更新中,所有奖励和更新仍将是0(除非我们已经一步实现了目标,那么奖励就不会是0)。

但是,资格跟踪e_t将继续“记住”或“内存”我们之前访问过的所有状态。因此,一旦我们确实达到了目标状态并获得非零奖励,资格痕迹仍然会记住我们经历过的所有状态。这些州在资格跟踪表中仍然会有非零条目,因此一旦您观察到第一个奖励,就会立即获得非零更新。

资格轨迹表在每个时间步都会衰减(乘以gamma * lambda_),因此很久以前访问过的状态的更新幅度将小于我们最近访问过的状态的更新幅度,但我们将继续记住所有这些状态,它们将具有非零条目(假设 gamma > 0lambda_ > 0)。这允许更新所有访问过的状态的值,不是在我们到达这些状态后立即更新,而是一旦我们观察到非零奖励 (或者,在第一个纪元之后的纪元中,一旦我们达到已经具有现有非零预测值的状态)在某个较早的时间点访问它们之后 .

<小时/>

Also in the given python implementation, following output is given after a single iteration:

[[ 0.       0.04595  0.1      0.     ]
 [ 0.       0.       0.       0.     ]
 [ 0.       0.       0.       0.     ]]

Here only 2 values are updated instead of all 5 previous states as shown in the figure. What I'm missing here?

他们的代码的第一部分如下所示:

for epoch in range(tot_epoch):
  #Reset and return the first observation
  observation = env.reset(exploring_starts=True)

因此,每一个新纪元,他们都会首先使用 exploring_starts 标志重置环境。如果我们看 the implementation of their environment ,我们看到这个标志的使用意味着我们总是从随机初始位置开始。

因此,我怀疑,当运行代码来生成该输出时,初始位置只是随机选择为球门左侧两步的位置,而不是左下角的位置。如果随机选择初始位置已经更接近目标,则代理只会访问您看到非零更新的那两个状态,因此这些状态也将是资格表中唯一具有非零条目的状态跟踪,因此是唯一具有非零更新的状态。

如果初始位置确实是左下角的位置,则算法的正确实现确实会更新该路径上所有状态的值(假设没有添加额外的技巧,例如将条目设置为 0(如果它们由于衰变而碰巧“足够接近”0)。

<小时/>

我还想指出,该页面上的代码实际上存在一个错误:重置环境时,他们不会将资格跟踪表的所有条目重置为 0/开始一个新纪元。应该这样做。如果不这样做,资格跟踪仍然会记住在之前的纪元中访问过的状态,并且仍然更新所有这些状态,即使它们在新纪元中没有再次访问。这是不正确的。他们的代码的正确版本应该像这样开始:

for epoch in range(tot_epoch):
    #Reset and return the first observation
    observation = env.reset(exploring_starts=True)
    trace_matrix = trace_matrix * 0.0    # IMPORTANT, added this        
    for step in range(1000):
        ...

关于machine-learning - 坚持理解 TD(0) 和 TD(λ) 更新使用之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52136229/

相关文章:

python - 如何在pytorch中测试一张图片

python - tensorflow 2.0 : tf. GradientTape().gradient() 返回无

Matlab 朴素贝叶斯

reinforcement-learning - TD(0)学习中如何选择 Action

machine-learning - Q 学习、时差、基于模型的强化学习

machine-learning - 强化学习和深度强化学习有什么区别?

machine-learning - 使用 Neo4j 进行强化学习 : make 2 copies of the graph vs store 2 copies of all values on 1 graph

python - 仅在 Jupyter notebook 中显示 OpenAI gym

python - 在 TensorFlow 中实现简单的 PPO 代理