【强化学习】时间差分(Temporal Difference, TD)

时间差分(Temporal Difference, TD)



强化学习中的时间差分(TD)学习结合了蒙特卡洛方法动态规划的一些特点。TD 学习在估计值函数时采用了类似蒙特卡洛方法的采样方式,因为更新价值函数的过程就是一个采样过程,同时又借鉴了动态规划中基于贝尔曼方程的 “引导” 思想来更新值函数,从而结合了两者的一些优点,成为强化学习中一种重要且有效的学习方法。

时间差分(TD)方法有多种形式,下面为你详细介绍常见的 TD(0) 和 TD(λ) 两种形式的公式。


一、TD(0)

TD(0) 是最基础的时间差分方法,也被称作单步时间差分。它借助当前时刻的奖励与下一时刻状态值函数的估计来更新当前状态值函数的估计。

"1"

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 等,机器人的目标是找到出口获得奖励。机器人在每个房间都有不同的行动选择,比如向前、向后、向左或向右移动,并且在从一个房间移动到另一个房间时,会得到不同的奖励反馈。

具体过程:

  1. 初始化
    • 首先,我们初始化每个房间的价值函数 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 等。
  2. 交互过程
    • 假设机器人当前处于房间 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×00]=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 获得了奖励。
  3. 持续学习
    • 接着,机器人从房间 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×00]=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×10.5]=0.5+0.5×(1+0.90.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)={γλEt1(s)+1,γλEt1(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)={γλEt1(s,a)+1,γλEt1(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)

这些公式体现了时间差分方法如何结合当前奖励和未来状态估计值来迭代更新值函数,在强化学习中是非常重要的基础。

时序差分强化学习Temporal Difference Reinforcement Learning, TDRL)是一类强化学习算法,结合了动态规划和蒙特卡洛方法的思想。它通过使用经验数据进行增量式的更新,同时利用了当前和未来的估计值来逼近最优值函数。 时序差分强化学习方法的核心思想是通过估计值函数的差分来更新值函数的估计值。在每个时间步,智能体观察到当前状态、选择动作、观察到下一个状态和收到奖励。然后,根据差分误差(TD误差)来更新值函数的估计值。 TD误差定义为当前状态下的估计值与下一个状态的估计值之差加上即时奖励。TD误差可以表示为: TD_error = R + γV(s') - V(s) 其中,R是即时奖励,V(s)是当前状态s的估计值,V(s')是下一个状态s'的估计值,γ是折扣因子,用于衡量未来奖励的重要性。 根据TD误差,可以使用不同的更新规则来更新值函数的估计值。常见的时序差分强化学习算法包括以下几种: 1. SARSA(State-Action-Reward-State-Action):SARSA算法使用状态-动作对的估计值来更新Q值函数的估计值。在每个时间步,智能体根据当前策略选择动作,观察到下一个状态和奖励,并根据TD误差来更新Q值函数的估计值。 2. Q-learning:Q-learning算法也是一种基于TD误差的更新规则,但它使用了下一个状态的最大估计值来更新Q值函数的估计值。在每个时间步,智能体根据当前策略选择动作,观察到下一个状态和奖励,并通过TD误差和最大估计值来更新Q值函数的估计值。 3. TD(λ)TD(λ)算法是一种使用λ折扣因子的时序差分强化学习算法。它通过考虑未来多个时间步的估计值来更新值函数的估计值。TD(λ)算法将过去若干时间步的TD误差进行加权求和,并根据加权和来更新值函数的估计值。 时序差分强化学习方法具有较高的效率和适应性,可以在每个时间步骤中进行更新,不需要等到任务结束后才进行更新。它能够快速收敛到最优策略,并且可以处理具有部分可观测性和连续状态空间的问题。该方法在许多领域中都有广泛的应用,如机器人控制、游戏智能、自动驾驶等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值