D.1.1 向量与矩阵
如果你翻到这一附录,大概率是因为正文中某个公式让你卡住了——也许是贝尔曼方程里冒出来的期望符号,也许是 PPO 目标函数里那串 KL 散度,又或者是策略梯度定理里突然出现的梯度算子。
这些公式看起来吓人,但拆开来看,它们用到的数学工具并不多:标量、向量、矩阵、概率、期望、导数、梯度、熵和 KL 散度。如果你能理解这些词各自在说什么,再看它们如何组合成强化学习的公式,就不会觉得无从下手了。
本附录不会按算法来堆公式,而是按学数学的自然顺序来讲:先认识数学对象,再学运算和方程,然后进入概率、随机估计、优化,最后把这些工具组装回强化学习的完整推导。
学习路线
整个附录可以概括成一条线:
数学对象 → 线性运算 → 概率与期望 → 随机估计 → 递推方程 → 优化与梯度 → 分布距离 → 强化学习完整公式。
对应到具体文章如下。
本附录目录
| 节 | 主题 | 重点问题 |
|---|---|---|
| E.1 数学对象与线性代数 | 标量、向量、矩阵、点积、范数、线性方程 | 如何把状态、价值和参数写成可计算对象? |
| E.2 概率、期望与随机估计 | 概率、条件概率、随机变量、期望、方差、采样 | 随机轨迹如何变成平均价值? |
| E.3 微积分与优化 | 导数、梯度、链式法则、Taylor 展开、优化算法 | 参数应该朝哪个方向更新? |
| E.4 信息论与分布距离 | 自信息、熵、交叉熵、KL、互信息 | 如何衡量策略随机性和策略变化幅度? |
建议阅读顺序
如果你想系统地把数学基础过一遍,可以按这个顺序来:
- E.1.1 向量与矩阵基础——先搞清楚标量、向量、矩阵、矩阵乘法这些基本对象。
- E.1.2 贝尔曼矩阵形式——看线性方程组怎么表达价值递推。
- E.2.1 概率、条件概率与期望——学习随机变量和期望。
- E.2.2 随机轨迹与状态价值——把期望用到回报和价值函数上。
- E.2.3 蒙特卡洛与重要性采样——不知道模型的时候,怎么用样本来估计。
- E.3.1 导数、梯度与链式法则——理解参数变化和反向传播。
- E.3.2 策略梯度与优势函数——把梯度用到策略优化上。
- E.4.1 自信息、熵与探索——理解策略的随机性。
- E.4.2 交叉熵与 KL——理解分布之间的距离。
- 最后回头读各节的"完整公式"和"公式速查与练习"。
当然,如果你只是想查某一个概念,直接跳到对应章节也完全没问题。
一个贯穿例子
后面几节会反复用到一个最小的两状态例子。环境只有两个状态 和 :
- 在 ,智能体获得奖励 ,然后转到 。
- 在 ,智能体获得奖励 ,然后转回 。
- 折扣因子取 。
设两个状态的价值分别为 ,直觉上可以写出:
这个例子会在不同章节里扮演不同角色:
- 在线性代数中,它是一个二元线性方程组。
- 在概率统计中,它是"即时奖励 + 下一状态期望价值"。
- 在随机估计中,它可以通过采样轨迹来近似。
- 在优化中,它会变成价值网络或策略网络的训练目标。
- 在信息论中,它会连接到策略分布、探索和更新约束。
只要你能把复杂公式翻译回这个两状态的小例子,数学就会从障碍变成工具。
如何使用这个附录
左侧目录分成了四个数学模块,不需要一次读完。根据你的情况,有三种用法:
- 系统补课。 从 E.1.1 开始顺序读,适合想从头把数学基础过一遍的读者。
- 按需查阅。 看不懂贝尔曼矩阵形式,就去读 E.1.2;看不懂 GAE,就去读 E.2.4 和 E.3.5;看不懂 KL 约束,就去读 E.4.2。
- 快速复习。 每个模块最后都有"公式与练习",适合学完之后检查自己是否真正理解。
如果觉得侧栏条目太多,可以先只读每个模块的第一篇:
读完这四篇,再根据正文中遇到的公式回到对应专题深入即可。
第 3 章介绍了贝尔曼方程 ,它描述了单个状态的价值。但在实际计算中需要依次解决三个问题:如何同时表达所有状态的方程、状态空间过大时如何近似、如何保证迭代过程的稳定性。E.1 模块展示每个问题对应的线性代数工具,以及它们如何逐层组合。
内容概览
| 问题 | 困难 | 引入的数学工具 | 关键公式 | 对应第3章 |
|---|---|---|---|---|
| 方程数量过多 | 1000 个状态 = 1000 个方程 | 向量、矩阵、线性方程组 | v = (I − γP)⁻¹r | DP 的数学本质 |
| 状态空间过大 | 状态太多存不下价值表 | 点积、范数、函数近似 | v̂(s) = wᵀ**x **(s) | DQN 的数学本质 |
| 训练稳定性 | 训练可能发散/爆炸/偏移 | 特征值、加权范数、信任域 | ρ(γP) ≤ γ < 1,ΔθᵀFΔθ ≤ δ | PPO 的数学本质 |
阅读路线
| 文章 | 要回答的问题 | 对应问题 |
|---|---|---|
| E.1.1 标量、向量与矩阵 | 状态、价值和转移关系怎么用数学对象表示? | 方程数量过多(基础) |
| E.1.2 贝尔曼方程的矩阵形式 | 1000 个贝尔曼方程能不能压缩成一个? | 方程数量过多 |
| E.1.3 点积、范数与函数近似 | 状态太多存不下怎么办?怎么衡量更新步子有多大? | 状态空间过大 |
| E.1.4 收敛性、特征值与信任域 | 训练会不会爆炸?怎么安全地更新参数? | 训练稳定性 |
| E.1.5 公式速查与练习 | 回到第 3 章再看一遍 | 全景回顾 |
建议按顺序从 E.1.1 读到 E.1.4,然后用 E.1.5 做回顾和练习。如果某个概念已经熟悉,可以直接跳到对应文章。
前置知识:本篇不需要线性代数基础。建议先读完前文的“两状态贯穿例子”。
标量、集合与函数
标量是一个单独的数。奖励 是标量,折扣因子 也是标量。在 RL 中,以下这些值都是标量:
| 符号 | 含义 | 典型值 |
|---|---|---|
| r | 即时奖励 | 2、−1、0.5 |
| γ | 折扣因子 | 0.9、0.99、0.5 |
| α | 学习率 | 0.001、3×10⁻⁴ |
| ε | 探索率或裁剪范围 | 0.1、0.2 |
标量给出了奖励的数值。环境的另一个基本要素是状态——所有可能状态的全体构成一个集合。
集合将所有可能的元素列举在大括号中。例如一个小环境有三个状态、两个动作:
花体字母 和 是约定俗成,写成 和 也不影响含义。当讨论"状态 下的价值"时, 必须取自某个集合 。
集合定义了可用状态,进一步需要为每个状态指定一个值,这引入了函数。
价值函数接受一个状态,返回一个数:
符号含义:
- 表示" 是从 到 的函数"——冒号表示类型声明,箭头表示从定义域到值域。 代表实数集。
- 表示输入 映射到输出 。
整体含义:给定一个状态 ,返回一个数 。例如 表示状态 的价值是 。
策略函数类似,输入是状态和动作的组合,输出是概率:
其中:
- 中的 表示笛卡尔积——所有状态-动作对的集合。
- 表示值域是 到 之间的实数,因为概率取值在此区间。
- 表示输入状态-动作对,输出在状态 下选择动作 的概率。
函数要求同一个输入只能对应一个输出。 对每个状态只给出一个值,满足这一要求。状态转移 也是函数——输入"当前状态、动作、下一状态",返回转移概率。
标量、集合、函数处理的都是"一对一"的关系:一个状态对应一个价值,一个状态-动作对对应一个概率。但强化学习常需要同时处理大量状态——当环境有上千个状态时,逐个写出 的值将十分繁琐。将所有状态的价值排成一列,作为一个整体来操作,这就是向量。
向量
一个环境有三个状态,当前价值估计如下:
| 状态 | 价值 |
|---|---|
| s₁ | 3 |
| s₂ | 5 |
| s₃ | 2 |
将所有数排成一列,作为一个整体来操作:
方括号中的三个数是向量的分量。 用粗体表示它是一个向量,区别于单个标量。引入向量后,可以对"所有状态的价值"同时做运算。
加法。 假设每个状态获得额外奖励 ,等价于给每个分量加上 :
向量加法是逐分量相加。这要求两个向量的长度相同——长度不同的向量不能相加。
数乘。 将向量的每个分量同时乘以一个标量。例如应用折扣因子 :
这对应"未来价值打折扣"。在贝尔曼方程 中, 就是这一步——将未来价值按折扣因子缩放后加到即时奖励上。
向量能表示"所有状态的价值",但无法表示"状态之间如何转移"。从 出发可能到 也可能到 ,这种"从哪个状态到哪个状态、概率多少"的关系,需要矩阵来描述。
矩阵
考虑两个状态 的情形:
- 从 出发,下一步一定到 。
- 从 出发,下一步一定到 。
这个转移关系写成矩阵:
矩阵的行对应"从哪个状态出发",列对应"下一步到哪个状态"。第一行 表示:从 出发,到 的概率是 ,到 的概率是 。第二行 同理。
若当前两个状态的价值为:
的第一个分量是 的价值,第二个分量是 的价值。转移矩阵的每一行是"下一步到各个状态的概率分布"。一行乘以 ,就是把可能到达的下一状态价值按概率加权求和:
将两行的结果放回向量,得到 ——"从每个当前状态出发,下一状态价值的期望":
结果符合预期:从 下一步到 ,未来价值是 ;从 下一步到 ,未来价值是 。
一般情形
推广到三个状态,转移关系如下:
| 当前状态 | → s₁ | → s₂ | → s₃ |
|---|---|---|---|
| s₁ | 0.1 | 0.7 | 0.2 |
| s₂ | 0.0 | 0.3 | 0.7 |
| s₃ | 0.5 | 0.5 | 0.0 |
写成矩阵:
矩阵的行数和列数都等于状态数 。从 2 个状态到 3 个状态,矩阵从 变成 ,结构不变:第 行始终表示"从 出发,去各个状态的概率"。这一结构对任意数量的状态都成立。
矩阵乘法与概率加权
前文将状态价值排成向量,将状态转移排成矩阵。本节分析矩阵乘法的具体运算,并解释它为何恰好对应"概率加权求和"。
设
则
矩阵的每一行与向量做一次点积——矩阵乘向量就是多组加权求和。
概率加权的特例
在强化学习中,转移矩阵 乘价值向量 时,第 行表示:从状态 出发,各下一状态的价值按转移概率加权平均。
具体例子:
则
第一行 的含义:从 出发,有 概率到达价值为 的状态、 概率到达价值为 的状态,未来期望价值是 。
这里的关键性质是:矩阵的每一行是一组概率(行和为 ),因此矩阵乘法恰好实现"概率 × 价值"的加权平均。贝尔曼方程 本质上就是"即时奖励 + 折扣后的概率加权未来价值"。
矩阵乘法并不限于概率矩阵。在神经网络中,权重矩阵的行和通常不是 ,但矩阵乘法本质上仍是加权求和。概率加权只是矩阵乘法的一个特例。
维度检查
判断线性代数公式是否正确,最简单的方式是检查维度。
有 个状态时,价值向量:
状态转移矩阵:
因此 的形状:
结果仍是一个价值向量。于是
左右两边形状一致,公式才有意义。
神经网络中的形状检查
如果线性 Q 函数写作
则 和 必须长度相同。若 ,则 ,点积结果才是标量。
在神经网络中形状检查同样重要。考虑一个简单的两层网络:
输入(状态特征)128 维 → 隐藏层 64 维 → 输出(动作概率)2 维权重矩阵的形状:
| 层 | 权重矩阵 | 形状 |
|---|---|---|
| 第 1 层 | W₁ | 128 × 64 |
| 第 2 层 | W₂ | 64 × 2 |
前向传播:
是 ,输入 是 , 是 ,中间隐藏层 也是 。 是 , 是 ,正好是两个动作的 logit。
维度检查是阅读论文和写代码时的一种有效验证手段——许多公式看似复杂,但检查输入输出维度就能判断其合理性。
常见误区
矩阵乘法中,,中间维度必须一致。如果代码中遇到 RuntimeError: mat1 and mat2 shapes cannot be multiplied,通常是某个张量的维度搞错了。
小结
本篇建立了线性代数的五个基本对象:
| 对象 | RL 角色 | 例子 |
|---|---|---|
| 标量 | 单个奖励、超参数 | r=2,γ=0.9 |
| 集合 | 可能的状态、可能的动作 | |
| 函数 | 价值函数、策略函数 | v(s),π(a|s) |
| 向量 | 所有状态的价值放在一起 | v=[3, 5, 2]ᵀ |
| 矩阵 | 所有状态之间的转移关系 | P ∈ ℝⁿˣⁿ |
这些对象之间的关系:标量组成向量,向量构成矩阵,矩阵乘向量实现概率加权。下一篇将这些对象组合成完整的方程组——贝尔曼方程的矩阵形式 。
下一篇:E.1.2 贝尔曼方程的矩阵形式 —— 将向量、矩阵和矩阵乘法组合起来,写出贝尔曼方程的矩阵形式。