Skip to content

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

前置知识E.1.1 向量与矩阵——需掌握向量和向量运算。E.1.2 贝尔曼矩阵形式——需掌握贝尔曼方程的矩阵形式 v=r+γPv\boldsymbol{v} = \boldsymbol{r} + \gamma P\boldsymbol{v}


概述

上一篇推导了贝尔曼方程的矩阵形式 v=r+γPv\boldsymbol{v} = \boldsymbol{r} + \gamma P\boldsymbol{v} 和闭式解 v=(IγP)1r\boldsymbol{v} = (I-\gamma P)^{-1}\boldsymbol{r}。这两个表达式在数学上简洁严谨,但遗留了一个实际困难:当状态空间极大时,价值表无法完整存储。围棋约有 1017010^{170} 个状态,矩阵 PP 无法显式构造,价值向量 v\boldsymbol{v} 也无法逐个分量写出。

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

v^(s)=wx(s)\boxed{\hat{v}(s) = \boldsymbol{w}^\top \boldsymbol{x}(s)}

其中 x(s)\boldsymbol{x}(s) 是状态 ss 的特征向量,w\boldsymbol{w} 是需要学习的权重向量。点积的结果即为该状态的近似价值。

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


查表方法的局限

先看一个具体对比:

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

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

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


点积:用特征与权重合成预测

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

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

x(s)=[10.52].\boldsymbol{x}(s) = \begin{bmatrix} 1 \\ 0.5 \\ 2 \end{bmatrix}.

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

w=[0.21.00.1].\boldsymbol{w} = \begin{bmatrix} 0.2 \\ 1.0 \\ -0.1 \end{bmatrix}.

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

v^(s)=wx(s)=0.2×1+1.0×0.5+(0.1)×2=0.5.\hat{v}(s) = \boldsymbol{w}^\top \boldsymbol{x}(s) = 0.2 \times 1 + 1.0 \times 0.5 + (-0.1) \times 2 = 0.5.

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

第 3 章中提到的 Q(s,a)Q(s,a) 可用相同方式近似:

Q(s,a)=wϕ(s,a),Q(s,a) = \boldsymbol{w}^\top\phi(s,a),

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

特征如何构造?

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

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

若状态集合为 {s1,s2,s3}\{s_1, s_2, s_3\},则有:

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

使用 one-hot 特征时,wx(s)\boldsymbol{w}^\top \boldsymbol{x}(s) 等价于直接取出 w\boldsymbol{w} 的第 ii 个分量——与查表完全等价。换言之,查表是线性近似的特例。第 3 章的 Q-Learning 表格法,本质上就是采用了 one-hot 特征的线性近似。

手工特征(GridWorld):

在 GridWorld 中,状态 (r,c)(r, c) 的特征可设计为:

x(s)=[r/cmax,  c/rmax,  dist_to_goal].\boldsymbol{x}(s) = [r/c_{max},\; c/r_{max},\; \text{dist\_to\_goal}]^\top.

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

神经网络学到的特征

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

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

查表(one-hot)    线性近似(手工特征)    深度网络(自动特征)\text{查表(one-hot)} \;\to\; \text{线性近似(手工特征)} \;\to\; \text{深度网络(自动特征)}

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

点积的几何意义

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

wx=wxcosθ.\boldsymbol{w}^\top \boldsymbol{x} = \|\boldsymbol{w}\| \|\boldsymbol{x}\| \cos\theta.

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

  • w\boldsymbol{w}x\boldsymbol{x} 方向一致(cosθ>0\cos\theta > 0),点积为正。
  • 若方向相反(cosθ<0\cos\theta < 0),点积为负。
  • 若两者正交(cosθ=0\cos\theta = 0),点积为零。

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


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

至此,已知用点积 v^(s)=wx(s)\hat{v}(s) = \boldsymbol{w}^\top \boldsymbol{x}(s) 可以近似价值。但权重 w\boldsymbol{w} 从何而来?

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

V(s)V(s)+α[r+γV(s)V(s)].V(s) \leftarrow V(s) + \alpha\left[r + \gamma V(s') - V(s)\right].

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

wwαg,\boldsymbol{w} \leftarrow \boldsymbol{w} - \alpha \boldsymbol{g},

其中 g\boldsymbol{g} 为梯度向量,α\alpha 为学习率。

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

g2=igi2若 g2>c,则缩放至 c\boxed{\|\boldsymbol{g}\|_2 = \sqrt{\sum_i g_i^2} \quad\longrightarrow\quad \text{若 }\|\boldsymbol{g}\|_2 > c\text{,则缩放至 }c}

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


范数:衡量向量的大小

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

x2=ixi2.\|\boldsymbol{x}\|_2 = \sqrt{\sum_i x_i^2}.

对向量 [3,4][3, 4]^\top,其 L2 范数为:

[3,4]2=32+42=5.\|[3, 4]^\top\|_2 = \sqrt{3^2 + 4^2} = 5.

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

L1 范数

同一向量 [3,4][3, 4]^\topL1 范数为:

[3,4]1=3+4=7.\|[3, 4]^\top\|_1 = |3| + |4| = 7.

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

L1 与 L2:选择依据

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

Frobenius 范数(矩阵范数)

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

AF=i,jAij2.\|A\|_F = \sqrt{\sum_{i,j} A_{ij}^2}.

例如:

A=[1234],AF=1+4+9+16=305.48.A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}, \qquad \|A\|_F = \sqrt{1+4+9+16} = \sqrt{30} \approx 5.48.

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


梯度裁剪:范数在训练中的直接应用

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

具体数值示例

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

g=[12583].\boldsymbol{g} = \begin{bmatrix} 12 \\ 5 \\ -8 \\ 3 \end{bmatrix}.

其 L2 范数为:

g2=144+25+64+9=24215.56.\|\boldsymbol{g}\|_2 = \sqrt{144 + 25 + 64 + 9} = \sqrt{242} \approx 15.56.

若最大范数设为 55,则将梯度缩放为原来的 5/15.560.3215/15.56 \approx 0.321 倍:

gclipped=0.321[12583][3.851.612.570.96].\boldsymbol{g}_{clipped} = 0.321 \begin{bmatrix} 12 \\ 5 \\ -8 \\ 3 \end{bmatrix} \approx \begin{bmatrix} 3.85 \\ 1.61 \\ -2.57 \\ 0.96 \end{bmatrix}.

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

这就是 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. 无论是查表还是函数近似,反复执行贝尔曼更新 vk+1=r+γPvkv_{k+1} = r + \gamma Pv_k 是否会稳定收敛?第 3 章中 DP 方法"反复迭代直至收敛"——其收敛性是否有理论保证,还是可能发生震荡甚至发散?
  2. 第 3 章路线二的策略梯度更新 θθ+αθJ(θ)\theta \leftarrow \theta + \alpha\nabla_\theta J(\theta),是否存在单步更新过大导致策略恶化的风险?梯度裁剪限制了步长,但它对所有方向一视同仁——某些方向上移动 0.10.1 可能影响甚微,另一些方向上移动 0.10.1 却可能使策略剧变。

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

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

Built for reusable bilingual course delivery