深度强化学习课程文档

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

Hugging Face's logo
加入 Hugging Face 社区

并获得增强文档体验

开始使用

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

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

请记住,强化学习智能体**通过与其环境交互来学习**。其思想是**在给定经验和获得的奖励后,智能体将更新其价值函数或策略**。

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

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

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

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

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

因此,它需要**在更新价值函数之前完成一个情节的交互**。

Monte Carlo

如果我们举个例子

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

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

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

  • 如果猫吃了老鼠或老鼠移动了 > 10 步,则终止情节。

  • 在情节结束时,**我们得到一个状态、动作、奖励和下一个状态元组列表**。例如 [[状态:底部第 3 格,向左移动,+1,状态:底部第 2 格],[状态:底部第 2 格,向左移动,+0,状态:底部第 1 格]…]

  • 智能体将对总奖励GtG_t进行求和(以查看其表现如何)。

  • 然后,它将根据公式更新V(st)V(s_t)

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

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

Monte Carlo

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

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

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

  • 我们的鼠标探索环境并采取随机动作

    Monte Carlo
  • 鼠标走了超过10步,所以回合结束。

    Monte Carlo
  • 我们有一个状态、动作、奖励、下一状态的列表,我们需要计算回报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)

但因为我们没有经历整个情节,所以我们没有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的实际准确折扣回报**。

  • 使用TD学习,我们根据一个步骤更新价值函数,并且我们用称为TD目标的估计回报来替换GtG_t,我们并不知道。

    Summary
< > 在GitHub上更新