之前我们讨论的都是确定性策略确定性奖励,即策略和奖励都是一个函数,而不是分布,接下来我们讨论不确定的。

策略梯度算法

给定模型的参数$\theta$,我们可以计算某个轨迹$\gamma$发生的概率为:

我们把轨迹所有的奖励$r$都加起来,就得到了$R(\gamma)$ ,其代表某一个轨迹$\tau$的奖励。我们要做的就是调整演员内部的参数$\theta$, 使$R(\tau)$的值越大越好。

但实际上$R(\tau)$并不只是一个标量(scalar),它是一个随机变量,因为演员在给定同样的状态下会采取什么样的动作,这是有随机性的。因此我们可以计算其期望

因为我们要让奖励越大越好,所以可以使用梯度上升的方法来最大化奖励期望,这便是梯度策略算法的本质

其中,只有$p_\theta(\tau)$与$\theta$有关。

又由于真实期望其实无法计算(需要无穷多采样),所以我们使用样本均值近似期望。这就要求我们把整个式子转化成整体求期望的形式,又由于$\sum_\tau p_\theta(\tau)*$ 等于求期望,所以我们进行如下推导:

其中:

其中前两项取决与环境,与智能体$\theta$无关,所以梯度为0,即:

综合以上$(1)(2)(3)(4)$式,可得:

有了梯度的公式$(6)$,我们便可以采用梯度上升更新$\theta$来进行学习:

其中$\eta$为学习率。仔细观察$(6)$可知,想要(近似)求$R$对于$\theta$的梯度,我们必须得到一个完成的轨迹$\tau$,因此我们可以使用模型$\tau$在环境中采样一个轨迹,,然后用其计算策略梯度更新模型,进而继续采样轨迹,达成循环。

image-20240

实现技巧

添加基线

在策略梯度方法中,我们通过沿参数$\theta$梯度上升方向调整$\theta$,以此来改变预测各个动作的概率。

当奖励为正时概率增加,为负时概率减小。

但注意公式里所说的”奖励“为整个轨迹$\tau$,即整局的奖励$R\left(\tau^n\right)$,而这个奖励通常为正,也就是说采样到的动作概率基本上都会增加。

虽然softmax后,增加量的大小有差异,也会起到”学习“的作用,

但问题是:有可能有些轨迹没有采样到,这就导致其不会增加,相较于其他被采样到的动作就相当于减少了!

所以要避免这种情况发生,我们可以将$R\left(\tau^n\right)$减去其多个轨迹的均值,称为”基线“,从而达到平衡正负的作用。

有时$b$也可以用一个网络计算。

分配合适分数

正如上文所说,在一个轨迹$\tau$中的所有动作,都会乘以这局的奖励$R\left(\tau^n\right)$来计算梯度,这显然时不公平的,因为一局的分数为正,不代表这一句中的每个动作都是好的。

一个做法是计算某个状态-动作对的奖励的时候,不把整场游戏得到的奖励全部加起来,只计算从这个动作执行以后得到的奖励。因为这场游戏在执行这个动作之前发生的事情是与执行这个动作是没有关系的

接下来更进一步,我们把未来的奖励做一个折扣,即我们会在$R$前面乘一个折扣因子$\gamma$,如果$\gamma=0$,表示我们只关心即时奖励。

细节

实际在做策略梯度的时候,我们是以$(状态,决策)$为单位。实际更新梯度的过程可写为:

$A$是优势函数(advantage),即用累积奖励减去基线,它要估测的是在状态 $s_t$ 采取动作 $a_t$ 是好的还是不好的。