深度强化学习(八)(策略梯度的近似)
一.策略梯度的近似
在上一节中我们推出了在马尔可夫链稳态的假设下,策略梯度的表达式
∇
θ
J
(
θ
)
=
E
S
[
E
A
∼
π
(
⋅
∣
S
;
θ
)
[
Q
π
(
S
,
A
)
⋅
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
]
\nabla_{\boldsymbol{\theta}} J(\boldsymbol{\theta})=\mathbb{E}_S\left[\mathbb{E}_{A \sim \pi(\cdot \mid S ; \boldsymbol{\theta})}\left[Q_\pi(S, A) \cdot \nabla_{\boldsymbol{\theta}} \ln \pi(A \mid S ; \boldsymbol{\theta})\right]\right]
∇θJ(θ)=ES[EA∼π(⋅∣S;θ)[Qπ(S,A)⋅∇θlnπ(A∣S;θ)]]
解析求出这个期望复杂度太大,因此我们采用蒙特卡洛方法去近似策略梯度。每次从环境中观测到一个状态
s
s
s,它相当于随机变量
S
S
S的观测值。然后再根据当前的策略网络(策略网络的参数必须是最新的)随机抽样得出一个动作:
a
∼
π
(
⋅
∣
s
)
a\sim\pi(\cdot\mid s)
a∼π(⋅∣s)
计算随机梯度:
g
(
s
,
a
;
θ
)
≜
Q
π
(
s
,
a
)
⋅
∇
θ
ln
π
(
a
∣
s
;
θ
)
.
\boldsymbol{g}(s, a ; \boldsymbol{\theta}) \triangleq Q_\pi(s, a) \cdot \nabla_{\boldsymbol{\theta}} \ln \pi(a \mid s ; \boldsymbol{\theta}) .
g(s,a;θ)≜Qπ(s,a)⋅∇θlnπ(a∣s;θ).
很显然,
g
(
s
,
a
;
θ
)
\boldsymbol{g}(s, a ; \boldsymbol{\theta})
g(s,a;θ) 是策略梯度
∇
θ
J
(
θ
)
\nabla_{\boldsymbol{\theta}} J(\boldsymbol{\theta})
∇θJ(θ) 的无偏估计(我们仅关心梯度的方向):
∇
θ
J
(
θ
)
=
E
S
[
E
A
∼
π
(
⋅
∣
S
;
θ
)
[
g
(
S
,
A
;
θ
)
]
]
\nabla_{\boldsymbol{\theta}} J(\boldsymbol{\theta})=\mathbb{E}_S\left[\mathbb{E}_{A \sim \pi(\cdot| S ; \boldsymbol{\theta})}[\boldsymbol{g}(S, A ; \boldsymbol{\theta})]\right]
∇θJ(θ)=ES[EA∼π(⋅∣S;θ)[g(S,A;θ)]]
然而,对于
g
(
s
,
a
;
θ
)
=
Q
π
(
s
,
a
)
⋅
∇
θ
ln
π
(
a
∣
s
;
θ
)
\boldsymbol g(s,a;\boldsymbol \theta)=Q_{\pi}(s,a)\cdot \nabla_{\boldsymbol \theta}\ln \pi(a\mid s;\boldsymbol \theta)
g(s,a;θ)=Qπ(s,a)⋅∇θlnπ(a∣s;θ),我们仍不知道
Q
π
(
s
,
a
)
Q_{\pi}(s,a)
Qπ(s,a)
二. REINFORCE 的推导
根据定义,
g
(
s
,
a
;
θ
)
≜
Q
π
(
s
,
a
)
⋅
∇
θ
ln
π
(
a
∣
s
;
θ
)
\boldsymbol{g}(s, a ; \boldsymbol{\theta}) \triangleq Q_\pi(s, a) \cdot \nabla_{\boldsymbol{\theta}} \ln \pi(a \mid s ; \boldsymbol{\theta})
g(s,a;θ)≜Qπ(s,a)⋅∇θlnπ(a∣s;θ) 。上一节中把策略梯度
∇
θ
J
(
θ
)
\nabla_{\boldsymbol{\theta}} J(\boldsymbol{\theta})
∇θJ(θ) 表示成期望的连加:
∇
θ
J
(
θ
)
=
E
S
1
,
A
1
[
g
(
S
1
,
A
1
;
θ
)
]
+
γ
⋅
E
S
1
,
A
1
,
S
2
,
A
2
[
g
(
S
2
,
A
2
;
θ
)
]
+
γ
2
⋅
E
S
1
,
A
1
,
S
2
,
A
2
,
S
3
,
A
3
[
g
(
S
3
,
A
3
;
θ
)
]
+
⋯
+
γ
n
−
1
⋅
E
S
1
,
A
1
,
S
2
,
A
2
,
S
3
,
A
3
,
⋯
,
S
n
,
A
n
[
g
(
S
n
,
A
n
;
θ
)
]
.
(2.1)
\begin{aligned} \nabla_{\boldsymbol{\theta}} J(\boldsymbol{\theta})= & \mathbb{E}_{S_1, A_1}\left[\boldsymbol{g}\left(S_1, A_1 ; \boldsymbol{\theta}\right)\right] \\ & +\gamma \cdot \mathbb{E}_{S_1, A_1, S_2, A_2}\left[\boldsymbol{g}\left(S_2, A_2 ; \boldsymbol{\theta}\right)\right] \\ & +\gamma^2 \cdot \mathbb{E}_{S_1, A_1, S_2, A_2, S_3, A_3}\left[\boldsymbol{g}\left(S_3, A_3 ; \boldsymbol{\theta}\right)\right] \\ & +\cdots \\ & +\gamma^{n-1} \cdot \mathbb{E}_{S_1, A_1, S_2, A_2, S_3, A_3, \cdots, S_n, A_n}\left[\boldsymbol{g}\left(S_n, A_n ; \boldsymbol{\theta}\right)\right] . \end{aligned} \tag{2.1}
∇θJ(θ)=ES1,A1[g(S1,A1;θ)]+γ⋅ES1,A1,S2,A2[g(S2,A2;θ)]+γ2⋅ES1,A1,S2,A2,S3,A3[g(S3,A3;θ)]+⋯+γn−1⋅ES1,A1,S2,A2,S3,A3,⋯,Sn,An[g(Sn,An;θ)].(2.1)
我可以对期望做蒙特卡洛近似。首先观测到第一个状态
S
1
=
s
1
S_1=s_1
S1=s1 。然后用最新的策略网络
π
(
a
∣
s
;
θ
now
)
\pi\left(a \mid s ; \boldsymbol{\theta}_{\text {now }}\right)
π(a∣s;θnow ) 控制智能体与环境交互, 观测到到轨迹
s
1
,
a
1
,
r
1
,
s
2
,
a
2
,
r
2
,
⋯
,
s
n
,
a
n
,
r
n
.
s_1, a_1, r_1, s_2, a_2, r_2, \cdots, s_n, a_n, r_n .
s1,a1,r1,s2,a2,r2,⋯,sn,an,rn.
对公式 (2.1) 中的期望做蒙特卡洛近似, 得到:
∇
θ
J
(
θ
now
)
≈
g
(
s
1
,
a
1
;
θ
now
)
+
γ
⋅
g
(
s
2
,
a
2
;
θ
now
)
+
⋯
+
γ
n
−
1
⋅
g
(
s
n
,
a
n
;
θ
now
)
.
\nabla_{\boldsymbol{\theta}} J\left(\boldsymbol{\theta}_{\text {now }}\right) \approx \boldsymbol{g}\left(s_1, a_1 ; \boldsymbol{\theta}_{\text {now }}\right)+\gamma \cdot \boldsymbol{g}\left(s_2, a_2 ; \boldsymbol{\theta}_{\text {now }}\right)+\cdots+\gamma^{n-1} \cdot \boldsymbol{g}\left(s_n, a_n ; \boldsymbol{\theta}_{\text {now }}\right) .
∇θJ(θnow )≈g(s1,a1;θnow )+γ⋅g(s2,a2;θnow )+⋯+γn−1⋅g(sn,an;θnow ).
进一步把
g
(
s
t
,
a
t
;
θ
now
)
≜
Q
π
(
s
t
,
a
t
)
⋅
∇
θ
ln
π
(
a
t
∣
s
t
;
θ
now
)
\boldsymbol{g}\left(s_t, a_t ; \boldsymbol{\theta}_{\text {now }}\right) \triangleq Q_\pi\left(s_t, a_t\right) \cdot \nabla_{\boldsymbol{\theta}} \ln \pi\left(a_t \mid s_t ; \boldsymbol{\theta}_{\text {now }}\right)
g(st,at;θnow )≜Qπ(st,at)⋅∇θlnπ(at∣st;θnow ) 中的
Q
π
(
s
t
,
a
t
)
Q_\pi\left(s_t, a_t\right)
Qπ(st,at) 替换成
u
t
u_t
ut, 那么
g
(
s
t
,
a
t
;
θ
now
)
\boldsymbol{g}\left(s_t, a_t ; \boldsymbol{\theta}_{\text {now }}\right)
g(st,at;θnow ) 就被近似成为
g
(
s
t
,
a
t
;
θ
now
)
≈
u
t
⋅
∇
θ
ln
π
(
a
t
∣
s
t
;
θ
now
)
.
\boldsymbol{g}\left(s_t, a_t ; \boldsymbol{\theta}_{\text {now }}\right) \approx u_t \cdot \nabla_{\boldsymbol{\theta}} \ln \pi\left(a_t \mid s_t ; \boldsymbol{\theta}_{\text {now }}\right) .
g(st,at;θnow )≈ut⋅∇θlnπ(at∣st;θnow ).
经过上述两次近似, 策略梯度被近似成为下面的随机梯度
∇
θ
J
(
θ
now
)
≈
∑
t
=
1
n
γ
t
−
1
⋅
u
t
⋅
∇
θ
ln
π
(
a
t
∣
s
t
;
θ
now
)
.
\nabla_{\boldsymbol{\theta}} J\left(\boldsymbol{\theta}_{\text {now }}\right) \approx \sum_{t=1}^n \gamma^{t-1} \cdot u_t \cdot \nabla_{\boldsymbol{\theta}} \ln \pi\left(a_t \mid s_t ; \boldsymbol{\theta}_{\text {now }}\right) .
∇θJ(θnow )≈t=1∑nγt−1⋅ut⋅∇θlnπ(at∣st;θnow ).
这样就得到了 REINFORCE 算法的随机梯度上升公式:
θ
new
←
θ
now
+
β
⋅
∑
t
=
1
n
γ
t
−
1
⋅
u
t
⋅
∇
θ
ln
π
(
a
t
∣
s
t
;
θ
now
)
\boldsymbol{\theta}_{\text {new }} \leftarrow \boldsymbol{\theta}_{\text {now }}+\beta \cdot \sum_{t=1}^n \gamma^{t-1} \cdot u_t \cdot \nabla_{\boldsymbol{\theta}} \ln \pi\left(a_t \mid s_t ; \boldsymbol{\theta}_{\text {now }}\right)
θnew ←θnow +β⋅t=1∑nγt−1⋅ut⋅∇θlnπ(at∣st;θnow )
三.Actor-Critic
策略梯度定理推导出梯度更新的方向
g
(
s
,
a
;
θ
)
≜
Q
π
(
s
,
a
)
⋅
∇
θ
ln
π
(
a
∣
s
;
θ
)
\boldsymbol{g}(s, a ; \boldsymbol{\theta}) \triangleq Q_\pi(s, a) \cdot \nabla_{\boldsymbol{\theta}} \ln \pi(a \mid s ; \boldsymbol{\theta})
g(s,a;θ)≜Qπ(s,a)⋅∇θlnπ(a∣s;θ)
但是其中的动作价值函数
Q
π
Q_\pi
Qπ 是未知的, 导致无法直接计算
g
(
s
,
a
;
θ
)
\boldsymbol{g}(s, a ; \boldsymbol{\theta})
g(s,a;θ) 。上一节的 REINFORCE 用实际观测的回报近似
Q
π
Q_\pi
Qπ, 本节的 actor-critic 方法用神经网络近似
Q
π
Q_\pi
Qπ 。
Actor-critic 方法用一个神经网络近似动作价值函数 Q π ( s , a ) Q_π(s,a) Qπ(s,a),这个神经网络叫做“价值网络”,记为 q ( s , a ; w ) q(s,a;\boldsymbol w) q(s,a;w),其中的 w \boldsymbol w w 表示神经网络中可训练的参数。价值网络的输入是状态 s s s,输出是每个动作的价值。动作空间A中有多少种动作,那么价值网络的输出就是多少维的向量,向量每个元素对应一个动作。
Actor-critic 翻译成 “演员一评委”方法。策略网络 π ( a ∣ s ; θ ) \pi(a \mid s ; \boldsymbol{\theta}) π(a∣s;θ) 相当于演员, 它基于状态 s s s做出动作 a a a 。价值网络 q ( s , a ; w ) q(s, a ; \boldsymbol{w}) q(s,a;w) 相当于评委, 它给演员的表现打分, 评价在状态 s s s 的情况下做出动作 a a a 的好坏程度。
训练策略网络 (演员) : 策略网络 (演员) 想要改进自己的演技, 但是演员自己不知道什么样的表演才算更好, 所以需要价值网络(评委)的帮助。在演员做出动作 a a a 之后,评委会打一个分数 q ^ ≜ q ( s , a ; w ) \widehat{q} \triangleq q(s, a ; \boldsymbol{w}) q ≜q(s,a;w), 并把分数反馈给演员, 帮助演员做出改进。演员利用当前状态 s s s, 自己的动作 a a a, 以及评委的打分 q ^ \hat{q} q^, 计算近似策略梯度, 然后更新自己的参数 θ \boldsymbol{\theta} θ (相当于改变自己的技术)。通过这种方式, 演员的表现越来越受评委的好评, 于是演员的获得的评分 q ^ \widehat{q} q 越来越高。
训练策略网络的基本想法是用策略梯度
∇
θ
J
(
θ
)
\nabla_{\boldsymbol{\theta}} J(\boldsymbol{\theta})
∇θJ(θ) 的近似来更新参数
θ
\boldsymbol{\theta}
θ 。之前我们推导过策略梯度的无偏估计:
g
(
s
,
a
;
θ
)
≜
Q
π
(
s
,
a
)
⋅
∇
θ
ln
π
(
a
∣
s
;
θ
)
.
\boldsymbol{g}(s, a ; \boldsymbol{\theta}) \triangleq Q_\pi(s, a) \cdot \nabla_{\boldsymbol{\theta}} \ln \pi(a \mid s ; \boldsymbol{\theta}) .
g(s,a;θ)≜Qπ(s,a)⋅∇θlnπ(a∣s;θ).
价值网络
q
(
s
,
a
;
w
)
q(s, a ; \boldsymbol{w})
q(s,a;w) 是对动作价值函数
Q
π
(
s
,
a
)
Q_\pi(s, a)
Qπ(s,a) 的近似, 所以把上面公式中的
Q
π
Q_\pi
Qπ 替换成价值网络, 得到近似策略梯度:
g
^
(
s
,
a
;
θ
)
≜
q
(
s
,
a
;
w
)
⏟
评委的打分
⋅
∇
θ
ln
π
(
a
∣
s
;
θ
)
.
\widehat{\boldsymbol{g}}(s, a ; \boldsymbol{\theta}) \triangleq \underbrace{q(s, a ; \boldsymbol{w})}_{\text {评委的打分 }} \cdot \nabla_{\boldsymbol{\theta}} \ln \pi(a \mid s ; \boldsymbol{\theta}) .
g
(s,a;θ)≜评委的打分
q(s,a;w)⋅∇θlnπ(a∣s;θ).
最后做梯度上升更新策略网络的参数:
θ
←
θ
+
β
⋅
g
^
(
s
,
a
;
θ
)
\boldsymbol{\theta} \leftarrow \boldsymbol{\theta}+\beta \cdot \widehat{\boldsymbol{g}}(s, a ; \boldsymbol{\theta})
θ←θ+β⋅g
(s,a;θ)
用上述方式更新参数之后,会让评委打出的分数越来越高,而评委评分的均值为
v
(
s
;
θ
)
=
E
A
∼
π
(
⋅
∣
s
;
θ
)
[
q
(
s
,
A
;
w
)
]
v(s ; \boldsymbol{\theta})=\mathbb{E}_{A \sim \pi(\cdot \mid s ; \boldsymbol{\theta})}[q(s, A ; \boldsymbol{w})]
v(s;θ)=EA∼π(⋅∣s;θ)[q(s,A;w)]
而梯度上升的方向
E
A
∼
π
(
⋅
∣
s
;
θ
)
[
q
(
s
,
A
;
w
)
⋅
∇
θ
ln
π
(
A
∣
s
;
θ
)
]
=
∑
A
q
(
s
,
a
;
w
)
⋅
∇
θ
π
(
a
∣
s
;
θ
)
=
∇
θ
[
∑
A
q
(
s
,
a
;
w
)
⋅
π
(
a
∣
s
;
θ
)
]
=
∇
θ
E
A
∼
π
(
⋅
∣
s
;
θ
)
[
q
(
s
,
A
;
w
)
]
=
∇
θ
v
(
s
;
θ
)
\begin{aligned} \Bbb E_{A\sim \pi(\cdot \mid s; \boldsymbol{\theta})}[q(s, A ; \boldsymbol{w}) \cdot \nabla_{\boldsymbol{\theta}} \ln \pi(A \mid s ; \boldsymbol{\theta}) ]&=\sum_{A}q(s,a;\boldsymbol w)\cdot \nabla_{\boldsymbol \theta}\pi(a\mid s;\boldsymbol \theta)\\ &=\nabla_{\boldsymbol \theta}[\sum_{A}q(s,a;\boldsymbol w)\cdot \pi(a\mid s;\boldsymbol \theta)]\\ &=\nabla_{\boldsymbol \theta}\mathbb{E}_{A \sim \pi(\cdot \mid s ; \boldsymbol{\theta})}[q(s, A ; \boldsymbol{w})]\\ &=\nabla_{\boldsymbol \theta}v(s ; \boldsymbol{\theta}) \end{aligned}
EA∼π(⋅∣s;θ)[q(s,A;w)⋅∇θlnπ(A∣s;θ)]=A∑q(s,a;w)⋅∇θπ(a∣s;θ)=∇θ[A∑q(s,a;w)⋅π(a∣s;θ)]=∇θEA∼π(⋅∣s;θ)[q(s,A;w)]=∇θv(s;θ)
因此,用梯度上升更新
θ
\boldsymbol \theta
θ,会让
v
(
s
;
θ
)
v(s;\boldsymbol \theta)
v(s;θ)变大,也就是让评委打分的均值更高。
换句话说,即使评委的水平与真实水平相差甚远,在训练的过程中评委的评分依旧会上升。通过以上分析,我们不难发现上述训练策略网络(演员)的 方法不是真正让演员表现更好,只是让演员更迎合评委的喜好而已。因此,评委的水平也很重要,只有当评委的打分 q q q真正反映出动作价值 Q π Q_{\pi} Qπ,演员的水平才能真正提高。我们使用 S A R A S SARAS SARAS算法对价值网络进行更新。
下面概括 actor-critic 训练流程。设当前策略网络参数是 θ now \boldsymbol{\theta}_{\text {now }} θnow , 价值网络参数是 w now \boldsymbol{w}_{\text {now }} wnow 。执行下面的步骤, 将参数更新成 θ new \theta_{\text {new }} θnew 和 w new \boldsymbol{w}_{\text {new }} wnew :
- 观测到当前状态 s t s_t st, 根据策略网络做决策: a t ∼ π ( ⋅ ∣ s t ; θ now ) a_t \sim \pi\left(\cdot \mid s_t ; \boldsymbol{\theta}_{\text {now }}\right) at∼π(⋅∣st;θnow ), 并让智能体执行动作 a t a_t at 。
- 从环境中观测到奖励 r t r_t rt 和新的状态 s t + 1 s_{t+1} st+1 。
- 根据策略网络做决策: a ~ t + 1 ∼ π ( ⋅ ∣ s t + 1 ; θ now ) \tilde{a}_{t+1} \sim \pi\left(\cdot \mid s_{t+1} ; \boldsymbol{\theta}_{\text {now }}\right) a~t+1∼π(⋅∣st+1;θnow ), 但不让智能体执行动作 a ~ t + 1 \tilde{a}_{t+1} a~t+1 。
- 让价值网络打分:
q ^ t = q ( s t , a t ; w now ) 和 q ^ t + 1 = q ( s t + 1 , a ~ t + 1 ; w now ) \widehat{q}_t=q\left(s_t, a_t ; \boldsymbol{w}_{\text {now }}\right) \quad \text { 和 } \quad \widehat{q}_{t+1}=q\left(s_{t+1}, \tilde{a}_{t+1} ; \boldsymbol{w}_{\text {now }}\right) q t=q(st,at;wnow ) 和 q t+1=q(st+1,a~t+1;wnow ) - 计算 TD 目标和 TD 误差:
y ^ t = r t + γ ⋅ q ^ t + 1 和 δ t = q ^ t − y ^ t . \widehat{y}_t=r_t+\gamma \cdot \widehat{q}_{t+1} \quad \text { 和 } \quad \delta_t=\widehat{q}_t-\widehat{y}_t . y t=rt+γ⋅q t+1 和 δt=q t−y t. - 更新价值网络:
w new ← w now − α ⋅ δ t ⋅ ∇ w q ( s t , a t ; w now ) . \boldsymbol{w}_{\text {new }} \leftarrow \boldsymbol{w}_{\text {now }}-\alpha \cdot \delta_t \cdot \nabla_{\boldsymbol{w}} q\left(s_t, a_t ; \boldsymbol{w}_{\text {now }}\right) . wnew ←wnow −α⋅δt⋅∇wq(st,at;wnow ). - 更新策略网络:
θ new ← θ now + β ⋅ q ^ t ⋅ ∇ θ ln π ( a t ∣ s t ; θ now ) . \boldsymbol{\theta}_{\text {new }} \leftarrow \boldsymbol{\theta}_{\text {now }}+\beta \cdot \widehat{q}_t \cdot \nabla_{\boldsymbol{\theta}} \ln \pi\left(a_t \mid s_t ; \boldsymbol{\theta}_{\text {now }}\right) . θnew ←θnow +β⋅q t⋅∇θlnπ(at∣st;θnow ).