策略梯度算法
除了基于值函数的方法,还有一种是基于策略的方法,对比两者,基于值函数的方法主要是学习值函数,然后根据值函数到处一个策略,学习过程中并不存在一个显式的策略;而基于策略的方法则是直接显式的学习一个目标策略。策略梯度是基于策略的方法的基础。
策略梯度
- 基于策略的方法首先要将策略参数化
- 假设目标策略\(\pi_\theta\)是一个随机性的策略,并且处处可微,其中\(\theta\)是对应的参数
- 我们可以使用一个现行模型或者神经网络模型来为这样一个策略函数建模,输入某个状态,然后输出一个动作的概率分布
- 目标:寻找一个最有则略并最大化这个策略在环境中的期望回报(\(J(\theta)=\mathbb{E}_{s_0}\left[V^{\pi_\theta}\left(s_0\right)\right]\)\)
- \(s_0\)表示初始状态
- 方法:将目标函数对\(\theta\)求导,得到导数后,就可以利用梯度上升的方法来最大化这个目标函数,从而得到最优策略
- 梯度:$$
\begin{aligned}
\nabla_\theta J(\theta) & \propto \sum_{s \in S} \nu^{\pi_\theta}(s) \sum_{a \in A} Q^{\pi_\theta}(s, a) \nabla_\theta \pi_\theta(a \mid s) \
& =\sum_{s \in S} \nu^{\pi_\theta}(s) \sum_{a \in A} \pi_\theta(a \mid s) Q^{\pi_\theta}(s, a) \frac{\nabla_\theta \pi_\theta(a \mid s)}{\pi_\theta(a \mid s)} \
& =\mathbb{E}{\pi\theta}\left[Q^{\pi_\theta}(s, a) \nabla_\theta \log \pi_\theta(a \mid s)\right]
\end{aligned}
$$
- 由于梯度的更新使用的是\(\pi_\theta\),所以策略梯度的算法为在线策略算法,即必须使用当前策略\(\pi_\theta\)采样得到的数据来计算梯度
- 直观理解:在每一个状态下,梯度的修改是让策略更多的取采样到带来较高Q值的动作,更少的去采样到带来较低Q值的动作
- 由于梯度的更新使用的是\(\pi_\theta\),所以策略梯度的算法为在线策略算法,即必须使用当前策略\(\pi_\theta\)采样得到的数据来计算梯度
- 梯度:$$
\begin{aligned}
\nabla_\theta J(\theta) & \propto \sum_{s \in S} \nu^{\pi_\theta}(s) \sum_{a \in A} Q^{\pi_\theta}(s, a) \nabla_\theta \pi_\theta(a \mid s) \
& =\sum_{s \in S} \nu^{\pi_\theta}(s) \sum_{a \in A} \pi_\theta(a \mid s) Q^{\pi_\theta}(s, a) \frac{\nabla_\theta \pi_\theta(a \mid s)}{\pi_\theta(a \mid s)} \
& =\mathbb{E}{\pi\theta}\left[Q^{\pi_\theta}(s, a) \nabla_\theta \log \pi_\theta(a \mid s)\right]
\end{aligned}
$$
- 在策略梯度算法的计算策略梯度的公式中,我们需要使用\(Q^{\pi_\theta}(s,a)\),我们可以使用多种方法来对他进行估计
REINFORCE算法
- 使用了蒙特卡洛方法来估计\(Q^{\pi_\theta}(s,a)\),对一个有限步数的环境来说,REINFORCE算法的策略梯度为:$$ \nabla_\theta J(\theta)=\mathbb{E}{\pi\theta}\left[\sum_{t=0}T\left(\sum_{t{\prime}=t}^T \gamma{t{\prime}-t} r_{t^{\prime}}\right) \nabla_\theta \log \pi_\theta\left(a_t \mid s_t\right)\right] $$
- 算法的具体流程: