强化学习笔记-13 Policy Gradient Methods

强化学习算法主要在于学习最优的决策,到目前为止,我们所讨论的决策选择都是通过价值预估函数来间接选择的。本节讨论的是通过一个参数化决策模型\pi(a|s,\theta )来直接根据状态s选择动作,而不是根据价值预估函数v(s|w)来间接选择。

我们可以定义如下Policy Gradient更新策略,来求解参数化决策模型\pi(a|s,\theta )的参数,其中J(\theta_t)表示用于衡量决策模型优劣的损失函数。

\theta_{t+1} = \theta_{t} + \partial_{\theta_{t}} J(\theta_t)

1. Policy Approximation and its Advantages

对于参数化决策模型\pi(a|s,\theta )存在两种建模方式:生成式或判别式。

当动作空间是离散且较小时,可以采用判别式模型h(s,a,\theta ),表示状态-动作对s,a的优劣得分,此时\pi(a|s,\theta )可以表示为下式,这种通过softmax求得选择动作概率,兼顾了ε-greedy动作探索的功能。另一方面在很多情况下随机动作也是最优的,softmax方式具备这种特性。

\pi(a|s,\theta )=\frac{e^{h(s,a,\theta)}}{\sum_{a'\neq a}e^{h(s,a',\theta)}}

当动作空间是连续时,生成式模型是一个比较好选择,一种简单方式是将决策动作分布\pi(a|s,\theta )建模为一个高斯分布,由于动作分布方差的存在,因此也兼顾了动作探索的特性。

\pi(a|s,\theta)=\frac{1}{\sigma(s,\theta)\sqrt{2\pi}}\text{exp}(-\frac{(a-\mu(s,\theta))^2}{\sigma(s,\theta)^2})

2. The Policy Gradient Theorem

接下来关键在于如何找到一个衡量决策模型优劣的损失函数J(\theta_t)。直观上理解,在最优决策下,各状态价值应该也是最优的,因此可以定义:

J(\theta)=\sum_s \mu(s) \sum_a \pi(a|s,\theta) Q(s,a)

此时有

\partial J(\theta)\\=\sum_s \mu(s) \sum_a Q(s,a) \partial_{\theta}\pi(a|s,\theta) \\=\sum_s \mu(s) \sum_a Q(s,a)\pi(a|s,\theta) \frac{\partial_{\theta}\pi(a|s,\theta)}{\pi(a|s,\theta) }\\=E[G(s,a)\frac{\partial_{\theta}\pi(a|s,\theta)}{\pi(a|s,\theta)}]

可以定义如下SGD更新参数式子:

\theta_{t+1}=\theta_{t} + \beta G_t(s,a) \frac{\partial_{\theta}\pi(a|s,\theta_t)}{\pi(a|s,\theta_t)}

根据上式,同MC结合的Policy Gradient Methods:

3. Baseline

因为参数化决策模型中参数\theta在不同s,a下会同步更新,因此某些状态s下其累积收益G远大于其他状态,而决策模型是根据状态来选择动作,所以不同状态s下其累积收益G不同,会引入偏差,这个偏差会影响模型的影响。

因此可以对累积收益G减去状态带来的偏差,即

\hat{G_t(s,a)}=G_t(s,a)-v_t(s)

此时参数更新可以变为:

\theta_{t+1}=\theta_{t} + \beta (G_t(s,a) - v_t(s))\frac{\partial_{\theta}\pi(a|s,\theta_t)}{\pi(a|s,\theta_t)}

另外也可以看出虽然减去状态带来的偏差因子,原来同损失函数J(\theta_t)也是等价的。

\partial J(\theta)\\=\sum_s \mu(s) \sum_a (G(s,a) -v(s))\partial_{\theta}\pi(a|s,\theta)\\=\sum_s \mu(s) (\sum_a G(s,a)\partial_{\theta}\pi(a|s,\theta) - v(s)\sum_a \partial_{\theta}\pi(a|s,\theta))\\ =\sum_s \mu(s) \sum_a G(s,a)\partial_{\theta}\pi(a|s,\theta)

4. Actor–Critic Methods 

\theta_{t+1}=\theta_{t} + \beta (R_{t+1} + \gamma v(s_{t+1}|w_t) - v_t(s|w_t))\frac{\partial_{\theta_t}\pi(a|s,\theta_t)}{\pi(a|s,\theta_t)} \\ w_{t+1}=w_t + \alpha (R_{t+1} + \gamma v(s_{t+1}|w_t) - v_t(s|w_t))\partial_{w_t} v(s|w_t)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面我将为您介绍一个简单的强化学习 policy gradient 的实例。 假设我们有一个小车在一条直线上移动,小车只能向左或向右移动一格,并且每次移动会消耗一定的能量。我们的目标是让小车尽可能快地到达终点,同时尽量少地消耗能量。 为了解决这个问题,我们可以使用 policy gradient 方法。具体来说,我们可以定义一个策略网络,它的输入是当前小车所处的位置,输出是一个概率分布,表示小车向左或向右移动的概率。我们使用该策略网络来生成小车的移动轨迹,并计算每个轨迹的总能量消耗和到达终点所需的步数。然后,使用 policy gradient 方法来更新策略网络的参数,使得总能量消耗最小化。 下面是具体的步骤: 1. 定义策略网络。假设我们使用一个简单的全连接神经网络,它的输入是当前小车所处的位置,输出是一个两维向量,表示小车向左或向右移动的概率。 2. 定义损失函数。我们使用交叉熵作为损失函数,即将策略网络的输出与实际移动方向的 one-hot 向量进行比较,并计算交叉熵损失。 3. 生成轨迹。使用当前的策略网络生成小车的移动轨迹,并计算每个轨迹的总能量消耗和到达终点所需的步数。 4. 计算梯度。使用 policy gradient 方法计算梯度。具体来说,对于每个轨迹,我们计算其总能量消耗和到达终点所需的步数与所有轨迹中的平均值的差异,并将该差异乘以该轨迹的梯度。最终,将所有轨迹的梯度进行平均,得到策略网络的梯度。 5. 更新策略网络参数。使用梯度下降或其他优化算法来更新策略网络的参数,使得总能量消耗最小化。 6. 重复步骤 3-5,直到策略网络收敛。 以上就是一个简单的强化学习 policy gradient 的实例。当然,在实际应用中,还需要考虑许多细节和优化,如使用基线来减小方差、使用函数逼近器来处理高维状态空间等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值