优势演员评论家(A2C)
A2C (Advantage Actor-Critic)
深度强化学习课程第七单元,与Hugging Face合作 🤗
⚠️ 这篇文章的新的更新版本在这里可用 👉 https://huggingface.co/deep-rl-course/unit1/introduction
这篇文章是深度强化学习课程的一部分。一个从初学者到专家的免费课程。在这里查看课程大纲。
⚠️ 这篇文章的新的更新版本在这里可用 👉 https://huggingface.co/deep-rl-course/unit1/introduction
- 使用TF Serving在Hugging Face中部署TensorFlow视觉模型
- Nyström形式:通过Nyström方法在线性时间和内存中近似自注意力
- 介绍私有中心:一种新的用于构建机器学习的方式
这篇文章是深度强化学习课程的一部分。一个从初学者到专家的免费课程。在这里查看课程大纲。
在第五单元中,我们学习了我们的第一个基于策略的算法,称为Reinforce。在基于策略的方法中,我们旨在直接优化策略,而不使用价值函数。更准确地说,Reinforce是基于策略的方法的一个子类,这个子类通过使用梯度上升来估计最优策略的权重,直接优化策略。
我们看到Reinforce表现良好。然而,由于我们使用蒙特卡洛采样来估计回报(我们使用整个回合来计算回报),我们在策略梯度估计中存在显著的方差。
记住,策略梯度估计是回报增加最陡的方向。也就是说,如何更新我们的策略权重,使得导致良好回报的动作被选择的概率更高。蒙特卡洛方差,我们将在本单元进一步学习,导致训练速度较慢,因为我们需要大量样本来减轻它。
今天我们将学习演员-评论家方法,这是一种结合了基于价值和基于策略方法的混合体系,有助于通过减少方差来稳定训练:
- 一个控制代理行为的演员(基于策略的方法)
- 一个测量采取的动作有多好的评论家(基于价值的方法)
我们将研究其中一种这种混合方法,称为Advantage Actor Critic(A2C),并使用稳定基线在机器人环境中训练我们的代理。我们将训练两个代理来行走:
- 一个双足行走者 🚶
- 一个蜘蛛 🕷️
<p听起来很激动人心吗?让我们开始吧!
- Reinforce中的方差问题
- Advantage Actor Critic(A2C)
- 使用演员-评论家方法减少方差
- 演员-评论家过程
- Advantage Actor Critic
- 使用PyBullet进行机器人模拟的Advantage Actor Critic(A2C)🤖
Reinforce中的方差问题
在Reinforce中,我们希望将轨迹中的动作的概率与回报的高低成比例地增加。
- 如果回报很高,我们将提高(状态,动作)组合的概率。
- 否则,如果回报很低,它将降低(状态,动作)组合的概率。
这个回报 R ( τ ) R(\tau) R ( τ ) 是使用蒙特卡洛采样计算的。确实,我们收集一个轨迹并计算折扣回报,并使用这个分数来增加或减少在该轨迹中采取的每个动作的概率。如果回报好,所有的动作都会通过增加它们被采取的可能性来被“强化”。
R ( τ ) = R t + 1 + γ R t + 2 + γ 2 R t + 3 + . . . R(\tau) = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + … R ( τ ) = R t + 1 + γ R t + 2 + γ 2 R t + 3 + . . .
这种方法的优点是它是无偏的。因为我们不是在估计回报,所以我们只使用我们获得的真实回报。
但问题是方差很高,因为轨迹可能导致不同的回报,这是由于环境的随机性(在每个回合期间的随机事件)和策略的随机性所致。因此,相同的起始状态可能导致非常不同的回报。正因为如此,在相同状态下的回报在不同回合中可能会有很大的差异。
解决方案是通过使用大量的轨迹来减小方差,希望任何一个轨迹引入的方差在总体上都会减小,并提供一个“真实”的回报估计。
然而,显著增加批次大小会降低样本效率。因此,我们需要找到其他机制来减小方差。
如果您想深入了解深度强化学习中的方差和偏差权衡问题,您可以查看以下两篇文章:
- 理解(深度)强化学习中的偏差/方差权衡
- 强化学习中的偏差-方差权衡
优势演员-评论家(A2C)
使用演员-评论家方法减小方差
减小Reinforce算法的方差并更快更好地训练我们的代理的解决方案是使用策略和价值方法的组合:演员-评论家方法。
要理解演员-评论家方法,想象一下你玩一个视频游戏。你可以和一个朋友一起玩,他会给你一些反馈。你是演员,你的朋友是评论家。
一开始你不知道如何玩,所以你会随机尝试一些动作。评论家观察你的动作并提供反馈。
从这个反馈中学习,你将更新你的策略,并在玩游戏时变得更好。
另一方面,你的朋友(评论家)也会更新他们提供反馈的方式,以便下次更好。
这就是演员-评论家背后的理念。我们学习两个函数近似:
-
一个控制我们代理行为的策略函数:π θ ( s , a )
-
一个通过衡量采取的动作有多好来辅助策略更新的价值函数:q ^ w ( s , a )
演员-评论家过程
现在我们已经看到了演员评论家的大致情况,让我们深入了解训练过程中演员和评论家是如何一起改进的。
正如我们所见,演员评论家方法中有两个函数近似(两个神经网络):
-
演员,一个由θ参数化的策略函数:π θ ( s , a )
-
评论家,一个由w参数化的价值函数:q ^ w ( s , a )
让我们看一下训练过程,以了解演员和评论家是如何优化的:
-
在每个时间步t,我们从环境中获取当前状态S t,并将其作为输入传递给我们的演员和评论家。
-
我们的策略接收状态并输出一个动作A t。
- 评论家也将该动作作为输入,并使用S t和A t,计算在该状态下采取该动作的价值:Q值。
- 在环境中执行的动作 At 会输出一个新的状态 St+1 和一个奖励 Rt+1 。
- Actor 使用 Q 值更新其策略参数。
-
由于更新过的参数,Actor 根据新的状态 St+1 产生下一个要执行的动作 At+1 。
-
Critic 然后更新其价值参数。
优势演员评论家 (A2C)
我们可以通过使用优势函数作为评论家而不是动作值函数 来进一步稳定学习。
其思想是,优势函数计算在某个状态下采取该动作相比于该状态的平均值有多好 。它从状态动作对中减去状态的平均值:
换句话说,该函数计算我们在该状态下采取这个动作相比于我们在该状态下获得的平均奖励多出的奖励 。
额外奖励是超过该状态的预期值的部分。
- 如果 A(s,a) > 0:我们的梯度朝这个方向推进 。
- 如果 A(s,a) < 0(我们的动作比该状态的平均值做得更差):我们的梯度向相反方向推进 。
实现这个优势函数的问题在于它需要两个价值函数 —— Q(s,a) 和 V(s) 。幸运的是,我们可以使用 TD 误差作为优势函数的良好估计器。
使用 PyBullet 进行机器人仿真的优势演员评论家 (A2C) 🤖
现在你已经学习了优势演员评论家 (A2C) 的理论知识,你可以使用 Stable-Baselines3 在机器人环境中训练你的 A2C 代理。
在这里开始教程 👉 https://colab.research.google.com/github/huggingface/deep-rl-class/blob/main/unit7/unit7.ipynb
使用排行榜与你的同学比较结果 🏆 👉 https://huggingface.co/spaces/chrisjay/Deep-Reinforcement-Learning-Leaderboard
结束语
恭喜你完成了本章!这里有很多信息。恭喜你完成教程。🥳
如果你对所有这些元素感到困惑,这是正常的。对我和所有学习强化学习的人来说都是如此。
在继续之前,花时间掌握材料。还要看看本文提供的额外阅读材料和深入学习的教学大纲 👉 https://github.com/huggingface/deep-rl-class/blob/main/unit7/README.md
不要犹豫在其他环境中训练你的代理。最好的学习方法就是亲自尝试!
在下一单元中,我们将学习如何使用 Proximal Policy Optimization 来改进演员评论家方法。
并且不要忘记与想学习的朋友分享 🤗!
最后,我们希望通过您的反馈,不断改进和更新课程。如果您有意见,请填写此表格👉https://forms.gle/3HgA7bEHwAmmLfwh9