RL随笔-policy gradient

ok,从O开始,也就是策略开始,先了解策略优化的为什么,最基础的方法是什么,之后在进一步的深入下去

通俗讲:方法是 优化做法,然后得到更好的结果

很好的逻辑,总不能我需要好的结果,然后不去动做法,这是不现实的

基本要素是 状态s 、动作a 、奖励r

之后 会有自定义 \(G_t\) 奖励函数,之后有

目标函数

\(J(\theta)=\mathbb{E}{\tau \sim \pi\theta}\Big[\sum_{t=0}^{T} r_t\Big]\)

这里解释一下这个公式,首先 \(\mathbb{E}\) 是期望的含义,目标的含义便是 求在策略 $\pi_\theta $ 下所有轨迹 \(\tau\) 得到的奖励的期望,期望的话简单来说就是加和取平均,\(J(\theta) = \sum_{\tau} P(\tau|\pi_\theta) \Big(\sum_{t=0}^T r_t\Big),\) 加和平均也就可以看成了概率乘权值,由于有多条轨迹,所以又是加和了,化简一下就是期望的形式了;其次 \(\sum_{t=0}^T r_t\) 就是一个奖励函数加和,可以更换为不同的奖励函数,比如 \(\sum_{t\le t'} \eth^{t'-t} r_{t'}\)

简要概括:目标函数就是“策略下,整条轨迹的平均回报”。

这里再说一下 轨迹,轨迹就是一条RL的路线 \((s_0,a_0,r_0,s_1,a_1,r_1,\cdots,s_n,a_n,r_n)\) ,然后目标是聚焦在在采用 $\pi_\theta $ 后,所有轨迹的整体奖励期望;至于为什么会有多条轨迹?多条轨迹就是预设的,我就是每轮采集就是收集这些条轨迹的数据,不用为什么,就是机制。

其次的话,和想象的差不多,实际就是这样做的,使用多条轨迹来训练更新策略,然后根据是否实时更新,然后分了两类,重点关注了 就是不实时更新的那一类,也就是每轮采集完之后,用新采集的数据来更新策略,可以想像出这种做法的复杂度为 n*m,也就是采集 n 次,每次采集 m 条轨迹数据,当然 在采集时有时也会使用 m 步数作为标准,每次不管采集多少条,我只在乎你采集了多少步,到了指定步数就停止,这样做的好处在于 统一了batch_size,利用更好的规划/并行处理数据 or 训练

ok,下一部分开始策略梯度推导

再回到 目标函数 \(J(\theta)=\mathbb{E}{\tau \sim \pi\theta}\Big[\sum_{t=0}^{T} r_t\Big]\) ,针对每个 \(\tau\) ,我们又可以把公式变化为 :

\(\mathbb{E}{\tau \sim \pi_\theta} R_\tau \rightarrow \sum_{\tau} P(\tau|\pi_\theta)R_\tau\)

然后 现在要求 目标的梯度,在求梯度之前先介绍一个技巧 对数导数技巧:

\(\nabla_\theta P(x;\theta) = P(x;\theta) \nabla_\theta \log P(x;\theta).\)

其实原理也蛮简单的,$\nabla_\theta \log P(x;\theta) = \frac{\nabla_\theta P(x;\theta)}{P(x;\theta)} $,之后乘过来就变为了要得到的形式

之后回到目标梯度:

\(\nabla \sum_{\tau} P(\tau|\pi_\theta)R_\tau = \sum_{\tau} \nabla P(\tau|\pi_\theta)\, R_\tau\) ,并且 求梯度时只求与 $\pi_\theta $ 有关的参数,\(R_\tau\) 可以看作为常数

最终得到 $ \sum_{\tau} P(\tau|\pi_\theta), \nabla logP(\tau|\pi_\theta), R_\tau = \mathbb{E}{\tau \sim \pi_\theta}\nabla logP(\tau|\pi_\theta), R_\tau $

现在就聚焦在了两个部分 $ \nabla logP(\tau|\pi_\theta)$ 与 \(R_\tau\)

\(R_\tau\) 蛮好理解的就是 \(\tau\) 奖励之和

$ P(\tau|\pi_\theta) = \rho(s_0)\Pi_{t=0}^{T-1} \pi_\theta(a_t|s_t)P(s_{t+1}|a_t,s_t) $

取 log 之后 $ log P(\tau|\pi_\theta) = log, \rho(s_0)+ \sum_{t=0}^{T-1} [log \pi_\theta(a_t|s_t)+ log P(s_{t+1}|a_t,s_t)]$

由于 \(\rho\)\(P(s_{t+1}|a_t,s_t)\) 与 $\theta $ 是无关的,一个是初始状态,另外一个是环境影响,均与策略无关

所以 求梯度时 $ \nabla logP(\tau|\pi_\theta) = \nabla \sum_{t=0}^{T-1} log \pi_\theta(a_t|s_t) =\sum_t \nabla log \pi_\theta(a_t|s_t)$

还有一个需要注意的问题,在推导时 t 的范围时 \(0\sim \text{T-1}\) 的,但有的最终结果写的是 T,这里就需要明确一下这个时间步对应的含义是什么。

这可以理解为是公式的不同写法,本质上就是 在状态 \(s_t\) 下做出 \(a_t\) 的概率,所以只要有 \(s_i,a_i,r_i\) 这一步就需要加进去,而一般 最后会有一个 \(s_{T}\) 表示最终状态,我们只需要考虑有状态+动作+奖励的部分,最后的时间步只有一个最终状态。

ok,以上部分求了 目标梯度,并且从源头上做了公式推导,现在具体解释一下 计算出来的梯度有什么含义?容我再理解一会😇

posted @ 2025-09-01 22:07  亦可九天揽月  阅读(15)  评论(0)    收藏  举报