Press "Enter" to skip to content

使用PyTorch的策略梯度

第五单元,使用 Hugging Face 的深度强化学习课程 🤗

⚠️ 这篇文章有一个新的更新版本,可以在这里找到 👉 https://huggingface.co/deep-rl-course/unit1/introduction

这篇文章是深度强化学习课程的一部分,从入门到专家都可以免费学习。点击这里查看课程大纲。 使用PyTorch的策略梯度 四海 第1张


⚠️ 这篇文章有一个新的更新版本,可以在这里找到 👉 https://huggingface.co/deep-rl-course/unit1/introduction

这篇文章是深度强化学习课程的一部分,从入门到专家都可以免费学习。点击这里查看课程大纲。

在上一个单元中,我们学习了深度 Q 学习。在这种基于值的深度强化学习算法中,我们使用深度神经网络来逼近每个可能动作的不同 Q 值。

确实,在课程的开始阶段,我们只学习了基于值的方法,其中我们通过估计一个值函数作为找到最优策略的中间步骤。

使用PyTorch的策略梯度 四海 第2张

因为在基于值的方法中,π 只存在于动作值估计之中,因为策略只是一个函数(例如,贪婪策略),它会在给定状态时选择具有最高值的动作。

但是,对于基于策略的方法,我们希望直接优化策略,而不需要学习值函数的中间步骤。

所以今天,我们将学习我们的第一个基于策略的方法:Reinforce。我们将使用 PyTorch 从头开始实现它,并在 CartPole-v1、PixelCopter 和 Pong 上测试其鲁棒性。

使用PyTorch的策略梯度 四海 第3张

让我们开始吧,

  • 什么是策略梯度方法?
    • 策略梯度方法概述
    • 策略梯度方法的优势
    • 策略梯度方法的劣势
  • Reinforce(蒙特卡洛策略梯度)

什么是策略梯度方法?

策略梯度是策略基础方法的一种子类,是一类算法旨在使用不同的技术直接优化策略而不使用值函数。与策略基础方法的区别在于,策略梯度方法是一系列算法,旨在通过梯度上升法估计最优策略的权重。

策略梯度方法概述

为什么我们要使用策略梯度方法通过估计最优策略的权重来直接优化策略?

记住强化学习的目标是找到一种最优的行为策略(策略)以最大化预期的累积奖励。

我们还需要记住,策略是一个函数,给定一个状态,输出一个动作的分布(在我们的情况下使用随机策略)。

使用PyTorch的策略梯度 四海 第4张

我们在策略梯度中的目标是通过调整策略来控制动作的概率分布,使得好的动作(最大化回报)在未来更频繁地被采样。

让我们举一个简单的例子:

  • 我们通过让策略与环境交互来收集一个回合。

  • 然后我们查看回合的奖励总和(预期回报)。如果这个总和是正数,我们认为在这个回合中采取的动作是好的:因此,我们想要增加 P(a|s)(在该状态下采取该动作的概率)。

策略梯度算法(简化版)看起来像这样:

使用PyTorch的策略梯度 四海 第5张

但是深度 Q 学习也很棒!为什么要使用策略梯度方法呢?

策略梯度方法的优势

与深度 Q-Learning 方法相比,有多个优势。让我们看看其中一些:

  1. 集成的简单性:我们可以直接估算策略,无需存储额外的数据(动作值)。

  2. 策略梯度方法可以学习随机策略,而值函数则不能

这有两个后果:

a. 我们不需要手动实现探索/开发的权衡。由于我们输出了一个动作的概率分布,代理会在状态空间中探索,而不总是采取相同的轨迹

b. 我们还摆脱了感知重命名的问题。感知重命名是指两个状态看起来(或者是)相同,但需要采取不同的动作。

让我们举个例子:我们有一个智能吸尘器,其目标是吸尘并避免杀死仓鼠。

使用PyTorch的策略梯度 四海 第6张

我们的吸尘器只能感知到墙壁的位置。

问题是,红色方框表示的两个情况是感知重命名的状态,因为代理对每个状态都感知到了上下两堵墙。

使用PyTorch的策略梯度 四海 第7张

在确定性策略下,当处于红色状态时,策略要么向右移动,要么向左移动。无论哪种情况都会导致代理陷入困境,永远无法吸尘

在基于值的强化学习算法下,我们学习到了一种准确定性策略(“贪婪 epsilon 策略”)。因此,我们的代理可能会花费很长时间才能找到尘埃。

另一方面,最优随机策略将在灰色状态下随机向左或向右移动。因此,它不会被困住,并且有很高的概率达到目标状态

使用PyTorch的策略梯度 四海 第8张

  1. 策略梯度在高维动作空间和连续动作空间中更有效

事实上,深度 Q-Learning 的问题在于它们的预测为每个可能的动作在每个时间步骤中给出当前状态的得分(预期未来奖励的最大值)。

但是如果我们有无限的动作可能性呢?

例如,在自动驾驶汽车中,在每个状态下,您可以选择(近乎)无限的动作(将方向盘转动 15°、17.2°、19.4°,按喇叭等)。我们需要为每个可能的动作输出一个 Q 值!并且对连续输出的最大动作进行优化本身就是一个优化问题!

相反,使用策略梯度,我们输出一个动作的概率分布

策略梯度方法的缺点

当然,策略梯度方法也有一些缺点:

  • 策略梯度往往会收敛到局部最大值,而不是全局最优值。
  • 策略梯度的更新速度较慢,逐步进行:训练时间可能较长(低效)
  • 策略梯度可能具有较高的方差(解决方案基准线)。

👉 如果您想深入了解策略梯度方法的优势和缺点,可以查看这个视频。

现在我们已经了解了策略梯度及其优势和缺点的大致情况,让我们学习和实现其中之一:Reinforce(增强学习)。

Reinforce(蒙特卡洛策略梯度)

Reinforce,也称为蒙特卡洛策略梯度,使用整个回合的估计回报来更新策略参数 θ \theta θ。

我们有一个策略 π,其具有参数 θ。给定一个状态,这个策略 π输出一个动作的概率分布

使用PyTorch的策略梯度 四海 第9张

其中 π θ ( a t ∣ s t ) \pi_\theta(a_t|s_t) π θ ​ ( a t ​ ∣ s t ​ ) 是代理在状态 st 下选择动作 at 的概率,根据我们的策略。

但是我们如何知道我们的策略是否好呢?我们需要有一种衡量的方法。为了知道,我们定义了一个得分/目标函数叫做 J(θ)。

得分函数 J 是期望回报:

使用PyTorch的策略梯度 四海 第10张

记住,策略梯度可以被看作是一个优化问题。所以我们必须找到最佳参数 (θ) 来最大化得分函数 J(θ)。

为了做到这一点,我们将使用策略梯度定理 。我不会深入研究数学细节,但如果你有兴趣可以观看这个视频

Reinforce 算法的工作原理是这样的: 循环:

  • 使用策略 π θ 来收集一个 episode τ
  • 使用 episode 来估计梯度 g ^ = ∇ θ J(θ)

使用PyTorch的策略梯度 四海 第11张

  • 更新策略的权重: θ ← θ + α g ^

我们可以得出以下解释:

  • ∇ θ l o g π θ ( a t ∣ s t ) 是选择动作 a_t 从状态 s_t 的 (log) 概率的最大增长方向。 => 这告诉我们,如果我们想要增加/减少选择在状态 st 时动作 at 的对数概率,我们应该如何更改策略的权重
  • R(τ) 是得分函数:
    • 如果回报高,它将提升 (状态,动作) 组合的概率。
    • 否则,如果回报低,它将降低 (状态,动作) 组合的概率。

现在我们已经学习了 Reinforce 的理论知识,你可以使用 PyTorch 编写你的 Reinforce 代理,并使用 CartPole-v1, PixelCopter 和 Pong 来测试其稳定性

从这里开始教程:👉 https://colab.research.google.com/github/huggingface/deep-rl-class/blob/main/unit5/unit5.ipynb

与你的同学们比较成绩的排行榜:🏆 👉 https://huggingface.co/spaces/chrisjay/Deep-Reinforcement-Learning-Leaderboard

使用PyTorch的策略梯度 四海 第3张

恭喜你完成了本章!其中包含了很多信息。同时恭喜你完成了这个教程。你刚刚使用 PyTorch 从头开始编写了你的第一个深度强化学习代理,并在 Hub 上分享了它 🥳。

如果你对所有这些要素仍然感到困惑,这是很正常的。对我和所有学习强化学习的人来说也是如此。

在继续之前,请花时间真正理解材料。

不要犹豫在其他环境中训练你的代理。尝试自己动手是学习的最佳方式!

我们在课程大纲中提供了更多深入阅读的材料,如果你想更深入了解的话 👉 https://github.com/huggingface/deep-rl-class/blob/main/unit5/README.md

在下一单元,我们将学习一种结合了基于策略和基于价值的方法的 Actor Critic 方法。

别忘了与想要学习的朋友分享 🤗!

最后,我们希望通过你的反馈不断改进和更新课程。如果你有任何反馈,请填写这个表格 👉 https://forms.gle/3HgA7bEHwAmmLfwh9

继续学习,保持出色🤗

Leave a Reply

Your email address will not be published. Required fields are marked *