前情回顾
在上文 一文搞懂策略梯度(Policy gradient)算法(一) 中,我们主要介绍了PG算法的目标函数以及策略梯度。
可知,在PG算法中,用
∇
J
(
θ
t
)
\nabla{J(\theta_t)}
∇J(θt) 的近似来更新策略网络参数
θ
\theta
θ,从而增大目标函数。在策略梯度计算公式的最后推导中,我们得到策略梯度
∇
J
(
θ
t
)
\nabla{J(\theta_t)}
∇J(θt) 的无偏估计
![](https://img-blog.csdnimg.cn/direct/85a90e30942c46eda93e674365be2ae7.png)
同时,留下了一个尾巴——如何得到动作价值函数 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 时刻的折扣回报为:
![](https://img-blog.csdnimg.cn/direct/8f7f45e0b2a34fa7b2b78842eb902bb7.png)
动作价值为回报的条件期望:
![](https://img-blog.csdnimg.cn/direct/148d87bc563d47fb88eca2dea07ab0ec.png)
因此,可以使用蒙特卡洛近似上面的条件期望——
从时刻
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)。则随机梯度可以近似为:
![](https://img-blog.csdnimg.cn/direct/91ea9879642949d7a0ec77dc82e420bf.png)
这里的 g ~ \widetilde{g} g 是 g g g 的无偏估计。进行梯度上升更新策略网络参数 θ \theta θ:
![](https://img-blog.csdnimg.cn/direct/020a671648134670938941bc06ca7916.png)
以上,即为通过 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 为价值网络中可训练的参数。
![](https://img-blog.csdnimg.cn/direct/4d8b93a21db14e8ab9b9435299efb619.png)
如图所示,价值网络的输入为状态,输出为每个动作的价值。
——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算法中关系图如下所示:
![](https://img-blog.csdnimg.cn/direct/5e4f923a9e4149d5aac6a555137a93d8.png)
训练策略网络(Actor)
已知,策略网络的无偏估计:
![](https://img-blog.csdnimg.cn/direct/68de3a14b20742368abfa11a0d90511f.png)
将上式的动作价值 Q π ( s , a ) Q_{\pi}(s,a) Qπ(s,a) 近似为价值网络 q ( s , a ; w ) q(s,a;w) q(s,a;w) ,得到近似策略梯度:
![](https://img-blog.csdnimg.cn/direct/d93adb39fbb143919d663dc20f67045a.png)
然后再进行梯度上升,对策略网络的参数进行更新:
![](https://img-blog.csdnimg.cn/direct/7187ff9d004747129b6a3346363bd845.png)
训练价值网络(Critic)
上述对于策略网络的训练结果是让 演员 越来越迎合 评委,因此,在A-C算法中,评委的水平也很重要。只有当评委的打分
q
^
\widehat{q}
q
真正的反映出动作价值
Q
π
Q_{\pi}
Qπ ,演员的水平才能真正提高。
价值网络输出:
![](https://img-blog.csdnimg.cn/direct/51a54fe31cfb405888e4a422a9da38f4.png)
计算TD-target:
![](https://img-blog.csdnimg.cn/direct/648bd9aa5b7c41f0966dd18cbb1d04ce.png)
由于 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 。定义损失函数:
![](https://img-blog.csdnimg.cn/direct/d01e5527ecb84e4993773f5248b8ea02.png)
损失函数梯度:
![](https://img-blog.csdnimg.cn/direct/89c4089501d24b74b92fec30847d96d7.png)
梯度下降,对 w w w 进行更新:
![](https://img-blog.csdnimg.cn/direct/8c54419f62f74ada9aba7bab9ac1242a.png)
这样更新 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算法,伪代码如下:
![](https://img-blog.csdnimg.cn/direct/72c3fab0c16f4a71a116bd02260aaeaa.png)
带基线的策略梯度算法
回顾策略梯度定理证明:
![](https://img-blog.csdnimg.cn/direct/a751632ac6134329856ab81851ce06d6.png)
上面介绍的 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 就可以。
![](https://img-blog.csdnimg.cn/direct/ece6dc3571204081b3747b46832c33d6.png)
上式说明
b
b
b 的取值不影响策略梯度的正确性,对于期望的结果无影响。
证明:
![](https://img-blog.csdnimg.cn/direct/34ea9a42f6d34381a45a31c99e2e56a4.png)
通常情况下,令 b = V π b=V_{\pi} b=Vπ。
说了这么多,减去基线后,有什么好处呢?
上个图,就明白了:
![](https://img-blog.csdnimg.cn/direct/d6d10145bf7946799f7b391dfe241329.png)
总结:使用基线对 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;θ):
![](https://img-blog.csdnimg.cn/direct/aeba585066904279948fa8d9e40b9b1f.png)
此处以王树森老师PPT为例,贴出训练流程:
![](https://img-blog.csdnimg.cn/direct/360dbc78ca5649cabb65835b96379fbd.png)
![](https://img-blog.csdnimg.cn/direct/97b5026502fa4d4abb4fd27790f862d8.png)
advantage actor-critic(A2C)
首先给出一个关系图:
![](https://img-blog.csdnimg.cn/direct/7f07f1f8c6654bf3aa68a492d93c5b89.png)
结合上图,可以很明显的看出 A-C 算法和 A2C 的区别。
A2C属于A-C算法,两个神经网络的结构与上一节的完全相同,但是训练方法不同。
训练价值网络(Critic)
TD-target:
![](https://img-blog.csdnimg.cn/direct/48f3ae6eed3946009e1c0351991b0789.png)
定义损失函数:
![](https://img-blog.csdnimg.cn/direct/9dfc18cb06004219a1c9bdc8947f80a1.png)
损失函数梯度:
![](https://img-blog.csdnimg.cn/direct/f65c9daa08bb4fc8be81dcdd3c6779d3.png)
梯度下降更新 w w w:
![](https://img-blog.csdnimg.cn/direct/0f92dc749c1948c7a91e57a4bc195532.png)
训练策略网络(Actor)
近似策略梯度 g ( s t , a t ; θ ) g(s_t,a_t;\theta) g(st,at;θ):
![](https://img-blog.csdnimg.cn/direct/29bd7cee42fc4a61a6b1b689f75c6828.png)
对上面的期望做蒙特卡洛近似,得到:
![](https://img-blog.csdnimg.cn/direct/d1ece245b9fe42b8b6c3e4e4fdbc9d64.png)
进一步把状态价值函数替换为价值网络,得到:
![](https://img-blog.csdnimg.cn/direct/8b5ecbbc8f854474847de19566ac155d.png)
有TD-target 和 TD-error:
![](https://img-blog.csdnimg.cn/direct/32fab934ad4c4bac97b43f3a8071e471.png)
则 g ~ \widetilde{g} g 可以写为:
![](https://img-blog.csdnimg.cn/direct/e1726de0962f4b1c890ac6b2bab7eff6.png)
更新网络参数:
![](https://img-blog.csdnimg.cn/direct/b68446fe39ff4824b1dd254325465c93.png)
训练流程:
![](https://img-blog.csdnimg.cn/direct/cb6c572db3be4f9eb6779ce23bd0e024.png)
参考资料
王树森——深度强化学习