论文读到了哪一页:
强化学习的目标是学习到一个策略 πθ 来最大化期望回报。一种直接的方法是在策略空间直接搜索来得到最佳策略,称为策略搜索(Policy Search)。
策略搜索本质是一个优化问题,可以分为基于梯度的优化和无梯度优化。策略搜索和基于值函数的方法相比,策略搜索可以不需要值函数,直接优化策略。参数化的策略能够处理连续状态和动作,可以直接学出随机性策略。
基于策略函数相对于基于值函数的优点:
-
连续动作空间:They can be used natively in continuous action spaces without compromising the applicability to discrete spaces
-
策略可以是随机性的而不是确定性的(这个其实有点牵强,因为基于值函数的应该也可以搞成一个概率分布):In contrast to value-based methods, policy gradient algorithms inherently learn stochastic policies, which results in smoother search spaces and partly remedies the exploration problem of having to acquire knowledge about the environment in order to optimize the policy
-
策略的更新是平滑的(收敛性更好):policy gradient methods enable smoother changes in the policy during the learning process, which may result in better convergence properties
| ![[policy-gradient.pdf#page=3&rect=114,502,491,730&color=annotate |
policy-gradient, p.2]] |
优势函数(Advantage):
Aπ(s,a):=Qπ(s,a)−Vπ(s)
策略梯度(Policy Gradient)
策略梯度(Policy Gradient)是一种基于梯度的强化学习方法集合,其本身不是一个强化学习方法。
假设 πθ 是一个关于 θ 的连续可微函数,我们可以用梯度上升的方法来优化参数 θ 使得目标函数 J(θ) 最大。
目标函数定义如下,表示执行某策略所能得到的平均回报:
J(θ)=Eτ∼pθ(τ)[G(τ)]=Eτ∼pθ(τ)[t=0∑T−1γtrt+1]
由此,我们首先求得目标函数对于策略参数 θ 的导数:
∂θ∂J(θ)=∂θ∂∫pθ(τ)G(τ)dτ=∫(∂θ∂pθ(τ))G(τ)dτ=∫pθ(τ)(pθ(τ)1∂θ∂pθ(τ))G(τ)dτ=∫pθ(τ)(∂θ∂logpθ(τ))G(τ)dτ=Eτ∼pθ(τ)[∂θ∂logpθ(τ)G(τ)]
可以看到:∂θ∂logpθ(τ) 表示如果要优化 pθ(τ),也就是轨迹 τ 出现的概率,我们要优化的 θ 的方向与变化率,G(τ) 表示的是我们优化的值。参数 𝜃 优化的目标是使得总回报 𝐺(𝜏) 越大的轨迹 𝜏 的概率 𝑝𝜃(𝜏) 也越大。只有好的轨迹概率大了之后,期望才会大。
其中,∂θ∂logpθ(τ) 可以进一步分解为:
∂θ∂logpθ(τ)=∂θ∂log(p(s0)t=0∏T−1πθ(at∣st)p(st+1∣st,at))=∂θ∂(logp(s0)+t=0∑T−1logπθ(at∣st)+logp(st+1∣st,at))=t=0∑T−1∂θ∂logπθ(at∣st)
其中,第一步将每一个轨迹分成了若干了部分,即一个轨迹出现的概率等于初始状态出现的概率 p(s0)× 通过策略 πθ 下一步选择动作 at 的概率 × 选择该动作后状态转移至 st 的概率。
第二步根据对数函数的性质,括号内的所有乘号变为加号。
第三步将括号内的前后两项剔除(对于参数 θ 来说是常数),得到最后的和公式。可以看出,∂θ∂logpθ(τ) 是和状态转移概率无关,只和策略函数相关,这也非常符合我们的直觉。
因此,策略梯度 ∂θ∂J(θ) 可以再写为:
∂θ∂J(θ)=Eτ∼pθ(τ)[(t=0∑T−1∂θ∂logπθ(at∣st))G(τ)]=Eτ∼pθ(τ)[(t=0∑T−1∂θ∂logπθ(at∣st))(G(τ1:t−1)+γtG(τt:T))]=Eτ∼pθ(τ)[t=0∑T−1(∂θ∂logπθ(at∣st)γtG(τt:T))]
策略梯度的另一个证明可见:(1 封私信 / 4 条消息) 【策略梯度定理】推导、证明、深入理解与代码实现 - 知乎
之所以可以把 G(τ1:t−1) 舍去,是因为时刻 t 之前的回报和时刻 t 之后的动作无关,即每一步在我们选择下一个动作时,影响的仅仅是后面获得的总回报,不会影响到前面已经获得的回报。证明可见 https://github.com/nndl/solutions/issues/75:
- 先拆开两个总回报,我们只需要证明第一项(我们记为公式 A)为 0 就可以了:
∂θ∂J(θ)=Eτ∼pθ(τ)[(t=0∑T−1∂θ∂logπθ(at∣st))(G(τ1:t−1)+γtG(τt:T))]=Eτ∼pθ(τ)[t=0∑T−1G(τ1:t−1)∂θ∂logπθ(at∣st)]+Eτ∼pθ(τ)[t=0∑T−1γtG(τt:T)∂θ∂logπθ(at∣st)]
- 从直觉上思考,A 是一个对于梯度的贡献量。
上面的公式很重要!
REINFORCE 算法
策略梯度不能称为一种算法,而仅仅是一个思想,一个公式。
我们已知策略梯度 ∂θ∂J(θ) 的计算公式为:
∂θ∂J(θ)=Eτ∼pθ(τ)[t=0∑T−1(∂θ∂logπθ(at∣st)γtG(τt:T))]
其中,期望可以通过采样的方法来进行近似。对于当前策略 πθ,可以根据策略 π 来随机游走采集多个轨迹 τ(1),τ(2),⋯,τ(N),每一条轨迹 τ(n)=s0(n),a0(n),s1(n),a1(n),⋯,其梯度定义为(仅仅把前面的期望换成了后面的平均):
∂θ∂J(θ)≈N1n=1∑N(t=0∑T−1∂θ∂logπθ(at(n)∣st(n))γtGτt:T(n))
结合随机梯度上升算法,我们可以每次采集一条轨迹,计算这条轨迹的梯度及回报,并用回报乘以梯度来更新参数,称为 REINFORCE 算法。

如上,REINFORCE 算法的更新函数非常简单粗暴,也很容易理解:总回报 G 越大,这条轨迹的价值越高,因此我们往这个轨迹的方向策略选择概率更新的值就越多。而后面的导数是一个向量,表示在 θ 这个点,参数更新的方向,沿这个方向更新参数,可以最大化在 st, at 时的回报。
REINFORCE 算法需要在采样的轨迹足够多的时候,N1∑n=1N 才能用来近似模拟分布 $\mathbb{E}{\tau ~ p\theta(\tau)}$,否则会存在偏差。
自然策略梯度算法
在传统的策略梯度算法中,我们根据目标函数梯度 ∇θ(J(θ)) 和步长 α 更新策略权重,这样的更新过程可能会出现两个常见的问题:
- 过冲(Overshooting):更新错过了奖励峰值并落入了次优策略区域
- 下冲(Undershooting):在梯度方向上采取过小的更新步长会导致收敛缓慢
在监督学习问题中,overshooting 并不是什么大问题,因为数据是固定的,我们可以在下一个 epoch 中重新纠正。但在强化学习问题中,如果因为 overshooting 陷入了一个较差的策略区域,则未来的样本批次可能不会提供太多有意义的信息(因为样本也是通过策略的概率分布来采集得到的,还记得我们的期望函数吗,也就是 $\mathbb{E}{\tau \sim p\theta(\tau)}$),用较差的数据样本再去更新策略,从而陷入了糟糕的正反馈中无法恢复。
应该考虑策略对参数变化的敏感度,传统的策略梯度算法无法考虑到这种曲率变化,我们需要引入二阶导数,这正是自然策略梯度相较于传统策略梯度算法的区别。具体怎么来表示参数变化敏感度来约束参数变化就不展开了,详情还是看下面链接吧:
(1 封私信 / 6 条消息) Proximal Policy Optimization (PPO) 算法理解:从策略梯度开始 - 知乎
PPO (Proximal Policy Optimization) 近端策略优化
PPO 算法是对 REINFORCE 算法的一步步的优化。
TRPO (Trust Region Policy Optimization) 信赖域策略优化算法
是现代强化学习的基础,它以自然策略梯度优化为基础,迅速获得普及,成为主流强化学习算法,因为它在经验上比自然策略梯度算法表现得更好、更稳定。尽管此后它已被 PPO 超越,但它的仍然具有重要的意义。
GRPO 算法
DDPG 算法