3. 单位矩阵和逆矩阵
线性代数提供了被称为 矩阵逆(matrix inversion)的强大工具。对于大多数矩阵 A,我们都能通过矩阵逆解析地求解式 。
为了描述矩阵逆,我们首先需要定义单位矩阵(identity matrix)的概念。任意向量和单位矩阵相乘,都不会改变。我们将保持 n 维向量不变的单位矩阵记作
I
n
I_n
In。形式上,
I
n
∈
R
n
×
n
,
∀
x
∈
R
n
,
I
n
x
=
x
.
I_n ∈ R_{n×n},\\ ∀_x ∈ R_n, I_nx = x.
In∈Rn×n,∀x∈Rn,Inx=x.
单位矩阵的结构很简单:所有沿主对角线的元素都是 1,而所有其他位置的元素都是0。
[
1
0
0
0
1
0
0
0
1
]
\left[ \begin{matrix} 1&0&0\\ 0&1&0\\ 0&0&1\\ \end{matrix} \right]
⎣⎡100010001⎦⎤
矩阵 A 的 矩阵逆(matrix inversion)记作
A
−
1
A^{-1}
A−1,其定义的矩阵满足如下条件
A
−
1
A
=
I
n
.
A^{-1} A = I_n.
A−1A=In.
现在我们可以通过以下步骤求解式
A
x
=
b
A
−
1
A
x
=
A
−
1
b
I
n
x
=
A
−
1
b
x
=
A
−
1
b
.
Ax = b \\ A^{-1}Ax = A^{-1}b\\ I_nx = A^{-1}b \\ x = A^{-1}b.
Ax=bA−1Ax=A−1bInx=A−1bx=A−1b.
当然,这取决于我们能否找到一个逆矩阵
A
−
1
A^{-1}
A−1。在接下来的,我们会讨论逆矩阵
A
−
1
A^{-1}
A−1存在的条件。
当逆矩阵
A
−
1
A^{-1}
A−1存在时,有几种不同的算法都能找到它的闭解形式。理论上,相同的逆矩阵可用于多次求解不同向量 b 的方程。然而,逆矩阵
A
−
1
A^{-1}
A−1主要是作为理论工具使用的,并不会在大多数软件应用程序中实际使用。这是因为逆矩阵
A
−
1
A^{-1}
A−1 在数字计算机上只能表现出有限的精度,有效使用向量 b 的算法通常可以得到更精确的x。
4 线性相关和生成子空间
设
α
1
,
α
2
,
.
.
.
,
α
m
α_1,α_2,...,α_m
α1,α2,...,αm 是
R
n
Rn
Rn 中任一组向量。记
α
1
,
α
2
,
.
.
.
,
α
m
α_1,α_2,...,α_m
α1,α2,...,αm 的所有线性组合的集合为
s
p
a
n
(
α
1
,
α
2
,
.
.
.
,
α
m
)
span(α_1,α_2,...,α_m)
span(α1,α2,...,αm) ,即
s
p
a
n
(
α
1
,
α
2
,
.
.
.
,
α
m
)
=
k
1
α
1
+
k
2
α
2
+
.
.
.
+
k
i
α
i
+
.
.
.
+
k
m
α
m
k
i
∈
R
,
i
=
1
,
2
,
.
.
.
,
m
.
span(α_1,α_2,...,α_m) = {k_1α_1+k_2α_2+...+k_iα_i+...+k_mα_m}\\ k_i∈ R,i = 1,2,...,m.
span(α1,α2,...,αm)=k1α1+k2α2+...+kiαi+...+kmαmki∈R,i=1,2,...,m.
称
s
p
a
n
(
α
1
,
α
2
,
.
.
.
,
α
m
)
span(α_1,α_2,...,α_m)
span(α1,α2,...,αm) 为向量组
α
1
,
α
2
,
.
.
.
,
α
m
α_1,α_2,...,α_m
α1,α2,...,αm 生成的子空间。
如果逆矩阵
A
−
1
A^{-1}
A−1 存在,那么式
A
x
=
b
Ax=b
Ax=b 肯定对于每一个向量 b 恰好存在一个解。
但是,对于方程组而言,对于向量 b 的某些值,有可能不存在解,或者存在无限多个解。
存在多于一个解但是少于无限多个解的情况是不可能发生的;因为如果 x 和 y 都是某方程组的解,则
z
=
α
x
+
(
1
−
α
)
y
z = αx + (1 - α)y
z=αx+(1−α)y(其中 α 取任意实数)也是该方程组的解。
为了分析方程有多少个解,我们可以将 A 的列向量看作从 原点(origin)(元素都是零的向量)出发的不同方向,确定有多少种方法可以到达向量 b。
在这个观点下,向量 x 中的每个元素表示我们应该沿着这些方向走多远,即
x
i
x_i
xi 表示我们需要沿着第 i 个向量的方向走多远:
A
x
=
∑
i
x
i
A
:
,
i
.
Ax = ∑_i x_iA_{:,i}.
Ax=i∑xiA:,i.一般而言,这种操作被称为 线性组合(linear combination)。形式上,一组向量的线性组合,是指每个向量乘以对应标量系数之后的和,即:
∑
i
c
i
v
(
i
)
.
∑_i c_iv^{(i)}.
i∑civ(i).一组向量的 生成子空间(span)是原始向量线性组合后所能抵达的点的集合。确定
A
x
=
b
Ax = b
Ax=b 是否有解相当于确定向量 b 是否在 A 列向量的生成子空间中。这
个特殊的生成子空间被称为 A 的 列空间(column space)或者 A 的 值域(range)。
为了使方程
A
x
=
b
Ax = b
Ax=b 对于任意向量
b
∈
R
m
b ∈ R_m
b∈Rm 都存在解,我们要求 A 的列空间构成整个
R
m
R_m
Rm。如果
R
m
R_m
Rm 中的某个点不在 A 的列空间中,那么该点对应的 b 会使得该方程没有解。矩阵 A 的列空间是整个
R
m
R_m
Rm 的要求,意味着 A 至少有 m 列,即n ≥ m。否则,A 列空间的维数会小于 m。
例如,假设 A 是一个 3 × 2 的矩阵。目标 b 是 3 维的,但是
x
x
x 只有 2 维。所以无论如何修改
x
x
x 的值,也只能描绘出
R
3
R_3
R3 空间中的二维平面。当且仅当向量 b 在该二维平面中时,该方程有解。
不等式
n
≥
m
n ≥ m
n≥m 仅是方程对每一点都有解的必要条件。这不是一个充分条件,因为有些列向量可能是冗余的。假设有一个
R
2
×
2
R_{2×2}
R2×2 中的矩阵,它的两个列向量是相同的。那么它的列空间和它的一个列向量作为矩阵的列空间是一样的。换言之,虽然该矩阵有 2 列,但是它的列空间仍然只是一条线,不能涵盖整个 R2 空间。
正式地说,这种冗余被称为 线性相关(linear dependence)。如果一组向量中的任意一个向量都不能表示成其他向量的线性组合,那么这组向量称为 线性无关(linearly independent)。如果某个向量是一组向量中某些向量的线性组合,那么我们将这个向量加入这组向量后不会增加这组向量的生成子空间。这意味着,如果一个矩阵的列空间涵盖整个 Rm,那么该矩阵必须包含至少一组 m 个线性无关的向量。
值得注意的是,这个条件是说该向量集恰好有 m 个线性无关的列向量,而不是至少 m 个。不存在一个 m 维向量的集合具有多于 m 个彼此线性不相关的列向量,但是一个有多于 m 个列向量的矩阵有可能拥有不止一个大小为 m 的线性无关向量集。要想使矩阵可逆,我们还需要保证式
A
x
=
b
Ax=b
Ax=b对于每一个 b 值至多有一个解。为此,我们需要确保该矩阵至多有 m 个列向量。否则,该方程会有不止一个解。综上所述,这意味着该矩阵必须是一个 方阵(square),即 m = n,并且所有列向量都是线性无关的。一个列向量线性相关的方阵被称为 奇异的(singular)。如果矩阵 A 不是一个方阵或者是一个奇异的方阵,该方程仍然可能有解。但是我们不能使用矩阵逆去求解。目前为止,我们已经讨论了逆矩阵左乘。我们也可以定义逆矩阵右乘:
A
A
−
1
=
I
.
AA^{-1} = I.
AA−1=I.
对于方阵而言,它的左逆和右逆是相等的。
5. 范数
有时我们需要衡量一个向量的大小。在机器学习中,我们经常使用被称为 范数(norm)的函数衡量向量大小。形式上, L p L^p Lp 范数定义如下 ∥ x ∥ p = ( ∑ i ∣ x i ∣ p ) 1 / p ∥x∥^p = (∑_i |x_i|^p)^{1/p} ∥x∥p=(i∑∣xi∣p)1/p
其中
p
∈
R
,
p
≥
1
。
p ∈ R,p ≥ 1。
p∈R,p≥1。
范数(包括
L
p
L^p
Lp 范数)是将向量映射到非负值的函数。
直观上来说,向量 x 的范数 衡量 从原点到点 x 的距离。更严格地说,范数是满足下列性质的任意函数:
•
f
(
x
)
=
0
⇒
x
=
0
• f(x) = 0 ⇒ x = 0
•f(x)=0⇒x=0
•
f
(
x
+
y
)
≤
f
(
x
)
+
f
(
y
)
(
三
角
不
等
式
(
t
r
i
a
n
g
l
e
i
n
e
q
u
a
l
i
t
y
)
)
• f(x + y) ≤ f(x) + f(y) ( 三角不等式(triangle inequality))
•f(x+y)≤f(x)+f(y)(三角不等式(triangleinequality))
•
∀
α
∈
R
,
f
(
α
x
)
=
∣
α
∣
f
(
x
)
• ∀α ∈ R, f(αx) = |α|f(x)
•∀α∈R,f(αx)=∣α∣f(x)当 p = 2 时,
L
2
L^2
L2 范数被称为 欧几里得范数(Euclidean norm)。它表示从原点出发到向量 x 确定的点的欧几里得距离。
L
2
L^2
L2 范数在机器学习中出现地十分频繁,经常简化表示为
∥
x
∥
∥x∥
∥x∥,略去了下标 2。
平方
L
2
L^2
L2 范数也经常用来衡量向量的大小,可以简单地通过点积
x
⊤
x
x^⊤x
x⊤x 计算。
平方
L
2
L^2
L2 范数在数学和计算上都比
L
2
L^2
L2 范数本身更方便。例如,平方
L
2
L^2
L2 范数对
x
x
x 中每个元素的导数只取决于对应的元素,而 L2 范数对每个元素的导数却和整个向量相关。但是在很多情况下,平方
L
2
L^2
L2 范数也可能不受欢迎,因为它在原点附近增长得十分缓慢。在某些机器学习应用中,区分恰好是零的元素和非零但值很小的元素是很重要的。在这些情况下,我们转而使用在各个位置斜率相同,同时保持简单的数学形式的函数:
L
1
L^1
L1 范数。
L
1
L^1
L1 范数可以简化如下:
∥
x
∥
1
=
∑
i
∣
x
i
∣
.
∥x∥_1 = ∑_i |x_i|.
∥x∥1=i∑∣xi∣.当机器学习问题中零和非零元素之间的差异非常重要时,通常会使用
L
1
L^1
L1 范数。每当
x
x
x 中某个元素从
0
0
0 增加
ϵ
ϵ
ϵ, 对应的
L
1
L^1
L1 范数也会增加
ϵ
ϵ
ϵ。
有时候我们会统计向量中非零元素的个数来衡量向量的大小。有些作者将这种函数称为 “
L
0
L^0
L0 范数’’,但是这个术语在数学意义上是不对的。向量的非零元素的数目不是范数,因为对向量缩放 α 倍不会改变该向量非零元素的数目。因此,
L
1
L^1
L1 范数经常作为表示非零元素数目的替代函数。
另外一个经常在机器学习中出现的范数是
L
∞
L^∞
L∞ 范数,也被称为 最大范数(max norm)。这个范数表示向量中具有最大幅值的元素的绝对值:
∥
x
∥
∞
=
max
i
∣
x
i
∣
.
∥x∥_∞ = \max_i |x_i|.
∥x∥∞=imax∣xi∣.
有时候我们可能也希望衡量矩阵的大小。在深度学习中,最常见的做法是使用 Frobenius 范数(Frobenius norm),
∣
∣
A
∣
∣
F
=
∑
i
,
j
A
i
,
j
2
,
||A||_F = \sqrt{∑_{i,j}A^2_{i,j} } ,
∣∣A∣∣F=i,j∑Ai,j2,其类似于向量的
L
2
L^2
L2 范数。
两个向量的 点积(dot product)可以用范数来表示。具体地,
x
⊤
y
=
∥
x
∥
2
∥
y
∥
2
c
o
s
θ
x^⊤y = ∥x∥_2 ∥y∥_2 cos θ
x⊤y=∥x∥2∥y∥2cosθ
其中 θ 表示 x 和 y 之间的夹角。
6 特殊类型的矩阵和向量
有些特殊类型的矩阵和向量是特别有用的。
对角矩阵(diagonal matrix)只在主对角线上含有非零元素,其他位置都是零。
形式上,矩阵 D 是对角矩阵,当且仅当对于所有的
i
=
j
,
D
i
,
j
=
0
i = j, D_{i,j} = 0
i=j,Di,j=0。
我们已经看到过一个对角矩阵:单位矩阵,对角元素全部是 1。我们用
d
i
a
g
(
v
)
diag(v)
diag(v) 表示一个对角元素由向量 v 中元素给定的对角方阵。对角矩阵受到关注的部分原因是对角矩阵的乘法计算很高效。
计算乘法
d
i
a
g
(
v
)
x
diag(v)x
diag(v)x,我们只需要将 x 中的每个元素 xi 放大 vi 倍。换言之,
d
i
a
g
(
v
)
x
=
v
⊙
x
diag(v)x = v ⊙ x
diag(v)x=v⊙x。
计算对角方阵的逆矩阵也很高效。对角方阵的逆矩阵存在,当且仅当对角元素都是非零值,在这种情况下,
d
i
a
g
(
v
)
−
1
=
d
i
a
g
(
[
1
/
v
1
,
.
.
.
,
1
/
v
n
]
⊤
)
diag(v)^{-1} = diag([1/v_1, . . . , 1/v_n]^⊤)
diag(v)−1=diag([1/v1,...,1/vn]⊤)。
在很多情况下,我们可以根据任意矩阵导出一些通用的机器学习算法;但通过将一些矩阵限制为对角矩阵,我们可以得到计算代价较低的(并且简明扼要的)算法。
不是所有的对角矩阵都是方阵。长方形的矩阵也有可能是对角矩阵。非方阵的对角矩阵没有逆矩阵,但我们仍然可以高效地计算它们的乘法。
对于一个长方形对角矩阵 D 而言,乘法
D
x
Dx
Dx 会涉及到 x 中每个元素的缩放,如果 D 是瘦长型矩阵,那么在缩放后的末尾添加一些零;如果 D 是胖宽型矩阵,那么在缩放后去掉最后一些元素。
对称(symmetric)矩阵是转置和自己相等的矩阵:
A
=
A
⊤
.
A = A^⊤.
A=A⊤.
当某些不依赖参数顺序的双参数函数生成元素时,对称矩阵经常会出现。
例如,如果 A 是一个距离度量矩阵,
A
i
,
j
A_{i,j}
Ai,j 表示点 i 到点 j 的距离,那么
A
i
,
j
=
A
j
,
i
A_{i,j} = A_{j,i}
Ai,j=Aj,i,因为距离函数是对称的。
单位向量(unit vector)是具有 单位范数(unit norm)的向量:
∥
x
∥
2
=
1.
∥x∥_2 = 1.
∥x∥2=1.
如果
x
⊤
y
=
0
x^⊤y = 0
x⊤y=0,那么向量 x 和向量 y 互相 正交(orthogonal)。
如果两个向量都有非零范数,那么这两个向量之间的夹角是 90 度。在
R
n
R_n
Rn 中,至多有 n 个范数非零向量互相正交。如果这些向量不仅互相正交,并且范数都为 1,那么我们称它们是 标准正交(orthonormal)。
正交矩阵(orthogonal matrix)是指行向量和列向量是分别标准正交的方阵:
A
⊤
A
=
A
A
⊤
=
I
.
A^⊤A = AA^⊤ = I.
A⊤A=AA⊤=I.这意味着
A
−
1
=
A
⊤
,
A^{- 1} = A^⊤,
A−1=A⊤,
所以正交矩阵受到关注是因为求逆计算代价小。我们需要注意正交矩阵的定义。违反直觉的是,正交矩阵的行向量不仅是正交的,还是标准正交的。对于行向量或列向量互相正交但不是标准正交的矩阵,没有对应的专有术语。
7. 特征分解
许多数学对象可以通过将它们分解成多个组成部分或者找到它们的一些属性而更好地理解,这些属性是通用的,而不是由我们选择表示它们的方式产生的。
例如,整数可以分解为质因数。我们可以用十进制或二进制等不同方式表示整数
12
,
但
是
12
=
2
×
2
×
3
12,但是 12 = 2 × 2 × 3
12,但是12=2×2×3 永远是对的。从这个表示中我们可以获得一些有用的信息,比如 12 不能被 5 整除,或者 12 的倍数可以被 3 整除。
正如我们可以通过分解质因数来发现整数的一些内在性质,我们也可以通过分解矩阵来发现矩阵表示成数组元素时不明显的函数性质。
特征分解(eigendecomposition)是使用最广的矩阵分解之一,即我们将矩阵分解成一组特征向量和特征值。
方阵 A 的 特征向量(eigenvector)是指与 A 相乘后相当于对该向量进行缩放的非零向量
v
v
v:
A
v
=
λ
v
.
Av = λv.
Av=λv. 标量
λ
λ
λ 被称为这个特征向量对应的 特征值(eigenvalue)。(类似地,我们也可以定义 左特征向量(left eigenvector)
v
⊤
A
=
λ
v
⊤
v^⊤A = λv^⊤
v⊤A=λv⊤,但是通常我们更关注 右特征向量(right eigenvector))。
如果 v 是 A 的特征向量,那么任何缩放后的向量
s
v
(
s
∈
R
,
s
=
0
)
sv (s ∈ R,s = 0)
sv(s∈R,s=0) 也是 A 的特征向量。此外,sv 和 v 有相同的特征值。基于这个原因,通常我们只考虑单位特征向量。
假设矩阵 A 有 n 个线性无关的特征向量 {
v
(
1
)
,
.
.
.
,
v
(
n
)
v^{(1)}, . . . , v^{(n)}
v(1),...,v(n)} ,对应着特征值 {
λ
1
,
.
.
.
,
λ
n
λ_1, . . . , λ_n
λ1,...,λn}。我们将特征向量连接成一个矩阵,使得每一列是一个特征向量:
V
=
[
v
(
1
)
,
.
.
.
,
v
(
n
)
]
V = [v^{(1)}, . . . , v^{(n)}]
V=[v(1),...,v(n)]. 类似地,我们也可以将特征值连接成一个向量
λ
=
[
λ
1
,
.
.
.
,
λ
n
]
⊤
。
λ = [λ_1, . . . , λ_n]⊤。
λ=[λ1,...,λn]⊤。
因此 A 的 特征分解(eigendecomposition)可以记作
A
=
V
d
i
a
g
(
λ
)
V
−
1
A = Vdiag(λ)V^{-1}
A=Vdiag(λ)V−1
我们已经看到了构建具有特定特征值和特征向量的矩阵,能够使我们在目标方向上延伸空间。然而,我们也常常希望将矩阵 分解(decompose)成特征值和特征向量。这样可以帮助我们分析矩阵的特定性质,就像质因数分解有助于我们理解整数。
不是每一个矩阵都可以分解成特征值和特征向量。在某些情况下,特征分解存在,但是会涉及复数而非实数。具体来讲,每个实对称矩阵都可以分解成实特征向量和实特征值:
A
=
Q
Λ
Q
⊤
.
A = QΛQ^⊤.
A=QΛQ⊤.
其中 Q 是 A 的特征向量组成的正交矩阵,Λ 是对角矩阵。特征值
Λ
i
,
i
Λ_{i,i}
Λi,i 对应的特征向量是矩阵 Q 的第 i 列,记作
Q
:
,
i
Q_{:,i}
Q:,i。因为 Q 是正交矩阵,我们可以将 A 看作沿方向
v
(
i
)
v^{(i)}
v(i) 延展
λ
i
λ_i
λi 倍的空间。
虽然任意一个实对称矩阵 A 都有特征分解,但是特征分解可能并不唯一。如果两个或多个特征向量拥有相同的特征值,那么在由这些特征向量产生的生成子空间中,任意一组正交向量都是该特征值对应的特征向量。因此,我们可以等价地从这些特征向量中构成 Q 作为替代。按照惯例,我们通常按降序排列 Λ 的元素。在该约定下,特征分解唯一当且仅当所有的特征值都是唯一的。
矩阵的特征分解给了我们很多关于矩阵的有用信息。矩阵是奇异的当且仅当含有零特征值。实对称矩阵的特征分解也可以用于优化二次方程
f
(
x
)
=
x
⊤
A
x
f(x) = x^⊤Ax
f(x)=x⊤Ax,其中限制
∥
x
∥
2
=
1
∥x∥_2 = 1
∥x∥2=1。当 x 等于 A 的某个特征向量时,f 将返回对应的特征值。在限制条件下,函数 f 的最大值是最大特征值,最小值是最小特征值。
所有特征值都是正数的矩阵被称为 正定(positive definite);所有特征值都是非负数的矩阵被称为 半正定(positive semidefinite)。同样地,所有特征值都是负数的矩阵被称为 负定(negative definite);所有特征值都是非正数的矩阵被称为 半负定(negative semidefinite)。半正定矩阵受到关注是因为它们保证 ∀x, x⊤Ax ≥ 0。此外,正定矩阵还保证
x
⊤
A
x
=
0
⇒
x
=
0
。
x^⊤Ax = 0 ⇒ x = 0。
x⊤Ax=0⇒x=0。
8. Moore-Penrose 伪逆
对于非方矩阵而言,其逆矩阵没有定义。假设在下面的问题中,我们希望通过矩阵 A 的左逆 B 来求解线性方程,
A
x
=
y
.
Ax = y.
Ax=y.
等式两边左乘左逆 B 后,我们得到
x
=
B
y
.
x = By.
x=By.
取决于问题的形式,我们可能无法设计一个唯一的映射将 A 映射到 B。如果矩阵 A 的行数大于列数,那么上述方程可能没有解。如果矩阵 A 的行数小于列数,那么上述矩阵可能有多个解。
Moore-Penrose 伪逆(Moore-Penrose pseudoinverse)使我们在这类问题上取得了一定的进展。矩阵 A 的伪逆定义为:
A
+
=
lim
α
→
0
(
A
⊤
A
+
α
I
)
−
1
A
⊤
.
A^+ = \lim\limits_{α \rightarrow 0}(A^⊤A + αI)^{-1}A^⊤.
A+=α→0lim(A⊤A+αI)−1A⊤.
计算伪逆的实际算法没有基于这个定义,而是使用下面的公式:
A
+
=
V
D
+
U
⊤
.
A^+ = VD^+U^⊤.
A+=VD+U⊤.
其中,矩阵 U,D 和 V 是矩阵 A奇异值分解后得到的矩阵。对角矩阵 D 的伪逆D+ 是其非零元素取倒数之后再转置得到的。
当矩阵 A 的列数多于行数时,使用伪逆求解线性方程是众多可能解法中的一种。特别地,
x
=
A
+
y
x = A^+y
x=A+y 是方程所有可行解中欧几里得范数
∥
x
∥
2
∥x∥_2
∥x∥2 最小的一个。
当矩阵 A 的行数多于列数时,可能没有解。在这种情况下,通过伪逆得到的 x使得 Ax 和 y 的欧几里得距离
∥
A
x
−
y
∥
2
∥Ax - y∥_2
∥Ax−y∥2 最小。
9. 实例:主成分分析
主成分分析(principal components analysis, PCA)是一个简单的机器学习算法,可以通过基础的线性代数知识推导。