强化学习—— 8 策略梯度算法

强化学习—— 8 策略梯度算法
可爱可倾8 策略梯度算法
本章介绍基于策略(policy-based)的方法,而策略梯度是基于策略的方法的基础。
8.1 基于价值和基于策略
Q-learning、DQN 及 DQN 改进算法都是基于价值(value-based)的方法,其中 Q-learning 是处理有限状态的算法,而 DQN 可以用来解决连续状态的问题。
基于值函数的方法主要是学习值函数,然后根据值函数导出一个策略,学习过程中并不存在一个显式的策略;而基于策略的方法则是直接显式地学习一个目标策略。
8.2 策略梯度
基于策略的方法首先需要将策略参数化。 假设目标策略\(\pi_{\theta}\)是一个随机性策略,并且处处可微,其中\(\theta\)是对应的参数。我们可以用一个线性模型或者神经网络模型来为这样一个策略函数建模,输入某个状态,然后输出一个动作的概率分布。我们的目标是要寻找一个最优策略并最大化这个策略在环境中的期望回报。
策略学习的目标函数: \[ J(\theta)=E_{s_0}[V^{\pi_{\theta}}(s_0)] \] 其中\(V^{\pi_{\theta}}(s_0)\)是初始状态为\(s_0\)时,使用策略\(\pi_{\theta}\)得到的期望回报。
有了目标函数,可以将目标函数对参数\(\theta\)求导,得到导数后,可以按照梯度上升的方法来最大化这个目标函数,从而得到最优策略。直观理解就是,梯度的修改是让策略更多地去采样到带来较高\(Q\)值的动作,更少地去采样到带来较低\(Q\)值的动作。
注意:策略梯度算法是on-policy的算法,即必须使用当前策略采样得到的数据来计算梯度。
在计算策略梯度的公式中,我们需要用到\(Q^{\pi_\theta}(s,a)\),可以采用多种方法对其进行估计。例如Reinforce算法。
8.3 Reinforce算法
Reinforce算法是策略梯度算法中非常经典的一个算法,它使用蒙特卡洛方法来估计动作价值函数\(Q^{\pi_\theta}(s,a)\)。
Reinforce算法的具体流程如下:
- 初始化策略参数\(\theta\),并设定学习率\(\alpha\);
- for 轮次\(episode=1,2,...\) do
- 用当前策略\(\pi_{\theta}\)采样一条轨迹\({s_1,a_1,r_1,s_2,a_2,r_2,...,s_T,a_T,r_T}\);
- 计算当前轨迹每个时刻\(t\)往后的回报\(\sum_{k=t}^T\gamma^{k-t}r_k\),记为\(G_t\);
- 对\(\theta\)进行更新,\(\theta\leftarrow\theta+\alpha\sum_{t}^T\nabla_\theta\log\pi_\theta(a_t|s_t)G_t\)。
- end for
8.4 总结
REINFORCE 算法是策略梯度乃至强化学习的典型代表,智能体根据当前策略直接和环境交互,通过采样得到的轨迹数据直接计算出策略参数的梯度,进而更新当前策略,使其向最大化策略期望回报的目标靠近。
这种学习方式是典型的从交互中学习,并且其优化的目标(即策略期望回报)正是最终所使用策略的性能,这比基于价值的强化学习算法的优化目标(一般是时序差分误差的最小化)要更加直接。
REINFORCE 算法理论上是能保证局部最优的,它实际上是借助蒙特卡洛方法采样轨迹来估计动作价值,这种做法的一大优点是可以得到无偏的梯度。但是,正是因为使用了蒙特卡洛方法,REINFORCE 算法的梯度估计的方差很大,这主要是因为每条采样轨迹的回报值波动比较大,可能会造成一定程度上的不稳定,这也是 Actor-Critic 算法要解决的问题。






