在增强学习中有一大类方法叫policy gradient,最典型的是REINFORCE。
在这类方法中,目标函数J(w)(通常是the expectation of long term reward)对policy参数w的gradient为:
▽J(w)
== E[ ▽logπ(a|s) * return ]
== E[ ▽logπ(a|s) * (return-baseline)]
~=计算N个sample的 ▽logπ(a|s) *(return-baseline)平均
~=计算N个sample的 ▽logπ(a|s) * (Q(s,a)-baseline)平均
前两个等式是==号,说明增加一个constant baseline对expected policy gradient无影响,因为 E[ ▽logπ(a|s) * (baseline)] = 0。但由于我们只能sample少量的样本近似计算policy gradient,也就意味着这样计算出来的gradient的variance很大。因为return-baseline、return-2*baseline、return+0.6*baseline对更新▽logπ(a|s)起到的作用是不同的(这是sample和真正的expectation的区别)。
注意,是policy gradient基于sample方法计算出来的gradient的variance很大,并不是因为添加了baseline让variance变大了!!!这一点一定要明确。否则就没有baseline可以降低variance这一说了。
那baseline是怎么降低variance的呢?
首先是经典解释方法,我们常把V(s)当做baseline,也就是average_a{Q(s,a)}当做baseline,这意味着Q(s,a)大于V(s)所对应的a对π(a|s)有提升作用,Q(s,a)小于V(s)所对应的a对π(a|s)有降低作用,尽管不同的a对应的long time return都是正值。
其次,baseline降低variance可以从全局考虑,而不是局限于某一个state所对应的action的Q(s,a)。给个直观的例子,在s1下a1,a2,a3对应的Q分别是200,210,220,在s2下a1,a2,a3对应的Q分别是105,110,115;如果只是单纯的考虑某一个state,比如s1,那么200,210,220和-10,0,10(减去baseline=210后得到)这两组数据的variance其实是一样的;相反,如果从全局考虑,既考虑多个状态,那么200,210,220,105,110,115和-10,0,10,-5,0,5这两组数据的variance显然后者更小。(注意,-5,0,5是s2下Q值减去baseline得到的,因为是不同的state,减去不同的baseline是reasonable的)