一、策略梯度中的 baseline
本小结的主要内容是做数学推导得到带 baseline 的策略梯度的公式。
策略梯度方法常用 baseline 来降低方差,可以让收敛更快。
1.1 baseline 的性质
baseline 指的是一个函数 b ,它不依赖于动作 A ,可以得到公式:
EA∼π[b⋅∂θ∂logπ(A∣s;θ)]=0(1.1)
证明过程如下:
EA∼π[b⋅∂θ∂logπ(A∣s;θ)](b 不依赖于动作 A)=b⋅EA∼π[∂θ∂logπ(A∣s;θ)](假设动作是离散的,展开期望)=b⋅a∈A∑π(a∣s;θ)∂θ∂logπ(a∣s;θ)(求导的链式法则)=b⋅a∈A∑π(a∣s;θ)[π(a∣s;θ)1⋅∂θ∂π(a∣s;θ)]=b⋅a∈A∑∂θ∂π(a∣s;θ)(连加与求导的对象不同)=b⋅∂θ∂∑a∈Aπ(a∣s;θ)(所有动作的概率和为 1)=b⋅∂θ∂1(常数的导数为 0)=0
1.2 带 baseline 的策略梯度公式
在基于策略的强化学习中推导了策略梯度的公式:
∂θ∂V(s;θ)=EA∼π(⋅∣s;θ)[∂θ∂logπ(A∣s;θ)⋅Qπ(s,A)]
结合上面推导得到公式1和策略梯度公式,可以得到 带 baseline 的策略梯度公式 :
∂θ∂Vπ(s)=EA∼π[∂θ∂logπ(A∣s;θ)⋅Qπ(s,A)]=EA∼π[∂θ∂logπ(A∣s;θ)⋅Qπ(s,A)]−0=EA∼π[∂θ∂logπ(A∣s;θ)⋅Qπ(s,A)]−EA∼π[b⋅∂θ∂logπ(A∣s;θ)]=EA∼π[∂θ∂logπ(A∣s;θ)⋅(Qπ(s,A)−b)]
即,如果 baseline 函数 b 不依赖于动作 At,下面公式成立:
∂θ∂Vπ(st)=EAt∼π[∂θ∂logπ(At∣st;θ)⋅(Qπ(st,At)−b)](1.2)
从公式中我们可以看出:baseline 不会影响策略梯度的正确性,不管函数 b 是什么,得到的期望都是一样的。
1.3 蒙特卡洛近似
将 带 baseline 的策略梯度公式 中求期望的部分记作 g(At),即:
g(At)=∂θ∂logπ(At∣st;θ)⋅(Qπ(st,At)−b)
- 从策略 π(⋅∣s;θ) 中抽样出动作 at,然后计算 g(at) 。计算得到的 g(at) 就是 EAt∼π[g(At)] 的蒙特卡洛近似。
- g(at) 是策略梯度的一个无偏估计,这是因为 g(At) 关于 At 的期望等于策略梯度。g(at) 其实是一个随机梯度,它是对策略梯度的蒙特卡洛近似。实际训练策略网络的时候,用的都是随机梯度 g(at) ,而不是用真正的策略梯度。
EAt∼π[g(At)]=∂θ∂Vπ(st)
- 使用随机梯度上升更新策略网络的参数 θ
θ←θ+β⋅g(at)
从 带 baseline 的策略梯度公式 看到,虽然使用不同的 baseline 函数 b 不会改变期望 EAt∼π[g(At)] 的值,但是会影响 g(at) 的值。如果选择的baseline 函数 b 很好,接近 Qπ(st,At),随机策略梯度 g(at) 的方差就会变小,就能让算法收敛更快。这也是为什么要使用 baseline 函数 b 的原因。
1.4 baseline 的选择
-
b=0
相当于不适用 baseline,得到的是标准的策略梯度。
∂θ∂Vπ(st)=EAt∼π[∂θ∂logπ(At∣st;θ)⋅Qπ(st,At)]
-
b=Vπ(st)
因为 Vπ(st) 只依赖于当前状态的 st,状态 st 是先于 At 被观测到的,所以 st 不依赖于 At,可以作为 baseline 。
而选择使用 Vπ(st) 作为 baseline 的原因在于,Vπ(st) 的值接近 Qπ(st,At),能够有效的降低方差。
Vπ(st)=EAt[Qπ(st,At)]
二、REINFORCE with Baseline
2.1 近似带 baseline 的策略梯度
在1.4 baseline 的选择中,证明了可以使用 Vπ(st) 来作为 Baseline:
∂θ∂Vπ(st)=EAt∼π[∂θ∂logπ(At∣st;θ)⋅(Qπ(st,At)−Vπ(st))]
在使用这个公式训练时,需要做总共3步近似:
-
使用随机策略梯度来近似真正的策略梯度的期望(蒙特卡洛近似)
记 g(At) 为:
g(At)=∂θ∂logπ(At∣st;θ)⋅(Qπ(st,At)−Vπ(st))
从策略 π(⋅∣s;θ) 中抽样出动作 at,然后使用随机策略梯度 g(at) 的值来代替真正的策略梯度的期望 EAt∼π[g(At)] 的值。
-
使用折扣回报来近似 Qπ(st,at) 的值(再一次蒙特卡洛近似)
经过了上一步的近似后,我们得到:
g(at)=∂θ∂logπ(at∣st;θ)⋅(Qπ(st,at)−Vπ(st))
得到的等式中,Qπ(st,at) 和 Vπ(st) 依然是未知的。
使用策略 π(⋅∣s;θ) 控制智能体玩一局游戏到结束,得到轨迹:
st,at,rt,st+1,at+1,rt+1,⋯,sn,an,rn
计算折扣回报:
ut=i=t∑nγi−tri
折扣回报 ut 就是 Qπ(st,at) 的无偏估计。REINFORCE 算法就是使用折扣回报 ut 来近似 Qπ(st,at) 的值。
-
使用神经网络来近似 Vπ(st)(函数近似)
使用神经网络 v(s;w) 来近似 Vπ(st) 的值。
经过3步近似后,可以得到 近似后的带 baseline 的策略梯度 :
∂θ∂Vπ(st)≈g(at)≈∂θ∂logπ(at∣st;θ)⋅(ut−v(st;w))
2.2 算法训练流程
-
使用策略 π(⋅∣s;θ) 控制智能体玩一局游戏到结束,得到轨迹:
st,at,rt,st+1,at+1,rt+1,⋯,sn,an,rn
-
计算折扣回报 ut 和误差 δt
ut=i=t∑nγi−tri
δt=v(st;w)−ut
(注意这里是 v-q 而不是 q-v)
-
更新策略网络的参数 θ
θ←θ−β⋅δt⋅∂θ∂logπ(at∣st;θ)
-
更新价值网络的参数 w
w←w−α⋅δt⋅∂w∂v(st;w)
其中 δt⋅∂w∂v(st;w) 是误差 δt 的均方差关于参数 w 的导数
∂w∂δt2/2=δt⋅∂w∂v(st;w)
-
对于第1步中的每个时刻,重复第2-4步。
三、Advantage Actor-Critic(A2C)算法
把 baseline 用到 Actor-Critic Method 上得到的算法就是A2C算法。
3.1 神经网络
-
策略网络(Actor)
与原始的 Actor-Critic Method 中的策略网络(Actor)相同,依然是使用神经网络 π(a∣s;θ) 来近似策略函数 π(a∣s),其中 θ 是神经网络的参数。
-
价值网络(Critic)
价值网络使用的是状态价值网络 Vπ(s) 而不是动作价值网络 Qπ(s,a)。使用神经网络 v(s;w) 来近似策略函数 Vπ(s),其中 w 是神经网络的参数。
动作价值网络 Qπ(s,a) 依赖于状态 s 和 动作 a ,而状态价值网络 Vπ(s) 仅依赖于状态 s,不依赖于动作 a,所以状态价值网络 Vπ(s) 比动作价值网络 Qπ(s,a) 更好训练。
3.2 训练过程
- 获取到一组 transition (st,at,rt,st+1)
- 计算 TD target
yt=rt+γ⋅v(st+1;w)
- 计算 TD error
δt=v(st;w)−yt
- 更新策略网络的参数 θ
θ←θ−β⋅δt⋅∂θ∂logπ(at∣st;θ)
- 更新价值网络的参数 w
w←w−α⋅δt⋅∂w∂v(st;w)
3.3 算法推导
3.3.1 价值函数性质的推导
在强化学习中时序差分学习推导出了公式:
Qπ(st,at)=E[Rt+γ⋅Qπ(St+1,At+1)], for all π
所以:
Qπ(st,at)=E[Rt+γ⋅Qπ(St+1,At+1)]=ESt+1,At+1[Rt+γ⋅Qπ(St+1,At+1)](Rt 与 At+1 无关)=ESt+1[Rt+γ⋅EAt+1[Qπ(St+1,At+1)]](状态价值函数的定义)=ESt+1[Rt+γ⋅Vπ(St+1)]
即:
Qπ(st,at)=ESt+1[Rt+γ⋅Vπ(St+1)](3.3.1a)
另,根据状态价值函数的定义:
Vπ(st)=EAt[Qπ(st,At)](使用公式 3.3.1a)=EAt[ESt+1[Rt+γ⋅Vπ(St+1)]]=EAt,St+1[Rt+γ⋅Vπ(St+1)]
即:
Vπ(st)=EAt,St+1[Rt+γ⋅Vπ(St+1)](3.3.1b)
3.3.2 价值函数性质的蒙特卡洛近似
假设我们获取到一组 transition (st,at,rt,st+1)
-
公式3.3.1a 可以近似为
Qπ(st,at)≈rt+γ⋅Vπ(st+1)(3.3.2a)
后面会使用这个公式来近似策略梯度,A2C算法的关键也在于这个公式。
-
公式3.3.1b 可以近似为
Vπ(st)≈rt+γ⋅Vπ(st+1)(3.3.2b)
使用TD算法训练价值网络 Vπ(st) 时,TD target 就是由这个公式来的。
3.3.3 训练策略网络
本文前面定义了随机梯度 g(at)
g(at)=∂θ∂logπ(at∣st;θ)⋅(Qπ(st,at)−Vπ(st))
g(at) 中包含了 Qπ(st,at)−Vπ(st),而 Qπ(st,at)−Vπ(st) 正好是优势函数(Advantage function)的定义,所以算法名中包含了 Advantage 。
结合 g(at) 的定义和 公式3.3.2a,有:
g(at)≈∂θ∂logπ(at∣st;θ)⋅(rt+γ⋅Vπ(st+1)−Vπ(st))
使用神经网络 v(s;w) 近似状态价值函数 Vπ(s),得到:
g(at)≈∂θ∂logπ(at∣st;θ)⋅(rt+γ⋅v(st+1;w)−v(st;w))
将公式中的 rt+γ⋅v(st+1;w) 记作 yt。
yt 其实就是 TD target,后面更新价值网络时也会用到。
既然计算出了近似的策略梯度,就可以使用梯度上升来训练策略网络了:
θ←θ+β⋅∂θ∂logπ(at∣st;θ)⋅(yt−v(st;w))
3.3.4 训练价值网络
将 公式3.3.2b 中的 Vπ(S) 使用神经网络 v(S;w) 近似,得到:
v(st;w)≈rt+γ⋅v(st+1;w)
将 rt+γ⋅v(st+1;w) 记作 yt。使用TD算法训练时, yt 其实就是 TD target 。
所以 TD error 就是:
δt=v(st;w)−yt
梯度:
∂w∂δt2/2=δt⋅∂w∂v(st;w)
最后使用梯度下降方法来更新网络参数 w:
w←w−α⋅δt⋅∂w∂v(st;w)
3.3.5 对算法的直观理解
回顾对策略梯度的近似:
g(at)≈∂θ∂logπ(at∣st;θ)⋅(rt+γ⋅v(st+1;w)−v(st;w))
这个公式用来更新策略网络 π(a∣s;θ)。
公式中的 rt+γ⋅v(st+1;w)−v(st;w) 是状态价值网络 v(s;w) 做出的评价。它评价了动作 at 的好坏,可以指导策略网络 π(a∣s;θ) 做改进,所以状态价值网络 v(s;w) 被称为 Critic 。
但是 rt+γ⋅v(st+1;w)−v(st;w) 中并未包含动作 at,又是如何评价动作 at 的好坏呢?
-
v(st;w) 是状态价值网络在 t 时刻基于状态 st 对状态 st 的折扣回报 E[Ut∣st] 的 预测值。预测值可以评价状态 st 的好坏,状态 st 越好,这个值就越大。
-
rt+γ⋅v(st+1;w) 是状态价值网络在 t+1 时刻基于状态 st 和状态 st+1 对状态 st 的折扣回报 E[Ut∣st,st+1] 的 预测值。
-
v(st;w) 和 rt+γ⋅v(st+1;w) 的 相同点:
- 都是状态价值网络对状态 st 的折扣回报的预估值。
- 都能够评价状态 st 的好坏。
-
v(st;w) 和 rt+γ⋅v(st+1;w) 的 区别:
- v(st;w) 是在 t 时刻做出的预测,这个预测是在执行动作 at 之前做出的,所以这个预测与动作 at 无关。
- rt+γ⋅v(st+1;w) 是在 t+1 时刻做出的预测,这个预测受动作 at 的影响,动作 at 越好,新的状态 st+1 就越好,rt+γ⋅v(st+1;w) 的值也就越大。
- 如果动作 at 越好,rt+γ⋅v(st+1;w) 的值就比 v(st;w) 更大,它们的差值就是正数,反之亦然。所以两者的差可以反映动作 at 带来的优势,两者的差就叫做 Advantage 。
参考:策略梯度与baseline