跳转到正文

D.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.10.70.2
s₂0.00.30.7
s₃0.50.50.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 贝尔曼方程的矩阵形式 —— 将向量、矩阵和矩阵乘法组合起来,写出贝尔曼方程的矩阵形式。

现代强化学习实战课程

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