书接上文,有一个没搞懂的地方,就是既然两种方法,好像都叫策略梯度,一种是通过直接对trajectory求导,一种是利用一大堆value和Q function推导出来的两个算法,长得特别像,到底有什么区别。
算法1,通过对价值函数的推导
然后利用累计奖励 Gt 作为 $Q^{\pi_\theta}(s,a)$ 的无偏估计。
算法2,通过policy关于trajectory的gradient
这两个很像,但是一个是有括号的,有个是没括号的。
今天在翻Cohere的一篇讲RLOO的文章的时候看到了一个单词,叫做Vanilla PG。
然后发现好像世界上存在两个算法,一个叫做 Vanilla policy gradient ,一个叫做 reinforces。
Note that the key distinguishing factor between Vanilla PG and REINFORCE as referred to in this work, is that Vanilla PG uses the REINFORCE estimator on the trajectory return starting from the context formed by the prompt and a partial completion, whereas the REINFORCE estimator described in Section 2.2 is applied to the the full trajectory return.
翻译过来大概是这样:
- Vanilla PG:Vanilla PG使用REINFORCE估计器来计算从由提示(prompt)和部分完成(partial completion)形成的上下文开始的轨迹回报。这意味着Vanilla PG在计算策略梯度时,只考虑了从当前上下文(即提示和已经生成的部分文本)到生成结束的这部分轨迹的回报。换句话说,Vanilla PG在每个时间步(即每个生成的标记)都独立地应用REINFORCE估计器,只考虑从该时间步到生成结束的回报。
- REINFORCE:相比之下,本文中描述的REINFORCE算法(在第2.2节中)将REINFORCE估计器应用于整个轨迹回报,即从生成开始到结束的完整序列。这意味着REINFORCE在计算策略梯度时,考虑了整个生成序列的回报,而不仅仅是从当前上下文到生成结束的部分。
这么一看,这不就是算法1和算法2的差别吗?所以说 Vanilla PG 有点像是一种GAE里面把 $\lambda=1$ 的 A2C。
然后据说Sutton的书里应该把这东西写了,但是没找到。
关于算法1,也即Vanilla PG的推导可以看 三、PG/VPG/Reinforce 策略梯度方法 - 知乎 (zhihu.com)
关于算法2的推导,很简短就是了,直接让
然后两遍求个梯度就可以了。
然后值得一提的是这似乎这两种算法不仅形式上有所差别,实际的作用效果也确实有所差别。