跳转到正文

D.1.3 点积、范数与函数近似

前置知识E.1.1 向量与矩阵——需掌握向量和向量运算。E.1.2 贝尔曼矩阵形式——需掌握贝尔曼方程的矩阵形式


概述

上一篇推导了贝尔曼方程的矩阵形式 和闭式解 。这两个表达式在数学上简洁严谨,但遗留了一个实际困难:当状态空间极大时,价值表无法完整存储。围棋约有 个状态,矩阵 无法显式构造,价值向量 也无法逐个分量写出。

解决方案是用一个函数来近似价值:为状态提取特征,再用特征与权重的点积计算价值估计。本篇的核心公式是:

其中 是状态 的特征向量, 是需要学习的权重向量。点积的结果即为该状态的近似价值。

本篇前半部分用点积构建函数近似框架。引入函数近似后,训练过程需不断更新权重 ——更新的步长如何选择?如何度量"变化的幅度"?后半部分自然引出范数这一工具。以下从查表方法的局限开始展开。


查表方法的局限

先看一个具体对比:

环境状态空间大小能否存储
两状态小环境2可存储
GridWorld 10x10100可存储
围棋棋盘~10^170不可存储
连续状态(如机器人关节角度)无穷不可存储

第 3 章介绍的 DP、MC、TD 三类方法——无论是用贝尔曼方程直接求解、用完整轨迹的回报估计、还是每步即时更新——都共享一个前提:为每个状态存储一个 。第 4 章的 Q-Learning 延续了同一思路,只是将存储对象替换为每个 (状态, 动作) 对的

状态数量增长到一定程度后,"为每个状态单独存储一个数值"的方案便不再可行。解决路径是:放弃逐状态的独立存储,转用一个函数来统一近似。函数的输入是状态的特征,输出是对该状态价值的估计。


用特征与权重合成预测

最简单的函数近似方案:为状态提取一组特征,通过特征与权重的点积计算价值。

假设一个状态有三个特征:

这些特征可能分别表示"到目标的距离为 ""速度为 ""障碍物数量为 "。一个线性价值函数用三个权重表示:

于是状态价值的估计由点积给出:

点积的实质是:每个特征对最终预测的贡献由其对应的权重决定,所有贡献加总即得预测值 规定了各特征的相对重要性, 给出了当前状态在各特征上的取值,点积将两者合成一个标量预测。

第 3 章中提到的 可用相同方式近似:

其中 是 (状态, 动作) 对的特征向量。第 4 章的 DQN 将线性近似推广为神经网络——但无论线性还是深度模型,底层运算均为向量运算。

特征如何构造?

特征向量的构造取决于问题本身。以下是几种常见做法。

One-hot 编码(离散状态):

若状态集合为 ,则有:

状态特征向量
s_1[1, 0, 0]^T
s_2[0, 1, 0]^T
s_3[0, 0, 1]^T

使用 one-hot 特征时, 等价于直接取出 的第 个分量——与查表完全等价。换言之,查表是线性近似的特例。第 3 章的 Q-Learning 表格法,本质上就是采用了 one-hot 特征的线性近似。

手工特征(GridWorld):

在 GridWorld 中,状态 的特征可设计为:

这些特征包含了位置的归一化信息以及到目标的距离。

神经网络学到的特征

在深度 RL 中,特征不由人工设计,而是由神经网络自动学习。输入图像经过若干卷积层后得到一个向量 ,再由线性层计算 。第 4 章的 DQN 即遵循这一思路。

从查表到深度网络,是一条"特征自动化程度逐步提高"的演进路径:

无论采用何种方法,底层运算均以向量为核心。神经网络每一层执行矩阵乘法(即批量点积的推广),只是中间插入了非线性激活函数(如 ReLU),使整体具备拟合复杂函数的能力。

点积的几何意义

点积不单是"逐元素相乘再求和"的代数运算。在几何上:

其中 为两向量之间的夹角。由此可得:

  • 方向一致(),点积为正。
  • 若方向相反(),点积为负。
  • 若两者正交(),点积为零。

在 RL 的价值估计中,点积为正表明该状态在当前权重下的评估偏正向,为负则偏负向。 的方向编码了各特征的相对重要性, 的方向编码了该状态在各特征维度上的取值——两向量夹角越小,估值越高。


从预测到学习 与 权重的来源

至此,已知用点积 可以近似价值。但权重 从何而来?

答案是:通过训练学习。第 3 章中 TD 方法用 TD Error 更新价值估计:

函数近似下的训练逻辑与之完全类似——计算预测值与目标值之间的差距(损失),然后沿梯度方向更新权重:

其中 为梯度向量, 为学习率。

此公式引出一个新问题:梯度 作为一个向量,其大小是多少? 若梯度过大,参数一步跨越过远,训练可能不稳定;若梯度过小,学习又过于缓慢。要定量回答"一个向量的大小",就需要范数——衡量向量长度的数学工具。本节的目标公式是:

范数度量"多大",缩放限制"每步走多远"。以下从最常用的范数开始。


衡量向量的大小

最常用的是 L2 范数,其定义为勾股定理在任意维空间的推广:

对向量 ,其 L2 范数为:

该值与直角三角形的斜边长度一致——二维情形下 L2 范数退化为欧几里得距离。

L1 范数

同一向量 L1 范数为:

L1 范数是所有分量绝对值之和。相较于 L2,L1 对大分量的惩罚较轻(不做平方),对小分量则更为敏感。

L1 与 L2 与 选择依据

| 性质 | L2 范数 | L1 范数 | | ---------- | ---------------------- | -------------------- | --- | --- | | 公式 | \sqrt{\Sigma x_i^2} | \Sigma | x_i | | | 对大值响应 | 敏感(平方放大大分量) | 相对不敏感 | | 在 RL 中 | 梯度裁剪、权重衰减 | 稀疏正则化、特征选择 | | 典型用途 | max_grad_norm | L1 正则化 |

Frobenius 范数(矩阵范数)

向量的范数概念可推广至矩阵。Frobenius 范数是最常用的矩阵范数:

例如:

在 RL 中,Frobenius 范数常用于权重矩阵的正则化以及两矩阵差异的度量。


范数在训练中的直接应用

有了范数,就可以定量描述"梯度的大小"。训练神经网络时,若梯度范数过大,参数更新将极为剧烈,可能导致训练不稳定。梯度裁剪即用于限制这一长度。

具体数值示例

假设一次反向传播后,四个参数的梯度为:

其 L2 范数为:

若最大范数设为 ,则将梯度缩放为原来的 倍:

裁剪后的梯度范数恰为 。注意裁剪仅改变向量的长度,不改变其方向——梯度各分量按同一比例缩放。

这就是 RL 代码中 max_grad_norm 参数的数学含义。在 PyTorch 中:

python
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=5.0)

RL 中梯度裁剪的必要性

RL 的梯度来自策略梯度和时序差分估计,其噪声水平天然高于监督学习——原因在于数据来自不断变化的采样策略,而非固定的训练集。单条高回报轨迹可能产生极大梯度,导致参数剧烈变化,使下一步的策略与之前截然不同。第 5 章的 REINFORCE 算法即面临这一问题:其梯度估计的方差极大。梯度裁剪为这种波动设置一个硬上限,防止单步更新过度偏离。


从查表到函数近似

本篇的核心转换是:当状态空间过大无法逐项存储时,用特征与点积来近似价值

场景方法本质
状态较少(如 n < 1000)查表:为每个状态存储 v(s)one-hot + 点积
状态较多但特征已知线性近似:v(s) ≈ w^T x(s)手工特征 + 点积
状态复杂(图像、文本)深度网络:v(s) ≈ f_\theta(s)自动学习特征 + 非线性

无论采用何种方法,底层运算均以向量和点积为基础。神经网络每一层执行矩阵乘法,范数则是度量"大小"的统一工具,在梯度裁剪和正则化中均有应用。


函数近似之后 与 两个悬而未决的问题

本章解决了"状态空间过大如何存储"的问题:用点积近似价值,用范数量化更新幅度。

但引入函数近似后,尚有两个问题有待回答:

  1. 无论是查表还是函数近似,反复执行贝尔曼更新 是否会稳定收敛?第 3 章中 DP 方法"反复迭代直至收敛"——其收敛性是否有理论保证,还是可能发生震荡甚至发散?
  2. 第 3 章路线二的策略梯度更新 ,是否存在单步更新过大导致策略恶化的风险?梯度裁剪限制了步长,但它对所有方向一视同仁——某些方向上移动 可能影响甚微,另一些方向上移动 却可能使策略剧变。

这两个问题的共同本质是:需要分析"变化量"在不同方向上的行为差异。这便引出了特征值、谱半径和加权范数——下一篇的主题。

下一篇E.1.4 收敛性、特征值与信任域 —— 值迭代为何会稳定?参数更新如何考虑方向敏感度?

现代强化学习实战课程

个人非商业离线镜像 · 内容版权归 WalkingLabs 所有,依 CC BY-NC-SA 4.0 授权 · 查看原文