Skip to content

E.1.1 线性代数基础:向量与矩阵

前置知识:本篇不需要线性代数基础,但建议先读完附录导读中的"两状态贯穿例子"。


标量、集合与函数

标量是一个单独的数。奖励 r=2r=2 是标量,折扣因子 γ=0.9\gamma=0.9 也是标量。在 RL 中,以下这些值都是标量:

符号含义典型值
r即时奖励2、−1、0.5
γ折扣因子0.9、0.99、0.5
α学习率0.001、3×10⁻⁴
ε探索率或裁剪范围0.1、0.2

标量给出了奖励的数值。环境的另一个基本要素是状态——所有可能状态的全体构成一个集合

集合将所有可能的元素列举在大括号中。例如一个小环境有三个状态、两个动作:

S={s1,s2,s3},A={left,right}.\mathcal{S}=\{s_1,s_2,s_3\}, \qquad \mathcal{A}=\{\text{left},\text{right}\}.

花体字母 S\mathcal{S}A\mathcal{A} 是约定俗成,写成 SSAA 也不影响含义。当讨论"状态 ss 下的价值"时,ss 必须取自某个集合 S\mathcal{S}

集合定义了可用状态,进一步需要为每个状态指定一个值,这引入了函数

价值函数接受一个状态,返回一个数:

v:SR,sv(s).v:\mathcal{S}\to\mathbb{R}, \qquad s\mapsto v(s).

符号含义:

  • v:SRv:\mathcal{S}\to\mathbb{R} 表示"vv 是从 S\mathcal{S}R\mathbb{R} 的函数"——冒号表示类型声明,箭头表示从定义域到值域。R\mathbb{R} 代表实数集。
  • sv(s)s\mapsto v(s) 表示输入 ss 映射到输出 v(s)v(s)

整体含义:给定一个状态 ss,返回一个数 v(s)v(s)。例如 v(s1)=3v(s_1)=3 表示状态 s1s_1 的价值是 33

策略函数类似,输入是状态和动作的组合,输出是概率:

π:S×A[0,1],(s,a)π(as).\pi:\mathcal{S}\times\mathcal{A}\to[0,1], \qquad (s,a)\mapsto\pi(a\mid s).

其中:

  • S×A\mathcal{S}\times\mathcal{A} 中的 ×\times 表示笛卡尔积——所有状态-动作对的集合。
  • [0,1][0,1] 表示值域是 0011 之间的实数,因为概率取值在此区间。
  • (s,a)π(as)(s,a)\mapsto\pi(a\mid s) 表示输入状态-动作对,输出在状态 ss 下选择动作 aa 的概率。

函数要求同一个输入只能对应一个输出。v(s)v(s) 对每个状态只给出一个值,满足这一要求。状态转移 p(ss,a)p(s'\mid s,a) 也是函数——输入"当前状态、动作、下一状态",返回转移概率。

标量、集合、函数处理的都是"一对一"的关系:一个状态对应一个价值,一个状态-动作对对应一个概率。但强化学习常需要同时处理大量状态——当环境有上千个状态时,逐个写出 v(si)v(s_i) 的值将十分繁琐。将所有状态的价值排成一列,作为一个整体来操作,这就是向量


向量

一个环境有三个状态,当前价值估计如下:

状态价值
s₁3
s₂5
s₃2

将所有数排成一列,作为一个整体来操作:

v=[352].\boldsymbol{v} = \begin{bmatrix} 3 \\ 5 \\ 2 \end{bmatrix}.

方括号中的三个数是向量的分量v\boldsymbol{v} 用粗体表示它是一个向量,区别于单个标量。引入向量后,可以对"所有状态的价值"同时做运算。

加法。 假设每个状态获得额外奖励 11,等价于给每个分量加上 11

vnew=[352]+[111]=[463].\boldsymbol{v}_{new} = \begin{bmatrix} 3 \\ 5 \\ 2 \end{bmatrix} + \begin{bmatrix} 1 \\ 1 \\ 1 \end{bmatrix} = \begin{bmatrix} 4 \\ 6 \\ 3 \end{bmatrix}.

向量加法是逐分量相加。这要求两个向量的长度相同——长度不同的向量不能相加。

数乘。 将向量的每个分量同时乘以一个标量。例如应用折扣因子 γ=0.5\gamma=0.5

γv=0.5×[352]=[1.52.51.0].\gamma\boldsymbol{v} = 0.5 \times \begin{bmatrix} 3 \\ 5 \\ 2 \end{bmatrix} = \begin{bmatrix} 1.5 \\ 2.5 \\ 1.0 \end{bmatrix}.

这对应"未来价值打折扣"。在贝尔曼方程 v=r+γPvv = r + \gamma P v 中,γv\gamma v 就是这一步——将未来价值按折扣因子缩放后加到即时奖励上。

向量能表示"所有状态的价值",但无法表示"状态之间如何转移"。从 s1s_1 出发可能到 s2s_2 也可能到 s3s_3,这种"从哪个状态到哪个状态、概率多少"的关系,需要矩阵来描述。


矩阵

考虑两个状态 s1,s2s_1, s_2 的情形:

  • s1s_1 出发,下一步一定到 s2s_2
  • s2s_2 出发,下一步一定到 s1s_1

这个转移关系写成矩阵:

P=[0110].P = \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix}.

矩阵的行对应"从哪个状态出发",列对应"下一步到哪个状态"。第一行 [0,1][0, 1] 表示:从 s1s_1 出发,到 s1s_1 的概率是 00,到 s2s_2 的概率是 11。第二行 [1,0][1, 0] 同理。

若当前两个状态的价值为:

v=[3.332.67],\boldsymbol{v} = \begin{bmatrix} 3.33 \\ 2.67 \end{bmatrix},

v\boldsymbol{v} 的第一个分量是 s1s_1 的价值,第二个分量是 s2s_2 的价值。转移矩阵的每一行是"下一步到各个状态的概率分布"。一行乘以 v\boldsymbol{v},就是把可能到达的下一状态价值按概率加权求和:

从 s1 出发的下一状态价值=0×v(s1)+1×v(s2)=2.67,\text{从 }s_1\text{ 出发的下一状态价值} = 0 \times v(s_1) + 1 \times v(s_2) = 2.67,

从 s2 出发的下一状态价值=1×v(s1)+0×v(s2)=3.33.\text{从 }s_2\text{ 出发的下一状态价值} = 1 \times v(s_1) + 0 \times v(s_2) = 3.33.

将两行的结果放回向量,得到 PvP\boldsymbol{v}——"从每个当前状态出发,下一状态价值的期望":

Pv=[0110][3.332.67]=[2.673.33].P\boldsymbol{v} = \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix} \begin{bmatrix} 3.33 \\ 2.67 \end{bmatrix} = \begin{bmatrix} 2.67 \\ 3.33 \end{bmatrix}.

结果符合预期:从 s1s_1 下一步到 s2s_2,未来价值是 2.672.67;从 s2s_2 下一步到 s1s_1,未来价值是 3.333.33

一般情形

推广到三个状态,转移关系如下:

当前状态→ s₁→ s₂→ s₃
s₁0.10.70.2
s₂0.00.30.7
s₃0.50.50.0

写成矩阵:

P=[0.10.70.20.00.30.70.50.50.0].P = \begin{bmatrix} 0.1 & 0.7 & 0.2 \\ 0.0 & 0.3 & 0.7 \\ 0.5 & 0.5 & 0.0 \end{bmatrix}.

矩阵的行数和列数都等于状态数 nn。从 2 个状态到 3 个状态,矩阵从 2×22\times2 变成 3×33\times3,结构不变:第 ii 行始终表示"从 sis_i 出发,去各个状态的概率"。这一结构对任意数量的状态都成立。


矩阵乘法与概率加权

前文将状态价值排成向量,将状态转移排成矩阵。本节分析矩阵乘法的具体运算,并解释它为何恰好对应"概率加权求和"。

A=[1234],x=[1020].A= \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}, \qquad x= \begin{bmatrix} 10 \\ 20 \end{bmatrix}.

Ax=[1×10+2×203×10+4×20]=[50110].Ax= \begin{bmatrix} 1\times10+2\times20 \\ 3\times10+4\times20 \end{bmatrix} = \begin{bmatrix} 50 \\ 110 \end{bmatrix}.

矩阵的每一行与向量做一次点积——矩阵乘向量就是多组加权求和。

概率加权的特例

在强化学习中,转移矩阵 PP 乘价值向量 vv 时,第 ii 行表示:从状态 sis_i 出发,各下一状态的价值按转移概率加权平均。

具体例子:

P=[0.70.30.20.8],v=[105].P= \begin{bmatrix} 0.7 & 0.3 \\ 0.2 & 0.8 \end{bmatrix}, \qquad v= \begin{bmatrix} 10 \\ 5 \end{bmatrix}.

Pv=[0.7×10+0.3×50.2×10+0.8×5]=[8.56].Pv= \begin{bmatrix} 0.7\times10+0.3\times5 \\ 0.2\times10+0.8\times5 \end{bmatrix} = \begin{bmatrix} 8.5 \\ 6 \end{bmatrix}.

第一行 0.7×10+0.3×5=8.50.7\times10+0.3\times5=8.5 的含义:从 s1s_1 出发,有 70%70\% 概率到达价值为 1010 的状态、30%30\% 概率到达价值为 55 的状态,未来期望价值是 8.58.5

这里的关键性质是:矩阵的每一行是一组概率(行和为 11),因此矩阵乘法恰好实现"概率 × 价值"的加权平均。贝尔曼方程 v=r+γPvv = r + \gamma Pv 本质上就是"即时奖励 + 折扣后的概率加权未来价值"。

矩阵乘法并不限于概率矩阵。在神经网络中,权重矩阵的行和通常不是 11,但矩阵乘法本质上仍是加权求和。概率加权只是矩阵乘法的一个特例。


维度检查

判断线性代数公式是否正确,最简单的方式是检查维度。

nn 个状态时,价值向量:

vRn.v\in\mathbb{R}^n.

状态转移矩阵:

PRn×n.P\in\mathbb{R}^{n\times n}.

因此 PvPv 的形状:

(n×n)(n×1)=n×1.(n\times n)(n\times1)=n\times1.

结果仍是一个价值向量。于是

v=r+γPvv=r+\gamma Pv

左右两边形状一致,公式才有意义。

神经网络中的形状检查

如果线性 Q 函数写作

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

wwϕ(s,a)\phi(s,a) 必须长度相同。若 wRdw\in\mathbb{R}^d,则 ϕ(s,a)Rd\phi(s,a)\in\mathbb{R}^d,点积结果才是标量。

在神经网络中形状检查同样重要。考虑一个简单的两层网络:

输入(状态特征)128 维 → 隐藏层 64 维 → 输出(动作概率)2 维

权重矩阵的形状:

权重矩阵形状
第 1 层W₁128 × 64
第 2 层W₂64 × 2

前向传播:

h=σ(W1x),z=W2h.h = \sigma(W_1^\top x), \qquad z = W_2^\top h.

W1W_1128×64128\times64,输入 xx128×1128\times1W1xW_1^\top x64×164\times1,中间隐藏层 hh 也是 64×164\times1W2W_264×264\times2W2hW_2^\top h2×12\times1,正好是两个动作的 logit。

维度检查是阅读论文和写代码时的一种有效验证手段——许多公式看似复杂,但检查输入输出维度就能判断其合理性。

常见误区

矩阵乘法中,(A×B)(B×C)=A×C(A \times B)(B \times C) = A \times C,中间维度必须一致。如果代码中遇到 RuntimeError: mat1 and mat2 shapes cannot be multiplied,通常是某个张量的维度搞错了。


小结

本篇建立了线性代数的五个基本对象:

对象RL 角色例子
标量单个奖励、超参数r=2,γ=0.9
集合可能的状态、可能的动作S=s1,s2S={s_1, s_2}
函数价值函数、策略函数v(s),π(a|s)
向量所有状态的价值放在一起v=[3, 5, 2]ᵀ
矩阵所有状态之间的转移关系P ∈ ℝⁿˣⁿ

这些对象之间的关系:标量组成向量,向量构成矩阵,矩阵乘向量实现概率加权。下一篇将这些对象组合成完整的方程组——贝尔曼方程的矩阵形式 v=r+γPvv = r + \gamma Pv

下一篇E.1.2 贝尔曼方程的矩阵形式 —— 将向量、矩阵和矩阵乘法组合起来,写出贝尔曼方程的矩阵形式。

Built for reusable bilingual course delivery