前6篇我们都是估计动作值函数Q,从而可以根据估计的Q值选择相应的动作。但是这样的值函数(Value Based)估计方法有着一定的限制。第一,值函数估计方法最后得到的策略是固定策略,不能应对最优策略是随机策略的情况,随机策略指的是以一定的概率选择不同的动作,而不是只可能有一个最优动作。第二,值函数估计方法能很好的处理离散动作空间,无法处理连续动作。第三,在使用特征来描述状态空间中的某一个状态时,有可能因为个体观测的限制或者建模的局限,导致真实环境下本来不同的两个状态却再我们建模后拥有相同的特征描述,进而很有可能导致我们的Value Based方法无法得到最优解。本篇介绍策略估计的方法,直接参数化策略,基于策略来学习,且这种方式更容易收敛。
类似于基于值函数的强化学习方法参数化动作值函数,在基于策略的强化学习方法下,讲策略$pi$描述为一个包含参数$ heta$的函数,
[{pi _ heta }left( {s,a} ight) = Pleft( {a|s, heta } ight)]
之前基于值函数的强化学习方法的策略$pi$其实是确定性的贪心策略,当我们估计出动作值函数Q之后,策略$pi$就是选择Q值大的动作执行。然而本章的策略$pi$是一种概率分布,表示在某一状态s下,选择不同动作a的概率分布。常用的策略分布函数有两种,
一种是离散空间的softmax函数,用$phi {(s,a)}$函数描述状态s和动作a的特征,与参数$ heta$线性组合,作为自然对数e的指数,来计算某一个动作a在所有动作A的比例,从而表示发生的概率,
[{pi _ heta }(s,a) = frac{{{e^{phi {{(s,a)}^T} heta }}}}{{sumlimits_A {{e^{phi {{(s,a)}^T} heta }}} }}]
另一种是连续空间的高斯函数,该种策略的行为分布从高斯分布$Nleft( {phi {{(s)}^T} heta ,{sigma ^2}} ight)$中产生,
[{pi _ heta }(s,a) = Nleft( {phi {{(s)}^T} heta ,{sigma ^2}} ight)]
将策略表示成一个连续的函数后,我们就可以用连续函数的优化方法来更新参数$ heta$,从而得到最优的策略。最常用的方法就是梯度下降法了。那么,用来什么优化目标来反向传递更新参数呢?常用的策略梯度优化目标$J( heta)$有三种,在片段式环境里,我们可以用初始状态收获的期望值,在连续环境里,我们可以用状态的平均值,或者每一步的平均奖励。不管目标函数是什么,它的梯度都可以表示为(见论文[1]的推导)
[{ abla _ heta }J( heta ) = {{ m E}_{pi heta }}left[ {{ abla _ heta }log {pi _ heta }left( {{s_t},{a_t}} ight){Q_t}} ight]]
有了策略$pi_ heta$的函数表达式,有了目标函数,我们就可以利用优化方法来更新参数了。策略$pi$表示的是选择动作的概率分布,所以在根据样本更新参数的过程中,其实就是根据奖励R增大或减小动作被选择的概率。
接下来介绍基于蒙特卡洛采样的策略梯度算法——REINFORCE算法,基于状态价值V函数来更新
1. 初始化策略$pi$的参数$ heta$
2. for 每一个完整的episode,$left{ {{s_1},{a_1},{r_2},...,{s_{T - 1}},{a_{T - 1}},{r_T}} ight} sim {pi _ heta }$:
3. for t=1到t=T-1:
4. 用蒙特卡洛求经验平均值来计算$v_t$
5. 更新参数$ heta$,
$ heta leftarrow heta + alpha { abla _ heta }log {pi _ heta }left( {{s_t},{a_t}} ight){v_t}$
6. 依据更新的$ heta$值,按照新的策略$pi_ heta$生成新的完整的episode,回到步骤2.
7. 重复以上步骤,从许多个episode中不断更新$ heta$,从而得到最优策略$pi$。