函数近似能够表示价值函数,例如 $\hat{v}(s, \mathbf{w})$ 或 $\hat{q}(s, a, \mathbf{w})$,它使用一组参数或权重,由向量 $\mathbf{w}$ 表示。对于线性函数近似,这表示为 $\hat{v}(s, \mathbf{w}) = \mathbf{w}^T \mathbf{x}(s)$,其中 $\mathbf{x}(s)$ 是状态 $s$ 的特征向量。确定这些权重 $\mathbf{w}$ 的最优值是一个主要目标。答案在于借鉴监督式机器学习中的一种基本技术:梯度下降。其理念是迭代地调整权重,以减小我们近似值与正在学习的真实价值函数之间的某种误差度量。定义目标:最小化误差我们的目标是使近似值 $\hat{v}(S_t, \mathbf{w})$ 尽可能接近真实价值 $v_\pi(S_t)$,对于策略 $\pi$ 下遇到的所有状态 $S_t$。量化此目标的一种常见方法是使用均方价值误差 (MSVE),我们旨在最小化它:$$ J(\mathbf{w}) = \mathbb{E}\pi \left[ (v\pi(S_t) - \hat{v}(S_t, \mathbf{w}))^2 \right] $$这个目标衡量的是真实价值与我们近似值之间的预期平方差,在遵循策略 $\pi$ 时访问的状态上进行平均。强化学习中的挑战:未知目标在典型的监督学习中,你会有一个输入-输出对的数据集(例如状态特征 $\mathbf{x}(s)$ 及其对应的真实价值 $v_\pi(s)$)。然后你可以直接应用梯度下降来最小化该数据集上的 MSVE。然而,在强化学习中,我们几乎从不知道真实的价值函数 $v_\pi(s)$!相反,我们有从经验中得到的估计值或目标值。这些目标基于所获得的奖励和后续状态价值(要么观察到情节结束,要么自举得到)。例子包括:蒙特卡洛 (MC) 目标: $U_t = G_t$。这是从状态 $S_t$ 开始观察到的直到情节结束的完整回报。它是 $v_\pi(S_t)$ 的无偏估计。时序差分 (TD) 目标: $U_t = R_{t+1} + \gamma \hat{v}(S_{t+1}, \mathbf{w})$。这是 TD(0) 目标,使用即时奖励 $R_{t+1}$ 和下一个状态价值的当前估计值 $\hat{v}(S_{t+1}, \mathbf{w})$。这个目标是有偏的,因为它依赖于我们当前(可能不准确)的估计。由于我们逐步收集经验(状态、动作、奖励、下一个状态),我们无法轻易计算 MSVE 目标中的完整期望。取而代之,我们使用随机梯度下降 (SGD)。用于价值函数近似的随机梯度下降 (SGD)SGD 每次使用一个样本(或一小批)经验来逐步更新权重。对于产生状态 $S_t$ 和目标值 $U_t$ 的每个交互步骤 $t$,我们沿减小该特定样本误差的方向更新权重向量 $\mathbf{w}$。梯度下降的普遍思路是沿误差函数梯度的反方向更新参数。对于单个样本 $(S_t, U_t)$,平方误差是 $\frac{1}{2} (U_t - \hat{v}(S_t, \mathbf{w}))^2$。(我们加入 $\frac{1}{2}$ 是为了数学上的便利,因为它在求导时会抵消掉)。此单个样本误差对权重 $\mathbf{w}$ 的梯度是:$$ \nabla_\mathbf{w} \left[ \frac{1}{2} (U_t - \hat{v}(S_t, \mathbf{w}))^2 \right] = (U_t - \hat{v}(S_t, \mathbf{w})) (-\nabla_\mathbf{w} \hat{v}(S_t, \mathbf{w})) = -(U_t - \hat{v}(S_t, \mathbf{w})) \nabla_\mathbf{w} \hat{v}(S_t, \mathbf{w}) $$SGD 更新规则以学习率 $\alpha$ 为比例,沿该梯度的反方向移动权重:$$ \mathbf{w}_{t+1} \leftarrow \mathbf{w}_t - \alpha \left[ -(U_t - \hat{v}(S_t, \mathbf{w}t)) \nabla\mathbf{w} \hat{v}(S_t, \mathbf{w}_t) \right] $$$$ \mathbf{w}_{t+1} \leftarrow \mathbf{w}_t + \alpha (U_t - \hat{v}(S_t, \mathbf{w}t)) \nabla\mathbf{w} \hat{v}(S_t, \mathbf{w}_t) $$其中:$\mathbf{w}_t$ 是更新前的权重向量。$\alpha$ 是学习率(一个控制步长的小正数)。$(U_t - \hat{v}(S_t, \mathbf{w}_t))$ 是当前样本的预测误差。$\nabla_\mathbf{w} \hat{v}(S_t, \mathbf{w}_t)$ 是价值函数近似对权重的梯度,在状态 $S_t$ 处求值。此项表示改变每个权重如何影响当前状态的价值估计。将 SGD 应用于线性函数近似当我们使用线性函数近似时,情况变得相当明确,$\hat{v}(s, \mathbf{w}) = \mathbf{w}^T \mathbf{x}(s) = \sum_{i=1}^d w_i x_i(s)$。此近似对权重向量 $\mathbf{w}$ 的梯度就是特征向量 $\mathbf{x}(s)$ 本身:$$ \nabla_\mathbf{w} \hat{v}(s, \mathbf{w}) = \mathbf{x}(s) $$将此代入通用 SGD 更新规则,得到线性 VFA 的更新规则:$$ \mathbf{w}_{t+1} \leftarrow \mathbf{w}_t + \alpha (U_t - \hat{v}(S_t, \mathbf{w}_t)) \mathbf{x}(S_t) $$此更新具有直观的解释:计算误差:$ \delta_t = U_t - \hat{v}(S_t, \mathbf{w}_t) $。这表示我们当前预测与目标值相差多远。按学习率缩放误差:$\alpha \delta_t$。根据特征调整权重:将缩放后的误差乘以特征向量 $\mathbf{x}(S_t)$。对于状态 $S_t$,活跃的特征 ($x_i(S_t) \neq 0$) 将使它们对应的权重 $w_i$ 得到调整。如果误差 $\delta_t$ 为正(低估),则对应活跃特征的权重会增加。如果误差为负(高估),则会减小。digraph G { node [shape=box, style=rounded, fontname="Arial", fontsize=10]; edge [fontname="Arial", fontsize=9]; Start [label="当前权重\nw_t", shape=ellipse, style=filled, fillcolor="#ced4da"]; Input [label="获取样本:\n状态 S_t (特征 x(S_t))\n目标 U_t"]; Predict [label="预测价值:\nv_hat = w_t^T * x(S_t)"]; Error [label="计算误差:\ndelta = U_t - v_hat"]; Update [label="更新权重:\nw_{t+1} = w_t + alpha * delta * x(S_t)"]; Result [label="新权重\nw_{t+1}", shape=ellipse, style=filled, fillcolor="#a5d8ff"]; Start -> Input; Input -> Predict [label=" x(S_t)"]; Start -> Predict [label=" w_t", style=dashed]; Predict -> Error; Input -> Error [label=" U_t", style=dashed]; Error -> Update; Input -> Update [label=" x(S_t)", style=dashed]; Start -> Update [label=" w_t", style=dashed]; Update -> Result; }线性价值函数近似的单次随机梯度下降更新步骤流程。半梯度区别当使用 TD 目标时,例如 $U_t = R_{t+1} + \gamma \hat{v}(S_{t+1}, \mathbf{w}t)$,有一个细微但重要的点。请注意,目标 $U_t$ 本身通过项 $\hat{v}(S{t+1}, \mathbf{w}_t)$ 依赖于当前权重 $\mathbf{w}_t$。当我们计算单个样本平方误差 $\frac{1}{2} (U_t - \hat{v}(S_t, \mathbf{w}_t))^2$ 的梯度时,我们把目标 $U_t$ 视为一个固定的常量值,尽管它依赖于 $\mathbf{w}_t$。真正的梯度计算需要考虑目标对 $\mathbf{w}_t$ 的导数,这要复杂得多。通过忽略目标对权重的依赖,我们没有遵循 MSVE 的真实梯度(使用 TD 目标)。相反,我们遵循的是所谓的半梯度。因此,使用函数近似和自举(如 TD 学习)的方法被称为半梯度方法。我们为何这样做?简洁性: 半梯度更新计算和实现起来要简单得多。有效性: 经验表明,半梯度 TD 方法在标准条件(如学习率衰减和充分的试探)下运行良好且收敛可靠,尽管它们收敛到的解决方案与最小 MSVE 解决方案略有不同。相比之下,如果你使用蒙特卡洛目标 $U_t = G_t$,则该目标不依赖于当前权重 $\mathbf{w}_t$。因此,使用 MC 目标进行的 SGD 更新是真实梯度方法,并且保证能找到 MSVE 目标的局部最小值(假设线性 VFA 和适当的条件)。学习率学习率 $\alpha$ 是一个超参数,它决定了每个更新步骤的大小。如果 $\alpha$ 过大,更新可能会越过最优权重,导致震荡或发散。如果 $\alpha$ 过小,学习会非常缓慢。在实践中,$\alpha$ 通常从一个中等值开始,并随时间逐渐减小。这使得在训练早期(当权重可能远离最优值时)能进行较大的调整,并在之后进行更精细的调整。通过将特征表示与梯度下降方法结合,我们现在可以在状态空间远超之前讨论的表格方法的那些问题上训练强化学习智能体。下一节将介绍如何使用非线性函数近似器,特别是神经网络,来处理状态和价值之间更复杂的关系。