向量空间


文档摘要

向量空间 向量空间是机器学习赖以存在的数学「游乐场」。本节介绍向量加法、数乘、封闭性公理、子空间,以及为什么 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 个坐标,每个坐标代表沿某条轴的位置。

\mathbf{a} = [a_1, a_2, a_3]

向量 a = (3, 2, 4) 在三维空间中沿 x、y、z 轴绘出

  • 向量空间里的向量遵循一套非常明确、不可违背的规则:

    • 向量加法(合并)
      你可以取任意两个向量合并成一个新向量。
      把向量想象成「移动指令」。
      如果向量 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 = 年龄。

\mathbf{h} = [185, 75, 30]
  • 这样我们就创建了一个向量空间,并用一个向量来表示一个人。

  • 我们可以表示多个人,并观察他们之间有多接近、或多遥远!

三个人作为向量:Alice 和 Carol 很接近,Alice 和 Bob 相距很远

  • 我们可以加入更多特征,构建出更丰富的人物表示,这在 ML 中通常称为特征向量(feature vector)。

  • 需要记住的一个重要因素是:你拥有的独特且有意义特征越多,特征向量的描述能力就越强。

  • 超过 3 维之后,向量就很难再直观地画出来观察了,由此催生了一门叫做线性代数(linear algebra)的数学分支。

  • 线性代数研究的是向量、向量空间,以及向量之间的映射。

  • 在 AI/ML 中我们几乎把所有东西都表示为向量,这使得线性代数成为整个领域的基石。

  • 向量加法可以这样直观进行:把一个向量的起点放在另一个向量的终点上,再从原点画到末尾的终点。

向量加法:a(红色)加 b(蓝色)得到合向量 a + b(绿色虚线)

  • 对于两个向量 \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(紫色,反向)

  • 对于标量 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 Vc \in F,则 c\mathbf{v} \in V

  • 加法交换律:对任意两个向量 \mathbf{u}\mathbf{v}\mathbf{u} + \mathbf{v} = \mathbf{v} + \mathbf{u}

平行四边形法则:两条路径(先 u 再 v,或先 v 再 u)都到达同一点

  • 沿平行四边形的两条路径都会到达同一个点。

  • (零向量):存在一个向量 \mathbf{0},使得对任意向量 \mathbf{v} 都有:\mathbf{v} + \mathbf{0} = \mathbf{v}

零向量:v + 0 = v

  • 加法逆元:对每个向量 \mathbf{v},都存在一个向量 -\mathbf{v} 使得:\mathbf{v} + (-\mathbf{v}) = \mathbf{0}

加法逆元:v(红色)与 -v(蓝色)相加为零

  • 分配律 1:对任意标量 c 和向量 \mathbf{u}\mathbf{v}c(\mathbf{u} + \mathbf{v}) = c\mathbf{u} + c\mathbf{v}

分配律:缩放求和(金色)等于先缩放再求和

  • 对求和进行缩放(金色)与先缩放再求和,结果相同。

  • 分配律 2:对任意标量 cd 和向量 \mathbf{v}(c + d)\mathbf{v} = c\mathbf{v} + d\mathbf{v}

  • 结合律:对任意标量 cd 和向量 \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 这类技术就是要找到那个子空间,从而更高效地处理数据。

编程练习(使用 CoLab 或 notebook)

  1. 运行下面的代码验证分配律,然后修改并测试其他规则!
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}")
  1. 运行下面的代码可视化不同的向量,然后修改坐标值,理解每条轴如何影响位置。
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

发布者: 作者: HenryNdubuaku 转发
评论区 (0)
U