向量空间 向量空间是机器学习赖以存在的数学「游乐场」。本节介绍向量加法、数乘、封闭性公理、子空间,以及为什么 AI 中几乎所有事物都被表示为向量。 可以把向量空间(vector space)想象成一种特定的「游乐场」,数学对象在里面活动,每个对象都叫做一个向量。 向量空间的正式定义是:一组向量的集合,它们可以相加、也可以被数乘,并且结果仍然不会离开这个空间。 一个有用的反例:整数集合 $\mathbb{Z}$ 在实数域上不是一个向量空间,因为把 $3$ 乘以 $0.5$ 得到 $1.5$,它已经落到了集合之外。定义里「不离开这个空间」这一条是真正起作用的关键。 在机器学习(ML)中,为了获得几何直觉,我们总是把向量看作欧几里得空间中的一个点,用坐标来表示。
向量空间是机器学习赖以存在的数学「游乐场」。本节介绍向量加法、数乘、封闭性公理、子空间,以及为什么 AI 中几乎所有事物都被表示为向量。
可以把向量空间(vector space)想象成一种特定的「游乐场」,数学对象在里面活动,每个对象都叫做一个向量。
向量空间的正式定义是:一组向量的集合,它们可以相加、也可以被数乘,并且结果仍然不会离开这个空间。
一个有用的反例:整数集合 \mathbb{Z} 在实数域上不是一个向量空间,因为把 3 乘以 0.5 得到 1.5,它已经落到了集合之外。定义里「不离开这个空间」这一条是真正起作用的关键。
在机器学习(ML)中,为了获得几何直觉,我们总是把向量看作欧几里得空间中的一个点,用坐标来表示。
向量 \mathbf{a}(数学上用加粗的小写字母表示)有 n 个坐标,每个坐标代表沿某条轴的位置。
向量空间里的向量遵循一套非常明确、不可违背的规则:
向量加法(合并):
你可以取任意两个向量合并成一个新向量。
把向量想象成「移动指令」。
如果向量 A 表示「向前走 3 步」,向量 B 表示「向右走 2 步」,
把它们相加(A + B)就得到一条新指令:「向前走 3 步并向右走 2 步」。
数乘(缩放):
你可以用一个普通数字(「标量」)来缩放任意向量。
可以拉长、压缩,或翻转它。
如果向量 A 是「向前走 3 步」,乘以 2 就变成「向前走 6 步」。
乘以 -1 则完全翻转成「向后走 3 步」。
向量空间的维数(dimension)是它所包含的独立方向的个数。\mathbb{R}^2 是二维的(需要 2 个坐标),而上面的 \mathbf{a} 生活在 \mathbb{R}^3 中。
例如,我们可以把任意对象,比如一个人,表示为一个向量,其中 h_1 = 身高(厘米)、h_2 = 体重(千克)、h_3 = 年龄。
这样我们就创建了一个向量空间,并用一个向量来表示一个人。
我们可以表示多个人,并观察他们之间有多接近、或多遥远!
我们可以加入更多特征,构建出更丰富的人物表示,这在 ML 中通常称为特征向量(feature vector)。
需要记住的一个重要因素是:你拥有的独特且有意义特征越多,特征向量的描述能力就越强。
超过 3 维之后,向量就很难再直观地画出来观察了,由此催生了一门叫做线性代数(linear algebra)的数学分支。
线性代数研究的是向量、向量空间,以及向量之间的映射。
在 AI/ML 中我们几乎把所有东西都表示为向量,这使得线性代数成为整个领域的基石。
向量加法可以这样直观进行:把一个向量的起点放在另一个向量的终点上,再从原点画到末尾的终点。
对于两个向量 \mathbf{a} = (a_1, a_2) 和 \mathbf{b} = (b_1, b_2):\mathbf{a} + \mathbf{b} = (a_1 + b_1, a_2 + b_2)
向量也可以相减,所有加法规则同样适用。
用标量乘以一个向量,会沿相同方向把向量按该倍数缩放。
对于标量 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{u} + \mathbf{v} = \mathbf{v} + \mathbf{u}
沿平行四边形的两条路径都会到达同一个点。
(零向量):存在一个向量 \mathbf{0},使得对任意向量 \mathbf{v} 都有:\mathbf{v} + \mathbf{0} = \mathbf{v}
对求和进行缩放(金色)与先缩放再求和,结果相同。
分配律 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 是标量域中的乘法单位元。
一些向量空间的例子:
\mathbb{R}^n(n 维空间):n 维空间中的所有实数,例如向量 [1,4,3000...第 n 个],把两个点相加或缩放其中一个,仍然落在同一平面上。
灰度图像:一张 28 \times 28 的图像就是 784 个像素强度,即 \mathbb{R}^{784} 中的一个向量。把两张图像相加(混合)或缩放一张(调亮),得到的仍是同样大小的图像。
音频信号:以 44.1kHz 采样 1 秒的片段就是一个含 44,100 个分量的向量。把两段音频混合在一起就是向量加法。
多项式:两个多项式相加或把一个多项式按某个数缩放,得到的结果仍是多项式,所以它们也构成向量空间。向量不一定非得是箭头!
子空间(subspace)就是大游乐场里的一个小游乐场。把三维空间想象成一个房间,一张穿过房间中心的平整纸片就是一个子空间,一根穿过中心的直导线也是。
关键要求是子空间必须经过原点。如果你把那张纸片挪离中心,它就不再是子空间了,因为零向量已经不在它上面。
向量空间里的所有规则(加法、缩放、封闭性)在子空间里同样成立。你可以在子空间里相加或缩放向量,永远不会「掉」到更大的空间去。
经过原点的直线是 1 维子空间,经过原点的平面是 2 维子空间,而整个空间本身就是它自己的子空间。
在 ML 中,子空间自然地出现。高维数据通常具有某种结构,这种结构往往生活在一个更低维的子空间里。像 PCA 这类技术就是要找到那个子空间,从而更高效地处理数据。
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}")
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()
| 符号 | 含义 | 示例 |
|---|---|---|
| ∈ | 属于 | x ∈ A:x 在集合 A 中 |
| ∉ | 不属于 | x ∉ A |
| ⊂ | 是真子集 | A ⊂ B |
| ⊆ | 是子集或相等 | A ⊆ B |
| ∪ | 并集 | A ∪ B:在 A 或 B 中的元素 |
| ∩ | 交集 | A ∩ B:同时在 A 和 B 中的元素 |
| ∅ | 空集 | A = ∅ |
| ℝ | 实数 | x ∈ ℝ |
| ℤ | 整数 | -2, -1, 0, 1, 2 |
| ℕ | 自然数 | 1, 2, 3, ... |
| ℚ | 有理数 | 像 1/2 这样的分数 |
| ⇒ | 蕴含(推出) | x > 2 ⇒ x > 1 |
| ⇔ | 当且仅当 | x = 2 ⇔ x² = 4,附加一些条件 |
| ∀ | 对所有 | ∀x ∈ ℝ |
| ∃ | 存在 | ∃x 使得 x² = 4 |
| ¬ | 非 | ¬P:非 P |
| ∧ | 与 | P ∧ Q |
| ∨ | 或 | P ∨ Q |
| ∴ | 因此 | x = 2,∴ x² = 4 |