4.3 多步 TD目标

多步 TD 目标

首先回顾一下 SARSA 算法。给定五元组\((s_t, a_t, r_t, s_{t+1}, a_{t+1})\), SARSA 计算 TD 目标:

\(\hat{y}_t = r_t + \gamma \cdot q(s_{t+1}, a_{t+1}; \boldsymbol{w}).\)

公式中只用到一个奖励\(r_t\),这样得到的\(\hat{y}_t\)叫做单步 TD 目标。多步 TD 目标用\(m\)个奖励可以视作单步 TD 目标的推广。下面我们推导多步 TD 目标。

数学推导:

设一局游戏的长度为\(n\)。根据定义,\(t\)时刻的回报\(U_t\)\(t\)时刻之后的所有奖励的加权和:

\(U_t = R_t + \gamma R_{t+1} + \gamma^2 R_{t+2} + \cdots + \gamma^{n-t} R_n.\)

同理,\(t+m\)时刻的回报可以写成:

\(U_{t+m} = R_{t+m} + \gamma R_{t+m+1} + \gamma^2 R_{t+m+2} + \cdots + \gamma^{n-t-m} R_n.\)

下面我们推导两个回报的关系。把\(U_t\)写成:

\(\begin{align*} U_{t} &= \left(R_{t} + \gamma R_{t+1} + \cdots + \gamma^{m-1} R_{t+m-1}\right) + \left(\gamma^{m} R_{t+m} + \cdots + \gamma^{n-t} R_{n}\right) \\ &= \left(\sum_{i=0}^{m-1} \gamma^{i} R_{t+i}\right) + \gamma^{m} \underbrace{\left(R_{t+m} + \gamma R_{t+m+1} + \cdots + \gamma^{n-t-m} R_{n}\right)}_{\text{等于} U_{t+m}}. \end{align*}\)

因此,回报可以写成这种形式:

\(U_t = ( \sum_{i=0}^{m-1} \gamma^i R_{t+i} ) + \gamma^m U_{t+m}.\)

动作价值函数\(Q_\pi(s_t, a_t)\)是回报\(U_t\)的期望,而\(Q_\pi(s_{t+m}, a_{t+m})\)是回报\(U_{t+m}\)的期望。利用公式,再按照贝尔曼方程的证明,不难得出下面的定理:

\(R_k\)\(S_k, A_k\)的函数,\(\forall k = 1, \cdots, n\)。那么

\(\underbrace{Q_\pi(s_t, a_t)}_{U_t \text{的期望}} = \mathbb{E} \left[ \left( \sum_{i=0}^{m-1} \gamma^i R_{t+i} \right) + \gamma^m \cdot \underbrace{Q_\pi(S_{t+m}, A_{t+m})}_{U_{t+m} \text{的期望}} \bigg \| S_t = s_t, A_t = a_t \right].\)

公式中的期望是关于随机变量\(S_{t+1}, A_{t+1}, \cdots, S_{t+m}, A_{t+m}\)求的。

注 回报\(U_t\)的随机性来自于\(t\)\(n\)时刻的状态和动作:

\(S_t, A_t, S_{t+1}, A_{t+1}, \cdots, S_{t+m}, A_{t+m}, S_{t+m+1}, A_{t+m+1}, \cdots, S_n, A_n.\)

定理中把\(S_t = s_t\)\(A_t = a_t\)看做是观测值,用期望消掉\(S_{t+1}, A_{t+1}, \cdots, S_{t+m}, A_{t+m}\), 而\(Q_\pi(S_{t+m}, A_{t+m})\)则消掉了剩余的随机变量\(S_{t+m+1}, A_{t+m+1}, \cdots, S_n, A_n\)

多步 TD目标:

我们对定理中的期望做蒙特卡洛近似,然后再用价值网络\(q(s, a; \boldsymbol{w})\)近似动作价值函数\(Q_\pi(s, a)\)。具体做法如下:

  • \(t\)时刻,价值网络做出预测\(\hat{q}_t = q(s_t, a_t; \boldsymbol{w})\), 它是对\(Q_\pi(s_t, a_t)\)的估计。
  • 已知当前状态\(s_t\), 用策略\(\pi\)控制智能体与环境交互\(m\)次,得到轨迹\(r_t, s_{t+1}, a_{t+1}, r_{t+1}, \cdots, s_{t+m-1}, a_{t+m-1}, r_{t+m-1}, s_{t+m}, a_{t+m}\).
  • \(t+m\)时刻,用观测到的轨迹对定理中的期望做蒙特卡洛近似,把近似的结果记作:

\(\left(\sum_{i=0}^{m-1} \gamma^i r_{t+i}\right) + \gamma^m \cdot Q_\pi(s_{t+m}, a_{t+m}).\)

  • 进一步用\(q(s_{t+m}, a_{t+m}; \boldsymbol{w})\)近似\(Q_\pi(s_{t+m}, a_{t+m})\), 得到:

\(\hat{y}_t \triangleq \left(\sum_{i=0}^{m-1} \gamma^i r_{t+i}\right) + \gamma^m \cdot q(s_{t+m}, a_{t+m}; \boldsymbol{w}).\)

\(\hat{y}_t\)称作\(m\)步TD 目标。

\(\hat{q}_t = q(s_t, a_t; \boldsymbol{w})\)\(\hat{y}_t\)分别是价值网络在\(t\)时刻和\(t+m\)时刻做出的预测,两者都是对\(Q_\pi(s_t, a_t)\)的估计值。\(\hat{q}_t\)是纯粹的预测,而\(\hat{y}_t\)则基于\(m\)组实际观测,因此\(\hat{y}_t\)\(\hat{q}_t\)更可靠。我们鼓励\(\hat{q}_t\)接近\(\hat{y}_t\)。设损失函数为:

\(L(\boldsymbol{w}) \triangleq \frac{1}{2} \Big[q(s_t, a_t; \boldsymbol{w}) - \hat{y}_t\Big]^2.\)

做一步梯度下降更新价值网络参数\(\boldsymbol{w}\):

\(\boldsymbol{w} \leftarrow \boldsymbol{w} - \alpha \cdot (\hat{q}_t - \hat{y}_t) \cdot \nabla_{\boldsymbol{w}} q(s_t, a_t; \boldsymbol{w}).\)

训练流程

设当前价值网络的参数为\(\boldsymbol{w}_{\text{now}}\), 当前策略为\(\pi_{\text{now}}\)。执行以下步骤更新价值网络和策略。

  1. 用策略网络\(\pi_{\text{now}}\)控制智能体与环境交互,完成一个回合,得到轨迹\(s_1, a_1, r_1, s_2, a_2, r_2, \cdots, s_n, a_n, r_n\).
  2. 对于所有的\(t = 1, \cdots, n-m\), 计算\(\hat{q}_t = q(s_t, a_t; \boldsymbol{w}_{\text{now}})\).
    3.对于所有的\(t = 1, \cdots, n-m\),计算多步 TD 目标和 TD 误差:

\(\hat{y}_t = \sum_{i=0}^{m-1} \gamma^i r_{t+i} + \gamma^m \hat{q}_{t+m}, \quad \delta_t = \hat{q}_t - \hat{y}_t.\)

  1. 对于所有的\(t = 1, \cdots, n-m\), 对价值网络\(q\)做反向传播,计算\(q\)关于\(\boldsymbol{w}\)的梯度:\(\nabla_{\boldsymbol{w}} q(s_t, a_t; \boldsymbol{w}_{\text{now}})\).
  2. 更新价值网络参数:

\(\boldsymbol{w}_{\text{new}} \leftarrow \boldsymbol{w}_{\text{now}} - \alpha \cdot \sum_{t=1}^{n-m} \delta_t \cdot \nabla_{\boldsymbol{w}} q(s_t, a_t; \boldsymbol{w}_{\text{now}}).\)

  1. 用某种算法更新策略函数\(\pi\)。该算法与 SARSA 算法无关。

蒙特卡洛与自举

上一节介绍了多步 TD 目标。单步 TD 目标、回报是多步 TD 目标的两种特例。如下图所示,如果设\(m=1\),那么多步 TD 目标变成单步 TD 目标。如果设\(m=n-t+1\),那么多步 TD 目标变成实际观测的回报\(u_t\)

蒙特卡洛

训练价值网络\(q(s, a; \boldsymbol{w})\)的时候,我们可以将一局游戏进行到底,观测到所有的奖励\(r_1, \cdots, r_n\),然后计算回报\(u_t = \sum_{i=0}^{n-t} \gamma^i r_{t+i}\)。拿\(u_t\)作为目标,鼓励价值网络\(q(s_t, a_t; \boldsymbol{w})\)接近\(u_t\)。定义损失函数:

\(L(\boldsymbol{w}) = \frac{1}{2} \left[q(s_t, a_t; \boldsymbol{w}) - u_t\right]^2.\)

然后做一次梯度下降更新\(\boldsymbol{w}\):

\(\boldsymbol{w} \leftarrow \boldsymbol{w} - \alpha \cdot \nabla_{\boldsymbol{w}} L(\boldsymbol{w}),\)

这样可以让价值网络的预测\(q(s_t, a_t; \boldsymbol{w})\)更接近\(u_t\)。这种训练价值网络的方法不是 TD。

在强化学习中,训练价值网络的时候以\(u_t\)作为目标,这种方式被称作“蒙特卡洛”。原因是这样的,动作价值函数可以写作\(Q_{\pi}(s_{t}, a_{t}) = \mathbb{E}[U_{t} \mid S_{t} = s_{t}, A_{t} = a_{t}].\), 而我们用实际观测\(u_t\)去近似期望,这就是典型的蒙特卡洛近似。

蒙特卡洛的好处是无偏性:\(u_t\)\(Q_\pi(s_t, a_t)\)的无偏估计。由于\(u_t\)的无偏性,拿\(u_t\)作为目标训练价值网络,得到的价值网络也是无偏的。

蒙特卡洛的坏处是方差大。随机变量\(U_t\)依赖于\(S_{t+1}, A_{t+1}, \cdots, S_n, A_n\)这些随机变量,其中不确定性很大。观测值\(u_t\)虽然是\(U_t\)的无偏估计,但可能实际上离\(\mathbb{E}\{U_t\}\)很远。

因此,拿\(u_t\)作为目标训练价值网络,收敛会很慢。

自举

在介绍价值学习的自举之前,先解释一下什么叫自举。大家可能经常在强化学习和统计学的文章里见到 bootstrapping 这个词。它的字面意思是“拔自己的鞋带,把自己举起来”。所以 bootstrapping 翻译成“自举”, 即自己把自己举起来。自举听起来很荒谬。即使你“力拔山兮气盖世”,你也没办法拔自己的鞋带,把自己举起来。虽然自举乍看起来不现实,但是在统计和 机器学习 是可以做到自举的;自举在统计和机器学习里面非常常用。

在强化学习中,“自举”的意思是“用一个估算去更新同类的估算”,类似于“自己把自己给举起来”。SARSA 使用的单步 TD 目标定义为:

SARSA 鼓励\(q(s_t, a_t; \boldsymbol{w})\)接近\(\hat{y}_t\), 所以定义损失函数:

\(L(w) = \frac{1}{2} \left[q(s_t, a_t; \boldsymbol{w}) - \hat{y}_t\right]^2.\)

TD 目标\(\hat{y}_t\)的一部分是价值网络做出的估计\(\gamma \cdot q(s_{t+1}, a_{t+1}; \boldsymbol{w})\), 然后 SARSA 让\(q(s_t, a_t; \boldsymbol{w})\)去拟合\(\hat{y}_t\)。这就是用价值网络自己做出的估计去更新价值网络自己,这属于“自举”。(严格地说,TD 目标\(\hat{y}_t\)中既有自举的成分,也有蒙特卡洛的成分。TD 目标中的\(\gamma \cdot q(s_{t+1}, a_{t+1}; \boldsymbol{w})\)是自举,因为它拿价值网络自己的估计作为目标。TD 目标中的\(r_t\)是实际观测,它是对\(\mathbb{E}[R_t]\)的蒙特卡洛。)

自举的好处是方差小。单步 TD 目标的随机性只来自于\(S_{t+1}, A_{t+1}\), 而回报\(U_t\)的随机性来自于\(S_{t+1}, A_{t+1}, \cdots, S_n, A_n\)。很显然,单步 TD 目标的随机性较小,因此方差较小。用自举训练价值网络,收敛比较快。

自举的坏处是有偏差。价值网络\(q(s, a; \boldsymbol{w})\)是对动作价值\(Q_\pi(s, a)\)的近似。最理想的情况下,\(q(s, a; \boldsymbol{w}) = Q_\pi(s, a), \forall s, a\)。假如碰巧\(q(s_{j+1}, a_{j+1}; \boldsymbol{w})\)低估(或高估)真实价值\(Q_\pi(s_{j+1}, a_{j+1})\),则会发生下面的情况:

\(\begin{align*} &\Longrightarrow\quad q(s_{j+1}, a_{j+1}; w) \quad \text{低估(或高估)} \quad Q_{\pi}(s_{j+1}, a_{j+1}) \\ &\Longrightarrow\quad \widehat{y_{j}} \quad \text{低估(或高估)} \quad Q_{\pi}(s_{j}, a_{j}) \\ &\Longrightarrow\quad q(s_{j}, a_{j}; w) \quad \text{低估(或高估)} \quad Q_{\pi}(s_{j}, a_{j}). \end{align*}\)

也就是说,自举会让偏差从\((s_{t+1}, a_{t+1})\)传播到\((s_t, a_t)\)。后面详细讨论自举造成的偏差以及解决方案。

蒙特卡洛和自举的对比

在价值学习中,用实际观测的回报\(u_t\)作为目标的方法被称为蒙特卡洛,即图 5.5 中的蓝色的箱型图。

\(u_t\)\(Q_\pi(s_t, a_t)\)的无偏估计,即\(\mathbb{E}\{U_t\} = Q_\pi(s_t, a_t)\)。但是它的方差很大,也就是说实际观测到的\(u_t\)可能离\(Q_\pi(s_t, a_t)\)很远。

用单步 TD 目标\(\hat{y}_t\)作为目标的方法被称为自举,即图5.5 中的红色的箱型图。自举的好处在于方差小,\(\hat{y}_t\)不会偏离期望太远。但是\(\hat{y}_t\)往往是有偏的, 它的期望往往不等于\(Q_\pi(s_t, a_t)\)。用自举训练出的价值网络往往有系统性的偏差 (低估或者高估)。实践中,自举通常比蒙特卡洛收敛更快,这就是为什么训练 DQN 和价值网络通常用 TD 算法。

如图 5.4 所示,多步 TD 目标\(\hat{y}_t = \left(\sum_{i=0}^{m-1} \gamma^i r_{t+i}\right) + \gamma^m \cdot q(s_{t+m}, a_{t+m}; \boldsymbol{w})\)介于蒙特卡洛和自举之间。多步 TD 目标有很大的蒙特卡洛成分,其中的\(\sum_{i=0}^{m-1} \gamma^i r_{t+i}\)基于\(m\)个实际观测到的奖励。多步 TD 目标也有自举的成分,其中的\(\gamma^m \cdot q(s_{t+m}, a_{t+m}; \boldsymbol{w})\)是用价值网络自己算出来的。如果把\(m\)设置得比较好,可以在方差和偏差之间找到好的平衡,使得多步 TD 目标优于单步 TD 目标,也优于回报\(u_t\)


4.3 多步 TD目标
http://binbo-zappy.github.io/2024/12/04/DRL-王树森/4-3-多步-TD目标/
作者
Binbo
发布于
2024年12月4日
许可协议