Deep RL 课程文档

蒙特卡洛方法与时序差分学习

Hugging Face's logo
加入 Hugging Face 社区

并获取增强的文档体验

开始使用

蒙特卡洛方法与时序差分学习

在我们深入 Q-学习之前,我们需要讨论的最后一件事是两种学习策略。

请记住,强化学习智能体通过与其环境互动来学习。其思想是基于经验和收到的奖励,智能体将更新其价值函数或策略。

蒙特卡洛方法和时序差分学习是两种不同的训练价值函数或策略函数的策略。它们都使用经验来解决强化学习问题。

一方面,蒙特卡洛方法在学习之前使用整个 episode 的经验。另一方面,时序差分学习仅使用一个步骤 ( St,At,Rt+1,St+1S_t, A_t, R_{t+1}, S_{t+1} ) 来学习。

我们将使用基于价值的方法示例来解释它们。

蒙特卡洛方法:在 episode 结束时学习

蒙特卡洛方法等待 episode 结束,计算GtG_t(回报),并将其用作更新 V(St)V(S_t) 的目标。

因此,它需要完整的 episode 互动才能更新我们的价值函数。

Monte Carlo

如果我们举个例子

Monte Carlo
  • 我们总是从相同的起点开始 episode。

  • 智能体使用策略采取行动。例如,使用 Epsilon Greedy 策略,这是一种在探索(随机行动)和利用之间交替的策略。

  • 我们获得奖励和下一个状态。

  • 如果猫吃掉老鼠,或者老鼠移动 > 10 步,我们终止 episode。

  • 在 episode 结束时,我们有一个状态、行动、奖励和下一个状态元组的列表,例如 [[状态:瓷砖 3 底部,向左走,+1,状态:瓷砖 2 底部],[状态:瓷砖 2 底部,向左走,+0,状态:瓷砖 1 底部]…]

  • 智能体将汇总总奖励 GtG_t (以了解其表现如何)。

  • 然后它将基于公式更新 V(st)V(s_t)

    Monte Carlo
  • 然后使用这个新知识开始新的游戏

通过运行越来越多的 episode,智能体将学会越玩越好。

Monte Carlo

例如,如果我们使用蒙特卡洛方法训练状态-价值函数

  • 我们初始化我们的价值函数,使其为每个状态返回 0 值

  • 我们的学习率 (lr) 为 0.1,折扣率为 1 (= 无折扣)

  • 我们的老鼠探索环境并采取随机行动

    Monte Carlo
  • 老鼠走了超过 10 步,因此 episode 结束。

    Monte Carlo
  • 我们有一个状态、行动、奖励、next_state 的列表,我们需要计算回报 Gt=0G{t=0}Gt=Rt+1+Rt+2+Rt+3...G_t = R_{t+1} + R_{t+2} + R_{t+3} ...(为简单起见,我们不对奖励进行折扣)G0=R1+R2+R3G_0 = R_{1} + R_{2} + R_{3}… G0=1+0+0+0+0+0+1+1+0+0G_0 = 1 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 G0=3G_0 = 3

  • 我们现在可以计算新的V(S0)V(S_0):

    Monte Carlo V(S0)=V(S0)+lr[G0V(S0)]V(S_0) = V(S_0) + lr * [G_0 — V(S_0)] V(S0)=0+0.1[30]V(S_0) = 0 + 0.1 * [3 – 0] V(S0)=0.3V(S_0) = 0.3
Monte Carlo

时序差分学习:每步学习

另一方面,时序差分学习仅等待一次互动(一步)St+1S_{t+1} 来形成 TD 目标并更新V(St)V(S_t)使用Rt+1R_{t+1}γV(St+1) \gamma * V(S_{t+1}).

TD 的思想是在每一步更新 V(St)V(S_t)

但是因为我们没有经历完整的回合 (episode),所以我们没有GtG_t(预期回报)。相反,我们通过加上Rt+1R_{t+1}和下一个状态的折扣值来估计GtG_t

这被称为自举 (bootstrapping)。之所以这么称呼它是因为 TD 部分地基于现有估计V(St+1)V(S_{t+1})而不是完整的样本GtG_t

Temporal Difference

这种方法被称为 TD(0) 或单步 TD (在任何单个步骤之后更新价值函数)

Temporal Difference

如果我们采用相同的例子,

Temporal Difference
  • 我们初始化价值函数,使其为每个状态返回 0 值。

  • 我们的学习率 (lr) 是 0.1,我们的折扣率是 1 (没有折扣)。

  • 我们的老鼠开始探索环境并采取随机行动:向左走

  • 它获得了奖励Rt+1=1R_{t+1} = 1因为它吃了一块奶酪

    Temporal Difference
Temporal Difference

我们现在可以更新V(S0)V(S_0):

新的V(S0)=V(S0)+lr[R1+γV(S1)V(S0)]V(S_0) = V(S_0) + lr * [R_1 + \gamma * V(S_1) - V(S_0)]

新的V(S0)=0+0.1[1+100]V(S_0) = 0 + 0.1 * [1 + 1 * 0–0]

新的V(S0)=0.1V(S_0) = 0.1

所以我们刚刚更新了状态 0 的价值函数。

现在我们继续使用更新后的价值函数与此环境交互。

Temporal Difference

总结一下

  • 使用蒙特卡洛方法,我们从完整的回合 (episode) 更新价值函数,因此我们使用此回合 (episode) 的实际准确的折扣回报。

  • 使用时序差分学习,我们从一个步骤更新价值函数,并且我们替换GtG_t,这是我们不知道的,用一个称为 TD 目标的估计回报来代替。

    Summary
< > 在 GitHub 上更新