E.1.1 线性代数基础:向量与矩阵
前置知识:本篇不需要线性代数基础,但建议先读完附录导读中的"两状态贯穿例子"。
标量、集合与函数
标量是一个单独的数。奖励 是标量,折扣因子 也是标量。在 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 贝尔曼方程的矩阵形式 —— 将向量、矩阵和矩阵乘法组合起来,写出贝尔曼方程的矩阵形式。