前情回顾
在上文 一文搞懂策略梯度(Policy gradient)算法(一) 中,我们主要介绍了PG算法的目标函数以及策略梯度。
可知,在PG算法中,用
∇
J
(
θ
t
)
\nabla{J(\theta_t)}
∇J(θt) 的近似来更新策略网络参数
θ
\theta
θ,从而增大目标函数。在策略梯度计算公式的最后推导中,我们得到策略梯度
∇
J
(
θ
t
)
\nabla{J(\theta_t)}
∇J(θt) 的无偏估计
同时,留下了一个尾巴——如何得到动作价值函数 Q π Q_{\pi} Qπ?
为了解决这个问题,本文将分别介绍 REINFORCE 算法和 Actor-Critic 算法,并进一步得到改进版的带基线的策略梯度算法,即 REINFORCE with baseline 以及 advantage actor-critic(A2C)。
REINFORCE
用一句话来概括: REINFORCE 进一步对 Q π Q_{\pi} Qπ 做蒙特卡洛近似,将其替换为回报 u u u。
蒙特卡洛的哲学思想——没有模型,上数据。
在智能体和环境的交互中,定义 t t t 时刻的折扣回报为:
动作价值为回报的条件期望:
因此,可以使用蒙特卡洛近似上面的条件期望——
从时刻
t
t
t 开始,有
u
t
=
∑
k
=
t
n
γ
k
−
t
.
r
k
u_t=\sum_{k=t}^n\gamma^{k-t}.r_k
ut=∑k=tnγk−t.rk。这里的
u
t
u_t
ut 是随机变量
U
t
U_t
Ut 的观测值,因此
u
t
u_t
ut 是上面公式中期望的蒙特卡洛近似,可以使用
u
t
u_t
ut 代替
Q
π
(
s
t
,
a
t
)
Q_{\pi}(s_t,a_t)
Qπ(st,at)。则随机梯度可以近似为:
这里的 g ~ \widetilde{g} g 是 g g g 的无偏估计。进行梯度上升更新策略网络参数 θ \theta θ:
以上,即为通过 REINFORCE 对策略网络进行训练的算法。
Actor-Critic
REINFORCE 中,通过实际观测的回报 u t u_t ut 对 Q π Q_{\pi} Qπ 进行近似,而 Actor-Critic 算法则是用一个神经网络近似 Q π Q_{\pi} Qπ,这个神经网络被称为“价值网络”,记作 q ( s , a ; w ) q(s,a;w) q(s,a;w),这里的 w w w 为价值网络中可训练的参数。
如图所示,价值网络的输入为状态,输出为每个动作的价值。
——PS:由这里的价值网络可以合理推断,A-C算法针对的是离散动作。
Actor-Critic 翻译为“演员-评委”算法,顾名思义,策略网络
π
(
a
∣
s
;
θ
)
\pi(a|s;\theta)
π(a∣s;θ) 相当于演员,基于状态
s
s
s 做出动作
a
a
a ;价值网络
q
(
s
,
a
;
w
)
q(s,a;w)
q(s,a;w) 相当于评委,基于演员的动作进行打分,评价在状态
s
s
s 下动作
a
a
a 的好坏程度。
A-C算法中关系图如下所示:
训练策略网络(Actor)
已知,策略网络的无偏估计:
将上式的动作价值 Q π ( s , a ) Q_{\pi}(s,a) Qπ(s,a) 近似为价值网络 q ( s , a ; w ) q(s,a;w) q(s,a;w) ,得到近似策略梯度:
然后再进行梯度上升,对策略网络的参数进行更新:
训练价值网络(Critic)
上述对于策略网络的训练结果是让 演员 越来越迎合 评委,因此,在A-C算法中,评委的水平也很重要。只有当评委的打分
q
^
\widehat{q}
q
真正的反映出动作价值
Q
π
Q_{\pi}
Qπ ,演员的水平才能真正提高。
价值网络输出:
计算TD-target:
由于 y t ^ \widehat{y_t} yt 部分基于实际观测到的奖励,因此我们认为 y t ^ \widehat{y_t} yt 比 q ( s t , a t ; w ) q(s_t,a_t;w) q(st,at;w) 更接近事实真相。固定 y t ^ \widehat{y_t} yt ,鼓励 q ( s t , a t ; w ) q(s_t,a_t;w) q(st,at;w) 去接近 y t ^ \widehat{y_t} yt 。定义损失函数:
损失函数梯度:
梯度下降,对 w w w 进行更新:
这样更新 w w w 后,可以让 q ( s t , a t ; w ) q(s_t,a_t;w) q(st,at;w) 更接近 y t ^ \widehat{y_t} yt 。
一个最简单的A-C算法,伪代码如下:
带基线的策略梯度算法
回顾策略梯度定理证明:
上面介绍的 REINFORCE 算法和 actor-critic 算法,主要就是在对 Q π Q_{\pi} Qπ 近似,区别在于方法不同。这两中方法在理论上是正确的,但是在实践中效果并不是很理想。由此引出本小节——带基线的策略梯度算法。
何谓基线?
设 b b b 为动作价值函数 Q π ( S , A ) Q_{\pi}(S,A) Qπ(S,A) 的基线(baseline),用 Q π ( S , A ) − b Q_{\pi}(S,A)-b Qπ(S,A)−b 替换掉 Q π ( S , A ) Q_{\pi}(S,A) Qπ(S,A) 。 b b b 是任意的函数,只要不依赖于动作 A A A 就可以。
上式说明
b
b
b 的取值不影响策略梯度的正确性,对于期望的结果无影响。
证明:
通常情况下,令 b = V π b=V_{\pi} b=Vπ。
说了这么多,减去基线后,有什么好处呢?
上个图,就明白了:
总结:使用基线对 Q π Q_{\pi} Qπ 进行整体搬移,相对大小不变,结果不受影响,方差减小(收敛速度加快)!
REINFORCE with baseline
可知, REINFORCE 算法使用实际观测的回报 u u u 来代替动作价值 Q π Q_{\pi} Qπ,此处叠加基线操作,同时使用一个神经网络 v ( s ; w ) v(s;w) v(s;w) 近似状态价值函数 V π V_{\pi} Vπ,则有 g ( s , a ; θ ) g(s,a;\theta) g(s,a;θ):
此处以王树森老师PPT为例,贴出训练流程:
advantage actor-critic(A2C)
首先给出一个关系图:
结合上图,可以很明显的看出 A-C 算法和 A2C 的区别。
A2C属于A-C算法,两个神经网络的结构与上一节的完全相同,但是训练方法不同。
训练价值网络(Critic)
TD-target:
定义损失函数:
损失函数梯度:
梯度下降更新 w w w:
训练策略网络(Actor)
近似策略梯度 g ( s t , a t ; θ ) g(s_t,a_t;\theta) g(st,at;θ):
对上面的期望做蒙特卡洛近似,得到:
进一步把状态价值函数替换为价值网络,得到:
有TD-target 和 TD-error:
则 g ~ \widetilde{g} g 可以写为:
更新网络参数:
训练流程:
参考资料
王树森——深度强化学习