NSDT工具推荐Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - AI模型在线查看 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 - 3D道路快速建模

策略梯度方法 (PG:Policy Gradient) 是强化学习 (RL:Reinforcement Learning) 中常用的算法。

1、从库里的本能开始

PG的原理很简单:我们观察,然后行动。人类根据观察采取行动。 引用斯蒂芬·库里的一句话:

你必须依靠这样一个事实:你付出了努力来创造肌肉记忆,然后相信它会发挥作用。你如此多地练习和努力的原因是,在比赛过程中你的直觉会在一定程度上发挥作用。 如果你没有以正确的方式去做,就会感觉很奇怪。

不断的练习是运动员建立肌肉记忆的关键。 对于 PG,我们训练一个基于观察来采取行动的策略。 PG 中的训练使得高奖励的行动更有可能发生,反之亦然。

我们保留有效的,丢弃无效的。

在策略梯度方法中,库里是我们的代理人。

  • 他观察环境的状态。
  • 他根据自己对状态 s 的本能(策略 π)采取行动(u)。
  • 他移动,对手做出反应。 一个新的状态形成了。
  • 他根据观察到的状态采取进一步的行动。
  • 经过 运动轨迹τ 后,他根据收到的总奖励 R(τ) 调整自己的本能。

库里看到了情况并立即知道该怎么做。 多年的训练完善了最大化回报的本能。 在强化学习中,本能可以在数学上描述为:

即在给定状态 s 的情况下采取动作 u 的概率。 π 是强化学习中的策略。 例如,当你看到前面有车时转弯或停车的机会有多大:

2、策略梯度的学习目标

我们如何用数学方式制定我们的目标? 期望得到的奖励等于轨迹的概率×相应奖励之和:

我们的目标是找到策略 θ,使其可以创建轨迹 τ :

而轨迹τ能够最大化预期回报:

3、输入特征和奖励

策略梯度方法的输入(即状态s)可以是手工制作的状态特征(如机械臂关节的角度、速度等),但在某些问题领域,强化学习已经足够成熟,可以直接处理原始图像。 π 可以是一个确定性策略,它输出要采取的确切操作(如向左或向右移动操纵杆),也可以是一个随机策略,它输出它可能采取的行动的可能性。

我们记录每个时间步给出的奖励 r。 在篮球比赛中,除了终止状态为0、1、2或3外,其他状态均为0。

我们再引入一个术语 H,称为地平线。 我们可以无限期地运行模拟过程(h→∞),直到达到终止状态,或者我们对 H 步设置限制。

4、优化问题

首先,让我们回顾一下深度学习和强化学习中常见且重要的技巧,函数 f(x) (R.H.S.) 的偏微分等于 f(x) 乘以 log(f(x)) 的偏微分:

f(x) 替换为 π,得到:

另外,对于连续空间,期望可以表示为:

现在,让我们用数学形式形式化我们的优化问题。 我们想要建立一个策略模型,该模型能够产生最大化总回报的轨迹:

然而,要使用梯度下降来优化我们的问题,我们是否需要对奖励函数 r 求导,而该导数可能不可微分或形式化?

让我们将目标函数 J 重写为:

梯度(策略梯度)变成:

好消息! 策略梯度可以表示为期望, 这意味着我们可以使用采样来近似它。 此外,我们对 r 的值进行采样,但不对其进行微分。 这是有道理的,因为奖励并不直接取决于我们如何参数化模型,但轨迹 τ 是。 那么log π(τ) 的偏导数是多少。

π(τ) 定义为:

取对数:

第一项和最后一项不依赖于 θ,可以删除。

所以策略梯度:

变成:

我们使用这个策略梯度来更新策略θ。

5、关于梯度更新的直觉

我们如何理解这些公式?

下划线项是最大对数似然。 在深度学习中,它测量观察到的数据的可能性。 在我们的背景下,它衡量当前策略下轨迹的可能性。 通过将其与奖励相乘,如果轨迹产生高额正奖励,我们希望增加策略的可能性。 相反,如果一个策略导致较高的负面回报,我们希望降低该策略的可能性。 简而言之,保留有效的,丢弃无效的。

如果爬上山意味着更高的奖励,我们将更改模型参数(策略)以增加轨迹向上移动的可能性:

策略梯度有一件重要的事情。 轨迹的概率定义为:

轨迹中的状态密切相关。 在深度学习中,与强相关因子的长序列相乘很容易触发梯度消失或梯度爆炸。 然而,策略梯度只是对梯度进行求和,从而打破了长序列相乘的诅咒。

这使用了一个小技巧:

创建最大对数似然,并且对数打破了长链策略相乘的诅咒。

6、基于蒙特卡洛走子的策略梯度

下面是使用Monte Carlo rollouts来计算奖励的强化学习算法。 即播放整个情节(episode)来计算总奖励:

可以使用许多深度学习软件包轻松计算策略梯度。 例如,这是 TensorFlow 的部分代码:

是的,通常情况下,编码看起来比解释更简单。

7、使用高斯策略进行连续控制

我们如何建立连续控制模型?

假设动作的值是高斯分布的:

该策略是使用高斯分布定义的,其平均值是根据深度网络计算得出的:

以及:

我们可以将 log π 的偏微分计算为:

所以我们可以反向传播:

通过策略网络π来更新策略θ。 该算法看起来与以前完全相同。 只需以稍微不同的方式开始计算策略的对数即可:

8、策略梯度改进

策略梯度存在高方差和低收敛性的问题。

蒙特卡洛播放整个轨迹并记录轨迹的确切奖励。 然而,随机政策可能在不同时期采取不同的行动。 一个小转弯就可以完全改变结果。 所以蒙特卡罗没有偏差(bias),但方差(variance)很高。 方差会损害深度学习优化。 方差为模型学习提供了冲突的下降方向。 一个采样的奖励可能想要增加对数可能性,而另一个采样的奖励可能想要减少它。 这会损害收敛性。 为了减少由动作引起的方差,我们希望减少采样奖励的方差。

增加 PG 中的批大小可以减少方差。

然而,增加批大小会显着降低样本效率。 所以我们不能将其增加太多,我们需要额外的机制来减少方差。

8.1 基线

我们可以在优化问题中减去一项,只要该项与 θ 无关。 因此,我们不使用总奖励,而是用 V(s) 减去它。

我们定义优势函数 A 并根据 A 重写策略梯度:

在深度学习中,我们希望输入特征以零为中心。 直观上,强化学习感兴趣的是了解某个动作是否执行得比平均值更好。 如果奖励总是正数(R>0),PG 总是尝试增加轨迹概率,即使它收到的奖励比其他人少得多。 考虑两种不同的情况:

  • 情况1:轨迹A获得+10奖励,轨迹B获得-10奖励。
  • 情况2:轨迹A获得+10奖励,轨迹B获得+1奖励。

在第一种情况下,PG会增加轨迹A的概率,同时减少B的概率。在第二种情况下,它将增加两者。 作为人类,我们可能会降低这两种情况下轨迹 B 的可能性。

通过引入 V 这样的基线,我们可以重新调整相对于平均动作的奖励。

8.2 普通策略梯度算法

这是使用基线 b 的策略梯度算法的通用算法。

8.3 因果性

未来的行动不应改变过去的决定。 当前的行动只会影响未来。 因此,我们可以改变我们的目标函数来反映这一点:

8.4 奖励折扣

奖励折扣减少了差异,从而减少了远期操作的影响。 这里,使用不同的公式来计算总奖励:

相应的目标函数变为:


原文链接:RL — Policy Gradient Explained

BimAnt翻译整理,转载请标明出处