时间差分(Temporal Difference, TD)
文章目录
强化学习中的时间差分(TD)学习结合了蒙特卡洛方法和动态规划的一些特点。TD 学习在估计值函数时采用了类似蒙特卡洛方法的采样方式,因为更新价值函数的过程就是一个采样过程,同时又借鉴了动态规划中基于贝尔曼方程的 “引导” 思想来更新值函数,从而结合了两者的一些优点,成为强化学习中一种重要且有效的学习方法。
时间差分(TD)方法有多种形式,下面为你详细介绍常见的 TD(0) 和 TD(λ) 两种形式的公式。
一、TD(0)
TD(0) 是最基础的时间差分方法,也被称作单步时间差分
。它借助当前时刻的奖励与下一时刻状态值函数的估计来更新当前状态值函数的估计。
1.1 状态值函数 V ( s ) V(s) V(s) 的更新公式
设
V
(
s
)
V(s)
V(s) 为状态
s
s
s 的值函数估计,在智能体从状态
s
t
s_t
st 执行动作
a
t
a_t
at 后转移到状态
s
t
+
1
s_{t + 1}
st+1 并获得奖励
r
t
+
1
r_{t+1}
rt+1 时,更新公式如下:
V
(
s
t
)
←
V
(
s
t
)
+
α
[
r
t
+
1
+
γ
V
(
s
t
+
1
)
−
V
(
s
t
)
]
V(s_t) \leftarrow V(s_t) + \alpha [r_{t + 1} + \gamma V(s_{t + 1}) - V(s_t)]
V(st)←V(st)+α[rt+1+γV(st+1)−V(st)]
其中:
- α \alpha α 是学习率,其取值范围为 ( 0 , 1 ] (0, 1] (0,1],它控制着每次更新时对估计值调整的幅度。 α \alpha α 越大,更新的步长就越大;反之则越小。
- γ \gamma γ 是折扣因子,取值范围为 [ 0 , 1 ] [0, 1] [0,1],它用于衡量未来奖励的重要程度。 γ \gamma γ 越接近 1,就表示更看重未来的奖励;越接近 0,则更关注即时奖励。
- r t + 1 + γ V ( s t + 1 ) r_{t + 1} + \gamma V(s_{t + 1}) rt+1+γV(st+1) 被称为 TD 目标(差分目标),它是对 V ( s t ) V(s_t) V(st) 的一个新的估计。
- r t + 1 + γ V ( s t + 1 ) − V ( s t ) r_{t + 1} + \gamma V(s_{t + 1}) - V(s_t) rt+1+γV(st+1)−V(st) 被称为 TD 误差(差分误差),记为 δ t \delta_t δt,它反映了当前估计值与新估计值之间的差异。
只看上面的公式不太好理解时间差分(TD),下面通过一个简单的走迷宫例子来帮助你理解。
A. 例子:走迷宫
假设一个机器人在一个简单的迷宫中移动,迷宫有多个房间,分别标记为 S 1 S_1 S1 、 S 2 S_2 S2 、 S 3 S_3 S3 等,机器人的目标是找到出口获得奖励。机器人在每个房间都有不同的行动选择,比如向前、向后、向左或向右移动,并且在从一个房间移动到另一个房间时,会得到不同的奖励反馈。
具体过程:
- 初始化:
- 首先,我们初始化每个房间的价值函数 V ( s ) V(s) V(s) 为0,这里 s s s 代表不同的房间状态。例如 V ( S 1 ) = 0 V(S_1)=0 V(S1)=0 , V ( S 2 ) = 0 V(S_2)=0 V(S2)=0 等。
- 交互过程:
- 假设机器人当前处于房间 S 1 S_1 S1 ,它选择了向右移动,然后到达了房间 S 2 S_2 S2 ,并从环境中获得了一个奖励 r = 1 r = 1 r=1 (因为到达 S 2 S_2 S2 离出口更近了一些)。
- 根据TD公式 V ( s t ) ← V ( s t ) + α [ r t + 1 + γ V ( s t + 1 ) − V ( s t ) ] V(s_t) \leftarrow V(s_t) + \alpha [r_{t + 1}+\gamma V(s_{t + 1}) - V(s_t)] V(st)←V(st)+α[rt+1+γV(st+1)−V(st)] ,这里 s t = S 1 s_t = S_1 st=S1 , r t + 1 = 1 r_{t + 1}=1 rt+1=1 , s t + 1 = S 2 s_{t + 1}=S_2 st+1=S2 , α \alpha α 是学习率(假设 α = 0.5 \alpha = 0.5 α=0.5 ), γ \gamma γ 是折扣因子(假设 γ = 0.9 \gamma = 0.9 γ=0.9 )。
- 我们来计算
V
(
S
1
)
V(S_1)
V(S1) 的更新值:
V ( S 1 ) ← V ( S 1 ) + α [ r t + 1 + γ V ( s t + 1 ) − V ( s t ) ] = 0 + 0.5 × [ 1 + 0.9 × 0 − 0 ] = 0.5 × 1 = 0.5 \begin{align*} V(S_1)&\leftarrow V(S_1) + \alpha [r_{t + 1}+\gamma V(s_{t + 1}) - V(s_t)]\\ &= 0 + 0.5\times[1 + 0.9\times0 - 0]\\ &= 0.5\times1\\ &= 0.5 \end{align*} V(S1)←V(S1)+α[rt+1+γV(st+1)−V(st)]=0+0.5×[1+0.9×0−0]=0.5×1=0.5 - 现在 V ( S 1 ) V(S_1) V(S1) 的值更新为 0.5 0.5 0.5 ,这意味着机器人根据这次的经历,认为房间 S 1 S_1 S1 的价值有所提升,因为它通过从 S 1 S_1 S1 移动到 S 2 S_2 S2 获得了奖励。
- 持续学习:
- 接着,机器人从房间 S 2 S_2 S2 继续行动,假设它向上移动到了房间 S 3 S_3 S3 ,获得了一个奖励 r = 2 r = 2 r=2 。
- 然后我们用同样的公式来更新
V
(
S
2
)
V(S_2)
V(S2) :
V ( S 2 ) ← V ( S 2 ) + α [ r t + 1 + γ V ( s t + 1 ) − V ( s t ) ] = 0 + 0.5 × [ 2 + 0.9 × 0 − 0 ] = 0.5 × 2 = 1 \begin{align*} V(S_2)&\leftarrow V(S_2) + \alpha [r_{t + 1}+\gamma V(s_{t + 1}) - V(s_t)]\\ &= 0 + 0.5\times[2 + 0.9\times0 - 0]\\ &= 0.5\times2\\ &= 1 \end{align*} V(S2)←V(S2)+α[rt+1+γV(st+1)−V(st)]=0+0.5×[2+0.9×0−0]=0.5×2=1 - 此时
V
(
S
2
)
V(S_2)
V(S2) 更新为
1
1
1 ,并且由于
V
(
S
2
)
V(S_2)
V(S2) 发生了变化,当我们再次回到
S
1
S_1
S1 并计算
V
(
S
1
)
V(S_1)
V(S1) 时,
V
(
S
1
)
V(S_1)
V(S1) 也会受到影响。例如,机器人又从
S
1
S_1
S1 移动到
S
2
S_2
S2 ,此时
V
(
S
1
)
V(S_1)
V(S1) 的更新计算如下:
V ( S 1 ) ← V ( S 1 ) + α [ r t + 1 + γ V ( s t + 1 ) − V ( s t ) ] = 0.5 + 0.5 × [ 1 + 0.9 × 1 − 0.5 ] = 0.5 + 0.5 × ( 1 + 0.9 − 0.5 ) = 0.5 + 0.5 × 1.4 = 0.5 + 0.7 = 1.2 \begin{align*} V(S_1)&\leftarrow V(S_1) + \alpha [r_{t + 1}+\gamma V(s_{t + 1}) - V(s_t)]\\ &= 0.5 + 0.5\times[1 + 0.9\times1 - 0.5]\\ &= 0.5 + 0.5\times(1 + 0.9 - 0.5)\\ &= 0.5 + 0.5\times1.4\\ &= 0.5 + 0.7\\ &= 1.2 \end{align*} V(S1)←V(S1)+α[rt+1+γV(st+1)−V(st)]=0.5+0.5×[1+0.9×1−0.5]=0.5+0.5×(1+0.9−0.5)=0.5+0.5×1.4=0.5+0.7=1.2
通过不断地在迷宫中移动,与环境进行交互,获得奖励并根据TD公式更新每个状态(房间)的价值函数,机器人逐渐学会了评估每个房间的价值,知道哪些房间对于到达出口更有帮助,从而能够选择更优的路径来达到目标。随着学习的进行,价值函数会逐渐收敛到一个稳定的值,此时机器人就对迷宫环境有了较好的理解和认知。
1.2 动作值函数 Q ( s , a ) Q(s, a) Q(s,a) 的更新公式
对于动作值函数
Q
(
s
,
a
)
Q(s, a)
Q(s,a),当智能体从状态 - 动作对
(
s
t
,
a
t
)
(s_t, a_t)
(st,at) 转移到
(
s
t
+
1
,
a
t
+
1
)
(s_{t + 1}, a_{t + 1})
(st+1,at+1) 并获得奖励
r
t
+
1
r_{t+1}
rt+1 时,更新公式为:
Q
(
s
t
,
a
t
)
←
Q
(
s
t
,
a
t
)
+
α
[
r
t
+
1
+
γ
Q
(
s
t
+
1
,
a
t
+
1
)
−
Q
(
s
t
,
a
t
)
]
Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha [r_{t + 1} + \gamma Q(s_{t + 1}, a_{t + 1}) - Q(s_t, a_t)]
Q(st,at)←Q(st,at)+α[rt+1+γQ(st+1,at+1)−Q(st,at)]
TD 公式中,当前状态价值的更新既考虑了当前的奖励(类似当前的观测信息),又结合了之前对状态价值的估计(历史信息)。是不是和kalman更新的方式有些像。卡尔曼滤波也是将上一时刻的状态估计(历史信息)与当前的测量值(当前信息)进行融合,以得到更准确的状态估计,当然卡尔曼不仅有估计结果,还有实时测量结果。
二、TD(λ)
TD(λ) 是 TD(0) 的推广形式,它通过引入一个衰减因子 λ \lambda λ 来综合考虑多步的信息。
2.1 状态值函数 V ( s ) V(s) V(s) 的更新公式
TD(λ) 使用资格迹(Eligibility Traces) E t ( s ) E_t(s) Et(s) 来更新状态值函数,资格迹记录了每个状态在过去一段时间内的“活跃度”。
- 资格迹更新:
E t ( s ) = { γ λ E t − 1 ( s ) + 1 , if s = s t γ λ E t − 1 ( s ) , if s ≠ s t E_t(s) = \begin{cases} \gamma \lambda E_{t - 1}(s) + 1, & \text{if } s = s_t \\ \gamma \lambda E_{t - 1}(s), & \text{if } s \neq s_t \end{cases} Et(s)={γλEt−1(s)+1,γλEt−1(s),if s=stif s=st - 状态值函数更新:
V ( s ) ← V ( s ) + α δ t E t ( s ) V(s) \leftarrow V(s) + \alpha \delta_t E_t(s) V(s)←V(s)+αδtEt(s)
其中, δ t = r t + 1 + γ V ( s t + 1 ) − V ( s t ) \delta_t = r_{t + 1} + \gamma V(s_{t + 1}) - V(s_t) δt=rt+1+γV(st+1)−V(st) 是 TD 误差。
2.2 动作值函数 Q ( s , a ) Q(s, a) Q(s,a) 的更新公式
类似地,对于动作值函数
Q
(
s
,
a
)
Q(s, a)
Q(s,a),资格迹
E
t
(
s
,
a
)
E_t(s, a)
Et(s,a) 的更新为:
E
t
(
s
,
a
)
=
{
γ
λ
E
t
−
1
(
s
,
a
)
+
1
,
if
(
s
,
a
)
=
(
s
t
,
a
t
)
γ
λ
E
t
−
1
(
s
,
a
)
,
if
(
s
,
a
)
≠
(
s
t
,
a
t
)
E_t(s, a) = \begin{cases} \gamma \lambda E_{t - 1}(s, a) + 1, & \text{if } (s, a) = (s_t, a_t) \\ \gamma \lambda E_{t - 1}(s, a), & \text{if } (s, a) \neq (s_t, a_t) \end{cases}
Et(s,a)={γλEt−1(s,a)+1,γλEt−1(s,a),if (s,a)=(st,at)if (s,a)=(st,at)
动作值函数的更新公式为:
Q
(
s
,
a
)
←
Q
(
s
,
a
)
+
α
δ
t
E
t
(
s
,
a
)
Q(s, a) \leftarrow Q(s, a) + \alpha \delta_t E_t(s, a)
Q(s,a)←Q(s,a)+αδtEt(s,a)
其中,
δ
t
=
r
t
+
1
+
γ
Q
(
s
t
+
1
,
a
t
+
1
)
−
Q
(
s
t
,
a
t
)
\delta_t = r_{t + 1} + \gamma Q(s_{t + 1}, a_{t + 1}) - Q(s_t, a_t)
δt=rt+1+γQ(st+1,at+1)−Q(st,at)。
这些公式体现了时间差分方法如何结合当前奖励和未来状态估计值来迭代更新值函数,在强化学习中是非常重要的基础。