Skip to content

向量性质

向量性质描述了定义向量行为的几何与代数特征。本章涵盖大小、方向、单位向量、相等、平行、正交以及线性无关,这些是每个机器学习特征空间的基石。

  • 向量的大小(或长度)告诉你它“延伸了多远”。把它想象成箭头的长度。对于向量 \(\mathbf{a} = (a_1, a_2, a_3)\),其大小为:
\[\|\mathbf{a}\| = \sqrt{a_1^2 + a_2^2 + a_3^2}\]
  • 这就是勾股定理向更高维度的推广,测量从原点到该点的直线距离。

  • 向量的方向告诉你它“指向哪里”;简单地想象一条从原点到坐标点的直线。

  • 当没有明确指定原点时,我们通常隐含地取 (0,0,…,0) 作为中心点,至少是为了可视化。

  • 位置无关紧要,重要的是位移:从原点画出的向量 \((3,2)\) 与从另一点画出的相同 \((3,2)\) 仍然是相等的。

向量相等:从两个不同起点画出的相同 (3,2) 向量

  • 两个向量可以有相同的长度但指向完全不同的方向,或者指向相同但长度不同。

相同方向、不同大小(v 和 2v)vs 相同大小、不同方向

  • 两个向量相等当且仅当它们的所有对应分量都匹配;长度相同、方向相同、箭头完全相同。
\[\mathbf{a} = \mathbf{b} \iff a_i = b_i \text{ 对所有 } i\]
  • 两个向量平行如果一个向量是另一个向量的标量倍数。它们沿着同一条直线指向,要么方向相同,要么正好相反。
\[\mathbf{a} \parallel \mathbf{b} \iff \mathbf{a} = k\mathbf{b} \text{ 对于某个标量 } k \neq 0\]

平行向量:a 和 b 指向相同方向,a 和 -b 指向相反方向

  • \(k > 0\),它们指向相同方向。若 \(k < 0\),它们指向相反方向。无论如何,它们都位于通过原点的同一条直线上。

  • 直观地说,平行向量不携带“新的”方向信息。一个只是另一个的拉伸或翻转版本。

  • 两个向量正交(垂直)如果它们指向完全独立的方向。沿一个方向移动不会在另一个方向上产生任何进展。

正交向量:u 和 v 成直角相交

  • 想象向北走,然后向东走,这些是正交方向,无论向北走多少步都不会让你向东移动。我们会非常频繁地遇到正交性。

  • 正交性在机器学习中至关重要:正交的特征携带完全独立的信息,这对于表示来说非常理想。

  • 更一般地,任意两个向量之间有一个夹角 \(\theta\),范围从 \(0°\)\(180°\)

  • 这个角度捕捉了两个方向之间的完整关系:\(0°\) 表示平行(相同方向),\(180°\) 表示平行(相反方向),\(90°\) 表示正交。介于两者之间的是混合情况。

  • 机器学习中的大多数向量关系都处在这个光谱的某处。稍后,我们将看到精确的工具(点积、余弦相似度)来计算这个角度。

  • 一组向量是线性相关的,如果其中至少一个可以通过缩放和相加由其他向量构建出来。它没有为该集合带来新信息。

  • 例如,如果 \(\mathbf{c} = 2\mathbf{a} + 3\mathbf{b}\),那么 \(\mathbf{c}\) 是冗余的,你已经通过 \(\mathbf{a}\)\(\mathbf{b}\) 拥有了 \(\mathbf{c}\) 提供的一切。

  • 平行向量总是线性相关的,因为一个只是另一个的缩放副本。任何包含零向量的集合也是线性相关的。

  • 向量是线性无关的,如果其中任何一个都不能由其他向量构建出来。每个向量都贡献一个真正新的方向。正交向量总是线性无关的。

  • 在二维中,两个线性无关的向量可以到达平面上的任何点。在三维中,你需要三个。这种“你需要多少独立向量”的想法直接与维度相关联。

  • 当向量的大部分分量为零时,称该向量是稀疏的。相反,大部分分量非零称为稠密

\[\mathbf{s} = [0, 0, 3, 0, 0, 0, 1, 0, 0, 0]\]
  • 稀疏性很重要,因为它同时影响存储和计算。稀疏向量可以通过只跟踪非零条目来更高效地存储和处理。

  • 单位向量是大小恰好为 1 的向量。它纯粹表示一个方向,没有长度信息。你可以通过将向量除以它的大小来将其转换为单位向量:

\[\hat{\mathbf{a}} = \frac{\mathbf{a}}{\|\mathbf{a}\|}\]
  • 这个过程称为归一化。它剥离了“多远”,只保留“哪条路”。

  • 标准单位向量沿着每个坐标轴指向:\(\hat{\mathbf{i}} = (1, 0, 0)\)\(\hat{\mathbf{j}} = (0, 1, 0)\)\(\hat{\mathbf{k}} = (0, 0, 1)\)。任何向量都可以写成这些的组合,例如 \((3, 2, 4) = 3\hat{\mathbf{i}} + 2\hat{\mathbf{j}} + 4\hat{\mathbf{k}}\)

编程任务(使用 CoLab 或 notebook)

  1. 计算向量的大小并验证它符合勾股定理,然后修改代码以计算单位向量。

    import jax.numpy as jnp
    
    a = jnp.array([3.0, 4.0])
    
    magnitude = jnp.sqrt(jnp.sum(a ** 2))
    print(f"向量 a 的大小: {magnitude}") 
    

  2. 通过测试一个向量是否为另一个向量的标量倍数来检查两个向量是否平行。

    import jax.numpy as jnp
    
    a = jnp.array([2, 4, 6])
    b = jnp.array([1, 2, 3])
    
    ratios = a / b
    print(f"比值: {ratios}")
    print(f"是否平行: {jnp.allclose(ratios, ratios[0])}")