时序差分
1 时序差分计算 state value(Temporal difference learning)
v
t
(
s
t
)
=
E
[
R
t
+
1
+
γ
v
t
(
S
t
+
1
)
∣
S
t
=
s
t
]
v_t(s_t) = E[R_{t+1}+\gamma v_t(S_{t+1})|S_t = s_t]
vt(st)=E[Rt+1+γvt(St+1)∣St=st](BE),根据 RM 算法就得出
v
t
+
1
(
s
)
=
v
t
(
s
t
)
−
α
t
(
s
t
)
[
v
t
(
s
t
)
−
[
r
t
+
1
+
γ
v
t
(
s
t
+
1
)
]
]
,
s
=
s
t
v
t
+
1
(
s
)
=
v
t
(
s
t
)
,
s
≠
s
t
\begin{align} &v_{t+1}(s) = v_t(s_t) - \alpha_t(s_t) \big [ v_t(s_t) - [r_{t+1} + \gamma v_t(s_{t+1})] \big ],&s = s_t\\ &v_{t+1}(s) = v_t(s_t),&s \neq s_t \end{align}
vt+1(s)=vt(st)−αt(st)[vt(st)−[rt+1+γvt(st+1)]],vt+1(s)=vt(st),s=sts=st
其中
r
t
+
1
,
s
t
+
1
r_{t+1},s_{t+1}
rt+1,st+1是
R
t
+
1
,
S
t
+
1
R_{t+1},S_{t+1}
Rt+1,St+1的抽样值,
v
t
(
s
t
)
v_t(s_t)
vt(st)是 state value 当前估计值,
[
r
t
+
1
+
γ
v
t
(
s
t
+
1
)
]
[r_{t+1} + \gamma v_t(s_{t+1})]
[rt+1+γvt(st+1)]作为state value 的一个采样,称为 TD target,而预估值与实际值的差
v
t
(
s
t
)
−
[
r
t
+
1
+
γ
v
t
(
s
t
+
1
)
]
v_t(s_t) - [r_{t+1} + \gamma v_t(s_{t+1})]
vt(st)−[rt+1+γvt(st+1)]称为 TD error。
而这个算法由于需要两个不同时刻的采样
s
t
,
r
t
+
1
,
s
t
+
1
{s_t,r_{t+1},s_{t+1}}
st,rt+1,st+1所以称为时序差分。
2 on-line 和 off-line 更新
对比 MC 的方法,TD 算法只需要在每次获得 s t , r t + 1 , s t + 1 {s_t,r_{t+1},s_{t+1}} st,rt+1,st+1就可以进行值更新称为在线(on line)的方式。而 MC 算法需要完成一个完整的 episode 才进行 action value 的更新,称为离线(off line)更新。off-line 的好处是可以处理不间断的任务,同时提高计算效率。
3 时序差分更新 action value
3.1 Sarsa algorithm
该算法需要
s
t
,
a
t
,
r
t
+
1
,
s
t
+
1
,
a
t
+
1
{s_t,a_t,r_{t+1},s_{t+1},a_{t+1}}
st,at,rt+1,st+1,at+1采样,所以算法名字就是这几个采样的缩写。
q
(
s
,
a
)
=
E
[
R
t
+
1
+
γ
q
(
S
t
+
1
,
A
t
+
1
)
∣
S
=
s
t
,
A
=
a
t
]
q(s,a) = E[R_{t+1} + \gamma q(S_{t+1},A_{t+1})| S=s_t,A = a_t]
q(s,a)=E[Rt+1+γq(St+1,At+1)∣S=st,A=at](BE)
根据 RM 算法
q
t
+
1
(
s
t
,
a
t
)
=
q
t
(
s
t
,
a
t
)
−
α
(
s
t
,
a
t
)
[
q
t
(
s
t
,
a
t
)
−
[
r
t
+
1
+
γ
q
t
(
s
t
+
1
,
a
t
+
1
)
]
]
,
(
s
,
a
)
=
(
s
t
,
a
t
)
q
t
+
1
(
s
,
a
)
=
q
t
(
s
t
,
a
t
)
,
∀
(
s
,
a
)
≠
(
s
t
,
a
t
)
\begin{align} &q_{t+1}(s_t,a_t) = q_t(s_t,a_t) - \alpha(s_t,a_t) \big[ q_t(s_t,a_t) - [r_{t+1} + \gamma q_t(s_{t+1},a_{t+1})] \big],&(s,a)=(s_t,a_t)\\ &q_{t+1}(s,a) = q_t(s_t,a_t),&\forall(s,a) \neq (s_t,a_t) \end{align}
qt+1(st,at)=qt(st,at)−α(st,at)[qt(st,at)−[rt+1+γqt(st+1,at+1)]],qt+1(s,a)=qt(st,at),(s,a)=(st,at)∀(s,a)=(st,at)
再结合 policy improvement,在每一步更新后都用
ϵ
−
g
r
e
e
d
y
\epsilon-greedy
ϵ−greedy更新当前状态策略。
3.2 n-step Sarsa algorithm
在 Sarsa 基础上由于
q
(
s
,
a
)
=
E
[
R
t
+
1
+
γ
q
(
S
t
+
1
,
A
t
+
1
)
∣
S
=
s
t
,
A
=
a
t
]
=
E
[
R
t
+
1
+
γ
R
t
+
2
+
⋯
+
γ
n
q
(
S
t
+
n
,
A
t
+
n
)
∣
S
=
s
t
,
A
=
a
t
]
q(s,a) = E[R_{t+1} + \gamma q(S_{t+1},A_{t+1})| S=s_t,A = a_t] = E[R_{t+1} + \gamma R_{t+2}+ \cdots +\gamma^n q(S_{t+n},A_{t+n})| S=s_t,A = a_t]
q(s,a)=E[Rt+1+γq(St+1,At+1)∣S=st,A=at]=E[Rt+1+γRt+2+⋯+γnq(St+n,At+n)∣S=st,A=at]。TD target 换成
r
t
+
1
+
γ
r
t
+
2
+
⋯
+
γ
n
q
t
(
s
t
+
n
,
a
t
+
n
)
r_{t+1} + \gamma r_{t+2} + \cdots + \gamma^n q_t(s_{t+n},a_{t+n})
rt+1+γrt+2+⋯+γnqt(st+n,at+n)。
q
t
+
n
(
s
t
,
a
t
)
=
q
t
(
s
t
,
a
t
)
−
α
(
s
t
,
a
t
)
[
q
t
(
s
t
,
a
t
)
−
[
r
t
+
1
+
γ
r
t
+
2
+
⋯
+
γ
n
q
t
(
s
t
+
n
,
a
t
+
n
)
]
]
,
(
s
,
a
)
=
(
s
t
,
a
t
)
q
t
+
n
(
s
,
a
)
=
q
t
(
s
t
,
a
t
)
,
∀
(
s
,
a
)
≠
(
s
t
,
a
t
)
\begin{align} &q_{t+n}(s_t,a_t) = q_t(s_t,a_t) - \alpha(s_t,a_t) \big[ q_t(s_t,a_t) - [r_{t+1} + \gamma r_{t+2} + \cdots + \gamma^n q_t(s_{t+n},a_{t+n})] \big],&(s,a)=(s_t,a_t)\\ &q_{t+n}(s,a) = q_t(s_t,a_t),&\forall(s,a) \neq (s_t,a_t) \end{align}
qt+n(st,at)=qt(st,at)−α(st,at)[qt(st,at)−[rt+1+γrt+2+⋯+γnqt(st+n,at+n)]],qt+n(s,a)=qt(st,at),(s,a)=(st,at)∀(s,a)=(st,at)
4 Q-learning
q
(
s
,
a
)
=
E
[
R
t
+
1
+
γ
max
a
q
(
S
t
+
1
,
a
)
∣
S
=
s
t
,
A
=
a
t
]
q(s,a) = E[R_{t+1} + \gamma \displaystyle \max_a q(S_{t+1},a)| S=s_t,A = a_t]
q(s,a)=E[Rt+1+γamaxq(St+1,a)∣S=st,A=at](BOE)
q
t
+
1
(
s
t
,
a
t
)
=
q
t
(
s
t
,
a
t
)
−
α
(
s
t
,
a
t
)
[
q
t
(
s
t
,
a
t
)
−
[
r
t
+
1
+
γ
max
a
q
t
(
s
t
+
1
,
a
)
]
]
,
(
s
,
a
)
=
(
s
t
,
a
t
)
q
t
+
1
(
s
,
a
)
=
q
t
(
s
t
,
a
t
)
,
∀
(
s
,
a
)
≠
(
s
t
,
a
t
)
\begin{align} &q_{t+1}(s_t,a_t) = q_t(s_t,a_t) - \alpha(s_t,a_t) \big[ q_t(s_t,a_t) - [r_{t+1} + \gamma \displaystyle \max_a q_t(s_{t+1},a)] \big],&(s,a)=(s_t,a_t)\\ &q_{t+1}(s,a) = q_t(s_t,a_t),&\forall(s,a) \neq (s_t,a_t) \end{align}
qt+1(st,at)=qt(st,at)−α(st,at)[qt(st,at)−[rt+1+γamaxqt(st+1,a)]],qt+1(s,a)=qt(st,at),(s,a)=(st,at)∀(s,a)=(st,at)
同时策略更新时,使用
g
r
e
e
d
y
greedy
greedy策略进行更新。
4.1 on-policy 和 off-policy
Q-learning 相比 Sarsa 除了数学上求解的方程从 BE 变成 BOE,重要的是,它可以以 off-policy 方式进行更新策略。
policy 分为两类,一类是用来生成数据的(behavior policy),一类是需要更新的策略(target policy)。
Sarsa 类的算法在更新 action value 时使用的生成数据的策略和进行 policy improvement 时使用的是一个策略,所以它是 on-policy 的。
而 Q-learning 可以使用两个不同的策略,生成数据时使用
π
b
\pi_b
πb,更新策略时使用的另一个
π
T
\pi_T
πT。之所以可以这样做,是因为它更新 action value 时,完全不依赖于 behavior policy,而是使用
m
a
x
a
q
(
S
t
+
1
,
a
)
max_a q(S_{t+1},a)
maxaq(St+1,a)来直接选出最优值。Sarsa 在更新策略时依赖于 behavior policy,因为更新的策略又依赖于更新的 action value,
q
(
S
t
+
1
,
A
t
+
1
)
q(S_{t+1},A_{t+1})
q(St+1,At+1)是需要 behavior policy 获得
A
t
+
1
A_{t+1}
At+1的。
off-policy 的好处可以使用一个探索性强的策略作为 behavior policy 充分探索。
5 代码链接
(GitHub)[https://github.com/wizard-lhx/rl-lesson-code]