looyifan / Temporal Difference Lambda

Created Wed, 02 Apr 2025 10:32:39 +0800 Modified Thu, 03 Apr 2025 17:49:51 +0800
1006 Words

Temporal Difference Lambda

  • 时间差分就是TD(0)算法,只向后采样一步;MC是向后采样整个片段;多步自举介于两者之间
    • TD: $$n=1,G_{t}^{(1)}=R_{t+1}+\gamma V(S_{t+1})$$
    • $$n=2,G_{t}^{(2)}=R_{t+1}+\gamma V(S_{t+1})$$
    • MC: $$n=3,G_{t}^{(\infty )}=R_{t+1}+\gamma R_{t+2}+…+\gamma ^{T-t-1}R_{T}$$
  • 经验认为\(n=3-10\)步左右,要好于TD(0)和MC

n步TD策略评价

  • 算法流程

    • 1:repeat(对于每一个片段)
    • 2: repeat对于片段中的每一步
    • 3: 根据\(\pi (\cdot ,S_{t})\)选择动作\(A_{t}\)
    • 4: 执行动作\(A_{t}\),观察到\(R_{t+1}, S_{t+1}\),并将其存储起来
    • 5: if \(\tau =t-n+1\geqslant 0\), then
    • 6: \(G\leftarrow \sum_{i=\tau +1}^{min(\tau +n,T)}\gamma ^{i-\tau -1}R_{i}\)
    • 7: if \(\tau +n<T\),then \(G\leftarrow G+\gamma ^{n}V(S_{\tau +n})\)
    • 8: \(V(S_{\tau })\leftarrow V(S_{\tau })+\alpha [G-V(S_{\tau })]\)
    • 9: end if
    • 10: until直到终止状态
    • 11:until收敛
  • 两个注意点

    • 为了计算\(n\)步回报值,需要维护\(R\),\(S\) 的存储空间
    • 对于后继状态不足\(n\)个的,使用 MC 目标值

多步自举

前向视角

  • 就是将\(TD(0),TD(1),…,TD(n)\)求平均
  • $$G_{t}^{\lambda }=(1-\lambda )\sum_{n=1}^{\infty }\lambda ^{n-1}G_{t}^{(n)}$$
  • \(\lambda =0\),退化成TD(0);\(\lambda =1\),退化成MC
  • \(TD(\lambda )\)更新公式
    • $$V(S_{t})\leftarrow V(S_{t})+\alpha (G_{t}^{\lambda }-V(S_{t}))$$

后向视角–基于资格迹(Eligibility Traces)

  • 基本概念

    • 状态转移片段:\(s1\to s1\to s1\to s2\to s3\)
    • 信度分配(Credit assignment)问题:到底是\(s1\)还是\(s2\)造成了最后的\(s3\)
      • 频率启发式: 归因到频数最高的状态
      • 近因启发式: 归因到最近的状态
      • 资格迹是两者的结合
  • 资格迹的计算公式

    • $$E_{0}(s)=0$$
    • $$E_{t}(s)=\gamma \lambda E_{t-1}(s)+1(S_{t}=s)$$
    • 直观的感觉就是,第一次遇到这个状态s的时候,对它的记忆由0蹦到1,然后慢慢开始遗忘(对应\(\times \gamma \)这个动作),下一次又遇到了,记忆就一下子清晰了(对应+1这个动作),然后又慢慢遗忘。
  • 利用资格迹实现多步自举

    • 对于每一个状态s,维护一个资格迹\(E(s)\)
    • 更新值函数\(V(s)\)时,会更新每一个状态\(s\)
    • 使用TD误差\(\delta_{t}\)和资格迹\(E_{t}(s)\)
      • \(\delta_{t}=R_{t+1}+\gamma V(S_{t+1})-V(S_{t})\)
      • \(V(s)\leftarrow V(s)+\alpha \delta_{t}E_{t}(s)\)
    • 资格迹本质上是记录了所有状态s对后继状态\(S_{t+1}\)的贡献度,被用来对TD误差进行加权

    总结

    • 前向视角
      • 利用\(t+1,t+2,…t+n\)时刻的\(V(s)\)求解t时刻的\(V(s)\)
      • 容易理解
      • 需要拥有完整的状态转移片段才能求解,跟MC一样离线更新
    • 后向视角
      • 利用\(t+1\)时刻的\(V(s)\)更新\(t,t-1,t-2,t-3,…0\)时刻的\(V(s)\)
      • 在线更新,每一个时刻都更新一遍之前所有时刻的\(V\)

n步Sarsa