文章目录
前言
前段时间都在忙毕业论文,强化学习这块的总结就拉下了,本小节将对《深度强化学习》中的策略学习章节进行总结。如有错误,欢迎指出。
策略学习概述
价值学习让神经网络学习最优动作价值函数
Q
π
(
s
,
a
)
Q_{\pi}(s,a)
Q
π
(
s
,
a
)
,而策略学习让神经网络学习最优策略函数
π
(
a
∣
s
)
\pi(a|s)
π
(
a
∣
s
)
,其中
a
a
a
表示智能体执行的动作,
s
s
s
表示环境状态。如下图所示,策略学习中的神经网络的输入为状态
s
s
s
,输出为智能体执行各个动作的概率,接着依据概率随机抽样一个动作让智能体执行。
如未特殊提及,本文将利用
a
a
a
、
A
A
A
表示动作,
s
s
s
、
S
S
S
表示状态,
π
\pi
π
表示策略。
策略学习的目标
不论是策略学习,还是价值学习,其目标都是让处于状态
s
t
s_t
s
t
时刻的智能体,在执行一系列动作后得到的回报最大化。策略学习的目标为最大化状态价值函数
V
π
(
S
)
V_\pi(S)
V
π
(
S
)
,其定义为
V
π
(
S
)
=
E
A
∼
π
(
.
∣
S
;
θ
)
[
Q
π
(
A
,
S
)
]
(1.0)
V_\pi(S)=E_{A\sim \pi(.|S;\theta)}[Q\pi(A,S)]\tag{1.0}
V
π
(
S
)
=
E
A
∼
π
(
.
∣
S
;
θ
)
[
Q
π
(
A
,
S
)
]
(
1
.
0
)
动作价值函数
Q
π
(
A
,
S
)
Q_\pi(A,S)
Q
π
(
A
,
S
)
表示智能体使用策略
π
\pi
π
,在状态
S
S
S
做出动作后
A
A
A
后获得回报的上限。而状态价值函数表示
V
π
(
S
)
V_\pi(S)
V
π
(
S
)
表示智能体使用策略
π
\pi
π
,处于状态
S
S
S
时获得回报的上限。状态越好,状态价值函数取值越大,未来获得的回报也越大,例如《王者荣耀》中破敌方三高,经济领先敌方一万,这种状态下状态价值函数取值将较大,表示未来获得的回报将较大(控野区、拿双龙,甚至是破地方水晶)。依据状态价值函数的定义,策略学习的目标函数为
max
J
(
θ
)
=
max
E
S
[
V
π
(
S
)
]
(1.1)
\max J(\theta)=\max E_S[V_\pi(S)]\tag{1.1}
max
J
(
θ
)
=
max
E
S
[
V
π
(
S
)
]
(
1
.
1
)
即让神经网络学习到一个策略函数
π
\pi
π
,能在任意状态下让状态价值函数的取值最大化。式1.1可以使用
梯度上升法
优化,因此需要计算
J
(
θ
)
J(\theta)
J
(
θ
)
的梯度(又被称为策略梯度),经过一系列计算有
∇
J
(
θ
)
=
E
S
[
E
A
∼
π
(
.
∣
S
;
θ
)
[
Q
π
(
S
,
A
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
]
(1.2)
\nabla J(\theta)=E_S[E_{A\sim \pi(.|S;\theta)}[Q_\pi(S,A)\nabla_{\theta}\ln\pi(A|S;\theta)]] \tag{1.2}
∇
J
(
θ
)
=
E
S
[
E
A
∼
π
(
.
∣
S
;
θ
)
[
Q
π
(
S
,
A
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
]
(
1
.
2
)
式1.2的具体推导可以查看原文87页到91页。对式1.2使用蒙特卡洛近似,利用
t
t
t
时刻智能体所处的状态
s
t
s_t
s
t
和动作
a
t
a_t
a
t
,则有
∇
J
(
θ
)
=
(
1
+
γ
+
γ
2
+
.
.
.
+
γ
n
)
Q
π
(
s
t
,
a
t
)
∇
θ
ln
π
(
a
t
∣
s
t
;
θ
)
(1.2)
\nabla J(\theta)=(1+\gamma+\gamma^2+…+\gamma^n)Q_\pi(s_t,a_t)\nabla_{\theta}\ln\pi(a_t|s_t;\theta) \tag{1.2}
∇
J
(
θ
)
=
(
1
+
γ
+
γ
2
+
.
.
.
+
γ
n
)
Q
π
(
s
t
,
a
t
)
∇
θ
ln
π
(
a
t
∣
s
t
;
θ
)
(
1
.
2
)
其中
γ
\gamma
γ
表示回报的折扣率,n表示智能体完成一次游戏所经历的状态个数。
(
1
+
γ
+
γ
2
+
.
.
.
+
γ
n
)
(1+\gamma+\gamma^2+…+\gamma^n)
(
1
+
γ
+
γ
2
+
.
.
.
+
γ
n
)
为常数,会被学习率所吸收,因此可以忽略不计。策略学习的目标是使用神经网络(又称为策略网络)拟合策略函数,因此式1.2中的
θ
\theta
θ
表示策略网络的参数,
∇
θ
ln
π
(
a
t
∣
s
t
;
θ
)
\nabla_{\theta}\ln\pi(a_t|s_t;\theta)
∇
θ
ln
π
(
a
t
∣
s
t
;
θ
)
可以通过策略网络的反向传播计算得到。对于
Q
π
(
s
t
,
a
t
)
Q_\pi(s_t,a_t)
Q
π
(
s
t
,
a
t
)
,存在REINFORCE和Actor-Critic两种方式近似表达。
策略学习方法:REINFORCE
由于
Q
π
(
s
t
,
a
t
)
Q_\pi(s_t,a_t)
Q
π
(
s
t
,
a
t
)
表示智能体在状态
s
t
s_t
s
t
时,执行动作
a
t
a_t
a
t
后获得回报(奖励)的上限,因此可以让策略网络操纵智能体完整完成一次游戏,由此可得到
(
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)、…、(s_n,a_n,r_n)
(
s
1
,
a
1
,
r
1
)
、
(
s
2
,
a
2
,
r
2
)
、
.
.
.
、
(
s
n
,
a
n
,
r
n
)
一系列的轨迹,其中
r
i
r_i
r
i
表示智能体在状态
s
i
s_i
s
i
执行动作
a
i
a_i
a
i
后获得的奖励。利用上述轨迹,可以计算
t
t
t
时刻,智能体在状态为
s
t
s_t
s
t
时,做出动作
a
t
a_t
a
t
后得到的回报
u
t
u_t
u
t
为
u
t
=
∑
k
=
t
n
γ
k
−
t
r
k
=
Q
π
(
s
t
,
a
t
)
(1.3)
u_t=\sum_{k=t}^n \gamma^{k-t}r_k=Q_\pi(s_t,a_t) \tag{1.3}
u
t
=
k
=
t
∑
n
γ
k
−
t
r
k
=
Q
π
(
s
t
,
a
t
)
(
1
.
3
)
策略梯度
∇
J
(
θ
)
\nabla J(\theta)
∇
J
(
θ
)
可以表示成
∇
J
(
θ
)
=
∑
t
=
1
n
γ
t
−
1
E
S
t
,
A
t
[
Q
π
(
S
t
,
A
t
)
∇
θ
ln
π
(
A
t
∣
S
t
;
θ
)
]
≈
∑
t
=
1
n
γ
t
−
1
Q
π
(
s
t
,
a
t
)
∇
θ
ln
π
(
a
t
∣
s
t
;
θ
)
(1.4)
\begin{aligned} \nabla J(\theta)&=\sum_{t=1}^n\gamma^{t-1} E_{S_t,A_t}[Q_\pi(S_t,A_t)\nabla_{\theta}\ln\pi(A_t|S_t;\theta) ]\\ &\approx \sum_{t=1}^n\gamma^{t-1} Q_\pi(s_t,a_t)\nabla_{\theta}\ln\pi(a_t|s_t;\theta) \tag{1.4} \end{aligned}
∇
J
(
θ
)
=
t
=
1
∑
n
γ
t
−
1
E
S
t
,
A
t
[
Q
π
(
S
t
,
A
t
)
∇
θ
ln
π
(
A
t
∣
S
t
;
θ
)
]
≈
t
=
1
∑
n
γ
t
−
1
Q
π
(
s
t
,
a
t
)
∇
θ
ln
π
(
a
t
∣
s
t
;
θ
)
(
1
.
4
)
由此可得策略梯度为
∇
J
(
θ
)
=
∑
t
=
1
n
γ
t
−
1
u
t
∇
θ
ln
π
(
a
t
∣
s
t
;
θ
)
(1.5)
\nabla J(\theta)=\sum_{t=1}^n\gamma^{t-1}u_t\nabla_{\theta}\ln\pi(a_t|s_t;\theta)\tag{1.5}
∇
J
(
θ
)
=
t
=
1
∑
n
γ
t
−
1
u
t
∇
θ
ln
π
(
a
t
∣
s
t
;
θ
)
(
1
.
5
)
REINFORCE的训练流程
-
用策略网络控制智能体完成一整局游戏,得到一系列轨迹:
(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)、…、(s_n,a_n,r_n)
(
s
1
,
a
1
,
r
1
)
、
(
s
2
,
a
2
,
r
2
)
、
.
.
.
、
(
s
n
,
a
n
,
r
n
)
-
计算所有时刻的回报
ut
=
∑
k
=
t
n
γ
k
−
t
r
k
=
Q
π
(
s
t
,
a
t
)
(1.6)
u_t=\sum_{k=t}^n \gamma^{k-t}r_k=Q_\pi(s_t,a_t)\tag{1.6}
u
t
=
k
=
t
∑
n
γ
k
−
t
r
k
=
Q
π
(
s
t
,
a
t
)
(
1
.
6
)
-
利用随机梯度上升法更新策略网络的参数
θn
e
w
=
θ
n
o
w
+
β
∑
t
=
1
n
γ
t
−
1
u
t
∇
θ
ln
π
(
a
t
∣
s
t
;
θ
)
\theta_{new}=\theta_{now}+\beta \sum_{t=1}^n \gamma^{t-1} u_t\nabla_{\theta}\ln\pi(a_t|s_t;\theta)
θ
n
e
w
=
θ
n
o
w
+
β
t
=
1
∑
n
γ
t
−
1
u
t
∇
θ
ln
π
(
a
t
∣
s
t
;
θ
)
其中
θn
o
w
\theta_{now}
θ
n
o
w
表示策略网络当前的参数,
θn
e
w
\theta_{new}
θ
n
e
w
表示更新后的策略网络参数,
γ\gamma
γ
表示折扣率,为超参数。
策略学习方法:Actor-Critic方法
Actor-Critic方法利用神经网络近似动作价值函数
Q
π
(
s
t
,
a
t
)
Q_\pi(s_t,a_t)
Q
π
(
s
t
,
a
t
)
,这个网络又被称为价值网络,记为
q
π
(
s
,
a
)
q_\pi(s,a)
q
π
(
s
,
a
)
。其输入为状态
s
s
s
,输出为每个动作的动作价值函数,使用价值学习中的SARSA策略训练。价值网络(Critic)负责对策略网络(Actor)做出的动作评分
Actor-Critic的训练流程
-
观测到当前的状态
st
s_t
s
t
,将该状态输入到策略网络
π(
a
∣
s
t
;
θ
)
\pi(a|s_t;\theta)
π
(
a
∣
s
t
;
θ
)
中,得到智能体执行各个动作的概率。依据概率抽样其中一个动作
at
a_t
a
t
,智能体执行该动作后得到新的状态
st
+
1
s_{t+1}
s
t
+
1
和奖励
rt
r_t
r
t
。将状态
st
+
1
s_{t+1}
s
t
+
1
输入到策略网络
π(
a
∣
s
t
)
\pi(a|s_t)
π
(
a
∣
s
t
)
中,依据输出概率抽样得到智能体执行的动作
at
+
1
a_{t+1}
a
t
+
1
。 -
计算
q^
t
=
q
π
(
s
t
,
a
t
;
w
n
o
w
)
\hat q_t=q_\pi(s_t,a_t;w_{now})
q
^
t
=
q
π
(
s
t
,
a
t
;
w
n
o
w
)
、
q^
t
+
1
=
q
π
(
s
t
+
1
,
a
t
+
1
;
w
n
o
w
)
\hat q_{t+1}=q_\pi(s_{t+1},a_{t+1};w_{now})
q
^
t
+
1
=
q
π
(
s
t
+
1
,
a
t
+
1
;
w
n
o
w
)
-
利用利用贝尔曼方程优化价值网络
q(
s
,
a
;
w
)
q(s,a;w)
q
(
s
,
a
;
w
)
wn
e
w
=
w
n
o
w
−
α
[
q
^
t
−
(
r
t
+
q
^
t
+
1
)
]
∇
w
q
(
s
t
,
a
t
;
w
n
o
w
)
w_{new}=w_{now}-\alpha [\hat q_t-(r_t+\hat q_{t+1})]\nabla_{w}q(s_t,a_t;w_{now})
w
n
e
w
=
w
n
o
w
−
α
[
q
^
t
−
(
r
t
+
q
^
t
+
1
)
]
∇
w
q
(
s
t
,
a
t
;
w
n
o
w
)
-
更新策略网络
θn
e
w
=
θ
n
o
w
+
β
q
^
t
∇
θ
ln
π
(
a
t
∣
s
t
;
θ
)
\theta_{new}=\theta_{now}+\beta \hat q_t \nabla_{\theta}\ln\pi(a_t|s_t;\theta)
θ
n
e
w
=
θ
n
o
w
+
β
q
^
t
∇
θ
ln
π
(
a
t
∣
s
t
;
θ
)
其中
α
\alpha
α
、
β
\beta
β
为学习率。由于使用贝尔曼方程优化价值网络,因此上述训练策略会导致价值网络出现高估,可以引入目标网络解决,具体查阅
强化学习——价值学习中的DQN
随着训练的进行,价值网络对策略网络做出动作的评分会越来越高,这是因为策略学习的目标是最大化状态价值函数,依据式1.0可知,最大化状态价值函数将使得动作价值函数的取值越来越大,即价值网络读策略网络做出动作的评分越来越高。
带基线的策略学习方法
上述两个策略学习的方法存在训练难以收敛的问题。对于REINFORCE方法,不同轮训练采样到的轨迹不同,回报
u
t
u_t
u
t
的取值方差大,导致策略梯度方差较大,模型难以收敛。对于Actor-Critic方法,价值网络的参数不断更新也将导致
Q
π
(
S
,
A
)
Q_\pi(S,A)
Q
π
(
S
,
A
)
的取值方差大,导致策略梯度的方差较大,模型难以收敛。
基于上述考虑,带基线的策略学习方法引入了基线
b
b
b
,此时策略梯度为
∇
J
(
θ
)
=
E
S
[
E
A
∼
π
(
.
∣
S
;
θ
)
[
(
Q
π
(
S
,
A
)
−
b
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
]
(1.7)
\nabla J(\theta)=E_S[E_{A\sim \pi(.|S;\theta)}[(Q_\pi(S,A)-b)\nabla_{\theta}\ln\pi(A|S;\theta)]] \tag{1.7}
∇
J
(
θ
)
=
E
S
[
E
A
∼
π
(
.
∣
S
;
θ
)
[
(
Q
π
(
S
,
A
)
−
b
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
]
(
1
.
7
)
其中
b
b
b
即基线,
b
b
b
不依赖于动作A。值得一提的是,基线并不会影响策略梯度的取值,具体而言
∇
J
(
θ
)
=
E
S
[
E
A
∼
π
(
.
∣
S
;
θ
)
[
(
Q
π
(
S
,
A
)
−
b
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
]
=
E
S
[
E
A
∼
π
(
.
∣
S
;
θ
)
[
Q
π
(
S
,
A
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
]
−
E
S
[
E
A
∼
π
(
.
∣
S
;
θ
)
[
b
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
]
=
E
S
[
E
A
∼
π
(
.
∣
S
;
θ
)
[
Q
π
(
S
,
A
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
]
−
E
S
[
b
E
A
∼
π
(
.
∣
S
;
θ
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
=
E
S
[
E
A
∼
π
(
.
∣
S
;
θ
)
[
Q
π
(
S
,
A
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
]
−
E
S
[
b
∑
A
π
(
A
∣
S
;
θ
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
=
E
S
[
E
A
∼
π
(
.
∣
S
;
θ
)
[
Q
π
(
S
,
A
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
]
−
E
S
[
b
∑
A
∇
θ
π
(
A
∣
S
;
θ
)
]
=
E
S
[
E
A
∼
π
(
.
∣
S
;
θ
)
[
Q
π
(
S
,
A
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
]
−
E
S
[
b
∇
θ
∑
A
[
π
(
A
∣
S
;
θ
)
]
]
=
E
S
[
E
A
∼
π
(
.
∣
S
;
θ
)
[
Q
π
(
S
,
A
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
]
−
E
S
[
b
∇
θ
1
]
]
=
E
S
[
E
A
∼
π
(
.
∣
S
;
θ
)
[
Q
π
(
S
,
A
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
]
\begin{aligned} \nabla J(\theta)&=E_S[E_{A\sim \pi(.|S;\theta)}[(Q_\pi(S,A)-b)\nabla_{\theta}\ln\pi(A|S;\theta)]]\\ &=E_S[E_{A\sim \pi(.|S;\theta)}[Q_\pi(S,A)\nabla_{\theta}\ln\pi(A|S;\theta)]]-E_S[E_{A\sim \pi(.|S;\theta)}[b\nabla_{\theta}\ln\pi(A|S;\theta)]]\\ &=E_S[E_{A\sim \pi(.|S;\theta)}[Q_\pi(S,A)\nabla_{\theta}\ln\pi(A|S;\theta)]]-E_S[bE_{A\sim \pi(.|S;\theta)}\nabla_{\theta}\ln\pi(A|S;\theta)]\\ &=E_S[E_{A\sim \pi(.|S;\theta)}[Q_\pi(S,A)\nabla_{\theta}\ln\pi(A|S;\theta)]]- E_S[b\sum_A \pi(A|S;\theta)\nabla_{\theta}\ln\pi(A|S;\theta)]\\ &=E_S[E_{A\sim \pi(.|S;\theta)}[Q_\pi(S,A)\nabla_{\theta}\ln\pi(A|S;\theta)]]-E_S[b\sum_A \nabla_{\theta}\pi(A|S;\theta)]\\ &=E_S[E_{A\sim \pi(.|S;\theta)}[Q_\pi(S,A)\nabla_{\theta}\ln\pi(A|S;\theta)]]-E_S[b \nabla_{\theta}\sum_A[\pi(A|S;\theta)]]\\ &=E_S[E_{A\sim \pi(.|S;\theta)}[Q_\pi(S,A)\nabla_{\theta}\ln\pi(A|S;\theta)]]-E_S[b \nabla_{\theta}1]]\\ &=E_S[E_{A\sim \pi(.|S;\theta)}[Q_\pi(S,A)\nabla_{\theta}\ln\pi(A|S;\theta)]] \end{aligned}
∇
J
(
θ
)
=
E
S
[
E
A
∼
π
(
.
∣
S
;
θ
)
[
(
Q
π
(
S
,
A
)
−
b
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
]
=
E
S
[
E
A
∼
π
(
.
∣
S
;
θ
)
[
Q
π
(
S
,
A
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
]
−
E
S
[
E
A
∼
π
(
.
∣
S
;
θ
)
[
b
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
]
=
E
S
[
E
A
∼
π
(
.
∣
S
;
θ
)
[
Q
π
(
S
,
A
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
]
−
E
S
[
b
E
A
∼
π
(
.
∣
S
;
θ
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
=
E
S
[
E
A
∼
π
(
.
∣
S
;
θ
)
[
Q
π
(
S
,
A
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
]
−
E
S
[
b
A
∑
π
(
A
∣
S
;
θ
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
=
E
S
[
E
A
∼
π
(
.
∣
S
;
θ
)
[
Q
π
(
S
,
A
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
]
−
E
S
[
b
A
∑
∇
θ
π
(
A
∣
S
;
θ
)
]
=
E
S
[
E
A
∼
π
(
.
∣
S
;
θ
)
[
Q
π
(
S
,
A
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
]
−
E
S
[
b
∇
θ
A
∑
[
π
(
A
∣
S
;
θ
)
]
]
=
E
S
[
E
A
∼
π
(
.
∣
S
;
θ
)
[
Q
π
(
S
,
A
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
]
−
E
S
[
b
∇
θ
1
]
]
=
E
S
[
E
A
∼
π
(
.
∣
S
;
θ
)
[
Q
π
(
S
,
A
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
]
]
设引入基线后,利用蒙特卡洛近似可得一次参数更新的梯度为
g
b
(
S
,
A
)
=
(
Q
π
(
S
,
A
)
−
b
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
g_b(S,A)=(Q_\pi(S,A)-b)\nabla_{\theta}\ln\pi(A|S;\theta)
g
b
(
S
,
A
)
=
(
Q
π
(
S
,
A
)
−
b
)
∇
θ
ln
π
(
A
∣
S
;
θ
)
上式的期望即为策略梯度,则梯度的方差为
v
a
r
=
E
S
,
A
[
∣
∣
g
b
(
S
,
A
)
−
∇
θ
J
(
θ
)
∣
∣
2
]
(1.8)
var=E_{S,A}[||g_b(S,A)-\nabla_{\theta}J(\theta)||^2]\tag{1.8}
v
a
r
=
E
S
,
A
[
∣
∣
g
b
(
S
,
A
)
−
∇
θ
J
(
θ
)
∣
∣
2
]
(
1
.
8
)
当
b
b
b
的取值近似于
Q
π
(
S
,
A
)
Q_\pi(S,A)
Q
π
(
S
,
A
)
关于动作的均值时(状态价值函数),式1.8的方差较小(比未引入基线的梯度方差小),有助于加速模型收敛,因此
b
b
b
的取值为
b
=
V
π
(
S
)
(1.9)
b=V_\pi(S)\tag{1.9}
b
=
V
π
(
S
)
(
1
.
9
)
带基线的REINFORCE方法
带基线的REINFORCE方法利用一个神经网络
V
π
(
S
;
θ
v
)
V_\pi(S;\theta_v)
V
π
(
S
;
θ
v
)
近似状态函数
V
π
(
S
)
V_\pi(S)
V
π
(
S
)
,将MSE作为损失函数。带基线的REINFORCE方法的训练流程为
-
用策略网络控制智能体完成一整局游戏,得到一系列轨迹:
(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)、…、(s_n,a_n,r_n)
(
s
1
,
a
1
,
r
1
)
、
(
s
2
,
a
2
,
r
2
)
、
.
.
.
、
(
s
n
,
a
n
,
r
n
)
-
计算所有时刻的回报
ut
=
∑
k
=
t
n
γ
k
−
t
r
k
=
Q
π
(
s
t
,
a
t
)
(1.6)
u_t=\sum_{k=t}^n \gamma^{k-t}r_k=Q_\pi(s_t,a_t)\tag{1.6}
u
t
=
k
=
t
∑
n
γ
k
−
t
r
k
=
Q
π
(
s
t
,
a
t
)
(
1
.
6
)
-
计算
v^
t
=
V
π
(
s
t
;
θ
v
)
t
=
1
,
2
,
3…
n
\hat v_t=V_\pi(s_t;\theta_v) \ \ \ \ \ t=1,2,3…n
v
^
t
=
V
π
(
s
t
;
θ
v
)
t
=
1
,
2
,
3
.
.
.
n
-
计算MSE损失:
L(
θ
v
)
=
1
2
n
∑
i
=
1
n
[
V
π
(
s
t
;
θ
v
)
−
u
t
]
2
L(\theta_v)=\frac{1}{2n}\sum_{i=1}^{n}[V_\pi(s_t;\theta_v)-u_t]^2
L
(
θ
v
)
=
2
n
1
i
=
1
∑
n
[
V
π
(
s
t
;
θ
v
)
−
u
t
]
2
反向传播更新神经网络
Vπ
(
S
;
θ
v
)
V_\pi(S;\theta_v)
V
π
(
S
;
θ
v
)
-
利用随机梯度上升法更新策略网络的参数
θn
e
w
=
θ
n
o
w
+
β
∑
t
=
1
n
γ
t
−
1
(
u
t
−
v
^
t
)
∇
θ
ln
π
(
a
t
∣
s
t
;
θ
)
\theta_{new}=\theta_{now}+\beta \sum_{t=1}^n \gamma^{t-1} (u_t-\hat v_t)\nabla_{\theta}\ln\pi(a_t|s_t;\theta)
θ
n
e
w
=
θ
n
o
w
+
β
t
=
1
∑
n
γ
t
−
1
(
u
t
−
v
^
t
)
∇
θ
ln
π
(
a
t
∣
s
t
;
θ
)
其中
θn
o
w
\theta_{now}
θ
n
o
w
表示策略网络当前的参数,
θn
e
w
\theta_{new}
θ
n
e
w
表示更新后的策略网络参数,
γ\gamma
γ
表示折扣率,为超参数。
带基线与不带基线的REINFORCE方法的收敛速度比较可以看下图(源自
有baseline的REINFORCE算法
),由于梯度方差更小(梯度更为稳定),带基线情况下模型的收敛速度明显更快。
带基线的AdvantageActor-Critic方法(A2C)
AdvantageActor-Critic使用价值网络
q
π
(
s
,
a
;
w
)
q_\pi(s,a;w)
q
π
(
s
,
a
;
w
)
拟合动作价值函数,而A2C使用价值网络
V
π
(
s
;
w
)
V_\pi(s;w)
V
π
(
s
;
w
)
拟合状态价值函数
V
π
(
s
)
V_\pi(s)
V
π
(
s
)
。具体而言,对贝尔曼方程进行变化可得:
Q
π
(
S
t
,
A
t
)
=
E
S
t
+
1
,
A
t
+
1
[
R
t
+
γ
Q
π
(
S
t
+
1
,
A
t
+
1
)
]
=
E
S
t
+
1
[
R
t
+
γ
V
π
(
S
t
+
1
)
]
(1.7)
\begin{aligned} Q_\pi(S_t,A_t)&=E_{S_{t+1},A_{t+1}}[R_t+\gamma Q_\pi(S_{t+1},A_{t+1})]\\ &=E_{S_{t+1}}[R_t+\gamma V_\pi(S_{t+1})]\tag{1.7} \end{aligned}
Q
π
(
S
t
,
A
t
)
=
E
S
t
+
1
,
A
t
+
1
[
R
t
+
γ
Q
π
(
S
t
+
1
,
A
t
+
1
)
]
=
E
S
t
+
1
[
R
t
+
γ
V
π
(
S
t
+
1
)
]
(
1
.
7
)
对式1.7求动作
A
t
A_t
A
t
的期望可得
V
π
(
S
t
)
=
E
S
t
+
1
[
R
t
+
γ
V
π
(
S
t
+
1
)
]
V_\pi(S_{t})=E_{S_{t+1}}[R_t+\gamma V_\pi(S_{t+1})]
V
π
(
S
t
)
=
E
S
t
+
1
[
R
t
+
γ
V
π
(
S
t
+
1
)
]
利用上式即可训练价值网络
V
π
(
s
;
w
)
V_\pi(s;w)
V
π
(
s
;
w
)
拟合状态价值函数
V
π
(
s
)
V_\pi(s)
V
π
(
s
)
(类似于SARSA)。使用蒙特卡洛近似后,带基线的策略梯度为:
∇
J
(
θ
)
≈
[
(
r
t
+
γ
V
π
(
s
t
+
1
)
)
−
V
π
(
s
t
)
]
∇
θ
ln
π
(
a
t
∣
s
t
;
θ
)
]
]
\nabla J(\theta)\approx[(r_t+\gamma V_\pi(s_{t+1}))-V_\pi(s_t)]\nabla_{\theta}\ln\pi(a_t|s_t;\theta)]]
∇
J
(
θ
)
≈
[
(
r
t
+
γ
V
π
(
s
t
+
1
)
)
−
V
π
(
s
t
)
]
∇
θ
ln
π
(
a
t
∣
s
t
;
θ
)
]
]
基于上述分析,A2C方法的训练流程为
-
观测到当前的状态
st
s_t
s
t
,将该状态输入到策略网络
π(
a
∣
s
t
;
θ
)
\pi(a|s_t;\theta)
π
(
a
∣
s
t
;
θ
)
中,得到智能体执行各个动作的概率。依据概率抽样其中一个动作
at
a_t
a
t
,智能体执行该动作后得到新的状态
st
+
1
s_{t+1}
s
t
+
1
和奖励
rt
r_t
r
t
。将状态
st
+
1
s_{t+1}
s
t
+
1
输入到策略网络
π(
a
∣
s
t
)
\pi(a|s_t)
π
(
a
∣
s
t
)
中,依据输出概率抽样得到智能体执行的动作
at
+
1
a_{t+1}
a
t
+
1
。 -
计算
v^
t
=
V
π
(
s
t
;
w
n
o
w
)
\hat v_t=V_\pi(s_t;w_{now})
v
^
t
=
V
π
(
s
t
;
w
n
o
w
)
、
v^
t
+
1
=
V
π
(
s
t
+
1
;
w
n
o
w
)
\hat v_{t+1}=V_\pi(s_{t+1};w_{now})
v
^
t
+
1
=
V
π
(
s
t
+
1
;
w
n
o
w
)
-
利用利用贝尔曼方程优化价值网络
q(
s
,
a
;
w
)
q(s,a;w)
q
(
s
,
a
;
w
)
wn
e
w
=
w
n
o
w
−
α
[
v
^
t
−
(
r
t
+
v
^
t
+
1
)
]
∇
w
q
(
s
t
,
a
t
;
w
n
o
w
)
w_{new}=w_{now}-\alpha [\hat v_t-(r_t+\hat v_{t+1})]\nabla_{w}q(s_t,a_t;w_{now})
w
n
e
w
=
w
n
o
w
−
α
[
v
^
t
−
(
r
t
+
v
^
t
+
1
)
]
∇
w
q
(
s
t
,
a
t
;
w
n
o
w
)
-
更新策略网络
θn
e
w
=
θ
n
o
w
+
β
[
(
r
t
+
v
^
t
+
1
)
−
v
^
t
]
∇
θ
ln
π
(
a
t
∣
s
t
;
θ
)
\theta_{new}=\theta_{now}+\beta [(r_t+\hat v_{t+1})-\hat v_t] \nabla_{\theta}\ln\pi(a_t|s_t;\theta)
θ
n
e
w
=
θ
n
o
w
+
β
[
(
r
t
+
v
^
t
+
1
)
−
v
^
t
]
∇
θ
ln
π
(
a
t
∣
s
t
;
θ
)
其中
α
\alpha
α
、
β
\beta
β
为学习率。由于使用贝尔曼方程优化价值网络,因此上述训练策略会导致价值网络出现高估,可以引入目标网络解决,具体查阅
强化学习——价值学习中的DQN
其他
在实际场景中,我们可以对环境返回的奖励进行定义,利用策略梯度算法让神经网络学习具备某种特性的策略。例如在王者荣耀中,可以将智能体的击杀定义为奖励,智能体击杀一个敌人后,从环境中返回一个正向奖励,此时通过策略网络学习到的将是如何最大化自己的击杀数。