深入了解策略梯度方法
了解全局
我们刚刚了解到,策略梯度方法旨在找到参数可以最大化预期回报。
其理念是,我们有一个参数化的随机策略。在我们的案例中,神经网络输出一个关于动作的概率分布。选择每个动作的概率也称为动作偏好。
如果我们以 CartPole-v1 为例
- 作为输入,我们有一个状态。
- 作为输出,我们有一个关于该状态下动作的概率分布。
我们使用策略梯度的目标是通过调整策略来控制动作的概率分布,以便在将来更频繁地采样好的动作(最大化回报)。每次智能体与环境交互时,我们都会调整参数,以便在将来更可能采样好的动作。
但我们如何使用预期回报来优化权重?
其理念是,我们将让智能体在一个片段中进行交互。如果我们在片段中获胜,我们认为每个采取的动作都是好的,并且必须在将来更多地采样,因为它们导致了获胜。
因此,对于每个状态-动作对,我们都希望增加:在该状态下采取该动作的概率。如果我们输了,则减少。
策略梯度算法(简化)如下所示
现在我们已经了解了全局,让我们更深入地了解策略梯度方法。
深入了解策略梯度方法
我们有我们的随机策略它有一个参数。这个在给定状态的情况下,输出关于动作的概率分布。
其中是智能体从状态中选择动作的概率来自状态给定我们的策略。
但我们如何知道我们的策略是否良好?我们需要一种方法来衡量它。为此,我们定义了一个分数/目标函数,称为.
目标函数
目标函数告诉我们,给定一条轨迹(不考虑奖励的状态动作序列,与情节相反),智能体的性能,并输出预期累计奖励。
让我们详细介绍一下这个公式。
- 预期回报(也称为预期累计奖励)是加权平均值(权重由给出,用于所有可能的回报值可以取到)。
-: 来自任意轨迹的回报。为了获取这个值并用它来计算预期回报,我们需要将其乘以每条可能轨迹的概率。
-: 每个可能轨迹的概率(该概率取决于,因为它定义了用于选择轨迹动作的策略,而轨迹动作会影响访问的状态)。
-: 预期回报,我们通过将所有轨迹的概率(在给定的情况下)乘以该轨迹的回报。
因此,我们的目标是通过找到来最大化预期累计奖励,它将输出最佳动作概率分布
梯度上升和策略梯度定理
策略梯度是一个优化问题:我们想要找到的值来最大化我们的目标函数,所以我们需要使用梯度上升。它是梯度下降的逆运算,因为它给出了.
最陡峭上升的方向。(如果你需要回顾梯度下降和梯度上升之间的区别,可以参考这个和这个)。
我们梯度上升的更新步骤为
我们可以反复应用此更新,希望收敛到最大化.
的值。但是,计算:
的导数有两个问题。我们无法计算目标函数的真实梯度,因为它需要计算每条可能轨迹的概率,这在计算上非常昂贵。因此,我们希望使用基于样本的估计(收集一些轨迹)来计算梯度估计。
我们还有一个问题,我会在下一节可选部分中解释。为了区分这个目标函数,我们需要区分状态分布,称为马尔可夫决策过程动力学。它与环境相关。它告诉我们在给定当前状态和智能体采取的动作的情况下,环境进入下一个状态的概率。问题是,我们无法区分它,因为我们可能不知道它。
幸运的是,我们将使用一种称为策略梯度定理的解决方案,它将帮助我们将目标函数重新表述为一个可微函数,该函数不涉及状态分布的微分。
如果你想知道我们如何推导出这个近似梯度的公式,请查看下一节(可选)。
Reinforce 算法(蒙特卡罗 Reinforce)
Reinforce 算法,也称为蒙特卡罗策略梯度,是一种策略梯度算法,它使用来自整个情节的估计回报来更新策略参数。:
在一个循环中
使用策略收集一个情节
使用情节来估计梯度
更新策略的权重
我们可以这样解释这个更新
-表示在状态来自状态下选择动作的(对数)概率的**最陡上升方向**。.
-这意味着如果我们想要提高/降低选择动作
- 的对数概率,我们应该**如何改变策略的权重**。
- 是评分函数。
如果回报很高,它将**提升**(状态,动作)组合的概率。
否则,如果回报很低,它将**降低**(状态,动作)组合的概率。