(六)策略梯度算法 and Actor-Critic 框架
目录
- 回顾 & 区别
- 强化学习分类
- 适用问题
- on-policy & off-policy
- 策略梯度算法
- Actor-Critic 算法
- 总结
回顾 & 区别
强化学习分类
- Model-based
- value-based
动态规划
- value-based
- Model-free
- value-based
蒙特卡洛、时序差分 - policy-based
。。。。。。
- value-based
适用问题
- 状态、动作空间均离散且有限
动态规划、时序差分 - 连续状态,离散动作
DQN
on-policy & off-policy
在线策略(on-policy)算法:你要学习/更新的策略和你采样的策略是一样的;
离线策略(off-policy)算法:你要学习/更新的策略和你采样的策略是不同的。
以上对之前涉及的内容做个区分和总结。
策略梯度算法
基于价值(value-base)的方法:主要是学习值函数,然后根据值函数导出一个策略,学习过程中并不存在一个显式的策略;
基于策略(policy-base)的方法:直接显式地学习一个目标策略。
之前的算法都是 value-base 的,现在是另一支 policy-base 的方法,一言以蔽之,即将策略参数化,而策略梯度是这类方法的基础,通过迭代求解策略梯度能优化策略。
(1)首先,将策略参数化。我们的目标是要寻找一个最优策略并最大化此策略在环境中的期望回报。我们将策略学习的目标函数定义为:J(θ)=Es0[Vπθ(s0)]J(\theta)=\mathbb{E}_{s_0}[V^{\pi_\theta}(s_0)]J(θ)=Es0[Vπθ(s0)]
s0s_0s0 是初始状态。既然有目标函数,那将其对 θ\thetaθ 求导,然后按梯度上升法逐步优化目标函数,最终得到最优策略
关于对目标函数求梯度:
∇θJ(θ)∝∑s∈Sνπθ(s)∑a∈AQπθ(s,a)∇θπθ(a∣s)=∑s∈Sνπθ(s)∑a∈Aπθ(a∣s)Qπθ(s,a)∇θπθ(a∣s)πθ(a∣s)=Es∼νπθ,a∼πθ(⋅∣s)[Qπθ(s,a)∇θlogπθ(a∣s)]=Eπθ[Qπθ(s,a)∇θlogπθ(a∣s)]\begin{split}\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|s)\\ &=\sum_{s\in S}\nu^{\pi_{\theta}}(s)\sum_{a\in A}\pi_{\theta}(a|s )Q^{\pi_{\theta}}(s,a)\frac{\nabla_{\theta}\pi_{\theta}(a|s)}{\pi_{\theta}(a|s )}\\ & =\mathbb{E}_{s\sim\nu^{\pi_\theta},a\sim\pi_\theta(\cdot|s)}\left[Q^{\pi_\theta}(s,a)\nabla_\theta\log\pi_\theta(a|s)\right]\\ &=\mathbb{E}_{\pi_{\theta}}[Q^{\pi_{\theta}}(s,a)\nabla_{\theta} \log\pi_{\theta}(a|s)]\end{split}∇θJ(θ)∝s∈S∑νπθ(s)a∈A∑Qπθ(s,a)∇θπθ(a∣s)=s∈S∑νπθ(s)a∈A∑πθ(a∣s)Qπθ(s,a)πθ(a∣s)∇θπθ(a∣s)=Es∼νπθ,a∼πθ(⋅∣s)[Qπθ(s,a)∇θlogπθ(a∣s)]=Eπθ[Qπθ(s,a)∇θlogπθ(a∣s)]
log的底数默认是e
可以发现,其期望的下标是 πθ\pi_{\theta}πθ,故策略梯度算法为在线策略(on-policy)算法,即必须使用当前策略采样得到的数据来计算梯度。
直观解释这个式子:
- ∇θlogπθ(a∣s)\nabla_\theta\log\pi_\theta(a|s)∇θlogπθ(a∣s):参数 θ\thetaθ 调整方向,通过调整来增加选择某动作的概率;
- Qπθ(s,a)Q^{\pi_{\theta}}(s,a)Qπθ(s,a):在状态 sss 下选择动作 aaa 的好坏
组合起来:如果我们尝试了一下,发现 Qπθ(s,a)Q^{\pi_{\theta}}(s,a)Qπθ(s,a) 很大,说明是个好动作,就沿着 ∇θlogπθ(a∣s)\nabla_\theta\log\pi_\theta(a|s)∇θlogπθ(a∣s) 方向调整,增加这个动作的概率,否则就反向减小该动作概率。
(2)估计 Qπθ(s,a)Q^{\pi_{\theta}}(s,a)Qπθ(s,a)
目标函数的梯度里用的 Qπθ(s,a)Q^{\pi_{\theta}}(s,a)Qπθ(s,a),有多种方法估计它,比如 REINFORCE 算法就采用蒙特卡洛,对于一个有限步数的环境来说,REINFORCE 算法中的策略梯度为:
∇θJ(θ)=Eπθ[∑t=0T(∑t′=tTγt′−trt′)∇θlogπθ(at∣st)]\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}(a_{t}|s_{t})\right]∇θJ(θ)=Eπθ[t=0∑T(t′=t∑Tγt′−trt′)∇θlogπθ(at∣st)]
TTT :和环境交互的最大步数
(3)REINFORCE 算法流程:
∙初始化策略参数θ∙for序列e=1→Edo;∙用当前策略πθ采样轨迹{s1,a1,r1,s2,a2,r2,…sT,aT,rT}∙计算当前轨迹每个时刻t往后的回报∑t′=tTγt′−trt′,记为ψt∙对θ进行更新,θ=θ+α∑tTψt∇θlogπθ(at∣st)∙endfor\begin{array}{l}\bullet\ \ \text{初始化策略参数}\theta\\ \bullet\ \ \boldsymbol{\mathsf{for}} \text{序列} e=1\to E \boldsymbol{ \mathsf{do}} ;\\ \bullet\ \ \ \ \ \ \ \ \text{用当前策略}\pi_{\theta}\text{采样轨迹}\{s_{1},a_{1},r_{1},s_{2},a_{2},r_{2},\ldots s_{T},a_{T},r_{T}\}\\ \bullet\ \ \ \ \ \ \ \text{计算当前轨迹每个时刻}t\text{往后的回报} \sum_{t^{\prime}=t}^{T}\gamma^{t^{\prime}-t}r_{t^{\prime}},\ \text{记为}\psi_{t}\\ \bullet\ \ \ \ \ \ \ \text{对}\theta\text{进行更新},\ \theta=\theta+\alpha\sum_{t}^{T}\psi_{t}\nabla_{\theta}\log\pi_{\theta}(a_{t}|s_{t}) \\ \bullet\ \ \boldsymbol{\mathsf{end}} \boldsymbol{\mathsf{for}}\end{array}∙ 初始化策略参数θ∙ for序列e=1→Edo;∙ 用当前策略πθ采样轨迹{s1,a1,r1,s2,a2,r2,…sT,aT,rT}∙ 计算当前轨迹每个时刻t往后的回报∑t′=tTγt′−trt′, 记为ψt∙ 对θ进行更新, θ=θ+α∑tTψt∇θlogπθ(at∣st)∙ endfor
(4)小结
- REINFORCE 算法是策略梯度乃至强化学习的典型代表
- 从交互中学习,并且其优化的目标(即策略期望回报)正是最终所使用策略的性能,这比基于价值的强化学习算法的优化目标(一般是时序差分误差的最小化)要更加直接
- REINFORCE 采用蒙特卡洛估计动作价值,对策略梯度的估计是无偏的,但方差很大
Actor-Critic 算法
Actor-Critic 与其说算法,不如说是一种架构,既有学习价值函数的操作,也有学习策略函数的思想
Actor-Critic = Value-based + Policy-based
目前很多高效的前沿算法都属于 Actor-Critic 算法。需要明确的是,Actor-Critic 算法本质上是基于策略的算法,因为这一系列算法的目标都是优化一个带参数的策略,只是会额外学习价值函数,从而帮助策略函数更好地学习。
(1)Q的优化
还记得上文讲到策略梯度目标函数的梯度吗?其中的Q函数用于指导策略的更新。Actor-Critic 对其做进一步优化,我们先把梯度写成更一般的形式:
g=E[∑t=0Tψt∇θlogπθ(at∣st)]g= \mathbb{E} \left[ \sum_{t=0}^{T} \psi_{t} \nabla_{ \theta} \log \pi_{ \theta} \left( a_{t}|s_{t} \right) \right]g=E[t=0∑Tψt∇θlogπθ(at∣st)]
Actor-Critic 则令 ψt=rt+γVπ(st+1)−Vπ(st)\bm{\psi_{t}=r_{t}+\gamma V^{\pi}(s_{t+1})-V^{\pi}(s_{t})}ψt=rt+γVπ(st+1)−Vπ(st)
这样换有啥用?
不难发现,ψt\psi_{t}ψt 变成时序差分残差的形式,那我们是不是可以在每一步采样后就做更新,而 REINFORCE 的蒙特卡洛需要采样序列结束后才能进行一次更新(这同时也要求任务具有有限的步数),很明显,这里就是时序差分TD 与蒙特卡洛MC 的区别
(2)Actor-Critic 的组成
- Actor(策略网络):与环境交互,并在 Critic 价值函数的指导下用策略梯度学习一个更好的策略。
- Critic(价值网络): 通过 Actor 与环境交互收集的数据学习一个价值函数,这个价值函数会用于判断在当前状态什么动作是好的,什么动作不是好的,进而帮助 Actor 进行策略更新。
(3)更新规则
Actor 的更新采用策略梯度的原则,而 Critic 的更新则是通过减小时序差分误差来使得价值函数优化。
我们将 Critic 价值网络表示为VwV_wVw,www 为参数,定义单个数据价值函数的损失函数:
L(ω)=12(r+γVω(st+1)−Vω(st))2\mathcal{L}(\omega)= \frac{1}{2} \left( r+ \gamma V_{ \omega} \left( s_{t+1} \right)-V_{ \omega} \left( s_{t} \right) \right)^{2}L(ω)=21(r+γVω(st+1)−Vω(st))2
将其对参数 www 求导可得损失函数梯度:
∇ωL(ω)=−(r+γVω(st+1)−Vω(st))∇ωVω(st)\nabla_{\omega}\mathcal{L}(\omega)=-(\bm{r}+\gamma V_{\omega}(\bm{s}_{t+1})-V_ {\omega}(\bm{s}_{t}))\nabla_{\omega}V_{\omega}(\bm{s}_{t})∇ωL(ω)=−(r+γVω(st+1)−Vω(st))∇ωVω(st)
使用梯度下降方法来更新 Critic 价值网络参数即可
(4)Actor-Critic 算法流程
∙初始化策略网络参数θ,价值网络参数ω∙for序列e=1→Edo:∙用当前策略πθ采样轨迹{s1,a1,r1,s2,a2,r2,…}∙为每一步数据计算δt=rt+γVω(st+1)−Vω(st)∙更新价值参数w=w+αω∑tδt∇ωVω(st)∙更新策略参数θ=θ+αθ∑tδt∇θlogπθ(at∣st)∙endfor\begin{array}{l}\bullet\ \ \text{初始化策略网络参数}\theta,\ \text{价值网络参数}\omega\\ \bullet\ \ \boldsymbol{\mathsf{for}} \text{序列} e=1\to\boldsymbol{E} \boldsymbol{\mathsf{do}} :\\ \bullet\ \ \ \ \ \ \ \ \text{用当前策略}\pi_{\theta}\text{采样轨迹}\{s_{1},a_{1},r_{1},s_{2},a_{2},r_{2},\ldots\}\\ \bullet\ \ \ \ \ \ \ \ \text{为每一步数据计算} \delta_{t}=r_{t}+\gamma V_{\omega}(s_{t+1})-V_{\omega}(s_{t})\\ \bullet\ \ \ \ \ \ \ \ \text{更新价值参数}w=w+\alpha_{\omega}\sum_{t}\delta_{t}\nabla_{\omega}V_{\omega}(s_{t})\\ \bullet\ \ \ \ \ \ \ \text{更新策略参数}\theta=\theta+\alpha_{\theta}\sum_{t}\delta_{t}\nabla_{\theta}\log\pi_{ \theta}(a_{t}|s_{t})\\ \bullet\ \ \boldsymbol{\mathsf{end}} \boldsymbol{\mathsf{for}}\end{array}∙ 初始化策略网络参数θ, 价值网络参数ω∙ for序列e=1→Edo:∙ 用当前策略πθ采样轨迹{s1,a1,r1,s2,a2,r2,…}∙ 为每一步数据计算δt=rt+γVω(st+1)−Vω(st)∙ 更新价值参数w=w+αω∑tδt∇ωVω(st)∙ 更新策略参数θ=θ+αθ∑tδt∇θlogπθ(at∣st)∙ endfor
总结
- REINFORCE 是基于策略的算法,其采用蒙特卡洛估计Q函数,对梯度估计无偏但方差大
- Actor-Critic= Value-based(Critic) + Policy-based(Actor),Actor-Critic 是对
价值和策略的集大成者,Critic 在 Actor 采样的数据中学习分辨动作的好坏,从而指导 Actor 进行策略更新。相比 REINFORCE 其训练过程更稳定,也即方差小。
