浅尝辄止

理论是灰色的,而生命之树常青。这里是@Dilettante258 的个人博客,用于记载和分享学习。

强化学习进阶-策略梯度算法

Dilettante258's avatar
| 0 views

主要参考:动手学强化学习

之前我们学习了值函数的方法,基于值函数的方法主要是学习值函数,然后根据值函数导出一个策略,学习过程中并不存在一个显式的策略。当值函数最优时,策略是最优的。此时的最优策略是贪婪策略。利用这种方法得到的策略往往是状态空间向有限集动作空间的映射。1

强化学习中另一类非常经典的方法,那就是基于策略(policy-based)的方法。基于策略的方法则是直接显式地学习一个目标策略。策略梯度是基于策略的方法的基础。

值函数方法和直接策略搜索方法的比较1

比较一下值函数方法和直接策略搜索方法的优点:

  1. 直接策略搜索方法是对策略π\pi 进行参数化表示,与值函数方法中对值函数进行参数化表示相比,策略参数化更简单,有更好的收敛性。
  2. 利用值函数方法求解最优策略时,策略改善需要求解argmaxaQθ(s,a)\arg\max_{a}Q_{\theta}(s,a) ,当要解决的问题动作空间很大或者动作为连续集时,该式无法有效求解。
  3. 直接策略搜索方法经常采用随机策略,因为随机策略可以将探索直接集成到所学习的策略之中,策略可以自然地表示为动作的概率。

与值函数方法相比,策略搜索方法也普遍存在一些缺点,比如:

  1. 策略搜索的方法容易收敛到局部最小值;
  2. 评估单个策略时并不充分,方差较大。

策略梯度

基于策略的方法首先需要将策略参数化。假设目标策略πθ\pi_\theta 是一个随机性策略,并且处处可微,其中θ\theta是对应的参数。我们可以用一个线性模型或者神经网络模型来为这样一个策略函数建模,输入某个状态,然后输出一个动作的概率分布。

将动作表示为概率的另一个优点是它可以平滑地表示:如果稍微改变神经网络的权重,网络的输出也会跟着改变。在输出离散数字的情况下,即使权重进行微小的调整,也可能会导致其跳转到其他动作。但是,如果输出是概率分布,则权重的小变化通常只会导致输出分布的微小变化,例如,稍微增加动作相比其他动作更会被执行的概率。这是一个非常不错的属性,因为梯度优化方法都是通过稍微调整模型参数来改善结果的。2

将策略学习的目标函数定义为

J(θ)=Es0[Vπθ(s0)]J(\theta)=\mathbb{E}_{s_0}[V^{\pi_\theta}(s_0)]

将目标函数对策略θ求导,得到导数后,就可以用梯度上升方法来最大化这个目标函数,从而得到最优策略。

J(θ)J(\boldsymbol{\theta}) 表示策略πθ\pi_θ的性能度量 J(θ)\nabla J(\boldsymbol{\theta}) 表示J(θ)J(\boldsymbol{\theta})关于θ的偏导数

θJ(θ)sSνπθ(s)aAQπθ(s,a)θπθ(as)=sSνπθ(s)aAπθ(as)Qπθ(s,a)θπθ(as)πθ(as)=Eπθ[Qπθ(s,a)θlogπθ(as)]\begin{aligned} \nabla_{\theta}J(\theta)& \propto\sum_{s\in S}\nu^{\pi_\theta}(s)\sum_{a\in A}Q^{\pi_\theta}(s,a)\nabla_\theta\pi_\theta(a|s) \\ &=\sum_{s\in S}\nu^{\pi_\theta}(s)\sum_{a\in A}\pi_\theta(a|s)Q^{\pi_\theta}(s,a)\frac{\nabla_\theta\pi_\theta(a|s)}{\pi_\theta(a|s)} \\ &=\mathbb{E}_{\pi_\theta}[Q^{\pi_\theta}(s,a)\nabla_\theta\log\pi_\theta(a|s)] \end{aligned}

策略梯度根据累积总奖励,定义了改进策略所需更改的神经网络参数的方向。梯度的缩放大小与所执行动作的价值(即公式中的Q(s,a))成比例关系,并且梯度本身等于所执行动作的对数概率的梯度这意味着会尝试增加提供良好总奖励的动作的概率,并降低最终结果不好的动作的概率。公式中的是期望值,仅表示平均了在环境中执行了好几步的梯度。

使用Q(s,a)而不是仅使用0或1常数的第二个原因是,增加片段开始时优质动作的概率,并减少更接近片段结尾的动作(因为Q(s,a)包含折扣因子,所以会自动考虑较长动作序列的不确定性)。2

策略梯度算法为在线策略(on-policy)算法,即必须使用当前策略πθ\pi_\theta采样得到的数据来计算梯度。

可以通过优化损失函数来实现策略梯度方法,损失函数表示为L=Q(s,a)logπ(as)L=-Q(s,a)\log\pi(a\mid s)。负号很重要,因为在优化期间,损失函数会被最小化,但是我们希望最大化策略梯度。

在计算策略梯度的公式中,我们需要用到Qπθ(s,a)Q^{\pi_{\theta}}(s,a),可以用多种方式对它进行估计。接下来要介绍的 REINFORCE 算法便是采用了蒙特卡洛方法来估计Qπθ(s,a)Q^{\pi_{\theta}}(s,a),对于一个有限步数的环境来说,REINFORCE 算法中的策略梯度为:

θJ(θ)=Eπθ[t=0T(t=tTγttrt)θlogπθ(atst)]\nabla_\theta J(\theta)=\mathbb{E}_{\pi_\theta}\left[\sum_{t=0}^T\left(\sum_{t^{\prime}=t}^T\gamma^{t^{\prime}-t}r_{t^{\prime}}\right)\nabla_\theta\log\pi_\theta(a_t|s_t)\right]

其中,T是和环境交互的最大步数。

REINFORCE

image-20231019192652759

上述算法在几个重要方面与Q-learning不同:

  1. 不需要显式的探索。在Q-learning中,使用ε-greedy策略来探索环境,并防止智能体陷入非最优策略的困境。现在,利用神经网络返回的概率,可以实现自动探索。在开始时,使用随机权重初始化神经网络,它会返回均匀的概率分布。此分布对应于智能体的随机行为。
  2. 不需要使用回放缓冲区。策略梯度方法属于在线策略方法,这意味着我们无法用旧策略获得的数据来训练。它有优点,也有缺点。优点是这些方法通常收敛更快。缺点是,与诸如DQN之类的离线策略方法相比,它们通常需要与环境进行更多的交互。
  3. 不需要目标网络。我们在这里使用Q值,但是它们是根据我们从环境中得到的经验获得的。在DQN中,我们使用目标网络打破了Q值近似时的相关性,但是我们现在不再进行近似了。2

REINFORCE 算法是策略梯度乃至强化学习的典型代表,智能体根据当前策略直接和环境交互,通过采样得到的轨迹数据直接计算出策略参数的梯度,进而更新当前策略,使其向最大化策略期望回报的目标靠近。这种学习方式是典型的从交互中学习,并且其优化的目标(即策略期望回报)正是最终所使用策略的性能,这比基于价值的强化学习算法的优化目标(一般是时序差分误差的最小化)要更加直接。

代码实践

链接

基于策略的方法与基于价值的方法比较2

策略方法可以直接优化我们关心的内容:行为。

策略方法是在线策略方法,需要从环境获取新鲜样本。价值方法可以从来自旧策略、人工制造和其他来源的旧数据受益。

策略方法的采样效率通常较低,这意味着它们需要与环境进行更多交互。价值方法可以受益于较大的回放缓冲区。但是,采样效率高并不意味着价值方法的计算效率也更高,情况通常恰恰相反。

在某些情况下,策略方法是更自然的选择,例如在持续控制问题或访问环境简单而快速的情况下。

[^Reinforcement Learning: An Introduction]: second edition by Richard S. Sutton and Andrew G. Barto

Footnotes

  1. 郭宪 / 方勇纯 2

  2. Maxim Lapan 2 3 4