Files
maths-cs-ai-compendium-zh/chapter 01: vectors/05. basis and duality.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

90 lines
5.0 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.
# 基与对偶性
*基定义了向量空间的坐标系,而对偶性揭示了线性函数如何作用于向量。本文涵盖线性无关性、生成集、基变换、对偶空间和余向量,这些概念支撑了 ML 中的 PCA、特征变换和注意力查询。*
- 我们已经看到向量存在于具有一定维度数的空间中。但什么定义了这些维度?这就是**基向量**发挥作用的地方。
- **基**是一组向量,可以通过缩放和相加(线性组合)构建空间中的每个其他向量,且没有冗余。它们是空间的构建块。
- 基必须满足两个条件:
- **线性无关**:没有基向量能从其他基向量构造出来。每个都贡献了一个真正的新方向。
- **生成性**:空间中的每个向量都可以表示为基向量的组合。没有任何遗漏。
- 基中的向量数量等于空间的**维度**。在 $\mathbb{R}^2$ 中你需要 2 个,在 $\mathbb{R}^3$ 中你需要 3 个,依此类推。
- 最自然的基是**标准基**,即沿每个轴的单位向量:
- 在 $\mathbb{R}^2$ 中:$\hat{\mathbf{i}} = (1, 0)$ 和 $\hat{\mathbf{j}} = (0, 1)$
- 在 $\mathbb{R}^3$ 中:$\hat{\mathbf{i}} = (1, 0, 0)$$\hat{\mathbf{j}} = (0, 1, 0)$$\hat{\mathbf{k}} = (0, 0, 1)$
- 任何向量都是这些基向量的加权和。向量 $(3, 2)$ 实际上是 $3\hat{\mathbf{i}} + 2\hat{\mathbf{j}}$。权重(3 和 2)是该基下向量的**坐标**。
- 但标准基并不是唯一有效的基。在 $\mathbb{R}^2$ 中,向量 $(1, 1)$ 和 $(-1, 1)$ 也构成基。它们线性无关,并且可以到达平面上的任何点。同一个向量在这个新基下只是有不同的坐标。
- **基变换**使用不同的构建块重新表达同一个向量。向量没有移动,我们只是从不同的角度描述它。
- 这是通过乘以一个**基变换矩阵** $P$ 来完成的,其列是用旧坐标表示的新基向量。要变回去,乘以 $P^{-1}$。
- 在 ML 中,基变换经常出现。例如,PCA 找到一个新基(主成分),在该基下数据更容易理解,坐标轴与最大变化方向对齐。
- 现在,这里隐藏着一个更深层的想法。当我们写 $\mathbf{v} = (3, 2)$ 时,坐标 3 和 2 实际上是沿着每个基方向"测量" $\mathbf{v}$ 的结果。第一个坐标问"$\hat{\mathbf{i}}$ 在 $\mathbf{v}$ 中有多少?",第二个问"$\hat{\mathbf{j}}$ 呢?"
- 这些测量中的每一个都是一个**线性泛函**,一个接受向量并返回单个标量的函数。所有这样的线性泛函的集合构成了**对偶空间** $V^\ast$。
- 这样想:向量是被测对象,线性泛函是测量它们的*标尺*。对偶空间是所有可能的标尺的集合。
- 对于每个基 $\{\mathbf{e}_1, \mathbf{e}_2, \ldots, \mathbf{e}_n\}$,存在一个对应的**对偶基** $\{\mathbf{e}_1^\ast, \mathbf{e}_2^\ast, \ldots, \mathbf{e}_n^\ast\}$。每个对偶基向量恰好提取一个坐标:
```math
\mathbf{e}_i^\ast(\mathbf{e}_j) = \delta_{ij} = \begin{cases} 1 & \text{if } i = j \\ 0 & \text{if } i \neq j \end{cases}
```
- $\mathbf{e}_1^\ast$ 作用于 $\mathbf{e}_1$ 时返回 1,对其它所有向量返回 0。它完美地隔离了第一个坐标。
- 点积连接了这两个世界。当你计算 $\mathbf{u} \cdot \mathbf{v}$ 时,你可以把其中一个向量看作"标尺"在测量另一个向量。点积 $\mathbf{u} \cdot \mathbf{v}$ 等同于将由 $\mathbf{u}$ 定义的线性泛函应用于向量 $\mathbf{v}$。
- 这意味着每个向量都隐含地定义了一个线性泛函,并且每个线性泛函都可以用一个向量表示。在有限维空间中,对偶空间本质上是原始空间的镜像。
- 对偶性现在可能看起来很抽象,但它支撑着许多实际的概念:坐标是对偶基的评估,点积是对偶配对,而神经网络中的注意力等变换通过让一组向量"查询"另一组向量来运作,这正是对偶性在起作用。
## 编程练习(使用 CoLab 或 notebook
1. 在两个不同的基中表达一个向量,并验证它们代表同一个点。尝试创建你自己的基,观察向量得到什么坐标。
```python
import jax.numpy as jnp
v = jnp.array([3.0, 2.0])
# 标准基:坐标就是分量本身
print(f"Standard basis coords: {v}")
# 新基:(1,1) 和 (-1,1)
P = jnp.array([[1.0, -1.0],
[1.0, 1.0]])
new_coords = jnp.linalg.solve(P, v)
print(f"New basis coords: {new_coords}")
# 验证:从新坐标重建
reconstructed = new_coords[0] * P[:, 0] + new_coords[1] * P[:, 1]
print(f"Reconstructed: {reconstructed}")
```
2. 验证对偶基性质:每个对偶基向量恰好提取一个坐标,对其他向量返回零。
```python
import jax.numpy as jnp
# R3 中的标准基
e1 = jnp.array([1.0, 0.0, 0.0])
e2 = jnp.array([0.0, 1.0, 0.0])
e3 = jnp.array([0.0, 0.0, 1.0])
v = jnp.array([5.0, 3.0, 7.0])
# 每个点积提取一个坐标
print(f"e1 · v = {jnp.dot(e1, v)}")
print(f"e2 · v = {jnp.dot(e2, v)}")
print(f"e3 · v = {jnp.dot(e3, v)}")
```