不确定性的线性代数
第 2.6.3 节 介绍了一张表,记录每一对不确定量之间的协方差,即协方差矩阵。目标函数在已评估的每个输入、以及正在考虑的每个输入处都有一个值,贝叶斯优化器为这些值保存这样一张表,因此 50 次评估之后,这张表至少有 50 行。信念的每一次更新、每一次预测、对模型自身设置的每一次拟合,都是在这张表上的计算。本章讨论的就是这些计算。
线性代数是一门很大的学科,本章只选取本书后文用到的部分。本章把矩阵看作移动空间中各点的映射,因为这一图景能够解释几个关键性质:哪些表可以是协方差矩阵,协方差赋予一团不确定性什么样的形状,如何完全不求逆矩阵而解出高斯过程的方程,以及行列式衡量的是什么。大部分直觉可以由二维的图建立,但有几个事实要到三维才会出现,因此本章还将让读者亲手转动一个三维协方差。
这些内容的作用在下一章第 4 章 中显现:这里的每个结果都会成为关于高斯分布的结论;在第 8 章 中,这些结论又转化为一个算法。
3.1 向量 #
向量 (vector)是一组有序的数。向量用粗体小写字母表示,按惯例写成列的形式:
x = [ x 1 x 2 ⋮ x d ] ∈ R d . \vx = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_d \end{bmatrix} \in \R^d. x = x 1 x 2 ⋮ x d ∈ R d .
符号 R d \R^d R d 表示由 d d d 个实数组成的所有这类列表的集合,d d d 称为向量的维度 (dimension)。写成 x ⊤ = ( x 1 , … , x d ) \vx^\T = (x_1, \dots, x_d) x ⊤ = ( x 1 , … , x d ) (读作“x \vx x 转置”),列就变成了行。
向量在本书中有两种用法,区分二者可以避免一个常见的混淆。第一种用法中,向量是搜索空间中的一个点:一组超参数配置、一套外骨骼的设置、一个照片滤镜的参数。例如,Snoek 等人(2012) 同时调节图像分类器训练过程的九个设置,因此他们尝试的每个配置都是 R 9 \R^9 R 9 中的一个向量(第 9.2 节 会再讨论他们的发现)。第二种用法中,向量保存目标函数在一组输入处的值,f = ( f ( x 1 ) , … , f ( x n ) ) ⊤ \vf = (f(\vx_1), \dots, f(\vx_n))^\T f = ( f ( x 1 ) , … , f ( x n ) ) ⊤ 。它的维度是输入的个数,而不是超参数的个数,并且每评估一次就增加一维。高斯过程的协方差矩阵就位于这第二种空间中。
向量按分量相加;向量乘以一个数,即每个分量都乘以这个数。从几何上看,x + y \vx + \vy x + y 是把 y \vy y 的箭头接在 x \vx x 的箭头末端,2 x 2\vx 2 x 则是方向相同、长度加倍的箭头。
3.1.1 内积、长度与角度 #
两个维度相同的向量逐个分量相乘再求和,得到它们的内积 (inner product),又称点积:
x ⊤ y = ∑ i = 1 d x i y i . \vx^\T\vy = \sum_{i=1}^d x_i y_i. x ⊤ y = i = 1 ∑ d x i y i . (3.1)
这一记号读作一行乘以一列,这正是第 3.2 节 将介绍的矩阵乘法规则。长度和距离都由内积而来。向量的范数 (norm)即其长度,∥ x ∥ = x ⊤ x \lVert\vx\rVert = \sqrt{\vx^\T\vx} ∥ x ∥ = x ⊤ x ,也就是 d d d 维空间中的勾股定理;两点之间的距离是二者之差的范数,∥ x − y ∥ \lVert\vx - \vy\rVert ∥ x − y ∥ 。
内积还能衡量角度。对任意两个向量,
x ⊤ y = ∥ x ∥ ∥ y ∥ cos θ , \vx^\T\vy = \lVert\vx\rVert\,\lVert\vy\rVert \cos\theta, x ⊤ y = ∥ x ∥ ∥ y ∥ cos θ ,
其中 θ \theta θ 是两者的夹角。内积为零的两个向量是正交的 (orthogonal),即互相垂直。除以两个长度就得到 cos θ \cos\theta cos θ :方向相同时为 1,互相垂直时为 0,方向相反时为 − 1 -1 − 1 。第 2.6.3 节 的相关系数就是这个余弦,只是计算对象换成了中心化的随机变量,而不是数的列表。
距离对贝叶斯优化很重要。核函数决定目标函数在两个输入处的值相关程度有多强(第 9 章 ),而最常用的核函数只通过两个输入之间的距离依赖于它们。按照径向基函数(RBF)核 k ( x , x ′ ) = exp ( − ∥ x − x ′ ∥ 2 / 2 ℓ 2 ) k(\vx, \vx') = \exp\!\left(-\lVert\vx - \vx'\rVert^2 / 2\ell^2\right) k ( x , x ′ ) = exp ( − ∥ x − x ′ ∥ 2 /2 ℓ 2 ) ,相近的输入取值相似,相距遥远的输入互不相关,“相近”的含义则由长度尺度 ℓ \ell ℓ 决定。
3.1.2 高维空间中的距离 #
我们对距离的直觉来自二维和三维,到了更高的维度,这种直觉会产生误导。在单位立方体 [ 0 , 1 ] d [0, 1]^d [ 0 , 1 ] d 中均匀随机地撒点。每个坐标对两点间距离的平方平均贡献 1 / 6 1/6 1/6 ,因此典型距离按 d / 6 \sqrt{d/6} d /6 增长:二维中约为 0.58,六维中为 1.0,五十维中为 2.9。距离的离散程度却不随之增长。在一次用 200 个随机点所做的模拟中,从二维到一百维,两两距离的标准差始终保持在 0.24 左右。结果,对一个典型的点,它到最近邻的距离与到最远邻的距离之比,在二维中是 0.04,在六维中升至 0.22,在五十维中升至 0.65,在一百维中升至 0.74。
因此,在高维空间中,每个点都远离其他所有点,而且所有点之间的距离都相差无几。对于五十维问题,长度尺度适合二维问题的核函数会认为每一对点都互不相关,模型从一次评估中得不到关于其他任何评估的信息。这是贝叶斯优化在高维中困难的根源之一,种种补救办法,例如随维度增长的长度尺度、为每个输入分别设定长度尺度(第 9.2 节 ),也都从这里出发(第 30 章 )。
第 3.1 节引用的文献 1 Snoek 等人(2012) Practical Bayesian Optimization of Machine Learning Algorithms
3.2 作为变换的矩阵 #
矩阵 (matrix)是一张矩形的数表,用粗体大写字母表示。m × n m \times n m × n 矩阵 A \mA A 有 m m m 行、n n n 列,A i j A_{ij} A ij 是第 i i i 行第 j j j 列的元素。这张表是矩阵的存储格式,而矩阵的含义在于它所定义的映射。
3.2.1 矩阵与向量的乘积 #
m × n m \times n m × n 矩阵乘以 n n n 维向量,得到 m m m 维向量,其第 i i i 个分量是第 i i i 行与该向量的内积:
( A x ) i = ∑ j = 1 n A i j x j . (\mA\vx)_i = \sum_{j=1}^n A_{ij} x_j. ( Ax ) i = j = 1 ∑ n A ij x j .
同一个乘积还有第二种读法,也是应当在头脑中想象的那一种。把 A \mA A 的各列记作 a 1 , … , a n \mathbf{a}_1, \dots, \mathbf{a}_n a 1 , … , a n ,则
A x = x 1 a 1 + x 2 a 2 + ⋯ + x n a n . \mA\vx = x_1 \mathbf{a}_1 + x_2 \mathbf{a}_2 + \dots + x_n \mathbf{a}_n. Ax = x 1 a 1 + x 2 a 2 + ⋯ + x n a n . (3.2)
向量 e 1 = ( 1 , 0 , … , 0 ) ⊤ \mathbf{e}_1 = (1, 0, \dots, 0)^\T e 1 = ( 1 , 0 , … , 0 ) ⊤ 选出第一列:A e 1 = a 1 \mA\mathbf{e}_1 = \mathbf{a}_1 A e 1 = a 1 。可见矩阵的各列记录了各坐标方向被映射到何处;按照式(3.2) ,其他每个向量都按其坐标移动:x \vx x 含有多少 e 1 \mathbf{e}_1 e 1 ,就取多少 a 1 \mathbf{a}_1 a 1 ,依此类推。
这类映射是线性的 (linear):它把和映射为和,把倍数映射为倍数,A ( x + y ) = A x + A y \mA(\vx + \vy) = \mA\vx + \mA\vy A ( x + y ) = Ax + Ay ,A ( c x ) = c A x \mA(c\vx) = c\,\mA\vx A ( c x ) = c Ax 。在平面上,线性映射把直线映射为直线,保持原点不动,并把正方形网格变为平行四边形网格。单位圆,即所有长度为一的向量构成的集合,变为一个椭圆。
A e₁ A e₂ A x x A = 1.20 0.60 0.20 0.80 det A = a d − b c = 0.84 单位正方形的面积乘以 0.84。 特征值 λ1 = 1.40,λ 2 = 0.60 x 与 A x 的夹角:15° 单位圆 → 它的像 单位正方形 → 平行四边形 A e₁ A e₂ A x x A = 1.20 0.60 0.20 0.80 det A = a d − b c = 0.84 单位正方形的面积乘以 0.84。 特征值 λ1 = 1.40,λ 2 = 0.60 x 与 A x 的夹角:15° 单位圆 → 它的像 单位正方形 → 平行四边形 图 3.1 把 2×2 矩阵看作平面的映射。品红色和绿色的箭头是 A \mA A 的两列,即两个坐标方向的像;拖动箭头末端可以改变矩阵。虚线圆和虚线正方形是单位圆和单位正方形,蓝色椭圆和黄色平行四边形是它们的像,浅蓝色的线是网格的像。黑色箭头是单位圆上的一个向量 x \vx x 及其像 A x \mA\vx Ax ;可以沿圆周拖动 x \vx x 。读数给出行列式和特征值,其含义见第 3.4 节 和第 3.6 节 。
可以尝试以下操作:
拖动 A e 1 \mA\mathbf{e}_1 A e 1 的末端。 只有第一列改变,整个网格随之移动:每个点的移动量,是它的第一个坐标乘以这一改变量。
依次选择预设:旋转、剪切、拉伸。 旋转使圆转动而形状不变;拉伸以不同的倍数缩放两个轴;剪切使一个轴沿另一个轴滑动,把正方形变为面积不变的斜平行四边形。
选择预设:奇异。 两列指向同一方向,椭圆坍缩成一条线段,整个平面被压扁到一条直线上。这条直线上的每个点都来自无穷多个点,因此这个映射无法撤销。
3.2.2 复合、单位矩阵与逆矩阵 #
先作用 B \mathbf{B} B 、再作用 A \mA A ,仍是一个线性映射,其矩阵是乘积 A B \mA\mathbf{B} AB ,各列是 A \mA A 作用于 B \mathbf{B} B 各列的结果。逐个元素来看,( A B ) i j = ∑ k A i k B k j (\mA\mathbf{B})_{ij} = \sum_k A_{ik} B_{kj} ( AB ) ij = ∑ k A ik B k j ,即 A \mA A 的第 i i i 行与 B \mathbf{B} B 的第 j j j 列的内积。顺序很重要:先拉伸再旋转,与先旋转再拉伸并不相同,因此一般而言 A B ≠ B A \mA\mathbf{B} \ne \mathbf{B}\mA AB = BA 。按这种方式相乘两个 n × n n \times n n × n 矩阵需要 n 3 n^3 n 3 次乘法,i i i 、j j j 、k k k 的每种组合各一次。
单位矩阵 (identity matrix)I \mI I 对角线上为一、其余为零,它使每个向量保持原位。如果另一个矩阵 A − 1 \mA^{-1} A − 1 能撤销方阵 A \mA A 的作用,即 A − 1 A = A A − 1 = I \mA^{-1}\mA = \mA\mA^{-1} = \mI A − 1 A = A A − 1 = I ,则称这个方阵可逆 (invertible)。矩阵可逆,当且仅当它不把空间压扁:没有非零向量被映射为零,因而没有两个点映射到同一个像。图 3.1 中的奇异预设正是相反的情形。乘积求逆要颠倒顺序,( A B ) − 1 = B − 1 A − 1 (\mA\mathbf{B})^{-1} = \mathbf{B}^{-1}\mA^{-1} ( AB ) − 1 = B − 1 A − 1 ,因为最后施加的映射必须最先撤销。
3.2.3 转置 #
转置 (transpose)A ⊤ \mA^\T A ⊤ 把矩阵沿对角线翻转,使 ( A ⊤ ) i j = A j i (\mA^\T)_{ij} = A_{ji} ( A ⊤ ) ij = A j i ,m × n m \times n m × n 矩阵变为 n × m n \times m n × m 矩阵。列向量是 n × 1 n \times 1 n × 1 矩阵,其转置是 1 × n 1 \times n 1 × n 的行,内积 x ⊤ y \vx^\T\vy x ⊤ y 就是一行与一列的乘积。反过来的乘积 x y ⊤ \vx\vy^\T x y ⊤ ,即一列乘以一行,是一个 n × n n \times n n × n 矩阵,称为外积 (outer product)。乘积的转置同样要颠倒顺序,( A B ) ⊤ = B ⊤ A ⊤ (\mA\mathbf{B})^\T = \mathbf{B}^\T\mA^\T ( AB ) ⊤ = B ⊤ A ⊤ 。
第 8 章 中各个量的形状都遵循这些规则。设有 n n n 个已观测的输入和 m m m 个待预测的输入,已观测输入之间的核矩阵 K \mK K 是 n × n n \times n n × n 的,已观测输入与新输入之间的矩阵 K ∗ \mK_* K ∗ 是 n × m n \times
m n × m 的;后验均值 K ∗ ⊤ K − 1 y \mK_*^\T\mK^{-1}\vy K ∗ ⊤ K − 1 y 把一个 m × n m \times n m × n 矩阵、一个 n × n n \times n n × n 矩阵与一个 n n n 维向量相乘,为 m m m 个新输入各给出一个预测。
3.3 对称矩阵与正定矩阵 #
并非每张方形数表都能作为协方差矩阵。本节找出其中的条件,结果表明它是几何性的:协方差矩阵不能让任何方向的方差为负。
矩阵等于其转置,即 A i j = A j i A_{ij} = A_{ji} A ij = A j i 时,称为对称的 (symmetric)。协方差矩阵是对称的,因为 Cov [ x i , x j ] = Cov [ x j , x i ] \Cov[x_i, x_j] = \Cov[x_j, x_i] Cov [ x i , x j ] = Cov [ x j , x i ] ;核矩阵也是,因为 k ( x , x ′ ) = k ( x ′ , x ) k(\vx, \vx') = k(\vx', \vx) k ( x , x ′ ) = k ( x ′ , x ) 。
对于对称矩阵 A \mA A ,表达式 w ⊤ A w \vw^\T\mA\vw w ⊤ Aw 对每个向量 w \vw w 给出一个数,称为二次型 (quadratic form)。在二维中,取 A = [ a b b d ] \mA = \begin{bmatrix} a & b \\ b & d \end{bmatrix} A = [ a b b d ] ,
w ⊤ A w = a w 1 2 + 2 b w 1 w 2 + d w 2 2 , \vw^\T\mA\vw = a w_1^2 + 2b\, w_1 w_2 + d\, w_2^2, w ⊤ Aw = a w 1 2 + 2 b w 1 w 2 + d w 2 2 ,
这是 w \vw w 各分量的二次多项式。协方差矩阵与加权和相遇时,就会出现二次型,原因在于下面的恒等式。
推导 加权和的方差
设 x \vx x 是均值为 μ \vmu μ 、协方差矩阵为 Σ \mSigma Σ 的随机向量,w \vw w 是固定的权重向量。
加权和是 w ⊤ x = ∑ i w i x i \vw^\T\vx = \sum_i w_i x_i w ⊤ x = ∑ i w i x i ,由期望的线性性(式(2.10) ),其均值为 w ⊤ μ \vw^\T\vmu w ⊤ μ 。
由方差的定义(式(2.11) ),Var [ w ⊤ x ] = E [ ( ∑ i w i ( x i − μ i ) ) 2 ] \Var[\vw^\T\vx] = \E\big[(\sum_i w_i (x_i - \mu_i))^2\big] Var [ w ⊤ x ] = E [ ( ∑ i w i ( x i − μ i ) ) 2 ] 。
把和的平方展开,得到所有两两乘积:E [ ∑ i ∑ j w i w j ( x i − μ i ) ( x j − μ j ) ] \E\big[\sum_i \sum_j w_i w_j (x_i - \mu_i)(x_j - \mu_j)\big] E [ ∑ i ∑ j w i w j ( x i − μ i ) ( x j − μ j ) ] 。
由期望的线性性,再由协方差的定义,这等于 ∑ i ∑ j w i w j E [ ( x i − μ i ) ( x j − μ j ) ] = ∑ i ∑ j w i w j Σ i j \sum_i \sum_j w_i w_j\, \E[(x_i - \mu_i)(x_j - \mu_j)]
= \sum_i \sum_j w_i w_j \Sigma_{ij} ∑ i ∑ j w i w j E [( x i − μ i ) ( x j − μ j )] = ∑ i ∑ j w i w j Σ ij 。
这个二重和就是二次型,所以 Var [ w ⊤ x ] = w ⊤ Σ w \Var[\vw^\T\vx] = \vw^\T\mSigma\vw Var [ w ⊤ x ] = w ⊤ Σ w 。
3.3.2 每个方向的方差都非负 #
方差不可能为负。因此由上面的推导,协方差矩阵必须对每个 w \vw w 都满足 w ⊤ Σ w ≥ 0 \vw^\T\mSigma\vw \ge 0 w ⊤ Σ w ≥ 0 。这一性质有专门的名称。
定义 3.1 正定矩阵与半正定矩阵
如果对每个向量 w \vw w 都有 w ⊤ A w ≥ 0 \vw^\T\mA\vw \ge 0 w ⊤ Aw ≥ 0 ,则称对称矩阵 A \mA A 是半正定的 (positive semidefinite);如果对每个非零的 w \vw w 都有 w ⊤ A w > 0 \vw^\T\mA\vw > 0 w ⊤ Aw > 0 ,则称它是正定的 (positive definite)。
取 A = Σ \mA = \mSigma A = Σ ,正定性的含义是:空间中每个方向的方差都为正,变量的任何加权组合都不是确切已知的。仅为半正定的协方差矩阵,存在某个方差为零的组合,即一个固定不变的组合。在高斯过程中,两个观测输入重合时就会出现这种情况:此时 f ( x ) f(\vx) f ( x ) 与 f ( x ′ ) f(\vx') f ( x ′ ) 是同一个随机变量,f ( x ) − f ( x ′ ) f(\vx) - f(\vx') f ( x ) − f ( x ′ ) 恰好为零。下面的每个结果都假定严格正定,因此各种实现都会在对角线上加一点噪声或“抖动项”(第 8.4 节 )。
二维中这一条件很容易检验。标准差为 σ 1 , σ 2 \sigma_1, \sigma_2 σ 1 , σ 2 、相关系数为 ρ \rho ρ 的协方差矩阵是正定的,当且仅当 σ 1 , σ 2 > 0 \sigma_1, \sigma_2 > 0 σ 1 , σ 2 > 0 且 − 1 < ρ < 1 -1 < \rho < 1 − 1 < ρ < 1 ,而且这一范围内的每个相关系数都是可能的。从三维开始,这一条件就不够了。
3.3.3 无法共存的三个相关系数 #
假设三个量的方差都是 1,第一个与第二个的相关系数为 0.8 0.8 0.8 ,与第三个的相关系数也为 0.8 0.8 0.8 ,而第二个与第三个不相关:
Σ = [ 1 0.8 0.8 0.8 1 0 0.8 0 1 ] . \mSigma = \begin{bmatrix} 1 & 0.8 & 0.8 \\ 0.8 & 1 & 0 \\ 0.8 & 0 & 1 \end{bmatrix}. Σ = 1 0.8 0.8 0.8 1 0 0.8 0 1 .
每个相关系数都在 − 1 -1 − 1 与 1 1 1 之间,每一对单独来看都是有效的二维协方差。然而,取权重 w = ( − 2 , 1 , 1 ) ⊤ \vw = (-2, 1, 1)^\T w = ( − 2 , 1 , 1 ) ⊤ ,得
w ⊤ Σ w = 4 + 1 + 1 + 2 ( − 2 ) ( 0.8 ) + 2 ( − 2 ) ( 0.8 ) + 2 ( 1 ) ( 0 ) = − 0.4 , \vw^\T\mSigma\vw = 4 + 1 + 1 + 2\,(-2)(0.8) + 2\,(-2)(0.8) + 2\,(1)(0) = -0.4, w ⊤ Σ w = 4 + 1 + 1 + 2 ( − 2 ) ( 0.8 ) + 2 ( − 2 ) ( 0.8 ) + 2 ( 1 ) ( 0 ) = − 0.4 ,
即量 x 2 + x 3 − 2 x 1 x_2 + x_3 - 2x_1 x 2 + x 3 − 2 x 1 的方差为负。任何三个随机变量都不可能具有这样的相关系数。直观地说,如果 x 1 x_1 x 1 与 x 2 x_2 x 2 紧密地共同变化,又与 x 3 x_3 x 3 紧密地共同变化,那么 x 2 x_2 x 2 与 x 3 x_3 x 3 必然在一定程度上共同变化,不可能互不相关。二者必须相关到什么程度,由习题 3.2 求出。
这并非罕见的特例。在金融中,许多资产之间的相关系数表可能不是半正定的;如何把这样的表修正为最接近的有效相关矩阵,已有专门的文献(Higham,2002 ) 。对高斯过程而言,这正是核函数不能是任意相似度分数的原因。一条看似自然的规则,例如“两个输入距离小于 1 时完全相关,否则不相关”,在输入 0 0 0 、0.6 0.6 0.6 与 1.2 1.2 1.2 上就会失效:前两个完全相关,后两个完全相关,而第一个与最后一个不相关,这是同一类不可能的三元组。第 9 章 的核函数都经过构造,保证这种情况永远不会发生:一个函数是有效的核函数,当且仅当对任意选取的输入,其矩阵都是半正定的(第 7.2 节 )。
在下一节的图 3.2 中,读者可以尝试构造这样的矩阵,观察问题出在何处。
第 3.3 节引用的文献 1 Higham(2002) Computing the Nearest Correlation Matrix: A Problem from Finance
3.4 特征向量:矩阵拉伸的轴 #
仅从矩阵的元素,很难一眼看出它的作用。在图 3.1 中,大多数向量 x \vx x 被 A \mA A 既转动又拉伸。不过,有些方向只被拉伸:像 A x \mA\vx Ax 沿着 x \vx x 本身的方向。找到这些方向,就能把这个映射描述为一组互相独立的拉伸。
定义 3.2 特征向量与特征值
如果 A u = λ u \mA\mathbf{u} = \lambda\mathbf{u} Au = λ u ,则称非零向量 u \mathbf{u} u 是方阵 A \mA A 的特征向量,对应的特征值为 λ \lambda λ 。
特征向量是矩阵不转动的方向;特征值是这一方向被拉伸的倍数,负的特征值使方向反转。在图 3.1 中,沿圆周拖动 x \vx x ,直到 x \vx x 与 A x \mA\vx Ax 对齐,读数就会给出特征值。默认矩阵在 18 ° 18° 18° 附近(特征值为 1.4)和 135 ° 135° 135° 附近(特征值为 0.6)出现对齐。打开显示特征向量 ,可以看到这两个方向。旋转预设根本没有实特征向量,因为它转动了每一个方向。
3.4.1 对称矩阵 #
一般矩阵的特征向量不一定互相垂直,默认矩阵就是一例。协方差矩阵只可能是对称矩阵,而对称矩阵的性质要好得多。
定理 3.1 对称矩阵的谱定理
d × d d \times d d × d 对称矩阵 A \mA A 有 d d d 个实特征值 λ 1 , … , λ d \lambda_1, \dots, \lambda_d λ 1 , … , λ d ,以及一组标准正交的特征向量 u 1 , … , u d \mathbf{u}_1, \dots, \mathbf{u}_d u 1 , … , u d ,即两两垂直的单位向量。把特征向量作为矩阵 U \mathbf{U} U 的各列,把特征值放在矩阵 Λ \bm{\Lambda} Λ 的对角线上,则
A = U Λ U ⊤ = ∑ i = 1 d λ i u i u i ⊤ . \mA = \mathbf{U}\bm{\Lambda}\mathbf{U}^\T = \sum_{i=1}^d \lambda_i\, \mathbf{u}_i\mathbf{u}_i^\T. A = U Λ U ⊤ = i = 1 ∑ d λ i u i u i ⊤ .
证明特征值为实数所需的篇幅,超出了它在这里应占的分量(Strang,2016 ) ,但垂直性的证明很简短。
推导 对称矩阵的特征向量互相垂直
设 A u = λ u \mA\mathbf{u} = \lambda\mathbf{u} Au = λ u ,A v = μ v \mA\mathbf{v} = \mu\mathbf{v} Av = μ v ,且 λ ≠ μ \lambda \ne \mu λ = μ 。
在第一个方程两边左乘 v ⊤ \mathbf{v}^\T v ⊤ :v ⊤ A u = λ v ⊤ u \mathbf{v}^\T\mA\mathbf{u} = \lambda\, \mathbf{v}^\T\mathbf{u} v ⊤ Au = λ v ⊤ u 。
对左边转置;它是单个数,转置后不变:v ⊤ A u = u ⊤ A ⊤ v = u ⊤ A v \mathbf{v}^\T\mA\mathbf{u} = \mathbf{u}^\T\mA^\T\mathbf{v} = \mathbf{u}^\T\mA\mathbf{v} v ⊤ Au = u ⊤ A ⊤ v = u ⊤ Av ,这里用到了 A ⊤ = A \mA^\T = \mA A ⊤ = A 。
由第二个方程,u ⊤ A v = μ u ⊤ v \mathbf{u}^\T\mA\mathbf{v} = \mu\, \mathbf{u}^\T\mathbf{v} u ⊤ Av = μ u ⊤ v 。
所以 λ v ⊤ u = μ u ⊤ v \lambda\, \mathbf{v}^\T\mathbf{u} = \mu\, \mathbf{u}^\T\mathbf{v} λ v ⊤ u = μ u ⊤ v ,又因为 u ⊤ v = v ⊤ u \mathbf{u}^\T\mathbf{v} = \mathbf{v}^\T\mathbf{u} u ⊤ v = v ⊤ u ,得 ( λ − μ ) u ⊤ v = 0 (\lambda - \mu)\, \mathbf{u}^\T\mathbf{v} = 0 ( λ − μ ) u ⊤ v = 0 。
因为 λ ≠ μ \lambda \ne \mu λ = μ ,所以 u ⊤ v = 0 \mathbf{u}^\T\mathbf{v} = 0 u ⊤ v = 0 。
这个分解从右往左读,就是一组操作步骤。U ⊤ \mathbf{U}^\T U ⊤ 转动空间,使特征向量与坐标轴对齐;Λ \bm{\Lambda} Λ 把每个轴按对应的特征值拉伸;U \mathbf{U} U 再把空间转回去。对称矩阵就是一组互相垂直的拉伸,仅此而已。在图 3.1 中选择对称预设,并打开特征向量:它们互相垂直,而且正是椭圆的轴。
3.4.2 特征值与正定性 #
谱定理把正定性的定义转化为关于特征值的条件。
推导 正定即特征值全为正
设 A = U Λ U ⊤ \mA = \mathbf{U}\bm{\Lambda}\mathbf{U}^\T A = U Λ U ⊤ 是对称矩阵,w \vw w 是任意向量。
代入分解式:w ⊤ A w = w ⊤ U Λ U ⊤ w \vw^\T\mA\vw = \vw^\T\mathbf{U}\bm{\Lambda}\mathbf{U}^\T\vw w ⊤ Aw = w ⊤ U Λ U ⊤ w 。
记 c = U ⊤ w \mathbf{c} = \mathbf{U}^\T\vw c = U ⊤ w ,即 w \vw w 沿各特征向量的坐标,c i = u i ⊤ w c_i = \mathbf{u}_i^\T\vw c i = u i ⊤ w 。于是 w ⊤ A w = c ⊤ Λ c = ∑ i λ i c i 2 \vw^\T\mA\vw = \mathbf{c}^\T\bm{\Lambda}\mathbf{c} = \sum_i \lambda_i c_i^2 w ⊤ Aw = c ⊤ Λ c = ∑ i λ i c i 2 。
如果每个 λ i > 0 \lambda_i > 0 λ i > 0 ,那么只要某个 c i ≠ 0 c_i \ne 0 c i = 0 ,这个和就为正;由于 U \mathbf{U} U 可逆,每个非零的 w \vw w 都满足这一点。
反过来,取 w = u j \vw = \mathbf{u}_j w = u j ,得到 c j = 1 c_j = 1 c j = 1 ,其余每个 c i = 0 c_i = 0 c i = 0 ,所以 w ⊤ A w = λ j \vw^\T\mA\vw = \lambda_j w ⊤ Aw = λ j ,它必须为正。
对于协方差矩阵,这个推导还能说明更多。取长度为一的 w \vw w ,即一个方向。它沿各特征向量的坐标满足 ∑ i c i 2 = 1 \sum_i c_i^2 = 1 ∑ i c i 2 = 1 ,所以方向 w \vw w 上的方差是各特征值以 c i 2 c_i^2 c i 2 为权重的加权平均。特征值就是沿各特征向量的方差,其他任何方向的方差都介于最小与最大的特征值之间。特征值最大的特征向量,就是不确定性最宽的方向。不确定性的形状是一个椭球,其轴沿各特征向量,半轴长为 λ i \sqrt{\lambda_i} λ i (即沿各轴的标准差);第 4.2.1 节 将针对高斯分布推导这一点。
3.4.3 三维中的协方差 #
在二维中,椭圆概括了一切。在三维中,会出现两种平面无法展示的现象。图 3.2 画出了一个三维协方差的椭球 { x : x ⊤ Σ − 1 x = 1 } \{\vx : \vx^\T\mSigma^{-1}\vx = 1\} { x : x ⊤ Σ − 1 x = 1 } ,即距中心一个标准差的点的集合(这里的标准差在什么意义下成立,由第 4.2.1 节 精确说明),同时画出它的三根轴,以及它在立方体各面墙上的影子。旁边是三个成对视图:每次取三个坐标中的两个,画出 Σ \mSigma Σ 中相应 2 × 2 2 \times 2 2 × 2 子块的椭圆。
正定:椭球存在 x1 x2 x3 √λ1 √λ2 √λ3 成对视图(Σ 的 2×2 子块) x1 , x 2 ρ = 0.70 x1 , x 3 ρ = 0.40 x2 , x 3 ρ = 0.20 Σ = 1.44 0.76 0.34 0.76 0.81 0.13 0.34 0.13 0.49 特征值 2.02、0.45、0.26 det Σ = λ1 λ 2 λ 3 = 0.241 Cholesky 对角元 L11 , L 22 , L 33 = 1.20, 0.64, 0.64 正定:椭球存在 x1 x2 x3 √λ1 √λ2 √λ3 成对视图(Σ 的 2×2 子块) x1 , x 2 ρ = 0.70 x1 , x 3 ρ = 0.40 x2 , x 3 ρ = 0.20 Σ = 1.44 0.76 0.34 0.76 0.81 0.13 0.34 0.13 0.49 特征值 2.02、0.45、0.26 det Σ = λ1 λ 2 λ 3 = 0.241 Cholesky 对角元 L11 , L 22 , L 33 = 1.20, 0.64, 0.64 图 3.2 把 3×3 协方差矩阵画成椭球。滑块设定三个相关系数和三个标准差;拖动立方体可以转动它。黑色线段是特征向量轴,半长为 λ i \sqrt{\lambda_i} λ i ;后面几面墙上的灰色形状是椭球的影子;立方体旁边的三个面板是成对视图,与影子吻合。按下不可能的三元组 之后,每个成对视图仍是有效的椭圆,但矩阵不是正定的:椭球不存在,有一个特征值为负(红色的方向),第 3.5 节 的 Cholesky 分解也会失败。打开显示样本 ,会画出点 L z \mL\vz Lz ,其中 z \vz z 是由均值为 0、方差为 1 的独立随机数组成的向量。这些数值仅为示意。
可以尝试以下操作:
转动立方体。 椭球有三根互相垂直的轴,即特征向量;从大多数角度看,它们都不与任何坐标轴对齐。读数列出各特征值,其平方根就是各轴的半长。
比较影子与成对视图。 二者是相同的椭圆。协方差椭球在两个坐标所在平面上的影子,就是相应 2 × 2 2 \times 2 2 × 2 子块的椭圆;因此,忽略高斯分布的一个变量,相当于删去它所在的行和列(第 4.4 节 )。
按下不可能的三元组。 成对视图显示三个有效的椭圆,相关系数分别为 0.8、0.8 和 0。椭球消失,红色虚线标出方差会为负的方向,即特征值 − 0.13 -0.13 − 0.13 对应的特征向量。现在慢慢调高 ρ 23 \rho_{23} ρ 23 :一旦 ρ 23 \rho_{23} ρ 23 超过 0.28(滑块上为 0.29),椭球就会重新出现,起初是一张扁平的圆盘,随 ρ 23 \rho_{23} ρ 23 增大而变厚。
按下链式。 这里 x 1 x_1 x 1 与 x 2 x_2 x 2 相连,x 2 x_2 x 2 与 x 3 x_3 x 3 相连,相关系数都是 0.8,而 ρ 13 = 0.64 \rho_{13} = 0.64 ρ 13 = 0.64 是两者之积。椭球变成沿对角线的一根雪茄,有一个特征值远大于其他特征值:大部分不确定性都集中在单一方向上。
第一个教训是,逐对检查并不能证明协方差矩阵有效;是否有效,是整张表的性质。第二个教训是,协方差可能在某个方向上几乎是扁平的,而这个方向无法通过任何单个变量察觉:一个接近奇异的矩阵,其成对视图未必有哪一个看起来是退化的。
3.4.4 核矩阵的特征值 #
第二个教训正是高斯过程的常态。取 [ 0 , 1 ] [0, 1] [ 0 , 1 ] 中等间距的 100 个输入,在长度尺度为 0.1 的径向基函数核下,核矩阵在精确算术中是一个 100 × 100 100 \times 100 100 × 100 的正定矩阵。它最大的几个特征值是 23.9、21.2 和 17.5,但特征值衰减极快,100 个中只有 28 个超过 10 − 10 10^{-10} 1 0 − 10 。在双精度算术中,最小的那些特征值淹没在舍入误差里;在我们用 NumPy 做的一次运行中,算出的最小特征值甚至略微为负,− 4 × 10 − 15 -4 \times 10^{-15} − 4 × 1 0 − 15 。相邻输入处的函数值相关性极强,以至于 100 维空间中的大多数方向几乎没有方差。在同一次运行中,NumPy 对这个矩阵的 Cholesky 分解失败了;在对角线上加 10 − 6 10^{-6} 1 0 − 6 ,即第 8.4 节 的抖动项,分解即可成功。函数上的光滑先验实际只有远少于 100 个的独立不确定方向,这也是高斯过程能够从少数几次评估中学到光滑函数的部分原因。
最大特征值与最小特征值之比称为条件数 (condition number),它衡量矩阵有多接近奇异。双精度数约有 16 位有效十进制数字,用条件数为 10 k 10^k 1 0 k 的矩阵求解方程组,可能损失约 k k k 位(Golub 与 Van Loan,2013 ) 。光滑核函数在间隔很近的输入上,核矩阵的条件数常常接近 10 16 10^{16} 1 0 16 ,此时有效数字已一位不剩,因此抖动项或观测噪声是数值上的必需,而不是建模上的选择。
恰好为零的特征值同样携带信息。在第 18.5 节 中,由一组成对比较构建的矩阵,其特征值可以统计出这样的方向有多少个:在这些方向上,这些比较对一个人的偏好没有提供任何信息。
第 3.4 节引用的文献 2 Strang(2016) Introduction to Linear AlgebraGolub 与 Van Loan(2013) Matrix Computations
3.5 不求逆而解方程组 #
高斯过程回归的公式中满是逆矩阵:式(8.3) 中的后验均值 k ( x ) ⊤ K − 1 y \vk(\vx)^\T\mK^{-1}\vy k ( x ) ⊤ K − 1 y 与方差 k ( x , x ) − k ( x ) ⊤ K − 1 k ( x ) k(\vx, \vx) - \vk(\vx)^\T\mK^{-1}\vk(\vx) k ( x , x ) − k ( x ) ⊤ K − 1 k ( x ) 。按字面理解,就是先求 K \mK K 的逆,再相乘。数值计算的惯例是绝不这样做。本节解释原因,并说明应当怎样做。
3.5.1 为什么不求逆 #
含有 K − 1 y \mK^{-1}\vy K − 1 y 的公式,从来不需要 K − 1 \mK^{-1} K − 1 本身,需要的是线性方程组 K α = y \mK\bm{\alpha} = \vy K α = y 的解向量 α \bm{\alpha} α 。宁可求解也不求逆,理由有两个。其一,构造逆矩阵的代价更高,是下文所用分解的数倍。其二,算出的逆矩阵不够精确:乘以经过舍入的逆矩阵,比直接用分解求解损失更多的有效数字(Golub 与 Van Loan,2013 ) 。矩阵病态时(核矩阵常常如此),这一差别决定了答案是否可用。
3.5.2 三角方程组 #
有些方程组很容易求解。对角线以上的元素全为零的矩阵是下三角的 (lower triangular)。以这样的矩阵构成的方程组 L z = b \mL\vz = \mathbf{b} Lz = b ,可以从上到下逐个求出分量:第一个方程只含 z 1 z_1 z 1 ,第二个只含 z 1 z_1 z 1 和 z 2 z_2 z 2 ,依此类推。
z i = 1 L i i ( b i − ∑ k < i L i k z k ) , i = 1 , … , n . z_i = \frac{1}{L_{ii}}\Big(b_i - \sum_{k < i} L_{ik} z_k\Big), \qquad i = 1, \dots, n. z i = L ii 1 ( b i − k < i ∑ L ik z k ) , i = 1 , … , n . (3.3)
这种前代 (forward substitution)约需 n 2 n^2 n 2 次运算,而一般方法需要 n 3 n^3 n 3 次。上三角 (upper triangular)方程组的对角线以下为零,用同样的方式从下往上求解,即回代 (back substitution)。求解对称正定方程组的整体策略,就是把它化为两个三角方程组。
3.5.3 Cholesky 分解 #
定义 3.3 Cholesky 分解
每个对称正定矩阵 A \mA A 都可以唯一地写成
A = L L ⊤ , \mA = \mL\mL^\T, A = L L ⊤ , (3.4)
其中 L \mL L 是对角元为正的下三角矩阵。L \mL L 称为 A \mA A 的 Cholesky 因子 (Cholesky factor)。
这个因子是矩阵的一种平方根。1 × 1 1 \times 1 1 × 1 矩阵 [ a ] [a] [ a ] 的因子是 [ a ] [\sqrt{a}] [ a ] ,当且仅当 a > 0 a > 0 a > 0 时存在。2 × 2 2 \times 2 2 × 2 的情形展示了一般算法如何运作,以及它为什么需要正定性。
推导 2×2 矩阵的 Cholesky 因子
设 A = [ a b b d ] \mA = \begin{bmatrix} a & b \\ b & d \end{bmatrix} A = [ a b b d ] ,求 L = [ l 11 0 l 21 l 22 ] \mL = \begin{bmatrix} l_{11} & 0 \\ l_{21} & l_{22} \end{bmatrix} L = [ l 11 l 21 0 l 22 ] 。
乘开得 L L ⊤ = [ l 11 2 l 11 l 21 l 11 l 21 l 21 2 + l 22 2 ] \mL\mL^\T = \begin{bmatrix} l_{11}^2 & l_{11}l_{21} \\ l_{11}l_{21} & l_{21}^2 + l_{22}^2 \end{bmatrix} L L ⊤ = [ l 11 2 l 11 l 21 l 11 l 21 l 21 2 + l 22 2 ] 。
比较左上角的元素:l 11 2 = a l_{11}^2 = a l 11 2 = a ,所以 l 11 = a l_{11} = \sqrt{a} l 11 = a ,这要求 a > 0 a > 0 a > 0 。
比较非对角元素:l 11 l 21 = b l_{11}l_{21} = b l 11 l 21 = b ,所以 l 21 = b / a l_{21} = b / \sqrt{a} l 21 = b / a 。
比较右下角的元素:l 21 2 + l 22 2 = d l_{21}^2 + l_{22}^2 = d l 21 2 + l 22 2 = d ,所以 l 22 = d − b 2 / a l_{22} = \sqrt{d - b^2/a} l 22 = d − b 2 / a ,这要求 d − b 2 / a > 0 d - b^2/a > 0 d − b 2 / a > 0 。
这两个条件同时成立,当且仅当 A \mA A 正定:a a a 是方向 e 1 \mathbf{e}_1 e 1 上的方差,而 a ( d − b 2 / a ) = a d − b 2 a\,(d - b^2/a) = ad - b^2 a ( d − b 2 / a ) = a d − b 2 是行列式,即两个特征值之积(第 3.6 节 )。
第 4 步中的量 d − b 2 / a d - b^2/a d − b 2 / a ,是第 3.7 节 中 Schur 补的初次出现。对于 a = σ 1 2 a = \sigma_1^2 a = σ 1 2 、b = ρ σ 1 σ 2 b = \rho\sigma_1\sigma_2 b = ρ σ 1 σ 2 、d = σ 2 2 d = \sigma_2^2 d = σ 2 2 的协方差矩阵,它等于 σ 2 2 ( 1 − ρ 2 ) \sigma_2^2(1 - \rho^2) σ 2 2 ( 1 − ρ 2 ) ,即已知第一个变量之后,第二个变量剩余的方差,第 4.5 节 将说明这一点。
一般算法以同样的方式,每次填写 L \mL L 的一列。
算法 3.1 Cholesky 分解
输入:一个 n × n n \times n n × n 对称矩阵 A \mA A 。
对每一列 j = 1 , … , n j = 1, \dots, n j = 1 , … , n :
计算 s = A j j − ∑ k < j L j k 2 s = A_{jj} - \sum_{k < j} L_{jk}^2 s = A j j − ∑ k < j L j k 2 。如果 s ≤ 0 s \le 0 s ≤ 0 ,停止:A \mA A 不是正定的。
令 L j j = s L_{jj} = \sqrt{s} L j j = s 。
对每一行 i = j + 1 , … , n i = j + 1, \dots, n i = j + 1 , … , n ,令 L i j = ( A i j − ∑ k < j L i k L j k ) / L j j L_{ij} = \big(A_{ij} - \sum_{k < j} L_{ik}L_{jk}\big) / L_{jj} L ij = ( A ij − ∑ k < j L ik L j k ) / L j j 。
第 2 步使这一算法既是分解,也是检验:它成功当且仅当矩阵正定,而且在实践中是代价最低的正定性检验。在图 3.2 中,不可能的三元组在第三列失败,此处 s s s 为负。这一算法约需 n 3 / 3 n^3/3 n 3 /3 次浮点运算(Golub 与 Van Loan,2013 ) 。
3.5.4 用因子求解 #
有了 A = L L ⊤ \mA = \mL\mL^\T A = L L ⊤ ,方程组 A x = b \mA\vx = \mathbf{b} Ax = b 就拆成两个三角方程组。先用前代解 L z = b \mL\vz = \mathbf{b} Lz = b ,再用回代解 L ⊤ x = z \mL^\T\vx = \vz L ⊤ x = z 。于是 A x = L ( L ⊤ x ) = L z = b \mA\vx = \mL(\mL^\T\vx) = \mL\vz = \mathbf{b} Ax = L ( L ⊤ x ) = Lz = b ,正是所求。L \mL L 一旦已知,每个新的右端项只需 O ( n 2 ) O(n^2) O ( n 2 ) 。这就是算法 8.1 :对核矩阵做一次分解,再通过三角求解得到权重 α \bm{\alpha} α 和每个预测方差。
代码实现 NumPy 与 SciPy
import numpy as np
from scipy.linalg import cho_factor, cho_solve, solve_triangular
A = np.array([[4.0 , 2.0 ], [2.0 , 3.0 ]])
b = np.array([2.0 , 4.0 ])
L = np.linalg.cholesky(A)
z = solve_triangular(L, b, lower=True )
x = solve_triangular(L.T, z, lower=False )
print (x)
c = cho_factor(A)
print (cho_solve(c, b))
3.5.5 实际的计算代价 #
精确高斯过程能够处理多少个观测,取决于这一立方级的代价。表 3.1 给出了用 NumPy 以双精度测得的耗时,测量所用的是编写本章的笔记本电脑(一台 Apple M5 Pro);在其他机器上,数字会有所不同,但增长速率不变。
表 3.1 用 NumPy 对 n × n 对称正定矩阵做分解与求逆所需的时间,以及存储该矩阵所需的内存(每个元素 8 字节)。在一台笔记本电脑上测量一次;重要的是比值,而非绝对数值。
n n n
Cholesky 分解
求逆
内存
500
0.4 ms
2.3 ms
2 MB
1,000
2.0 ms
10 ms
8 MB
2,000
14 ms
82 ms
32 MB
4,000
132 ms
625 ms
128 MB
n n n 翻倍,时间大约变为八倍,与 n 3 n^3 n 3 的预测一致;求逆的代价约为分解的五倍。一次贝叶斯优化运行的观测很少超过几百个,因此单次分解的代价很低。真正使代价成倍增加的,是拟合核函数自身的设置(例如长度尺度),因为拟合的每一步都要重新分解矩阵(第 9.3 节 )。对于更大的数据集,GPyTorch 库用共轭梯度法代替分解,并在图形处理器上运行;共轭梯度法是一种迭代方法,只需要核矩阵与向量的乘积。据其作者报告,这把精确推断的渐近代价从 O ( n 3 ) O(n^3) O ( n 3 ) 降到了 O ( n 2 ) O(n^2) O ( n 2 ) (Gardner 等,2018 ) 。
3.5.6 生成样本的平方根 #
Cholesky 因子还提供了一种由独立的随机性构造相关的随机性的方法。如果 z \vz z 的各坐标相互独立、方差为 1,那么 L z \mL\vz Lz 的协方差是 L L ⊤ = Σ \mL\mL^\T = \mSigma L L ⊤ = Σ ,这是第 4.3 节 将推导的规则 Cov [ A z ] = A Cov [ z ] A ⊤ \Cov[\mA\vz] = \mA\Cov[\vz]\mA^\T Cov [ Az ] = A Cov [ z ] A ⊤ 的推论。在图 3.2 中打开显示样本 ,可以看到 160 个这样的点:每个点都是 L z \mL\vz Lz ,其中 z \vz z 是一次抽取的三个均值为 0、方差为 1 的独立随机数(标准正态随机数,即第 4.1.1 节 的钟形曲线),这些点合在一起填满了椭球的形状。由于 L \mL L 是下三角的,第一个坐标只用到 z 1 z_1 z 1 ,第二个用到 z 1 z_1 z 1 和 z 2 z_2 z 2 ,第三个三者都用到,因此每个新坐标都由前面各坐标的随机性加上自身的一份新的随机性构成。第 8.5 节 的后验样本就是这样抽取的。
第 3.5 节引用的文献 2 Golub 与 Van Loan(2013) Matrix ComputationsGardner 等人(2018) GPyTorch: Blackbox Matrix-Matrix Gaussian Process Inference with GPU Acceleration
3.6 作为体积的行列式 #
多元高斯分布的密度(第 4.2 节 )和用于拟合核函数的边际似然(第 9.3 节 )中都含有行列式。行列式的含义是几何性的。
方阵的行列式 (determinant)记作 det A \det\mA det A 或 ∣ A ∣ \lvert\mA\rvert ∣ A ∣ ,是映射 A \mA A 对面积(二维)、体积(三维)以及一般 d d d 维体积的放大倍数。它的符号记录了这一映射是否像镜子那样翻转了方向。对于 2 × 2 2 \times 2 2 × 2 矩阵,
det [ a b c d ] = a d − b c , \det \begin{bmatrix} a & b \\ c & d \end{bmatrix} = ad - bc, det [ a c b d ] = a d − b c ,
即两列张成的平行四边形的有向面积。这就是图 3.1 中的黄色平行四边形,即单位正方形的像;奇异预设把它压扁为零面积,反射预设则使行列式变为负。
从这幅图中可以得出三条性质。先后施加两个映射,它们的体积倍数相乘,所以 det ( A B ) = det A ⋅ det B \det(\mA\mathbf{B}) = \det\mA \cdot \det\mathbf{B} det ( AB ) = det A ⋅ det B ,特别地,det ( A − 1 ) = 1 / det A \det(\mA^{-1}) = 1/\det\mA det ( A − 1 ) = 1/ det A 。矩阵可逆,当且仅当其行列式不为零,即它不把空间压扁。对于对称矩阵 A = U Λ U ⊤ \mA = \mathbf{U}\bm{\Lambda}\mathbf{U}^\T A = U Λ U ⊤ ,旋转 U \mathbf{U} U 与 U ⊤ \mathbf{U}^\T U ⊤ 保持体积不变,而 Λ \bm{\Lambda} Λ 把第 i i i 个轴拉伸 λ i \lambda_i λ i 倍,所以
det A = ∏ i = 1 d λ i . \det\mA = \prod_{i=1}^d \lambda_i. det A = i = 1 ∏ d λ i . (3.5)
因此,对于协方差矩阵,行列式是衡量不确定性总体大小的单个数,有时称为广义方差 (generalized variance)。图 3.2 的椭球半轴为 λ i \sqrt{\lambda_i} λ i ,所以体积是 4 3 π λ 1 λ 2 λ 3 = 4 3 π det Σ \frac{4}{3}\pi\sqrt{\lambda_1\lambda_2\lambda_3} = \frac{4}{3}\pi
\sqrt{\det\mSigma} 3 4 π λ 1 λ 2 λ 3 = 3 4 π det Σ 。相关性会使它缩小:对于方差为一、相关系数为 ρ 12 , ρ 13 , ρ 23 \rho_{12}, \rho_{13}, \rho_{23} ρ 12 , ρ 13 , ρ 23 的三个变量,
det Σ = 1 + 2 ρ 12 ρ 13 ρ 23 − ρ 12 2 − ρ 13 2 − ρ 23 2 , \det\mSigma = 1 + 2\rho_{12}\rho_{13}\rho_{23} - \rho_{12}^2 - \rho_{13}^2 - \rho_{23}^2, det Σ = 1 + 2 ρ 12 ρ 13 ρ 23 − ρ 12 2 − ρ 13 2 − ρ 23 2 ,
它对于独立的变量等于 1,随椭球变扁而趋向 0,对于那个不可能的三元组则变为负数(1 − 0.64 − 0.64 = − 0.28 1 - 0.64 - 0.64 =
-0.28 1 − 0.64 − 0.64 = − 0.28 )。在第 6.5 节 中,这类行列式衡量一组评估能揭示多少关于目标函数的信息,使行列式最大的那组评估,信息量也最大。
3.6.1 由 Cholesky 因子求对数行列式 #
三角矩阵的行列式是其对角元之积。(在 2 × 2 2 \times 2 2 × 2 的公式中,b = 0 b = 0 b = 0 时 a d − b c ad - bc a d − b c 就是 a d ad a d 。一般地,三角矩阵把第 i i i 个坐标轴按其第 i i i 个对角元拉伸,然后做剪切;剪切使点沿平行于其他轴的方向移动,不改变任何体积,正如图 3.1 的剪切预设所展示的。)对 A = L L ⊤ \mA = \mL\mL^\T A = L L ⊤ ,由行列式的乘积法则得
log det A = 2 ∑ i = 1 n log L i i . \log\det\mA = 2\sum_{i=1}^n \log L_{ii}. log det A = 2 i = 1 ∑ n log L ii . (3.6)
取对数并非多此一举。有许多极小特征值的核矩阵,其行列式远小于最小的正双精度数(约 5 × 10 − 324 5 \times 10^{-324} 5 × 1 0 − 324 )。对于第 3.4.4 节 中 100 个输入的例子,加上使之可以分解的抖动项之后,算出的特征值之积会下溢为零,而式(3.6) 给出 log det A ≈ − 1139 \log\det\mA \approx -1139 log det A ≈ − 1139 ,这是一个大小适中的数,且一旦得到因子,计算它几乎没有额外代价。高斯对数密度和对数边际似然的每一种实现,都用这种方式计算行列式(第 4.7 节 )。
3.7 分块矩阵与 Schur 补 #
高斯过程同时处理两组变量:已观测的函数值和待预测的函数值。因此它的矩阵自然地分成若干块,如式(8.1) 所示。本节建立这类分块的代数,最终得到第 4.5 节 所需的那个公式。
3.7.1 矩阵的分块 #
分块的对称矩阵形如
M = [ A B B ⊤ D ] , \mathbf{M} = \begin{bmatrix} \mA & \mathbf{B} \\ \mathbf{B}^\T & \mathbf{D} \end{bmatrix}, M = [ A B ⊤ B D ] , (3.7)
其中 A \mA A 是 p × p p \times p p × p 的,D \mathbf{D} D 是 q × q q \times q q × q 的,B \mathbf{B} B 是 p × q p \times q p × q 的。各块可以像数一样相乘,只是每个乘积都要保持顺序,因为矩阵乘法不满足交换律。对于协方差,A \mA A 与 D \mathbf{D} D 是各组内部的协方差,B \mathbf{B} B 存放两组之间的协方差。
3.7.2 分块消元 #
手工求解二元一次方程组时,用第一个方程从第二个方程中消去第一个未知数。用分块做同样的一步,就得到本节的核心对象。
定义 3.4 Schur 补
对于分块矩阵式(3.7) ,若 A \mA A 可逆,则 A \mA A 的 Schur 补是
S = D − B ⊤ A − 1 B . \mathbf{S} = \mathbf{D} - \mathbf{B}^\T\mA^{-1}\mathbf{B}. S = D − B ⊤ A − 1 B . (3.8)
对于元素为 a , b , d a, b, d a , b , d 的 2 × 2 2 \times 2 2 × 2 矩阵,a a a 的 Schur 补就是 Cholesky 推导中的那个数 d − b 2 / a d - b^2/a d − b 2 / a 。一般地,它是 D \mathbf{D} D 去掉由第一组解释的部分之后剩余的部分。
推导 分块消元
从第二个块行中减去第一个块行的 B ⊤ A − 1 \mathbf{B}^\T\mA^{-1} B ⊤ A − 1 倍。写成矩阵乘积,取 E = [ I 0 − B ⊤ A − 1 I ] \mathbf{E} = \begin{bmatrix} \mI & \mathbf{0} \\ -\mathbf{B}^\T\mA^{-1} & \mI \end{bmatrix} E = [ I − B ⊤ A − 1 0 I ] ,有 E M = [ A B 0 S ] \mathbf{E}\mathbf{M} = \begin{bmatrix} \mA & \mathbf{B} \\ \mathbf{0} & \mathbf{S} \end{bmatrix} EM = [ A 0 B S ] ,因为右下块变成了 D − B ⊤ A − 1 B \mathbf{D} - \mathbf{B}^\T\mA^{-1}\mathbf{B} D − B ⊤ A − 1 B 。
对列做同样的操作:右乘 E ⊤ \mathbf{E}^\T E ⊤ 消去右上块,又因为 A \mA A 是对称的,所以 E M E ⊤ = [ A 0 0 S ] \mathbf{E}\mathbf{M}\mathbf{E}^\T = \begin{bmatrix} \mA & \mathbf{0} \\ \mathbf{0} & \mathbf{S} \end{bmatrix} EM E ⊤ = [ A 0 0 S ] 。
E \mathbf{E} E 是可逆的:把非对角块的符号取反,即得其逆。所以 M = E − 1 [ A 0 0 S ] E − ⊤ \mathbf{M} = \mathbf{E}^{-1}\begin{bmatrix} \mA & \mathbf{0} \\ \mathbf{0} & \mathbf{S} \end{bmatrix}\mathbf{E}^{-\T} M = E − 1 [ A 0 0 S ] E − ⊤ 。
由此得出三个推论,本书后文都会用到。
行列式。 E \mathbf{E} E 是对角块为单位矩阵的分块三角矩阵,所以它的行列式为 1,并且 det M = det A ⋅ det S \det\mathbf{M} = \det\mA \cdot \det\mathbf{S} det M = det A ⋅ det S 。
正定性。 对任意向量 w \vw w ,令 v = E − ⊤ w \mathbf{v} = \mathbf{E}^{-\T}\vw v = E − ⊤ w ;则 w ⊤ M w = v 1 ⊤ A v 1 + v 2 ⊤ S v 2 \vw^\T\mathbf{M}\vw = \mathbf{v}_1^\T\mA\mathbf{v}_1 + \mathbf{v}_2^\T\mathbf{S}\mathbf{v}_2 w ⊤ Mw = v 1 ⊤ A v 1 + v 2 ⊤ S v 2 ,其中 v 1 \mathbf{v}_1 v 1 与 v 2 \mathbf{v}_2 v 2 是 v \mathbf{v} v 的两部分。所以 M \mathbf{M} M 正定,当且仅当 A \mA A 与它的 Schur 补 S \mathbf{S} S 都正定。这就是不可能的三元组的精确表述:考虑 x 1 x_1 x 1 之后,x 2 x_2 x 2 与 x 3 x_3 x 3 的剩余部分仍必须构成有效的协方差(习题 3.2 )。
逆矩阵。 对第 3 步逐块求逆,利用 ( E − 1 ) − 1 = E (\mathbf{E}^{-1})^{-1} = \mathbf{E} ( E − 1 ) − 1 = E ,得到 M − 1 = E ⊤ [ A − 1 0 0 S − 1 ] E \mathbf{M}^{-1} = \mathbf{E}^\T \begin{bmatrix} \mA^{-1} & \mathbf{0} \\ \mathbf{0} & \mathbf{S}^{-1} \end{bmatrix} \mathbf{E} M − 1 = E ⊤ [ A − 1 0 0 S − 1 ] E ,乘开得
M − 1 = [ A − 1 + A − 1 B S − 1 B ⊤ A − 1 − A − 1 B S − 1 − S − 1 B ⊤ A − 1 S − 1 ] . \mathbf{M}^{-1} =
\begin{bmatrix}
\mA^{-1} + \mA^{-1}\mathbf{B}\mathbf{S}^{-1}\mathbf{B}^\T\mA^{-1} & -\mA^{-1}\mathbf{B}\mathbf{S}^{-1} \\
-\mathbf{S}^{-1}\mathbf{B}^\T\mA^{-1} & \mathbf{S}^{-1}
\end{bmatrix}. M − 1 = [ A − 1 + A − 1 B S − 1 B ⊤ A − 1 − S − 1 B ⊤ A − 1 − A − 1 B S − 1 S − 1 ] . (3.9)
逆矩阵的右下块是 Schur 补的逆。第 4.5 节 将用到这一点:取 A \mA A 为已观测值的协方差、D \mathbf{D} D 为未观测值的协方差,证明条件化之后的协方差就是 Schur 补 D − B ⊤ A − 1 B \mathbf{D} - \mathbf{B}^\T\mA^{-1}\mathbf{B} D − B ⊤ A − 1 B ,即先验协方差减去观测所解释的部分。第 8.1 节 是同一个公式,只是各块换成了核矩阵;第 B.1 节 与第 B.2 节 把它与相关的恒等式汇集在一起(Petersen 与 Pedersen,2012 ) 。
3.7.3 增加一个观测 #
从分块的角度,还可以看出如何低成本地更新 Cholesky 因子,而贝叶斯优化器每次评估之后都需要这样做。假设对目前已观测的 n n n 个输入有 K = L L ⊤ \mK = \mL\mL^\T K = L L ⊤ ,现在来了一个新输入,它与旧输入的协方差为 k \vk k ,自身方差为 κ \kappa κ 。新的核矩阵及其因子具有如下分块形式
[ K k k ⊤ κ ] = [ L 0 l ⊤ l ∗ ] [ L ⊤ l 0 ⊤ l ∗ ] . \begin{bmatrix} \mK & \vk \\ \vk^\T & \kappa \end{bmatrix}
= \begin{bmatrix} \mL & \mathbf{0} \\ \mathbf{l}^\T & l_{\ast} \end{bmatrix}
\begin{bmatrix} \mL^\T & \mathbf{l} \\ \mathbf{0}^\T & l_{\ast} \end{bmatrix}. [ K k ⊤ k κ ] = [ L l ⊤ 0 l ∗ ] [ L ⊤ 0 ⊤ l l ∗ ] .
比较各块,得 L l = k \mL\mathbf{l} = \vk Ll = k ,即一次代价为 O ( n 2 ) O(n^2) O ( n 2 ) 的前代;以及 l ∗ 2 = κ − l ⊤ l l_{\ast}^2 = \kappa - \mathbf{l}^\T\mathbf{l} l ∗ 2 = κ − l ⊤ l 。由于 l ⊤ l = k ⊤ L − ⊤ L − 1 k = k ⊤ K − 1 k \mathbf{l}^\T\mathbf{l} = \vk^\T\mL^{-\T}\mL^{-1}\vk = \vk^\T\mK^{-1}\vk l ⊤ l = k ⊤ L − ⊤ L − 1 k = k ⊤ K − 1 k ,新对角元的平方是 κ − k ⊤ K − 1 k \kappa - \vk^\T\mK^{-1}\vk κ − k ⊤ K − 1 k ,即 K \mK K 的 Schur 补,它也是高斯过程在新输入处的后验方差(式(8.3) )。只要核函数的设置保持不变,把因子扩大一行只需 O ( n 2 ) O(n^2) O ( n 2 ) ,而不必从头花费 O ( n 3 ) O(n^3) O ( n 3 ) 。如果没有观测噪声,而新输入又与某个旧输入重合,l ∗ l_{\ast} l ∗ 就为零,分解随之失败:矩阵已经变为奇异,原因见第 3.3.2 节 。
第 3.7 节引用的文献 1 Petersen 与 Pedersen(2012) The Matrix Cookbook
3.8 习题 #
习题 3.1
设 A = [ 4 2 2 3 ] \mA = \begin{bmatrix} 4 & 2 \\ 2 & 3 \end{bmatrix} A = [ 4 2 2 3 ] 。(a)手算它的 Cholesky 因子。(b)用它求 det A \det\mA det A ,并用 a d − b c ad - bc a d − b c 检验。(c)用前代与回代解 A x = ( 2 , 4 ) ⊤ \mA\vx = (2, 4)^\T Ax = ( 2 , 4 ) ⊤ 。
解答
(a)由 2 × 2 2 \times 2 2 × 2 的推导,l 11 = 4 = 2 l_{11} = \sqrt{4} = 2 l 11 = 4 = 2 ,l 21 = 2 / 2 = 1 l_{21} = 2/2 = 1 l 21 = 2/2 = 1 ,l 22 = 3 − 1 = 2 l_{22} = \sqrt{3 - 1} = \sqrt{2} l 22 = 3 − 1 = 2 ,所以 L = [ 2 0 1 2 ] \mL = \begin{bmatrix} 2 & 0 \\ 1 & \sqrt2 \end{bmatrix} L = [ 2 1 0 2 ] 。
(b)det A = ( l 11 l 22 ) 2 = ( 2 2 ) 2 = 8 \det\mA = (l_{11}l_{22})^2 = (2\sqrt2)^2 = 8 det A = ( l 11 l 22 ) 2 = ( 2 2 ) 2 = 8 ,而 4 ⋅ 3 − 2 ⋅ 2 = 8 4 \cdot 3 - 2 \cdot 2 = 8 4 ⋅ 3 − 2 ⋅ 2 = 8 。
(c)前代:z 1 = 2 / 2 = 1 z_1 = 2/2 = 1 z 1 = 2/2 = 1 ,z 2 = ( 4 − 1 ⋅ 1 ) / 2 = 3 / 2 z_2 = (4 - 1 \cdot 1)/\sqrt2 = 3/\sqrt2 z 2 = ( 4 − 1 ⋅ 1 ) / 2 = 3/ 2 。回代,其中 L ⊤ = [ 2 1 0 2 ] \mL^\T = \begin{bmatrix} 2 & 1 \\ 0 & \sqrt2 \end{bmatrix} L ⊤ = [ 2 0 1 2 ] :x 2 = ( 3 / 2 ) / 2 = 1.5 x_2 = (3/\sqrt2)/\sqrt2 = 1.5 x 2 = ( 3/ 2 ) / 2 = 1.5 ,x 1 = ( 1 − 1.5 ) / 2 = − 0.25 x_1 = (1 - 1.5)/2 = -0.25 x 1 = ( 1 − 1.5 ) /2 = − 0.25 。检验:4 ( − 0.25 ) + 2 ( 1.5 ) = 2 4(-0.25) + 2(1.5) = 2 4 ( − 0.25 ) + 2 ( 1.5 ) = 2 ,2 ( − 0.25 ) + 3 ( 1.5 ) = 4 2(-0.25) + 3(1.5) = 4 2 ( − 0.25 ) + 3 ( 1.5 ) = 4 。这正是第 3.5.4 节 中的代码示例打印出的数。
习题 3.2
三个变量的方差都为一,且 ρ 12 = ρ 13 = 0.8 \rho_{12} = \rho_{13} = 0.8 ρ 12 = ρ 13 = 0.8 。利用第一个变量的 Schur 补,求出使协方差矩阵正定的所有 ρ 23 \rho_{23} ρ 23 值,并解释这个 Schur 补的含义。
解答
按 A = [ 1 ] \mA = [1] A = [ 1 ] 、B = ( 0.8 , 0.8 ) \mathbf{B} = (0.8, 0.8) B = ( 0.8 , 0.8 ) 、D = [ 1 ρ 23 ρ 23 1 ] \mathbf{D} = \begin{bmatrix} 1 & \rho_{23} \\ \rho_{23} & 1 \end{bmatrix} D = [ 1 ρ 23 ρ 23 1 ] 分块。于是
S = D − B ⊤ B = [ 0.36 ρ 23 − 0.64 ρ 23 − 0.64 0.36 ] . \mathbf{S} = \mathbf{D} - \mathbf{B}^\T\mathbf{B}
= \begin{bmatrix} 0.36 & \rho_{23} - 0.64 \\ \rho_{23} - 0.64 & 0.36 \end{bmatrix}. S = D − B ⊤ B = [ 0.36 ρ 23 − 0.64 ρ 23 − 0.64 0.36 ] .
由于 A = [ 1 ] \mA = [1] A = [ 1 ] 是正定的,整个矩阵正定当且仅当 S \mathbf{S} S 正定;对于对角元为正的 2 × 2 2 \times 2 2 × 2 矩阵,这意味着 det S = 0.36 2 − ( ρ 23 − 0.64 ) 2 > 0 \det\mathbf{S} = 0.36^2 - (\rho_{23} - 0.64)^2 > 0 det S = 0.3 6 2 − ( ρ 23 − 0.64 ) 2 > 0 ,所以 ∣ ρ 23 − 0.64 ∣ < 0.36 \lvert\rho_{23} - 0.64\rvert < 0.36 ∣ ρ 23 − 0.64 ∣ < 0.36 ,即 0.28 < ρ 23 < 1 0.28 < \rho_{23} < 1 0.28 < ρ 23 < 1 。这正是图 3.2 中椭球重新出现之处。S \mathbf{S} S 是去掉由 x 1 x_1 x 1 解释的部分之后 x 2 x_2 x 2 与 x 3 x_3 x 3 的协方差(第 4.5 节 ):两者各自保留方差 1 − 0.8 2 = 0.36 1 - 0.8^2 = 0.36 1 − 0. 8 2 = 0.36 ,而二者剩余的协方差 ρ 23 − 0.64 \rho_{23} - 0.64 ρ 23 − 0.64 必须有效,即绝对值至多为 0.36。
习题 3.4
在第 3.7.3 节 中,假设观测带有噪声,因此要分解的矩阵是 K + σ n 2 I \mK + \sigma_n^2\mI K + σ n 2 I 。此时新的对角元 l ∗ 2 l_{\ast}^2 l ∗ 2 是多少?证明即使新输入与某个旧输入重合,它也不可能再为零。
解答
新矩阵的角上是 κ + σ n 2 \kappa + \sigma_n^2 κ + σ n 2 ,原来的块是 K + σ n 2 I \mK + \sigma_n^2\mI K + σ n 2 I ,所以 l ∗ 2 = κ + σ n 2 − k ⊤ ( K + σ n 2 I ) − 1 k l_{\ast}^2 = \kappa + \sigma_n^2 - \vk^\T(\mK + \sigma_n^2\mI)^{-1}\vk l ∗ 2 = κ + σ n 2 − k ⊤ ( K + σ n 2 I ) − 1 k 。量 κ − k ⊤ ( K + σ n 2 I ) − 1 k \kappa - \vk^\T(\mK + \sigma_n^2\mI)^{-1}\vk κ − k ⊤ ( K + σ n 2 I ) − 1 k 是带噪声时 f f f 在新输入处的后验方差,即式(8.6) 中的 σ 2 ( x ) \sigma^2(\vx) σ 2 ( x ) ,所以 l ∗ 2 = σ 2 ( x ) + σ n 2 l_{\ast}^2 = \sigma^2(\vx) + \sigma_n^2 l ∗ 2 = σ 2 ( x ) + σ n 2 ,也就是在该处做一次新的带噪声测量的方差。由于 σ 2 ( x ) ≥ 0 \sigma^2(\vx) \ge 0 σ 2 ( x ) ≥ 0 ,有 l ∗ 2 ≥ σ n 2 > 0 l_{\ast}^2 \ge \sigma_n^2 > 0 l ∗ 2 ≥ σ n 2 > 0 :观测噪声使矩阵保持正定,这就是带噪声的模型很少需要抖动项的原因。
延伸阅读 #
参考文献
Gardner, J. R., Pleiss, G., Bindel, D., Weinberger, K. Q., and Wilson, A. G. (2018) . GPyTorch: Blackbox Matrix-Matrix Gaussian Process Inference with GPU Acceleration . Advances in Neural Information Processing Systems 31 (NeurIPS 2018) . 引用于 §3.5
Golub, G. H., and Van Loan, C. F. (2013) . Matrix Computations . Johns Hopkins University Press . 引用于 §3.4 §3.5
Higham, N. J. (2002) . Computing the Nearest Correlation Matrix: A Problem from Finance . IMA Journal of Numerical Analysis . 引用于 §3.3
Petersen, K. B., and Pedersen, M. S. (2012) . The Matrix Cookbook . Technical University of Denmark . 非同行评审 引用于 §3.7
Rasmussen, C. E., and Williams, C. K. I. (2006) . Gaussian Processes for Machine Learning . MIT Press .
Sanderson, G. (2016) . Essence of Linear Algebra . Video series, 3Blue1Brown . 非同行评审
Snoek, J., Larochelle, H., and Adams, R. P. (2012) . Practical Bayesian Optimization of Machine Learning Algorithms . Advances in Neural Information Processing Systems 25 (NeurIPS 2012) . 引用于 §3.1
Strang, G. (2016) . Introduction to Linear Algebra . Wellesley-Cambridge Press . 引用于 §3.4