机器学习 | 强化学习(6) | 策略梯度方法(Policy Gradient Method)
6-策略梯度方法(Policy Gradient Method)
策略梯度概论(Introduction)
基于策略(Policy-Based) 的强化学习
-
对于上一节课(价值函数拟合)中采用参数\(\theta\)来估计价值和动作-价值函数
\[\begin{align} V_\theta(S) & \approx V^\pi(s) \\ Q_\theta(s,a) & \approx Q^\pi(s,a) \end{align} \] -
一个策略可以直接由价值函数生成
- 例如说基于\(\epsilon\)-贪婪策略
-
本节课我们直接对策略进行参数化
\[\pi_\theta(s,a)=\mathbb{P}[a|s,\theta] \] -
我们本节课再次聚焦于无模型的强化学习
基于价值(Value-Based)和基于策略的强化学习
-
基于价值
- 学习价值函数
- 显式的策略(例如\(\epsilon\)-贪婪策略)
-
基于策略
- 没有价值函数
- 学习策略
-
AC算法(Actor-Critic)
- 学习价值函数
- 学习策略
*因此AC算法属于既基于价值也基于策略的算法
基于策略强化学习的优点
优点:
- 更好的收敛性(更新更稳定,更平滑)
- 在高维或者连续的动作空间更为高效
- 可以基于随机策略进行学习
缺点:
- 典型地只能收敛于局部最优解而非全局最优解
- 当评价一个策略的时候也是相当典型地低效(因为梯度下降是一个慢速的稳定过程)与高方差
策略随机性的思考
- 如果一个模型拥有的绝对确定的策略(假若这些动作价值基本一致),那么在遭遇相同情况下作出一致的动作会导致长期困在某一个状态下(例如在一个能见度有限的迷宫中行走,基本都是一样的房间,那么确定性策略反而无法到达终点)
策略目标函数(Policy Objective Functions)
-
目标:给定一个策略\(\pi_\theta(s,a)\)基于参数\(\theta\),然后寻找最优的参数\(\theta\)
-
但是如何去评估策略\(\pi_\theta\)的质量
-
对于一个序列化的环境,我们可以基于开始值
\[J_1(\theta) = V^{\pi_\theta}(s_1)=\mathbb{E_{\pi_\theta}}[v_1] \] -
对于连续的环境,那么就用平均值
\[J_{avV}(\theta)=\sum_s d^{\pi_\theta}(s)V^{\pi_\theta} \] -
或者每一个时间戳的平均回报
\[J_{avR}(\theta)=\sum_sd^{\pi_\theta}(s),\sum_a\pi_{\theta}(s,a)\mathcal{R^a_s} \] -
其中\(d^{\pi_\theta}(s)\)是基于策略\(\pi_\theta\)的马尔科夫链的一个静态分布
策略最优化
- 基于强化学习的策略属于优化问题
- 寻找\(\theta\)足以最大化\(J(\theta)\)
- 一些非基于梯度的优化方法
- 爬山法(Hill Climbing)
- SImplex法/amoeba法/Nelder Mead法
- 遗传算法(Genetic Algorithm)
- 基于梯度的优化方法往往更高效
- 梯度下降法(Gradient descent)
- 共轭梯度法(Conjugate gradient)
- Quasi-Newton法
- 我们主要研究梯度下降法,因为其有很多拓展形式
- 以及必须基于矩阵结构的方法
有限微分梯度策略(Finite Difference Policy Gradient)
梯度策略(Policy Gradient)
-
使\(J(\theta)\)为任意一个策略目标函数
-
策略梯度算法通过策略的梯度下降在\(J(\theta)\)中寻找一个局部最优解,策略的梯度即:
\[\Delta \theta = \alpha \nabla_\theta J(\theta) \] -
其中\(\nabla_\theta J(\theta)\)就被称为策略梯度
\[\nabla_\theta J(\theta)= \left(\begin{array}{c} \frac{\partial J(\theta)}{\partial \theta_1} \\ \vdots\\ \frac{\partial J(\theta)}{\partial \theta_n} \end{array}\right) \] -
其中\(\alpha\)即是步长参数
通过有限微分去计算梯度
-
评估\(\pi_\theta(s,a)\)的策略梯度
-
对于每一维度\(k\in[1.n]\)
-
估算目标函数的第k个偏导数
-
也就是:用一个小的数值\(\epsilon\)去变动第k维的\(\theta\)
\[\frac{\partial J(\theta)}{\partial \theta_k}\approx \frac{J(\theta+\epsilon u_k)-J(\theta)}{\epsilon} \]其中\(u_k\)是只有第k维为1,其他维度为0的单位向量
-
-
利用n次评估来计算第n维度的策略梯度
-
简单,高噪音,并不是每次都高效
-
任意策略都适用,即使不可导
蒙特卡罗策略梯度(Monte-Carlo Policy Gradient)
似然率(Likelihood Ratios)
分数函数(Score Function)
-
我们现在基于微积分去计算策略梯度
-
假设策略\(\pi_\theta\)是一个可微分的且无论何时都是非零的
-
以及我们知道其梯度\(\nabla_\theta\pi_\theta(s,a)\)
-
似然率即是以下公式:
\[\begin{align} \nabla_\theta\pi_\theta(s,a) & = \pi_\theta(s,a)\frac{\nabla_\theta\pi_\theta(s,a)}{\pi_\theta(s,a)} \\ & = \pi_\theta(s,a)\nabla_\theta\log\pi_\theta(s,a) \end{align} \] -
那么分数函数即是\(\nabla_\theta\log\pi_\theta(s,a)\)
Softmax策略(Softmax Policy)
-
通过特征的线性组合\(\phi(s,a)^T\theta\)去为动作赋予权重
-
动作的概率将与指数化的权重成正比例
\[\pi_\theta(s,a)\propto e^{\phi(s,a)^T\theta} \] -
因此分数函数即是
\[\nabla_\theta\log\pi_\theta(s,a) = \phi(s,a)-\mathbb{E_{\pi_\theta}}[\phi(s,\cdot)] \]
高斯策略(Gaussian Policy)
-
对于连续动作空间,高斯策略相对比较自然
-
均值是状态特征的线性组合\(\mu(s)=\phi(s)^T\theta\)
-
方差可以是固定的\(\sigma^2\),也可以是一个参数化的形式
-
策略则是一个高斯分布,\(a\sim\mathcal{N}(\mu(s),\sigma^2)\)
-
那么其分数函数即是
\[\nabla_\theta\log\pi_\theta(s,a)=\frac{(a-\mu(s))\phi(s)}{\sigma^2} \]
一步马尔科夫决策过程(One-Step MDPs)
-
定义一种简单的一步马尔科夫决策过程
- 从状态\(s\sim d(s)\)开始
- 一步之后就状态终结,并且回报\(r=\mathcal{R_{s,a}}\)
-
通过似然率去计算策略梯度
\[\begin{align} J(\theta) & = \mathbb{E_{\pi_\theta}}[r] \\ & = \sum_{s\in S}d(s)\sum_{a\in A}\pi_\theta(s,a)\mathcal{R_{s,a}} \\ \nabla_\theta J(\theta) & = \sum_{s\in S}d(s)\sum_{a\in A}\pi_\theta(s,a)\nabla_\theta\log\pi_\theta(s,a)\mathcal{R_{s,a}} \\ & = \mathbb{E_{\pi_\theta}}[\nabla_\theta\log\pi_\theta(s,a)r] \end{align} \]
策略梯度理论(Policy Gradient Theorem)
- 策略梯度理论通过生成一个似然率去拟合一个多步马尔科夫决策过程(multi-step MDPs)
- 用长期价值\(Q^\pi(s,a)\)去替代瞬时回报\(r\)
- 策略梯度主要应用于开始状态目标,平均回报以及平均价值目标
原理:
-
对于任意可导的策略\(\pi_\theta(s,a)\)
-
对于任意策略目标函数\(J=J_1,J_{avR}\)亦或是\(\frac{1}{1-\gamma}J_{avV}\)
-
那么策略梯度为:
\[\nabla_\theta J(\theta)=\color{red}{\mathbb{E_{\pi_\theta}}[\nabla_\theta\log\pi_\theta(s,a)\ Q^{\pi_\theta}(s,a)]} \]
蒙特卡罗策略梯度(REINFORCE算法)
-
效率较低,迭代代数较大
-
通过随机梯度下降去更新参数
-
基于梯度策略理论
-
使用一个返回回报\(v_t\)作为\(Q^{\pi_\theta}(s_t,a_t)\)的无偏取样
\[\Delta\theta_t = \alpha\nabla_\theta\log\pi_\theta(s_t,a_t)v_t \]
function REINFORCE
随机初始化\(\theta\)
for 对于每一个序列 \(\{s_1,a_1,r_2,\dots,s_{T-1},a_{T-1},r_T\}\sim\pi_\theta\) do
for \(t=1\) to \(T-1\) do
\(\theta\leftarrow\theta+\alpha\nabla_{\theta}\log\pi_{\pi}(s_t, a_t)v_t\)
end for
end for
return \(\theta\)
end function
Actor-Critic策略梯度
基于Critic算法以减少方差
-
蒙特卡罗策略梯度法具有较高的方差
-
我们将采用critic算法以估计动作-价值函数
\[Q_w(s,a) \approx Q^{\pi_\theta(s,a)} \] -
对于Actor-critic算法(也称AC算法)一般带有两组参数
- Critic 更新动作-价值函数的参数\(w\)
- Actor 间接基于critic,更新策略参数\(\theta\)
-
对于AC算法基于一个策略梯度的估计
\[\begin{align} \nabla_\theta J(\theta)&\approx\mathbb{E_{\pi_\theta}}[\nabla_\theta\log\pi_\theta(s,a) \ Q_w(s,a)] \\ \Delta\theta & =\alpha\nabla_\theta\log\pi_\theta(s,a)\ Q_w(s,a) \end{align} \]
AC算法中的critic指的是不进行任何决策,而只是对行为进行评价,而actor间接基于critic进行决策
估计动作-价值函数
- Critic算法解决着一个熟悉的问题:即策略评估
- 在目前策略参数\(\theta\)下的策略\(\pi_\theta\)有多好?
- 该问题在前两节课已经探讨过了,如:
- 蒙特卡罗策略评估
- 时序差分学习
- \(TD(\lambda)\)
- 当然同样也可以用最小二乘策略评估
动作-价值 Actor-Critic
- 对于一个简单的actor-critic算法乃是基于动作-价值critic
- 通过线性函数进行拟合:\(Q_w(s,a)=\phi(s,a)^Tw\)
- Critic 通过线性\(TD(0)\)去更新\(w\)
- Actor 通过策略梯度去更新\(\theta\)
function QAC
初始化 s,\(\theta\)
取样 \(a\sim\pi_\theta\)
for 每一步 do
取样回报\(r=\mathcal{R^a_s}\),取样转移状态\(s'\sim\mathcal{P^a_s}\)
取样动作\(a'\sim\pi_\theta(s',a')\)
\(\delta = r + \gamma Q_w(s',a')-Q_w(s,a)\)
\(\theta=\theta+\alpha\nabla_\theta\log\pi_\theta(s,a)Q_w(s,a)\)
\(w\leftarrow w+\beta\delta\phi(s,a)\)
\(a\leftarrow a'\),\(s\leftarrow s'\)
end for
end function
兼容函数拟合(Compatible Function Approximation)
- 试图·去估计一个策略梯度比如会产生爬偏差
- 对于一个偏差策略梯度有时候并不能找到合适的算法
- 比如说:如果\(Q_w(s,a)\)的特征是有所失真的话,在矩阵方格模型中会难以奏效
- 不过幸运的是,如果我们能小心翼翼地选择价值函数进行拟合
- 并且避免产生一切偏差
- 即我们始终没有偏离一个精确的策略梯度
兼容函数拟合定义:
如果满足以下两个条件:
-
价值函数拟合对于策略是兼容的
\[\nabla_wQ_w(s,a) = \nabla_\theta\log\pi_\theta(s,a) \] -
价值函数的\(w\)能够最小化均方差(MSE)
\[\epsilon = \mathbb{E_{\pi_\theta}}[(Q^{\pi_\theta}(s,a)-Q_w(s,a))^2] \]
那么其策略梯度是精确的
兼容函数定理的证明
-
若\(w\)是被选中用于最小化均方差(MSE),即\(\epsilon\)的梯度,也就是\(w\)要为0
\[\begin{align} \nabla_w \epsilon & = 0 \\ \mathbb{E_{\pi_\theta}}[(Q^\theta(s,a)-Q_w(s,a))\nabla_wQ_w(s,a)] & = 0 \\ \mathbb{E_{\pi_\theta}}[(Q^\theta(s,a)-Q_w(s,a))\nabla_\theta\log\pi_\theta(s,a)] & = 0 \\ \mathbb{E_{\pi_\theta}}[Q^\theta(s,a)\nabla_\theta\log\pi_\theta(s,a)] & = \mathbb{E_{\pi_\theta}}[Q_w(s,a)\nabla_\theta\log\pi_\theta(s,a)] \end{align} \] -
为此\(Q_w(s,a)\)可以直接代替策略梯度
\[\nabla_\theta J(\theta) = \mathbb{E_{\pi_\theta}}[\nabla_\theta\log\pi_\theta(s,a)\ Q_w(s,a)] \]
改进Critic函数
通过Baseline去降低方差
-
我们从策略梯度中减去一个baseline函数
-
这样就可以在降低方差的同时又不改变期望
\[\begin{align} \mathbb{E_{\pi_\theta}}[\nabla_\theta\log\pi_\theta(s,a)B(s)] &=\sum_{s\in S}d^{\pi_\theta}(s)\sum_a\nabla_\theta\pi_\theta(s,a)B(s) \\ & = \sum_{s\in S}d^{\pi_\theta}(s)B(s)\nabla_\theta\sum_{a\in A}\pi_\theta(s,a)\\ & = 0 \end{align} \] -
对于一个性质良好的baseline则是一个状态-价值函数\(B(s)=V^{\pi_\theta}(s)\)
-
为此我们可以通过优势函数\(A^{\pi_\theta}(s,a)\)重写策略梯度
\[A^{\pi_\theta}(s,a) = Q^{\pi_\theta}(s,a)-V^{\pi_\theta}(s) \\ \nabla_\theta J(\theta)=\color{red}{\mathbb{E_{\pi_\theta}}[\nabla_\theta\log\pi_\theta(s,a)\ A^{\pi_\theta}(s,a)]} \]
估计优势函数(1)
-
优势函数可以显著地降低策略梯度的方差
-
因此critic应该能够较好地估计优势函数
-
例如说:采用两个近似函数和参数向量
-
去同时拟合\(V^{\pi_\theta}(s)\)以及\(Q^{\pi_\theta(s,a)}\)
\[\begin{align} V_v(s) & \approx V^{\pi_\theta}(s) \\ Q_w(s,a) & \approx Q^{\pi_\theta}(s, a) \\ A(s,a) & \approx Q_w(s,a) - V_v(s) \end{align} \] -
然后再通过例如时序差分的方式对两个价值函数进行更新。
估计优势函数(2)
-
对于真正的价值函数\(V^{\pi_\theta}(s)\),其时序差分误差\(\delta^{\pi_\theta}\)如下:
\[\delta^{\pi_\theta}=r+\gamma V^{\pi_\theta}(s')-V^{\pi_\theta}(s) \] -
因此就是一个优势函数的无偏估计
\[\begin{align} \mathbb{E_{\pi_\theta}}[\delta^{\pi_\theta}|s,a]& =\mathbb{E_{\pi_\theta}}[r+\gamma V^{\pi_\theta}(s')(s)|s,a]-V^{\pi_\theta}(s) \\ & = Q^{\pi_\theta}(s,a)-V^{\pi_\theta}(s) \\ & = A^{\pi_\theta}(s,a) \end{align} \] -
为此我们可以通过时序差分误差去计算梯度策略
\[\nabla_\theta J(\theta) = \color{red}{}\mathbb{E_{\pi_\theta}}[\nabla_\theta\log\pi_\theta(s,a)\ \delta^{\pi_\theta}] \] -
在实践中我们一般采用一个近似的时序差分误差
\[\delta_V = r+\gamma V_V(s')-V_V(s) \] -
采取这种方法的话,就只需要一组critic的参数v了
有效性追踪(Eligibility Tracse)
不同时间尺度的Critics(Critics at Different Time-Scales)
-
Critic是可以通过多个时间尺度不同的目标中拟合目标函数\(V_\theta(s)\)
-
对于蒙特卡罗。那么目标则是返回回报\(v_t\)
\[\Delta\theta= \alpha(\color{red}{v_t}-V_\theta(s))\phi(s) \] -
对于\(TD(0)\),目标则是TD目标\(r + \gamma V(s')\)
\[\Delta\theta=\alpha(\color{red}{r+\gamma V(s')}-V_\theta(s))\phi(s) \] -
对于前向\(TD(\lambda)\),目标则为\(\lambda\)-返回回报\(v^\lambda_t\)
\[\Delta\theta = \alpha(\color{red}{v_t^\lambda} - V_\theta(s))\phi(s) \] -
对于后向\(TD(\lambda)\),我们则采用有效性追踪(Eligibility Traces)
\[\begin{align} \delta_t & = r_{t+1}+\gamma V(s_{t+1}) - V(s_t) \\ e_t & = \gamma\lambda e_{t-1} + \phi(s_t) \\ \Delta\theta & = \alpha\delta_t e_t \end{align} \]
-
不同时间尺度的Actors
-
对于策略梯度同样也可以通过多个不同时间尺度进行估计
\[\nabla_\theta J(\theta) = \mathbb{E_{\pi_\theta}}[\nabla_\theta\log \pi_\theta(s,a)\ \color{red}{A^{\pi_\theta}(s,a)}] \] -
而蒙特卡罗策略梯度则是利用了整个完整返回回报的误差
- Actor-Critic梯度策略则是采用一步时序差分误差\[\Delta\theta = \alpha(\color{red}{r + \gamma V_V(s_{t+1})}-V_V(s_t))\nabla_\theta\log\pi_\theta(s_t,a_t) \]
带有效性追踪的策略梯度
-
正如前向\(TD(\lambda)\),我们可以对读个时间尺度进行混合
\[\Delta\theta = \alpha(\color{red}{v^\lambda_t} - V_V(s_t))\nabla_\theta\log\pi_\theta(s_t,a_t) \] -
其中\(v^\lambda_t - V_V(s_t)\)是优势函数的有偏估计
-
正如后向\(TD(\lambda)\),我们同样可以采用有效性追踪
-
通过等价于\(TD(\lambda)\),我们使得\(\phi(s) = \nabla_\theta\log\pi_\theta(s,a)\)
\[\begin{align} \delta & = r_{t+1} + \gamma V-V(s_{t+1})-V_V(s_t) \\ e_{t + 1} & = \lambda e_t + \nabla_\theta\log \pi_\theta(s,a) \\ \Delta\theta & = \alpha\delta e_t \end{align} \] -
这样的更新方法直接就能应用在基于策略的非完整序列中了
-
自然策略梯度(Natural Policy Gradient)
更多选择的策略梯度方向
- 梯度上升算法足以跟随一切上升方向
- 好的上升方向可以带来显著的收敛性
- 同样地,一个策略在不改变动作概率的同时进行参数重设
- 例如说,对于softmax策略中所有动作的分数都进行提升
- 其中vanilla梯度法对参数重设相当敏感
自然策略梯度(Natural Policy Gradient)
-
对于自然策略梯度是参数化独立的
-
当通过一个小而合适数量进行策略更新,它会找到一个比较接近于vanilla梯度的上升方向
\[\nabla_\theta^{nat}\pi_\theta(s,a) = G^{-1}_\theta\nabla_\theta\pi_\theta(s,a) \] -
其中\(G_\theta\)是一个费舍尔信息矩阵(Fisher information matrix)
自然Actor-Critic算法
-
基于兼容函数近似
\[\nabla_wA_w(s,a)=\nabla_\theta\log\pi_\theta(s,a) \] -
因此自然策略梯度简化为:
\[\begin{align} \nabla_\theta J(\theta) & = \mathbb{E_{\pi_\theta}}[\nabla_\theta\log\pi_\theta(s,a)A^{\pi_\theta}(s,a)] \\ & = \mathbb{E_{\pi_\theta}}[\nabla_\theta\log\pi_\theta(s,a)\nabla_\theta\log\pi_\theta(s,a)^Tw] \\ & = G_\theta w \\ \color{red}{\nabla_\theta^{nat}J(\theta)}& \ \color{red}{=w} \end{align} \] -
即:通过直接的critic参数去更新actor参数
对于所有策略梯度算法的总结
所有算法都基于随机梯度下降
Critic则是采用典型的策略评估(例如蒙特卡罗或者时序差分)来估算\(Q^\pi(s,a)\),\(A^\pi(s,a)\)或者\(V^\pi(s)\)