Skip to content

向量空间

向量空间构成了机器学习赖以生存的数学游乐场。本章涵盖向量加法、标量乘法、封闭性公理、子空间,以及为什么人工智能中几乎一切都表示为向量。

  • 把向量空间想象成一个特定类型的游乐场,数学对象就在其中生活,每个对象称为一个向量

  • 在机器学习的几何直觉中,我们总是将向量视为欧几里得空间中的一个点,由其坐标表示。

  • 向量 \(\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 步。”

  • 向量空间的维度是它所包含的独立方向的数量。\(\mathbb{R}^2\) 是二维的(需要 2 个坐标),而上面的 \(\mathbf{a}\) 生活在 \(\mathbb{R}^3\) 中。

  • 例如,我们可以将任何对象(比如一个人)表示为一个向量,其中 \(h_1\) = 身高(厘米),\(h_2\) = 体重(公斤),\(h_3\) = 年龄。

\[\mathbf{h} = [185, 75, 30]\]
  • 我们现在创建了一个向量空间,其中有一个向量代表人。

  • 我们可以表示多个人,并看到他们之间的接近程度或距离!

三个以向量表示的人:爱丽丝和卡罗尔很近,爱丽丝和鲍勃相距很远

  • 我们可以添加更多特征,创造出对人的丰富表示,这在机器学习中通常称为特征向量。

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

  • 超过三维后,向量变得非常难以直观观察,这催生了称为线性代数的数学领域。

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

  • 我们在人工智能/机器学习中几乎将一切表示为向量,这使得线性代数成为该领域的基石。

  • 向量加法可以在视觉上通过将一个向量的尾部放在另一个向量的头部来执行,然后从原点画线到终点。

向量加法: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 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)到达同一点

  • 通过平行四边形的两条路径会到达同一点。

  • (零向量):存在一个向量 \(\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:对于任意标量 \(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\) 是标量域中的乘法单位元。

  • 子空间只是大游乐场里面的一个小游乐场。想象三维空间是一个房间。穿过房间中心的一张平纸是一个子空间,穿过中心的一根直金属丝也是一个子空间。

  • 关键要求是子空间必须通过原点。如果你把那张纸移开中心,它就不再是子空间,因为零向量不在上面了。

子空间:三维空间中通过原点的直线和平面

  • 向量空间中的所有规则(加法、标量乘法、封闭性)在子空间内部仍然有效。你可以在子空间内相加或缩放向量,永远不会“掉入”更大的空间。

  • 通过原点的直线是一维子空间,通过原点的平面是二维子空间,而整个空间自身也是自己的子空间。

  • 在机器学习中,子空间自然出现。高维数据通常具有位于低维子空间上的结构。像 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}")
    

  2. 运行代码可视化不同的向量,然后修改坐标值以理解每个轴如何影响位置。

    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()