学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
Python实战微信订餐小程序 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
Python量化交易实战 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
本篇笔记记录学习在 策略学习 中使用 Baseline,这样可以降低方差,让收敛更快。
Vπ(s)=EA∼π[Qπ(s,A)]=∑aπ(a|s;θ)⋅Qπ(a,s)V_\pi(s)=\mathbb{E}_{A\sim \pi}[Q_\pi(s,A)]=\sum\limits_{a}\pi(a|s;\theta)\cdot Q_\pi(a,s)
∂ Vπ(s)∂ θ=EA∼π[∂lnπ(A|s;θ)∂θ⋅Qπ(s,A)]\frac{\partial \ V_\pi(s)}{\partial \ \theta}=\mathbb{E}_{A\sim\pi}[\frac{\partial ln \pi(A|s;\theta)}{\partial \theta}\cdot Q_\pi(s,A)]
在策略梯度算法中引入 Baseline 主要是用于减小方差,从而加速收敛
Baseline 可以是任何 独立于 动作 A 的数,记为 b。
Baseline的性质:
这个期望是0: EA∼π[b⋅∂ lnπ(A|s;θ)∂θ]=0\mathbb{E}_{A\sim\pi}[b\cdot \frac{\partial \ \ln\pi(A|s;\theta)}{\partial\theta}]=0
这个性质在策略梯度算法用到的的两种形式有提到过。
b⋅∂∑aπ(a|s;θ)∂θb\cdot \frac{\partial\sum_a\pi(a|s;\theta)}{\partial\theta}
这是数学分析中 级数部分 的内容。
根据上面这个式子的性质,可以向 策略梯度中添加 baseline
上面我们得到:∂ Vπ(st)∂ θ=EAt∼π[∂lnπ(At|st;θ)∂θ⋅(Qπ(st,At)−b)]\frac{\partial \ V_\pi(s_t)}{\partial \ \theta}=\mathbb{E}_{A_t\sim\pi}[\frac{\partial ln \pi(A_t|s_t;\theta)}{\partial \theta}\cdot(Q_\pi(s_t,A_t)-b)]
但直接求期望往往很困难,通常用蒙特卡洛近似期望。
因为:EAt∼π[g(At)]=∂Vπ(st)∂θ\mathbb{E}_{A_t\sim\pi}[g(A_t)]=\frac{\partial V_\pi(s_t)}{\partial\theta},期望相等。
g(at)g(a_t) 是个随机梯度,是对策略梯度 EAt∼π[g(At)]\mathbb{E}_{A_t\sim\pi}[g(A_t)]的蒙特卡洛近似
在实际训练策略网络的时候,用随机梯度上升更新参数θ:θ←θ+β⋅g(at)\theta \leftarrow \theta+\beta\cdot g(a_t)
策略梯度是 g(at)g(a_t) 的期望,不论 b 是什么,只要与 A 无关,就都不会影响 g(At)g(A_t) 的期望。为什么不影响已经在 14.1 中讲过了。
介绍两种常用的 baseline。
回到顶部#### a. b=0
第一种就是把 baseline 取0,即与之前相同:∂ Vπ(s)∂ θ=EA∼π[∂lnπ(A|s;θ)∂θ⋅Qπ(s,A)]\frac{\partial \ V_\pi(s)}{\partial \ \theta}=\mathbb{E}_{A\sim\pi}[\frac{\partial ln \pi(A|s;\theta)}{\partial \theta}\cdot Q_\pi(s,A)]
回到顶部#### b. b= VπV_\pi
另一种就是取 b 为 VπV_\pi,而 VπV_\pi 只依赖于当前状态 sts_t,所以可以用来作为 b。并且 VπV_\pi 很接近 QπQ_\pi,可以降低方差加速收敛。
因为 Vπ(st)=E[Qπ(st,At)]V_\pi(s_t)=\mathbb{E}[Q_\pi(s_t,A_t)],作为期望,V 很接近 Q。
把 baseline 用于 Reinforce 算法上。
回到顶部#### a. 基本概念
∂ Vπ(st)∂ θ=EAt∼π[g(At)]=EAt∼π[∂lnπ(At|st;θ)∂θ⋅(Qπ(st,At)−Vπ(st))]\frac{\partial \ V_\pi(s_t)}{\partial \ \theta}=\mathbb{E}_{A_t\sim\pi}[g(A_t)]=\mathbb{E}_{A_t\sim\pi}[\frac{\partial ln \pi(A_t|s_t;\theta)}{\partial \theta}\cdot(Q_\pi(s_t,A_t)-V_\pi(s_t))]
g(at)g(a_t) 就叫做 随机策略梯度,用随机抽取的动作 对应的值来代替期望,是策略梯度的随即近似;这正是**蒙特卡洛方法**的应用。
+ g(at)=[∂lnπ(at|st;θ)∂θ⋅(Qπ(st,at)−b)]g(a\_t)=[\frac{\partial ln \pi(a\_t|s\_t;\theta)}{\partial \theta}\cdot(Q\_\pi(s\_t,a\_t)-b)]
但上述公式中还是有不确定的项:Qπ VπQ_\pi \ \ V_\pi,继续近似:
这也是 Reinforce 算法的关键。
所以最终近似出来的 策略梯度 是:
∂ Vπ(st)∂ θ≈g(at)≈∂lnπ(at|st;θ)∂θ⋅(ut−v(s;w))\frac{\partial \ V_\pi(s_t)}{\partial \ \theta}\approx g(a_t)\approx\frac{\partial ln \pi(a_t|s_t;\theta)}{\partial \theta}\cdot(u_t-v(s;w))
当我们知道 策略网络π\pi、折扣回报utu_t 以及 价值网络vv,就可以计算这个策略梯度。
我们总计做了3次近似:
1、2都是蒙特卡洛近似;
函数近似。
回到顶部#### b. 算法过程
我们需要建立一个策略网络和一个价值网络,后者辅助训练前者。
用 Reinforce 算法训练策略网络,用回归方法训练价值网络。
在一次训练中 agent 获得轨迹:s1,a1,r1,s2,a2,r2,…s_1,a_1,r_1,s_2,a_2,r_2,…
计算 ut=∑ni=tγi−triu_t=\sum_{i=t}n\gamma{i-t}r^i
更新策略网络
记 ut−v(st;w)u_t-v(s_t;w) 为 −δt-\delta_t
θ←θ−β⋅∂lnπ(at|st;θ)∂θ⋅δt\theta\leftarrow \theta - \beta\cdot\frac{\partial\ln\pi(a_t|s_t;\theta)}{\partial\theta}\cdot \delta_t
更新价值网络
回顾一下价值网络的目标:VπV_\pi 是 UtU_t 的期望,训练价值网络是让v接近期望 VπV_\pi
1. 用观测到的 utu\_t 拟合 v,两者之间的误差记为
prediction error:δt=v(st;w)−ut\delta\_t=v(s\_t;w)-u\_t,
2. 求导得策略梯度: ∂δ2/2∂w=δt⋅∂v(st;w)∂w\frac{\partial \delta^2/2}{\partial w}=\delta\_t\cdot \frac{\partial v(s\_t;w)}{\partial w}
3. 梯度下降更新参数:w←w−α⋅δt⋅∂v(st;w)∂ww\leftarrow w-\alpha\cdot\delta\_t\cdot\frac{\partial v(s\_t;w)}{\partial w}
回到顶部#### a.基本概念
Advantage Actor Critic. 把 baseline 用于 Actor-Critic 上。
所以需要一个策略网络 actor 和一个价值网络 critic。但与 第四篇笔记AC算法有所不同。
因为 V 不依赖于动作,而 Q 依赖动作和状态,故 近似V 的方法可以引入 baseline。
与 14.4 中的结构相同,区别在于训练方法不同。
回到顶部#### b. 训练过程
注意!这里的 δt\delta_t 是前文中的 “ut−v(st;w)u_t-v(s_t;w) 为 −δt-\delta_t”
回到顶部#### c. 数学推导
A2C的基本过程就在上面,很简洁,下面进行数学推导。
QπQ_\pi
Qπ(st,at)=ESt+1[Rt+γ⋅EAt+1[Qπ(St+1,At+1)]=ESt+1[Rt+γ⋅Vπ(st+1)]Q_\pi(s_t,a_t)= \mathbb{E}_{S_{t+1}}[R_t+\gamma\cdot \mathbb{E}_{A_{t+1}}[Q_\pi(S_{t+1},A_{t+1})]\=\mathbb{E}_{S_{t+1}}[R_t+\gamma\cdot V_\pi(s_{t+1})]
VπV_\pi
Vπ(st)=EAtESt+1[Rt+γ⋅Vπ(St+1)]=EAt,St+1[Rt+γ⋅Vπ(St+1)]V_\pi(s_t)=\mathbb{E}_{A_t}\mathbb{E}_{S_{t+1}}[R_t+\gamma\cdot V_\pi(S_{t+1})]\=\mathbb{E}_{A_t,S_{t+1}}[R_t+\gamma\cdot V_\pi(S_{t+1})]
这样就将 Q 和 V 表示为期望的形式,A2C会用到这两个期望,期望不好求,我们是用蒙特卡洛来近似求期望:
观测到 transition(st,at,rt,st+1s_t,a_t,r_t,s_{t+1})
QπQ_\pi
VπV_\pi
即使用 baseline 的策略梯度算法。
这也是 A2C 的名字来源。
Q 和 V 都还不知道,需要做近似,14.5.c.1 中介绍了:
而 rt+γ⋅v(st+1;w)r_t+\gamma\cdot v(s_{t+1;w}) 正是 TD target yty_t
梯度上升更新参数:θ←θ−β⋅∂lnπ(at|st;θ)∂θ⋅(yt−v(st;w))\theta\leftarrow \theta-\beta\cdot\frac{\partial\ln\pi(a_t|s_t;\theta)}{\partial \theta}\cdot (y_t-v(s_t;w))
这样的梯度上升更好。
因为以上式子中都有 V,所以需要近似计算 V:
g(at)≈∂lnπ(at|st;θ)∂θ⋅[(rt+γ⋅Vπ(st+1))−Vπ(st)]⏟evaluation made by the criticg(a_t)\approx\frac{\partial ln \pi(a_t|s_t;\theta)}{\partial \theta}\cdot\underbrace{[(r_t+\gamma\cdot V_\pi(s_{t+1}))-V_\pi(s_t)]}_{evaluation \ made \ by \ the \ critic}
采用 TD 算法 更新价值网络,根据 14.5.b 有如下式子:
在A2C 算法中的策略梯度:g(at)≈∂lnπ(at|st;θ)∂θ⋅[(rt+γ⋅v(st+1;w))−v(st;w)]g(a_t)\approx\frac{\partial ln \pi(a_t|s_t;\theta)}{\partial \theta}\cdot[(r_t+\gamma\cdot v(s_{t+1;w}))-v(s_{t;w})]
会有这么一个问题,后面这一项是由价值网络给出对策略网络选出的动作进行打分,那么为什么这一项中没有动作呢,没有动作怎么给动作打分呢?
不同的是价值网络
RwB 是 A2C 的特殊形式。这一点下面 14.7 后会讲。
单步 A2C 就是上面所讲的内容,具体请见 14.5.b。
而多步A2C就是使用 m 个连续 transition:
下面解释 RwB 和 A2C with m-step 的关系: