跳转到正文

D.1.1 向量与矩阵

如果你翻到这一附录,大概率是因为正文中某个公式让你卡住了——也许是贝尔曼方程里冒出来的期望符号,也许是 PPO 目标函数里那串 KL 散度,又或者是策略梯度定理里突然出现的梯度算子。

这些公式看起来吓人,但拆开来看,它们用到的数学工具并不多:标量、向量、矩阵、概率、期望、导数、梯度、熵和 KL 散度。如果你能理解这些词各自在说什么,再看它们如何组合成强化学习的公式,就不会觉得无从下手了。

本附录不会按算法来堆公式,而是按学数学的自然顺序来讲:先认识数学对象,再学运算和方程,然后进入概率、随机估计、优化,最后把这些工具组装回强化学习的完整推导。

学习路线

整个附录可以概括成一条线:

数学对象 → 线性运算 → 概率与期望 → 随机估计 → 递推方程 → 优化与梯度 → 分布距离 → 强化学习完整公式。

对应到具体文章如下。

本附录目录

主题重点问题
E.1 数学对象与线性代数标量、向量、矩阵、点积、范数、线性方程如何把状态、价值和参数写成可计算对象?
E.2 概率、期望与随机估计概率、条件概率、随机变量、期望、方差、采样随机轨迹如何变成平均价值?
E.3 微积分与优化导数、梯度、链式法则、Taylor 展开、优化算法参数应该朝哪个方向更新?
E.4 信息论与分布距离自信息、熵、交叉熵、KL、互信息如何衡量策略随机性和策略变化幅度?

建议阅读顺序

如果你想系统地把数学基础过一遍,可以按这个顺序来:

  1. E.1.1 向量与矩阵基础——先搞清楚标量、向量、矩阵、矩阵乘法这些基本对象。
  2. E.1.2 贝尔曼矩阵形式——看线性方程组怎么表达价值递推。
  3. E.2.1 概率、条件概率与期望——学习随机变量和期望。
  4. E.2.2 随机轨迹与状态价值——把期望用到回报和价值函数上。
  5. E.2.3 蒙特卡洛与重要性采样——不知道模型的时候,怎么用样本来估计。
  6. E.3.1 导数、梯度与链式法则——理解参数变化和反向传播。
  7. E.3.2 策略梯度与优势函数——把梯度用到策略优化上。
  8. E.4.1 自信息、熵与探索——理解策略的随机性。
  9. E.4.2 交叉熵与 KL——理解分布之间的距离。
  10. 最后回头读各节的"完整公式"和"公式速查与练习"。

当然,如果你只是想查某一个概念,直接跳到对应章节也完全没问题。

一个贯穿例子

后面几节会反复用到一个最小的两状态例子。环境只有两个状态

  • ,智能体获得奖励 ,然后转到
  • ,智能体获得奖励 ,然后转回
  • 折扣因子取

设两个状态的价值分别为 ,直觉上可以写出:

这个例子会在不同章节里扮演不同角色:

  • 在线性代数中,它是一个二元线性方程组。
  • 在概率统计中,它是"即时奖励 + 下一状态期望价值"。
  • 在随机估计中,它可以通过采样轨迹来近似。
  • 在优化中,它会变成价值网络或策略网络的训练目标。
  • 在信息论中,它会连接到策略分布、探索和更新约束。

只要你能把复杂公式翻译回这个两状态的小例子,数学就会从障碍变成工具。

如何使用这个附录

左侧目录分成了四个数学模块,不需要一次读完。根据你的情况,有三种用法:

  1. 系统补课。 从 E.1.1 开始顺序读,适合想从头把数学基础过一遍的读者。
  2. 按需查阅。 看不懂贝尔曼矩阵形式,就去读 E.1.2;看不懂 GAE,就去读 E.2.4 和 E.3.5;看不懂 KL 约束,就去读 E.4.2。
  3. 快速复习。 每个模块最后都有"公式与练习",适合学完之后检查自己是否真正理解。

如果觉得侧栏条目太多,可以先只读每个模块的第一篇:

读完这四篇,再根据正文中遇到的公式回到对应专题深入即可。

第 3 章介绍了贝尔曼方程 ,它描述了单个状态的价值。但在实际计算中需要依次解决三个问题:如何同时表达所有状态的方程、状态空间过大时如何近似、如何保证迭代过程的稳定性。E.1 模块展示每个问题对应的线性代数工具,以及它们如何逐层组合。

两状态贝尔曼方程示意图

内容概览

问题困难引入的数学工具关键公式对应第3章
方程数量过多1000 个状态 = 1000 个方程向量、矩阵、线性方程组v = (I − γP)⁻¹rDP 的数学本质
状态空间过大状态太多存不下价值表点积、范数、函数近似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.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 贝尔曼方程的矩阵形式 —— 将向量、矩阵和矩阵乘法组合起来,写出贝尔曼方程的矩阵形式。

现代强化学习实战课程