梯度下降是一种用于学习函数逼近器 $\hat{v}(s, \theta)$ 的参数 $\theta$ 的方法。其目的是最小化预测值 $\hat{v}(S_t, \theta)$ 与某个目标值 $U_t$ 之间的平方误差。对于蒙特卡洛方法,这个目标 $U_t$ 是该幕的实际回报 $G_t$,它不依赖于当前的价值估计。这使得我们能够执行真正的梯度下降。现在,我们来考虑时序差分 (TD) 学习。回顾第5章,TD 方法根据观测到的奖励 $R_{t+1}$ 和下一状态 $S_{t+1}$ 的估计价值来更新状态 $S_t$ 的价值估计。时间步 $t$ 更新的 TD 目标是:$$ Y_t = R_{t+1} + \gamma \hat{v}(S_{t+1}, \theta_t) $$这里,$\hat{v}(S_{t+1}, \theta_t)$ 是使用当前参数 $\theta_t$ 对下一状态价值的当前估计值。这便是与函数逼近结合时产生有趣之处。如果我们尝试应用之前相同的梯度下降方法,旨在最小化预测值 $\hat{v}(S_t, \theta)$ 与 TD 目标 $Y_t$ 之间的均方误差 (MSE),我们会遇到一个细微的问题。单次转换的损失函数如下所示:$$ L(\theta) = \frac{1}{2} [ Y_t - \hat{v}(S_t, \theta) ]^2 = \frac{1}{2} [ R_{t+1} + \gamma \hat{v}(S_{t+1}, \theta) - \hat{v}(S_t, \theta) ]^2 $$注意到目标 $Y_t$ 本身依赖于参数 $\theta$,因为它包含项 $\hat{v}(S_{t+1}, \theta)$。一个真正的梯度下降更新需要对整个表达式关于 $\theta$ 求梯度。这涉及计算目标值 $\hat{v}(S_{t+1}, \theta)$ 的梯度,这可能复杂且计算成本高。更重要地是,目标 $Y_t$ 基于一个本质上嘈杂且有偏的估计值(因为它依赖于当前可能不准确的权重 $\theta$)。基于这个可能存在缺陷的目标的梯度来更新我们的参数,可能导致不稳定或收敛缓慢。半梯度方法为了解决这个问题,带有函数逼近的 TD 方法通常采用所谓的半梯度方法。主要思想简单但有效:在计算更新的梯度时,我们假定 TD 目标 $Y_t$ 是一个固定的观测值,就像蒙特卡洛方法中的回报 $G_t$ 一样。我们忽略了 $Y_t$ 依赖于当前参数 $\theta_t$ 的事实。本质上,我们仅计算关于我们的预测 $\hat{v}(S_t, \theta)$ 的梯度,而不是目标部分 $R_{t+1} + \gamma \hat{v}(S_{t+1}, \theta_t)$。简化损失(将 $Y_t$ 视为常数)的梯度是:$$ \nabla_{\theta} L(\theta) \approx \nabla_{\theta} \frac{1}{2} [ (R_{t+1} + \gamma \hat{v}(S_{t+1}, \theta_t)) - \hat{v}(S_t, \theta) ]^2 $$ $$ \nabla_{\theta} L(\theta) \approx - [ R_{t+1} + \gamma \hat{v}(S_{t+1}, \theta_t) - \hat{v}(S_t, \theta) ] \nabla_{\theta} \hat{v}(S_t, \theta) $$记住梯度下降以梯度的相反方向更新参数。因此,权重 $\theta$ 的更新规则变为:$$ \theta_{t+1} \leftarrow \theta_t - \alpha \nabla_{\theta} L(\theta) $$ $$ \theta_{t+1} \leftarrow \theta_t + \alpha [ R_{t+1} + \gamma \hat{v}(S_{t+1}, \theta_t) - \hat{v}(S_t, \theta_t) ] \nabla_{\theta} \hat{v}(S_t, \theta_t) $$让我们分析一下:TD 误差 ($\delta_t$):方括号中的项 $R_{t+1} + \gamma \hat{v}(S_{t+1}, \theta_t) - \hat{v}(S_t, \theta_t)$,是我们熟悉的在表格型 TD(0) 中遇到的 TD 误差。它表示 $S_t$ 的估计价值与从即时奖励和下一状态价值得出的更好估计之间的差异。价值函数的梯度 ($\nabla_{\theta} \hat{v}(S_t, \theta_t)$):该项告诉我们改变 $\theta$ 中的每个参数将如何影响当前状态 $S_t$ 的价值估计。它指导更新方向,使其趋向于对当前预测影响最大的参数。学习率 ($\alpha$):控制更新的步长。这被称为“半梯度”方法,因为我们只使用了真正的梯度的一部分。我们计算了我们的预测 $\hat{v}(S_t, \theta)$ 的梯度,但忽略了目标 $\hat{v}(S_{t+1}, \theta)$ 的梯度。线性函数逼近的半梯度 TD(0)让我们以线性函数逼近为例来具体化,其中我们的价值估计是 $\hat{v}(s, \theta) = \theta^T x(s)$,而 $x(s)$ 是状态 $s$ 的特征向量。如我们之前所见,线性价值函数关于参数 $\theta$ 的梯度就是特征向量本身:$$ \nabla_{\theta} \hat{v}(s, \theta) = x(s) $$将其代入通用半梯度 TD 更新规则,我们得到了线性半梯度 TD(0) 的更新规则:$$ \theta_{t+1} \leftarrow \theta_t + \alpha [ R_{t+1} + \gamma \theta_t^T x(S_{t+1}) - \theta_t^T x(S_t) ] x(S_t) $$这个更新规则计算高效,并且在实践中通常表现良好。在观察到一次转换 $(S_t, A_t, R_{t+1}, S_{t+1})$ 后,我们:获取当前状态 $x(S_t)$ 和下一状态 $x(S_{t+1})$ 的特征向量。计算当前价值估计:$\hat{v}(S_t, \theta_t) = \theta_t^T x(S_t)$ 和 $\hat{v}(S_{t+1}, \theta_t) = \theta_t^T x(S_{t+1})$。计算 TD 误差:$\delta_t = R_{t+1} + \gamma \hat{v}(S_{t+1}, \theta_t) - \hat{v}(S_t, \theta_t)$。更新权重向量:$\theta_{t+1} \leftarrow \theta_t + \alpha \delta_t x(S_t)$。下图展示了半梯度 TD 更新一个步骤中的信息流。digraph TD_Update_SemiGradient { rankdir=LR; node [shape=box, style="rounded,filled", fillcolor="#e9ecef", fontname="Arial"]; edge [fontname="Arial", color="#495057"]; S_t [label="观测 S_t", fillcolor="#a5d8ff"]; S_t1 [label="观测 S_{t+1}, R_{t+1}", fillcolor="#a5d8ff"]; Theta_t [label="当前权重 θ_t", shape=cylinder, fillcolor="#ffd8a8"]; Feat_St [label="计算特征\nx(S_t)"]; Feat_St1 [label="计算特征\nx(S_{t+1})"]; V_St [label="估计 V(S_t, θ_t)\n= θ_t^T x(S_t)"]; V_St1 [label="估计 V(S_{t+1}, θ_t)\n= θ_t^T x(S_{t+1})"]; TD_Error [label="计算 TD 误差 δ_t\n= R_{t+1} + γV(S_{t+1},θ_t) - V(S_t,θ_t)", shape=ellipse, fillcolor="#ffc9c9"]; Update [label="更新权重\nθ_{t+1} ← θ_t + αδ_t x(S_t)", shape=ellipse, fillcolor="#b2f2bb"]; Theta_t1 [label="更新后的权重 θ_{t+1}", shape=cylinder, fillcolor="#ffd8a8"]; S_t -> Feat_St; S_t1 -> Feat_St1; Theta_t -> V_St; Theta_t -> V_St1; Feat_St -> V_St; Feat_St1 -> V_St1; V_St -> TD_Error; V_St1 -> TD_Error; S_t1 -> TD_Error [label=" R_{t+1}"]; TD_Error -> Update; Feat_St -> Update [label=" x(S_t)"]; Theta_t -> Update; Update -> Theta_t1; }带有函数逼近的半梯度 TD(0) 中单次更新步骤的流程图。为何称“半”?收敛性考量尽管半梯度方法被广泛使用且通常有效,但重要的是要理解它们并非针对贝尔曼误差的真正的梯度下降方法。由于我们忽略了目标中的梯度依赖性,因此失去了与在固定目标函数上进行标准梯度下降相关的理论收敛保证。在某些情况下,尤其是在使用非线性函数逼近器或离策略学习(例如尝试在遵循不同行为策略 $b$ 的同时学习目标策略 $\pi$ 的 Q 值)时,半梯度方法可能变得不稳定,参数也可能发散。这通常被称为“致命三元组”:函数逼近、自举(TD 更新)和离策略学习。然而,对于带有线性函数逼近的在策略 TD 学习,半梯度方法通常稳定且可靠收敛,不一定收敛到绝对最好的可能权重,而是在所选特征和函数逼近器的限制内,收敛到一个接近最优解的合理近似值。收敛通常到一个最小化投影贝尔曼误差的固定点,对此的详细讨论超出了我们目前的范围,但这表明了一个明确的目标。半梯度方法提供了一种实用且计算上可行的方式,将 TD 学习的能力与大规模问题中函数逼近的必要性结合起来。它们构成了许多先进算法的基础,包括我们稍后会讲到的深度 Q 网络。接下来,我们将简要考虑使用更强大的非线性函数逼近器,如神经网络。