目录
简介
之前讲的PG算法和PPO算法,都是Policy-based的方法,接下来我们要讲Value-based的方法。之前说过了,P-B方法和V-B方法的区别在于前者训练的是策略本身(actor),而后者训练的是一种评判标准(critic)。critic能根据你输入的状态/动作,凭借策略 π \pi π来输出对应的值函数。值函数有两种,一种是V(状态-值函数),一种是Q(状态-动作值函数),我们要讲的MC算法和TD算法是用来估计V值函数的。
符号
- τ \tau τ:一轮游戏中的具体过程(trajectory), τ = { s 1 , a 1 , r 1 , s 2 , a 2 , r 2 , … , s T , a T , r T } \tau=\{s_1,a_1,r_1,s_2,a_2,r_2,\ldots,s_T,a_T,r_T\} τ={s1,a1,r1,s2,a2,r2,…,sT,aT,rT},是状态-行为-奖赏的时间序列。
- G t G_t Gt:时间从t到结束的累积奖赏,由于t时刻的奖励是采取行动后t+1时刻才拥有的,所以 G t G_t Gt满足: G t = r t + 1 + r t + 2 + … G_t={r_{t+1}+r_{t+2}+\ldots} Gt=rt+1+rt+2+…
- V π ( s ) V_\pi(s) Vπ(s):策略为 π \pi π的状态-值函数,即状态s下预计累计回报的期望值,满足: V π ( s ) = E [ G t ∣ S t = s ] V_\pi(s)=\mathbb{E}[G_t\vert S_t=s] Vπ(s)=E[Gt∣St=s]
- Q π ( s , a ) Q_\pi(s,a) Qπ(s,a):策略为 π \pi π的状态-动作值函数,即状态s下采取动作a预计累计回报的期望值,满足: Q π ( s , a ) = E [ G t ∣ S t = s , A t = a ] Q_\pi(s,a)=\mathbb{E}[G_t\vert S_t=s,A_t=a] Qπ(s,a)=E[Gt∣St=s,At=a]
蒙特卡洛(Monte-Carlo, MC)算法
MC算法就是通过采样来估计分布的一种算法。在一场游戏中,先让策略
π
\pi
π去和环境进行交互获取数据,看到状态
s
s
s后计算整场游戏的累积奖赏
G
G
G,记录下这些数据后训练一个回归问题来拟合
V
π
(
s
)
V_\pi(s)
Vπ(s)。如下图所示:
公式逼近为:
V
π
(
s
)
←
V
π
(
s
)
+
α
(
G
t
−
V
π
(
s
)
)
V_\pi(s)\leftarrow V_\pi(s)+\alpha(G_t-V_\pi(s))
Vπ(s)←Vπ(s)+α(Gt−Vπ(s))
其中
α
\alpha
α为学习率,越接近1学的越快。
显而易见,这样的训练需要大量的采样,并且每次update都需要一整轮的累积奖赏
G
t
G_t
Gt,因此实际情况下我们用TD算法会比较多。
时序差分(Temporal Difference, TD)算法
在MC算法中,我们每次都要算整场游戏的总和
G
G
G。有的游戏很长,每次都要玩完游戏会花费很多时间。而TD算法只需要有
…
s
t
,
a
t
,
r
t
,
s
t
+
1
,
…
\ldots s_t,a_t,r_t,s_{t+1},\ldots
…st,at,rt,st+1,…这样的序列,就可以应用。
这是基于一个显见的递推公式:
V
π
(
s
t
)
=
V
π
(
s
t
+
1
)
+
r
t
V_\pi(s_t)=V_\pi(s_{t+1})+r_t
Vπ(st)=Vπ(st+1)+rt
有了这样一个递推公式,我们只需要记录每一步的即时奖励
r
t
r_t
rt,通过神经网络直接训练
V
π
V_\pi
Vπ函数,分别输入
s
t
s_t
st和
s
t
+
1
s_{t+1}
st+1,将两个结果相减,再将减后的结果与
r
t
r_t
rt进行回归拟合就行了。如下图所示:
公式逼近为:
V
π
(
s
)
←
V
π
(
s
)
+
α
(
r
t
+
1
+
V
π
(
s
′
)
−
V
π
(
s
)
)
V_\pi(s)\leftarrow V_\pi(s)+\alpha(r_{t+1}+ V_\pi(s')-V_\pi(s))
Vπ(s)←Vπ(s)+α(rt+1+Vπ(s′)−Vπ(s))
其中 s ′ s' s′是下一步的状态。
MC v.s. TD
MC的问题在于其方差过大。我们用MC算法回归估计的是累积奖赏
G
G
G,而累积奖赏是许多step的和,而游戏的每一步step的奖赏
r
r
r都有随机性,这份随机性也通过方差积累下来了。
而TD中的即时奖赏
r
r
r同样具有随机性,但是方差会小很多。TD的问题在于V的估计可能不准,那递归调用就会放大这份估计的误差。
例子
假设通过一个策略 π \pi π玩游戏,获得了以下8轮的 τ \tau τ:
- s a , r a = 0 , s b , r b = 0 , E n d s_a,r_a=0,s_b,r_b=0,End sa,ra=0,sb,rb=0,End
- s b , r = 1 , E n d s_b,r=1,End sb,r=1,End
- s b , r = 1 , E n d s_b,r=1,End sb,r=1,End
- s b , r = 1 , E n d s_b,r=1,End sb,r=1,End
- s b , r = 1 , E n d s_b,r=1,End sb,r=1,End
- s b , r = 1 , E n d s_b,r=1,End sb,r=1,End
- s b , r = 1 , E n d s_b,r=1,End sb,r=1,End
- s b , r = 0 , E n d s_b,r=0,End sb,r=0,End
我们通过MC和TD算法分别估测a和b的状态值函数。
Monte-Carlo:
V
π
(
s
a
)
=
0
V
π
(
s
b
)
=
3
4
V_\pi(s_a)=0\\V_\pi(s_b)=\frac{3}{4}
Vπ(sa)=0Vπ(sb)=43
Temporal Difference:
V
π
(
s
a
)
=
V
π
(
s
b
)
=
3
4
V_\pi(s_a)=V_\pi(s_b)=\frac{3}{4}
Vπ(sa)=Vπ(sb)=43
如之前所说,MC算法就是采样状态s,然后计算其V值。我们发现在这8轮游戏中,a在第一轮出现一次,且一整轮的累积奖赏
G
1
=
r
a
+
r
b
=
0
G_1=r_a+r_b=0
G1=ra+rb=0,所以
V
π
(
s
a
)
=
E
[
G
a
]
=
G
1
=
0
V_\pi(s_a)=\mathbb{E}[G_a]=G_1=0
Vπ(sa)=E[Ga]=G1=0;而b在8轮中都出现过了,其中有六轮中累积奖赏
G
1
,
2
,
3
,
4
,
5
,
6
=
1
G_{1,2,3,4,5,6}=1
G1,2,3,4,5,6=1,两轮中累积奖赏
G
0
,
7
=
0
G_{0,7}=0
G0,7=0,所以
V
π
(
s
b
)
=
E
[
G
b
]
=
1
8
∑
i
=
0
7
G
i
=
3
4
V_\pi(s_b)=\mathbb{E}[G_b]=\frac{1}{8}\sum_{i=0}^7 G_i=\frac{3}{4}
Vπ(sb)=E[Gb]=81∑i=07Gi=43。
TD算法则是根据动作的即时奖赏来估计V值。在8轮中,状态
s
b
s_b
sb都是最后一个状态,所以对于每一轮都有
V
π
(
s
b
)
=
V
π
(
E
n
d
)
+
r
V_\pi(s_b)=V_\pi(End)+r
Vπ(sb)=Vπ(End)+r。而由定义易得
V
π
(
E
n
d
)
=
0
V_\pi(End)=0
Vπ(End)=0,所以
V
π
(
s
b
)
=
3
4
V_\pi(s_b)=\frac{3}{4}
Vπ(sb)=43。对于
V
π
(
s
a
)
V_\pi(s_a)
Vπ(sa),在第一轮中有
V
π
(
s
a
)
=
V
π
(
s
b
)
+
r
a
V_\pi(s_a)=V_\pi(s_b)+r_a
Vπ(sa)=Vπ(sb)+ra,且
r
a
=
0
r_a=0
ra=0,所以
V
π
(
s
a
)
=
V
π
(
s
b
)
=
3
4
V_\pi(s_a)=V_\pi(s_b)=\frac{3}{4}
Vπ(sa)=Vπ(sb)=43。
其他的critic
如果不估计 V π V_\pi Vπ而是用动作-状态值函数 Q π Q_\pi Qπ,也是可以用MC和TD方法的,过程基本一致,不过Q函数接收的参数除了状态还有动作,因此需要更改一下公式。
总结
实际运用中用TD算法比较多。接下来讲Q-learning。