Files
maths-cs-ai-compendium-zh/chapter 01: vectors/01. vector spaces.md
T
flykhan 2536c937e3 feat: 完整中文翻译 maths-cs-ai-compendium(数学·计算机科学·AI 知识大全)
翻译自英文原版 maths-cs-ai-compendium,共 20 章全部完成。

第01章 向量 | 第02章 矩阵 | 第03章 微积分
第04章 统计学 | 第05章 概率论 | 第06章 机器学习
第07章 计算语言学 | 第08章 计算机视觉 | 第09章 音频与语音
第10章 多模态学习 | 第11章 自主系统 | 第12章 图神经网络
第13章 计算与操作系统 | 第14章 数据结构与算法
第15章 生产级软件工程 | 第16章 SIMD与GPU编程
第17章 AI推理 | 第18章 ML系统设计
第19章 应用人工智能 | 第20章 前沿人工智能

翻译说明:
- 所有数学公式 $...$ / $$...$$、代码块、图片引用完整保留
- mkdocs.yml 配置中文导航 + language: zh
- README.md 已翻译为中文(兼 docs/index.md)
- docs/ 目录包含指向各章文件的 symlink
- 约 29,000 行中文内容,排除 .cache/ 构建缓存
2026-05-03 10:23:20 +08:00

148 lines
7.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 向量空间
*向量空间构成了机器学习的数学舞台。本文涵盖向量加法、标量乘法、封闭性公理、子空间,以及为什么AI中几乎所有东西都表示为向量。*
- 将向量空间想象成一种特定类型的舞台,数学对象生活在其中,每个对象被称为一个**向量**。
- 为了机器学习(ML)中的几何直觉,我们始终将向量视为欧几里得空间中的一个点,由其坐标表示。
- 向量 $\mathbf{a}$(数学上用粗体小写字母表示)有 $n$ 个坐标,每个坐标代表沿一个轴的位置。
$$\mathbf{a} = [a_1, a_2, a_3]$$
![向量 a = (3, 2, 4) 在三维空间中沿 x、y、z 轴绘制](../images/vector_3d.svg)
- 向量空间中的向量遵循一套非常具体、不可打破的规则:
- **向量加法(组合)**
你可以取任意两个向量并将它们组合起来创建新向量。
把向量想象成移动的指令。
如果向量 A 表示"向前走 3 步",向量 B 表示"向右走 2 步"
将它们相加(A + B)就创建了一条新的单一指令:"向前走 3 步并向右走 2 步。"
- **标量乘法(缩放)**
你可以使用一个普通数字("标量")来缩放任意向量。
你可以拉伸它、缩小它或反转它。
如果向量 A 是"向前走 3 步",将其乘以 2 就变成"向前走 6 步。"
将其乘以 -1 则完全翻转成"向后走 3 步。"
- 向量空间的**维度**是其包含的独立方向的数量。$\mathbb{R}^2$ 是二维的(需要 2 个坐标),而上面的 $\mathbf{a}$ 存在于 $\mathbb{R}^3$ 中。
- 例如,我们可以将任何对象(比如一个人)表示为一个向量,其中 $h_1$ = 身高(厘米),$h_2$ = 体重(公斤),$h_3$ = 年龄。
$$\mathbf{h} = [185, 75, 30]$$
- 我们现在已经创建了一个包含表示人的向量的向量空间。
- 我们可以表示多个人,并观察他们之间的远近!
![将三个人表示为向量:Alice 和 Carol 很近,Alice 和 Bob 很远](../images/human_vectors.svg)
- 我们可以添加更多特征,创建丰富的人体表示,在 ML 中通常称为特征向量。
- 你拥有的独特且有意义的特征越多,特征向量的描述性就越强,这是需要记住的一个重要因素。
- 超过 3 维后,向量变得非常难以直观检查,这催生了一个名为**线性代数**的数学领域。
- 现在,**线性代数**是研究向量、向量空间以及向量之间映射关系的学科。
- 我们在 AI/ML 中将几乎所有东西都表示为向量,这使得线性代数成为该领域的基石。
- 向量加法可以通过将一个向量放在另一个向量的尾部,然后从原点画到终点的可视化方式执行。
![向量加法:a(红色)加 b(蓝色)得到结果 a + b(绿色虚线)](../images/vector_addition.svg)
- 对于两个向量 $\mathbf{a} = (a_1, a_2)$ 和 $\mathbf{b} = (b_1, b_2)$$\mathbf{a} + \mathbf{b} = (a_1 + b_1, a_2 + b_2)$
- 向量也可以相减,所有加法规则同样适用。
- 将向量乘以标量会在相同方向上按该因子缩放向量。
![标量乘法:v(红色)、2v(蓝色,加倍)、-v(紫色,反向)](../images/scalar_multiplication.svg)
- 对于标量 $c$ 和向量 $\mathbf{v} = (v_1, v_2)$$c\mathbf{v} = (cv_1, cv_2)$
- **加法封闭性**:如果将向量空间中的任意两个向量相加,结果也属于同一空间:如果 $\mathbf{u} \in V$ 且 $\mathbf{v} \in V$,则 $\mathbf{u} + \mathbf{v} \in V$
- **标量乘法封闭性**:如果将向量空间中的任意向量乘以标量,结果也属于同一空间:如果 $\mathbf{v} \in V$ 且 $c \in F$,则 $c\mathbf{v} \in V$
- **加法结合律**:对于任意三个向量 $\mathbf{u}$、$\mathbf{v}$ 和 $\mathbf{w}$$(\mathbf{u} + \mathbf{v}) + \mathbf{w} = \mathbf{u} + (\mathbf{v} + \mathbf{w})$
- **加法交换律**:对于任意两个向量 $\mathbf{u}$ 和 $\mathbf{v}$$\mathbf{u} + \mathbf{v} = \mathbf{v} + \mathbf{u}$
![平行四边形法则:两条路径(先 u 后 v,或先 v 后 u)到达同一点](../images/commutativity.svg)
- 通过平行四边形的两条路径都到达同一点。
- **(零向量)**:存在一个向量 $\mathbf{0}$,使得对于任何向量 $\mathbf{v}$$\mathbf{v} + \mathbf{0} = \mathbf{v}$
![零向量:v + 0 = v](../images/zero_vector.svg)
- **加法逆元**:对于每个向量 $\mathbf{v}$,存在一个向量 $-\mathbf{v}$,使得:$\mathbf{v} + (-\mathbf{v}) = \mathbf{0}$
![加法逆元:v(红色)和 -v(蓝色)抵消为零](../images/additive_inverse.svg)
- **分配律 1**:对于任意标量 $c$ 和向量 $\mathbf{u}$、$\mathbf{v}$$c(\mathbf{u} + \mathbf{v}) = c\mathbf{u} + c\mathbf{v}$
![分配律:缩放和(金色)等于缩放后的向量之和](../images/distributivity.svg)
- 缩放和(金色)与分别缩放向量再求和的结果相同。
- **分配律 2**:对于任意标量 $c$、$d$ 和向量 $\mathbf{v}$$(c + d)\mathbf{v} = c\mathbf{v} + d\mathbf{v}$
- **结合律**:对于任意标量 $c$、$d$ 和向量 $\mathbf{v}$$(cd)\mathbf{v} = c(d\mathbf{v})$
- **单位元**:对于任何向量 $\mathbf{v}$$1\mathbf{v} = \mathbf{v}$,其中 $1$ 是标量域中的乘法单位元。
- **子空间**就是大空间内部的一个较小舞台。把三维空间想象成一个房间。一张穿过房间中心的平坦纸片就是一个子空间,穿过中心的一根直导线也是子空间。
- 关键要求是子空间必须经过原点。如果你把那片纸移开中心,它就不再是子空间了,因为零向量不再位于其上。
![子空间:经过原点的直线和平面在三维空间内部](../images/subspaces.svg)
- 向量空间的所有规则(加法、缩放、封闭性)在子空间内部仍然有效。你可以在子空间内添加或缩放向量,永远不会"掉出"到更大的空间。
- 经过原点的直线是一维子空间,经过原点的平面是二维子空间,而整个空间是自身的子空间。
- 在 ML 中,子空间自然出现。高维数据通常具有存在于低维子空间上的结构。PCA 等技术找到那个子空间,这样我们可以更高效地处理数据。
## 编程练习(使用 CoLab 或 notebook
1. 运行代码验证分配律性质,然后修改并尝试测试其他规则!
```python
import jax.numpy as jnp
u = jnp.array([1, 2])
v = jnp.array([3, 0])
c = 2
lhs = c * (u + v)
rhs = c*u + c*v
print(f"LHS: {lhs}")
print(f"RHS: {rhs}")
```
2. 运行代码可视化不同的向量,然后修改不同坐标的值以理解每个轴如何影响位置。
```python
import jax.numpy as jnp
import matplotlib.pyplot as plt
# 尝试修改这些向量!
a = jnp.array([3, 2, 4])
b = jnp.array([1, 4, 2])
c = jnp.array([4, 1, 3])
fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
for vec, name, color in [(a, "a", "red"), (b, "b", "blue"), (c, "c", "green")]:
ax.quiver(0, 0, 0, *vec, color=color, arrow_length_ratio=0.1, linewidth=2, label=name)
lim = int(jnp.abs(jnp.stack([a, b, c])).max()) + 1
ax.set_xlim([0, lim]); ax.set_ylim([0, lim]); ax.set_zlim([0, lim])
ax.set_xlabel("X"); ax.set_ylabel("Y"); ax.set_zlabel("Z")
ax.legend()
plt.show()
```