强化学习原理--策略梯度法

举报
剑指南天 发表于 2026/05/21 12:08:05 2026/05/21
【摘要】 在强化学习中,训练数据是每一轮根据策略来采样的新的轨迹,采样的轨迹的质量好坏无法控制,策略神经网络参数更新是受到了训练数据集质量的影响

1.概述

在倒立摆游戏中,agent 通过策略函数控制action,得到环境的反馈。而通过神经网络模型模拟策略函数,并使用梯度来优化策略的方法叫作策略梯度法(policy gradient method)。

2. 使用最简单的随机选择action的策略,进行3000次倒立摆游戏,每次回报情况如下:

3. 原始策略梯度法

3.1 在倒立摆游戏中策略函数的目标

基于策略函数 πθ 生成的一条轨迹 。这条轨迹发生的概率如下:

p(S0) p(St+1|St,At) 是环境物理规律决定的,所以概率为1。所以 =

这条轨迹的回报

假设已经收集到所有的由 πθ 生成的轨迹,所有轨迹回报的期望是 𝐽(𝜃) =  E𝜏∼𝜋𝜃 [𝐺(𝜏)]  = Σ(Pr(𝜏) 𝐺(𝜏))

现实中是不可能得到所有轨迹的。但是根据大数定律,通过尽可能多的轨迹,就可以近似 𝐽(𝜃)。

为了使回报最大化,所以策略函数的目标就是 𝐽(𝜃) 最大(𝜃 是神经网络的参数),可以使用梯度上升法,必须求解 𝐽(𝜃) 的梯度。需要求导的参数是 𝜃。首先就是要证明 𝐽(𝜃) 可导

3.2 策略梯度定理的实践

3.2.1 数学推导

已知,                                                 

                    

3.2.2 数学推导结论的实践意义:

神经网络模拟 πθ ,输入为某个时间步的状态 St,输出为 At 的概率。Gτ 是一条轨迹的回报。通过尽可能多的轨迹就可以近似期望。

3.2.3 𝐽(𝜃) 在深度学习中可以看做 loss。在深度学习中梯度的方向是朝向 loss 变小的方向,为了使梯度朝向 loss 变大的方向,所以需要使用负梯度。等效的数学表达式 -𝐽(𝜃) 最小。

3.3 使用原始的策略梯度法,进行3000次倒立摆游戏,每次回报情况如下图。相比随机策略,回报提升明显。但是训练不稳定。

①训练过程中每条轨迹回报


②测试过程中每条轨迹回报

4. REINFORCE算法

4.1 原始的策略梯度中,无论在哪个时刻𝑡,式子中都是𝐺(𝜏)∇𝜃 log𝜋𝜃(𝐴𝑡|𝑆𝑡),我们始终会使用固定不变的权重𝐺(𝜏)来增加(或减少)采取行动 𝐴𝑡 的概率。但是采取行动𝐴𝑡 之前获得的奖励与执行𝐴𝑡 的概率无关。采取行动𝐴𝑡 的概率只和采取行动𝐴𝑡 之后期望获得的回报有关。所以将𝐺(𝜏) 修正为 G(t)。

4.2 使用REINFORCE算法,进行3000次倒立摆游戏,每次回报情况如下图。相比原始的策略梯度法,回报提升明显。但是训练不稳定。

①训练过程中每条轨迹回报

②测试过程中每条轨迹回报


4.3 数学推导

设 G(τ) = -b(St)表示在 t 时刻之前的所有回报,在 t 时刻发生时,-b(St) 为常数。参考带基线的策略梯度法的数学证明。

5. 带基线(baseline)的策略梯度法

5.1 REINFORCE玩倒立摆有一个问题,那就是不管怎么推车,获得的期望回报都是正梯度。也就是说不管怎么玩,都会提升某个状态采取某个动作的概率,即使奖励很少也是如此。但是正常情况下,期望回报很少时,就应该降低某个状态下采取某个动作的概率。也就是说,应该期望回报很高时,给予策略正梯度,而在获得奖励很少时,给负的梯度。这就是带基线(baseline)的策略梯度法。

                                            𝑏(𝑆𝑡)可以是任何函数

下图表示游戏结束之前的杆子失去平衡的状态。在这种状态下,无论采取什么样的行动,在3个时间步之后游戏都将结束。

设图的状态为𝑠,在此状态下采取的行动为𝑎。假定从状态𝑠开始3个时间步后游戏一定会结束。在这种情况下,状态𝑠的回报𝐺为3(这里设折扣因子𝛾为1)。如果使用的是没有基线的REINFORCE,那么状态𝑠下的行动𝑎就会因为权重3而被增强(状态𝑠下选择行动𝑎的概率会变高)。但无论采取什么样的行动,3个时间步之后游戏一定会结束,所以可以说这种提高行动𝑎被选择的概率的工作是无意义的。此时就要用到基线了。这里使用价值函数作为基线,假设图中的例子中的𝑉𝜋𝜃(𝑆𝑡)=3。此时的权重为𝐺𝑡−𝑉𝜋𝜃所以是0。由于权重是0,因此无论选择什么行动,采取那个行动的概率都不会变大,也不会变小。像这样使用基线,有望减少无谓的训练。

5.2 使用带基线(baseline)的策略梯度法,进行3000次倒立摆游戏,b(St)设定为5,每次回报情况如下图。相比REINFORCE算法,回报没有明显提升。但是训练不稳定。

①训练过程中每条轨迹回报

②测试过程中每条轨迹回报

5.3 基线的数学推导

首先证明下面公式成立

假设随机变量𝑥是基于概率分布𝑃𝜃(𝑥)生成的。𝑃𝜃(𝑥)会根据参数𝜃改变概率分布的形状。此时有以下式子成立:

由于𝑃𝜃(𝑥)是概率分布,因此所有𝑥的值的和为1。然后,求这个式子的梯度。

接下来,使用log梯度的技巧将式子展开,过程如下所示:

具体来说,用𝐴𝑡 代替𝑥,然后使用𝜋𝜃(·|𝑆𝑡)代替𝑃𝜃(·)。这样就可以得到以下式子。

对于任意常数 c 和随机变量 x,只要期望 E[x]存在,就恒有:

已知 E[x] = 0,代入即得:

将函数 𝑏(𝑆𝑡) 放入期望值

在整个𝑡 = 0∼𝑇的范围都成立,所以可以得到以下式子:

6. Actor-Critic(演员-评论家)

6.1 在REINFORCE算法中,使用基于神经网络建模的价值函数作为基线,这个算法叫做Actor-Critic。当 t 时刻,回报大于状态价值期望时,给予策略正梯度,回报小于状态价值期望时,给予策略负梯度回报等于状态价值期望时,不需要更新策略函数参数。所以价值函数的训练目标是接近 J(θ) 最大值时的Gt 。所以下面公式中存在一个问题,J(θ) 最大值没有得到,就无法确定 𝐺𝑡 的值。也就是说,在抵达目标之前,无法更新策略和价值函数。

6.2 时序差分法(TD方法,Time Difference Method)

贝尔曼期望方程:𝑉𝜔 (𝑆𝑡)=𝔼𝜋 [𝑅𝑡+𝛾𝑉𝜔(𝑆𝑡+1)|𝑆𝑡],可以使用𝔼𝜋 [𝑅𝑡+𝛾𝑉𝜔(𝑆𝑡+1)|𝑆𝑡] 来近似Gt使用神经网络对价值函数建模时,以接近 𝑅𝑡+𝛾𝑉𝜔(𝑆𝑡+1) 为目标训练𝑉𝜔(𝑆𝑡) 的值。具体来说就是将𝑉𝜔(𝑆𝑡)和𝑅𝑡+𝛾𝑉𝜔(𝑆𝑡+1)的均方差作为损失函数,通过梯度下降法更新神经网络的权重。

使用TD方法训练价值函数时,使用1个时间步(或𝑛个时间步)后的结果就能进行更新。

6.3 使用一步时序差分法进行3000次倒立摆游戏,每次回报情况如下图。相比REINFORCE算法,回报有明显提升。但是训练不稳定。

①训练过程中每条轨迹回报

②测试过程中每条轨迹回报

7. 总结:

深度学习中,使用的训练数据集是固定不变的,训练数据集像标准答案一样,神经网络只要通过更新参数不断地贴近训练数据集就可以。但是在强化学习中,训练数据是每一轮根据策略来采样的新的轨迹,采样的轨迹的质量好坏无法控制,策略神经网络参数更新是受到了训练数据集质量的影响,这些就会导致训练不稳定。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。