Temporal Difference - 时序差分学习

本文深入解析TD学习,一种结合蒙特·卡罗方法与动态规划的无模型策略评估技术,适用于不可重复及非有限情境。重点介绍TD(0)算法,通过采样更新价值估计,实现快速迭代与信息高效利用。

这篇博客是前面一篇博客Model-Free Policy Evaluation 无模型策略评估的一个小节,因为TD本身也是一种无模型策略评估方法。原博文有对无模型策略评估方法的详细概述。

Temporal Difference(TD)

时序差分

“if one had to identify one idea as central and novel to reinforcement learning, it would undoubtedly be temporal-difference(TD) learning.” - Sutton and Barto 2017

  • 如果要选出对强化学习来说是最核心且最新颖的思想,那好毫无疑问是时序差分学习。-Sutton and Barto 2017
  • 它结合了蒙特·卡罗尔(策略评估)方法和动态规划方法
  • 不依赖模型
  • Boostraps和samples(采样)都进行
    Bootstrapping通常被用于近似未来回报的折扣总和;Sampling通常被用于近似所有状态上的期望。
  • 在可重复进行和非有限horizon非重复情境下都可以使用(这说明它解决了动态规划和蒙特·卡罗尔方法的缺点,博主注)
  • 在每一次 ( s , a , r , s ′ ) (s,a,r,s') (s,a,r,s)四元组(即每一次状态变迁/每一次Observation)发生后都立即更新 V V V的估计
Temporal Difference Learning for Estimating V
  • 目标:在给定由于遵循策略 π \pi π而产生的所有轮次的条件下估计 V π ( s ) V^\pi(s) Vπ(s)
  • MDP M在遵循策略 π \pi π G t = r t + γ t t + 1 + γ 2 r t + 2 + γ 3 r t + 3 + . . . G_t=r_t+\gamma t_{t+1}+\gamma^2r_{t+2}+\gamma^3r_{t+3}+... Gt=rt+γtt+1+γ2rt+2+γ3rt+3+...
  • V π ( s ) = E π [ G t ∣ s t = s ] V^\pi(s)=\mathbb{E}_\pi[G_t|s_t=s] Vπ(s)=Eπ[Gtst=s]
  • 重温Bellman operator (如果MDP模型已知)
    B π V ( s ) = r ( s , π ( s ) ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s , π ( s ) ) V ( s ′ ) B^\pi V(s)=r(s,\pi(s))+\gamma \sum_{s' \in S}p(s'|s,\pi(s))V(s') BπV(s)=r(s,π(s))+γsSp(ss,π(s))V(s)
  • 递增every-visit MC算法,使用一次对回报的采样更新估计
    V π ( s ) = V π ( s ) + α ( G i , t − V π ( s ) ) V^\pi(s) = V^\pi(s)+\alpha(G_{i, t}-V^\pi(s)) Vπ(s)=Vπ(s)+α(Gi,tVπ(s))
  • 灵感:已经有一个 V π V^\pi Vπ的估计器,使用下面的方法估计回报的期望
    V π ( s ) = V π ( s ) + α ( [ r t + γ V π ( s t + 1 ) ] − V π ( s ) ) V\pi(s) = V\pi(s) + \alpha([r_t+\gamma V^\pi(s_{t+1})]-V^\pi(s)) Vπ(s)=Vπ(s)+α([rt+γVπ(st+1)]Vπ(s))

Temporal Difference [TD(0)] Learning

时序差分学习

  • 目标:在给定由于遵循策略 π \pi π而产生的所有轮次的条件下估计 V π ( s ) V^\pi(s) Vπ(s) (同上)
    • s 1 , a 1 , r 1 , s 2 , a 2 , r 2 , . . . s_1,a_1,r_1,s_2,a_2,r_2,... s1,a1,r1,s2,a2,r2,...其中动作a在策略 π \pi π下采样而来
  • 最简单的采样TD学习:以趋近估计值的方式更新价值
    V π ( s t ) = V π ( s t ) + α ( [ r t + γ V π ( s t + 1 ) ] − V π ( s t ) ) V^\pi(s_t)=V^\pi(s_t)+\alpha([r_t+\gamma V^\pi(s_{t+1})]-V^\pi(s_t)) Vπ(st)=Vπ(st)+α([rt+γVπ(st+1)]Vπ(st))
    TD target = [ r t + γ V π ( s t + 1 ) ] [r_t+\gamma V^\pi(s_{t+1})] [rt+γVπ(st+1)]
    请注意,这里没有求和,我们是采样,所以上面的式子里只有一个下一个状态,而不是所有的未来状态。而且像动态规划那样,我们会使用先前的 V π V^\pi Vπ估计。所以你可以把式子左边的 V π ( s t ) V^\pi(s_t) Vπ(st)写成 V k + 1 π ( s t ) V_{k+1}^\pi(s_t) Vk+1π(st),右边的 V π ( s t ) V^\pi(s_t) Vπ(st)写成 V k π ( s t ) V_{k}^\pi(s_t) Vkπ(st)。和动态规划的区别在于,动态规划相当于更新了整个价值函数,这里相当于仅更新了价值函数的一个项。
  • TD error:
    δ t = r t + γ V π ( s t + 1 ) − V π ( s t ) \delta_t = r_t + \gamma V^\pi(s_{t+1})-V^\pi(s_t) δt=rt+γVπ(st+1)Vπ(st)
    V π ( s t ) ≈ V^\pi(s_t) \approx Vπ(st)下一个状态 s ′ s' s上的期望
  • 可以在一次状态变迁(s,a,r,s’)发生后立即更新价值估计
  • 不要求必须是可重复情景
这毫无疑问是偏差估计。一般来说,当你做bootstrap的时候,它就会是有偏差估计,因为你依赖之前的估计器,而之前的估计器通常不准确,所以会带有一个偏向特定方向的bias。 而且它也可能会有很高的方差,所以它有可能既高方差也高偏差。跟蒙特·卡罗尔方法相比,通常会有较小的方差,因为bootstrapping帮助你在多样性(variability)上取了平均。它的优点在于:可以很快的更新,不需要等到当前轮次的结束并且可以使用大量的信息。

Temporal Difference [TD(0)] Learning Algorithm

Input: α \alpha α
Initialize V π = 0 , ∀ s ∈ S V^\pi=0, \forall s \in S Vπ=0,sS
Loop

  • Sample tuple ( s t , a t , r t , s t + 1 ) (s_t, a_t, r_t, s_{t+1}) (st,at,rt,st+1)
  • V π ( s t ) = V π ( s t ) + α ( [ r t + γ V π ( s t + 1 ] − V π ( s t ) ) V^\pi(s_t)=V^\pi(s_t) + \alpha([r_t+\gamma V^\pi(s_{t+1}]-V^\pi(s_t)) Vπ(st)=Vπ(st)+α([rt+γVπ(st+1]Vπ(st))
    TD target = [ r t + γ V π ( s t + 1 ) ] [r_t+\gamma V^\pi(s_{t+1})] [rt+γVπ(st+1)]

α \alpha α可以是一个时间的函数, a t a_t at π ( s t ) \pi(s_t) π(st),因为遵循策略 π \pi π

例题

在这里插入图片描述
手写体是解题过程。
与蒙特·卡罗尔算法不同的是,我们不会再将回报反向传播到之前访问过的状态,而是采样一个四元组 ( s , a , r , s ′ ) (s,a,r,s') (s,a,r,s)即一次变迁,更新 V ( s ) V(s) V(s)的状态,之后不记录这次采样,也不会再改变 s s s的价值 V ( s ) V(s) V(s)

结果是按照手写体以如下顺序生成的(初始化所有状态的价值为零):

  1. [0 0 0 0 0 0 0]
  2. [0 0 0 0 0 0 0]
  3. [0 0 0 0 0 0 0]
  4. [1 0 0 0 0 0 0]

最后一次采样得到 ( s 1 , a 1 , 1 , # ) (s_1,a_1,1,\#) (s1,a1,1,#),按照TD[(0)]算法更新步骤算, V ( s 1 ) = 1 V(s_1) = 1 V(s1)=1,其余由于更新它们价值时回报都是0,所以 V ( s ) = 0 ( e x c e p t   f o r   s 1 ) V(s)=0(except \ for \ s_1) V(s)=0(except for s1)

TD Learning和Q-Learing高度相似。Q-Learning是在做对模型的控制,即求解最佳策略;TD-Learning基本上就是Q-Learning,但是你的策略是固定的。

实际中如果你取 α = 1 N \alpha=\frac{1}{N} α=N1或者其他类似的形式,或者取一个很小的值,那么它将必定收敛,当你像上面的例题那样取 α = 1 \alpha=1 α=1,它绝对会震荡。 α = 1 \alpha=1 α=1其实意味着你直接忽视掉了先前的估计。

图形化描述

在这里插入图片描述
TD是蒙特·卡罗尔和动态规划的结合。因为,一方面它靠采样 s t + 1 s_{t+1} st+1来近似期望,而不是显式地求期望(蒙特·卡罗尔方法的思想);另一方面它使用 V ( s t + 1 ) V(s_{t+1}) V(st+1)通过bootstrap的方式更新价值估计(动态规划的思想)。

### 被动学习中的时序差分方法 (TD Learning) #### TD Learning 的基本概念 时序差分Temporal Difference, TD学习是一种结合了动态规划和蒙特卡洛方法的优点的学习方式。它既不需要像动态规划那样依赖于环境模型,也不需要等待整个回合结束才能进行更新,因此具有更高的效率[^1]。 在被动学习中,智能体的目标是对给定策略的价值函数进行评估,而不是主动优化策略本身。在这种情况下,TD 方法的核心在于利用当前状态价值的估计值以及下一时刻的状态价值来逐步改进对当前状态价值的估计。这种机制使得 TD 学习能够在不完全经历完整回合的情况下实时调整其参数[^2]。 #### TD(0) 更新规则 对于状态价值函数 \( V(s) \)TD(0) 使用如下公式进行更新: \[ V(S_t) \leftarrow V(S_t) + \alpha [R_{t+1} + \gamma V(S_{t+1}) - V(S_t)] \] 其中: - \( S_t \) 表示时间步 \( t \) 上的状态, - \( R_{t+1} \) 是从状态 \( S_t \) 到达状态 \( S_{t+1} \) 所获得的即时奖励, - \( \gamma \) 是折扣因子,用于衡量未来奖励的重要性, - \( \alpha \)学习率,控制每次更新的步伐大小。 这一公式的含义是通过比较当前状态的实际回报与预期回报之间的差异(即 TD 错误),并据此修正状态价值函数的估计值[^3]。 #### 应用场景 TD 学习广泛应用于多种领域,尤其是在无法获取精确环境模型或者希望快速得到初步结果的情形下尤为有效。例如,在游戏 AI 开发过程中,可以通过观察玩家行为模式不断调整内部评价体系;又如金融交易模拟器设计时也可借助此类技术构建适应性强的风险管理框架[^4]。 ```python def td_learning_update(state_values, alpha, gamma, current_state, next_state, reward): """ Perform a single update step using the TD(0) algorithm. Parameters: state_values (dict): A dictionary mapping states to their estimated values. alpha (float): The learning rate. gamma (float): Discount factor for future rewards. current_state: Current observed state of the environment. next_state: State reached after taking an action from `current_state`. reward (float): Immediate reward received upon transitioning between states. Returns: None; updates are performed directly on input dictionaries/lists etc... """ # Compute target based off immediate reward & discounted estimate of successor's worthiness target = reward + gamma * state_values[next_state] # Update rule implementation via simple arithmetic operation w/learning-rate scaling term applied afterward too! delta_v = alpha*(target - state_values[current_state]) state_values[current_state] += delta_v ``` 问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值