TD(lambda) 算法

\(TD(\lambda)\)是统一蒙特卡洛算法(MC)和时序差分算法(TD)的第二种形式。第一种形式也就是 \(TD(n)\) 算法。具体来说, \(TD(n)\) 的公式可以写为:

\[\begin{equation} \begin{aligned} G_{t:t+1} &= R_{t+1} + \gamma V(S_{t+1})\\ G_{t:t+n} &= R_{t+1} + \gamma G_{t+1:t+n} \\&=\sum_{i=1}^{n} \gamma^{i-1}R_{t+i} + \gamma^n V(S_{t+n}) \\ &=R_{t+1} + \gamma R_{t+2} + \gamma^2R_{t+3} + ... + \gamma^{n-2}R_{t + n - 1} + \gamma^{n-1} R_{t+n} + \gamma^{n}V(S_{t+n}) \end{aligned} \end{equation} \]

\(TD(n)\) 中,有 \(n \in [1, +\infty)\)\(n = 1\) 时, \(TD(n)\) 算法退化为 TD算法。当 \(n \to +\infty\) 时, \(TD(n)\) 退化为 MC算法。

一、\(\lambda-return\) 算法

\(TD(n)\) 算法中,我们把 t 时刻的回报看作是 t 时刻对应状态走n步之后的回报值,也就是

\[G_t = G_{t:t+n} \]

但是在 \(TD(\lambda)\) 中,我们把最终回报看作是每一步回报的加权值,每一步的加权值为 \(\lambda^{n-1}\) 其中 \(\lambda \in [0, 1]\) 。但是为了保证最终的加权和为1,我们会再乘上 \(1 -\lambda\) 写成公式就是:

\[\begin{equation} G_t^{\lambda} = (1-\lambda)\sum_{n=1}^{\infty} \lambda^{n-1}G_{t:t+n}\end{equation} \]

在公式(2)中,我们假设走了无限多步,也就是 \(n \to \infty\)。,但是这是不可能的。实际上,如果智能体走了 T 步之后结束回合,公式(2)可以被重写为:

\[\begin{equation} G_t^{\lambda} = (1-\lambda)\sum_{n=1}^{T-t-1} \lambda^{n-1}G_{t:t+n} + \lambda ^ {T-t-1}G_t \end{equation} \]

在公式(3)中,当 \(\lambda = 1\) 时, \(G_t^{\lambda} = G_t\), \(\lambda-return\) 算法退化为 蒙特卡洛算法。当 \(\lambda = 0\) 时, \(G_t^{\lambda} = G_{t:t+1}\),此时, \(\lambda-return\) 算法退化为 \(TD\) 算法

二、\(TD(\lambda)\) 算法

\(\lambda-return\) 算法和 \(TD(n)\) 算法在计算某个状态的回报的时候,都需要先知道未来状态的回报,才可以知道当前状态的回报。这也被看作是一种前向视图。

img

前向视图示意图

但是实际上,我们没有利用到达当前状态的历史状态的相关信息。这些历史状态信息也被称为后向视图

img

后向视图示意图

\(TD(\lambda)\) 就是第一种同时利用了前向视图和后向视图的强化学习算法。

\(TD(\lambda)\) 种利用后向视图的方法叫做资格迹。在 \(TD(\lambda)\) 中,资格迹一开始被初始化为0。智能体每走一步,资格迹会累加价值函数的梯度并以 \(\gamma \lambda\) 的大小衰减。写成公式就是:

\[\begin{equation} \begin{aligned} z_{-1} &= 0 \\ z_t &=\gamma\lambda z_{t-1} + \nabla V(S_t, \theta_t) \end{aligned} \end{equation} \]

公式(4)中的 \(\theta_{t}\) 是价值网络的参数。

在更新价值网络时,假设时序差分误差 \(\delta_t = R_{t+1} + \gamma V(S_(t+1),\theta_t) - V(S_t,\theta_t)\),则更新价值网络公式为:

\[\theta_{t+1} = \theta_t + \alpha z_t \delta_t \]

可以看到,资格迹衡量了历史信息的价值大小。当遇到一个重要事件的时候, \(\nabla V(S_t,\theta_t)\) 的值变大,使得 \(z_t\) 的值变大,就增加了当前状态在历史状态中的权重并影响了更新参数 \(\theta_t\) 的大小。

posted @ 2025-01-10 14:44  nagimegesa  阅读(542)  评论(0)    收藏  举报