Skip to content

第1章 线性代数 — 机器学习之基石

Chapter 1: Linear Algebra — The Foundation of Machine Learning

线性代数是机器学习的数学语言。 从数据表示(向量/矩阵)到模型训练(梯度/优化),再到高级技术(PCA/降维),线性代数贯穿始终。本章只讲 ML 最必需的 主题,确保你理解几何直觉之后再接触数学公式,并用 NumPy 逐一验证。

Linear Algebra is the language of Machine Learning. From data representation (vectors/matrices) to model training (gradients/optimization) and advanced techniques (PCA/dimensionality reduction), linear algebra is everywhere. This chapter covers only ML-essential topics — geometric intuition first, mathematics second, NumPy verification always.

前置知识 (Prerequisites): 高中数学(向量基本概念、函数求导) 依赖库 (Dependencies): numpy, scipy, matplotlib


目录 (Table of Contents)

  1. 向量与向量空间 (Vectors & Vector Spaces)
  2. 矩阵及其运算 (Matrix Operations)
  3. 特征值与特征向量 (Eigenvalues & Eigenvectors)
  4. 奇异值分解 SVD (Singular Value Decomposition)
  5. 矩阵微积分 (Matrix Calculus)

1. 向量与向量空间 (Vectors & Vector Spaces)

1.1 几何直觉 (Geometric Intuition)

向量是既有大小又有方向的量。在二维平面上,一个向量可以看作从原点指向某点的箭头:

v=[32]

这个箭头在 x 方向走了 3 步,在 y 方向走了 2 步。三维及以上同理。

为什么 ML 需要向量? 在机器学习中,每个样本(sample)就是一个向量。例如:

  • 房价预测:[面积, 卧室数, 楼层, 房龄] → 4 维向量
  • 图像识别:一张 28×28 像素的灰度图 → 784 维向量
  • NLP:一个词 "apple" → 300 维词向量 (word embedding(/ɪmˈbedɪŋ/))

1.2 数学定义 (Mathematical Definition)

定义 1 (向量): 向量 vRnn 个有序实数的元组:

v=[v1v2vn]

定义 2 (向量空间): 向量空间 Rn 是所有 n 维向量的集合,在加法和数乘下封闭:

  • 加法封闭:u+vRn
  • 数乘封闭:cvRn (对任意 cR)

1.3 点积 (Dot Product)

两个同维度向量的点积是 ML 中最基本的运算之一:

uv=i=1nuivi=u1v1+u2v2++unvn

几何意义: uv=uvcosθ,其中 θ 是两个向量间的夹角。

  • uv>0 → 夹角 < 90° (方向相近)
  • uv=0 → 夹角 = 90° (正交/垂直)
  • uv<0 → 夹角 > 90° (方向相反)

在 ML 中的应用: 注意力(attention /əˈtenʃən/)机制 (Attention) 的核(kernel /ˈkɜːrnl/)心就是计算 query 与 key 的点积来衡量相似度。

1.4 范数 (Norm)

定义 3 (Lp 范数): 向量 vLp 范数定义为:

vp=(i=1n|vi|p)1/p

最常用的两种:

L2 范数(欧几里得范数): 就是向量的"长度":

v2=v12+v22++vn2

L1 范数(曼哈顿范数): 各分量绝对值之和:

v1=i=1n|vi|

在 ML 中的应用:

  • L2 范数用于权重衰减 (weight decay / ridge regression(/rɪˈɡreʃən/))
  • L1 范数用于稀疏化 (Lasso regression)
python
import numpy as np

u = np.array([3, 2])
v = np.array([1, 4])

dot_product = np.dot(u, v)          # 3*1 + 2*4 = 11
norm_l2 = np.linalg.norm(u)         # sqrt(3^2 + 2^2) ≈ 3.606
norm_l1 = np.linalg.norm(u, ord=1)  # |3| + |2| = 5

1.5 线性无关与基 (Linear Independence & Basis)

定义 4 (线性无关): 一组向量 {v1,v2,...,vk} 线性无关,当且仅当:

c1v1+c2v2++ckvk=0

的唯一解是 c1=c2==ck=0

基 (Basis): Rn 的一组基是 n 个线性无关的向量,它们能张成整个空间。最常用的是标准正交基

e1=[100],e2=[010],,en=[001]

关键洞察: 选择不同的基,就选择了不同的表示方式。 这正是 PCA 和特征分解的核心思想。


2. 矩阵及其运算 (Matrix Operations)

2.1 矩阵的定义 (Definition)

矩阵是二维数组,可以理解为"排列在一起的多个列向量"或"多个行向量":

Am×n=[a11a12a1na21a22a2nam1am2amn]

m = 行数,n = 列数。如果 m=n,称为方阵 (square matrix)

在 ML 中的应用:

  • 数据集 (Dataset): 一个 m×n 的矩阵,m 个样本,每个样本 n 个特征
  • 权重矩阵 (Weight Matrix): 神经网络的每一层都是一个矩阵乘法 Wx
  • 协方差矩阵 (Covariance Matrix): 衡量特征间的关系

2.2 矩阵乘法 (Matrix Multiplication)

给定 Am×nBn×p,乘积 C=ABm×p 矩阵:

cij=k=1naikbkj

几何意义: 矩阵乘法可以看作线性变换的复合。矩阵 A 作用于向量 x 得到 Ax,相当于对空间做了一个变换(旋转、缩放、剪切等)。

python
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
C = A @ B  # 或 np.matmul(A, B)
# [[19, 22],
#  [43, 50]]

2.3 转置 (Transpose)

将矩阵的行和列互换:

(A)ij=aji

重要性质:(AB)=BA

2.4 逆矩阵 (Matrix Inverse)

定义 5 (逆矩阵): 对方阵 A,如果存在矩阵 A1 使得:

AA1=A1A=I

A 称为可逆 (invertible) 或非奇异 (non-singular)。

何时不可逆? 当矩阵的行或列线性相关时(行列式为 0)。

python
A = np.array([[1, 2], [3, 4]])
A_inv = np.linalg.inv(A)
# [[-2. ,  1. ],
#  [ 1.5, -0.5]]

# 验证: A @ A_inv ≈ I
np.allclose(A @ A_inv, np.eye(2))  # True

2.5 行列式 (Determinant)

方阵 A 的行列式 det(A) 是一个标量(scalar /ˈskeɪlər/),衡量线性变换的缩放因子

  • |det(A)|>1:变换后空间被放大
  • |det(A)|<1:变换后空间被压缩
  • det(A)=0:变换将空间压扁到低维(矩阵奇异,不可逆)
  • det(A)<0:变换改变了空间定向(镜像翻转)
python
det_A = np.linalg.det(A)  # -2.0

3. 特征值与特征向量 (Eigenvalues & Eigenvectors)

3.1 几何直觉 (Geometric Intuition)

矩阵 A 作用于向量 x,通常既改变方向又改变长度。但存在一些特殊向量,A 只改变它们的长度,不改变方向

Av=λv
  • v特征向量 (eigenvector) — 方向不变
  • λ特征值 (eigenvalue) — 缩放倍数

想象一下: 把一个矩形图片拉伸。大多数方向上的线段会改变方向,但沿长轴和短轴的方向只改变长度——这些就是特征向量方向。

3.2 如何求解 (How to Solve)

从定义出发:

Av=λvAvλv=0(AλI)v=0

要求非零解 v,必须有:

det(AλI)=0

这个方程称为特征方程 (characteristic equation),是一个关于 λn 次多项式。

3.3 特征分解 (Eigendecomposition)

如果 An 个线性无关的特征向量,可以写成:

A=VΛV1

其中 V 的列是特征向量,Λ 是对角矩阵(对角线上是特征值)。

对对称矩阵的特殊性质:A=A,则:

  • 所有特征值为实数
  • 特征向量可以选为正交
  • A=QΛQ,其中 Q 是正交矩阵 (Q=Q1)
python
A = np.array([[2, 1], [1, 2]])
eigvals, eigvecs = np.linalg.eig(A)

print(eigvals)  # [3., 1.]
print(eigvecs)  # [[ 0.707, -0.707],
                #  [ 0.707,  0.707]]

# 验证: A @ v = λ v
v = eigvecs[:, 0]
l = eigvals[0]
np.allclose(A @ v, l * v)  # True

3.4 在 ML 中的应用

  1. 主成分分析 (PCA): 数据协方差矩阵的最大特征值对应的特征向量就是第一主成分方向
  2. 谱聚类 (Spectral Clustering): 利用图 Laplacian 矩阵的特征向量进行聚类
  3. PageRank: 网页排名本质上是一个特征向量问题
  4. 动力系统: 特征值决定系统的稳定性(所有 |λ|<1 则系统稳定)

4. 奇异值分解 SVD (Singular Value Decomposition)

4.1 为什么需要 SVD?

特征分解要求矩阵是方阵。但现实中的数据矩阵几乎都是非方阵(m 个样本 ×n 个特征)。SVD 是特征分解对任意矩阵的推广,被誉为"线性代数的瑞士军刀"。

4.2 SVD 的定义 (Definition)

任意矩阵 Am×n 可以分解为:

A=UΣV
  • Um×m:左奇异向量 (left singular vectors),正交矩阵
  • Σm×n:奇异值矩阵 (singular values),对角线上 σ1σ2σr>0,其余为 0
  • Vn×n:右奇异向量 (right singular vectors),正交矩阵

4.3 几何直觉 (Geometric Intuition)

SVD 将一个线性变换分解为三个步骤:

  1. 旋转/反射 (V) — 在原始空间中对输入进行旋转
  2. 缩放 (Σ) — 沿新坐标轴拉伸/压缩
  3. 旋转/反射 (U) — 在输出空间中对结果旋转

关键洞察: 奇异值 σi 衡量了该方向上的"重要性"。最大的奇异值对应数据方差最大的方向。

4.4 SVD 与 PCA 的关系

PCA 可以完全通过 SVD 实现,不需要计算协方差矩阵

  1. 中心化数据矩阵 X(每列减去均值)
  2. 计算 SVD: X=UΣV
  3. 主成分 = V 的列(右奇异向量)
  4. 投影后数据 = UΣ(主成分得分)

为什么 SVD 更稳定? 计算协方差矩阵 XX 会平方条件数(condition number),导致数值不稳定。直接对 X 做 SVD 避免了这个问题。

4.5 低秩近似 (Low-rank Approximation)

SVD 最重要的应用之一:用前 k 个最大的奇异值来近似原矩阵:

AAk=i=1kσiuivi
python
# 低秩近似示例: 用前 2 个奇异值近似 4×4 矩阵
A = np.random.randn(4, 4)
U, S, Vt = np.linalg.svd(A, full_matrices=False)

k = 2
A_k = U[:, :k] @ np.diag(S[:k]) @ Vt[:k, :]

# 检查近似误差
error = np.linalg.norm(A - A_k, 'fro')
print(f"k={k} 近似误差: {error:.4f}")

在 ML 中的应用:

  • 图像压缩: 保留最大的奇异值,丢弃小奇异值
  • 推荐系统: 矩阵分解 (Matrix Factorization) 基于 SVD
  • 降维: 用 SVD 实现 PCA,将数据降到 k
  • 去噪: 小奇异值通常对应噪声,截断后可去噪

5. 矩阵微积分 (Matrix Calculus)

5.1 为什么需要矩阵微积分?

机器学习中,我们的目标函数通常是标量函数 f 对向量或矩阵参数(parameter /pəˈræmɪtər/) w 的求导。这是反向传播(backpropagation /ˌbækprəpəˈɡeɪʃən/) (backpropagation) 的数学基础。

5.2 标量对向量的导数 (Gradient)

给定 f:RnR,梯度(gradient /ˈɡreɪdiənt/) fn 维向量:

f(x)=[fx1fx2fxn]

几何意义: 梯度指向函数 f 在点 x增长最快的方向。这正是梯度上升/下降的理论基础。

5.3 三个关键公式 (Three Essential Formulas)

在 ML 中,你只需要记住以下三个公式(记熟它们,反向传播不再神秘):

公式 1: 线性函数

f(x)=ax=a1x1+a2x2++anxnf(x)=a

公式 2: 二次型 (Quadratic Form)

f(x)=xAxf(x)=(A+A)x

特例 — 若 A 是对称矩阵 (A=A):

f(x)=2Ax

公式 3: 平方范数 (Squared Norm)

f(x)=x22=xxf(x)=2x

💡 这些公式为什么重要? 线性回归的损失函数 L(w)=Xwy22 展开后就是一个二次型。用公式 2 求梯度再令其为 0,就能推导出正规方程 (normal equation) w=(XX)1Xy

5.4 链式法则 (Chain Rule)

f(g(x))g:RnRm,则:

xf(g(x))=Jg(x)gf

其中 JgRm×n 是 Jacobian 矩阵:

Jg=[g1x1g1xngmx1gmxn]

这就是反向传播的理论基础 ❤️

5.5 示例: 线性回归的梯度推导

损失函数:L(w)=1mXwy22

展开:

L(w)=1m(Xwy)(Xwy)

z=Xwy,则 L=1mzz

Lw=1m2zzw=2mzX

所以梯度为:

L(w)=2mX(Xwy)

本章总结 (Chapter Summary)

概念数学表达ML 应用NumPy 关键函数
向量vRn样本表示、词嵌入np.array()
点积uv=uivi注意力机制、相似度np.dot()
范数|v|p正则化(regularization /ˌreɡjələraɪˈzeɪʃən/) (L1/L2)np.linalg.norm()
矩阵乘法C=AB神经网络前向传播@, np.matmul()
逆矩阵A1正规方程np.linalg.inv()
行列式det(A)特征值计算np.linalg.det()
特征分解A=VΛV1PCA、谱聚类np.linalg.eig()
SVDA=UΣVPCA、降维、压缩np.linalg.svd()
梯度f(x)梯度下降、反向传播手动推导

进一步阅读 (Further Reading)


下一章预告: 概率论与信息论 — 不确定性、熵(entropy /ˈentrəpi/)、KL 散度,为理解交叉熵损失和信息论打下基础。