第9章 多线性代数 - 张量积 (Multilinear Algebra)
一、导读
9.1 本章学习目标
通过本章的学习,你将能够:
理解双线性形式和二次型的概念:掌握对称双线性形式的分类,理解正定性的判定方法
理解张量积的定义和性质:掌握张量积的泛性质,理解其在多线性映射中的作用
掌握张量的基本概念:理解张量作为多重线性映射的本质,以及张量的分量表示
理解外代数和行列式的关系:掌握外积的反对称性,理解行列式作为体积形式的几何意义
掌握行列式的性质和计算:理解行列式的公理化定义,掌握高效计算方法
理解张量积在机器学习中的应用:掌握注意力机制、张量分解等技术背后的线性代数原理
将多线性代数概念应用于实际问题:如微分几何、量子力学、深度学习
9.2 为什么本章如此重要
前八章主要研究单个向量空间上的线性结构。多线性代数则将视角扩展到多个向量空间的交互,研究多线性映射、张量积、外代数等更丰富的结构。这是线性代数的自然延伸,也是现代数学和物理的基础语言。
从理论的角度看,多线性代数提供了描述"多重线性"关系的工具。张量积将多个向量空间"粘合"成一个新的空间,外代数捕捉了"定向体积"的概念,这些结构在微分几何、代数拓扑、表示论中不可或缺。
从应用的角度看:
- 微分几何:度量张量是双线性形式;曲率张量是多线性映射
- 广义相对论:时空的几何结构由度量张量描述;爱因斯坦方程涉及张量运算
- 量子力学:多粒子系统的态空间是单粒子态空间的张量积;纠缠态不能用张量积分解
- 深度学习:神经网络的权重是高阶张量;注意力机制使用张量积计算相似度
- 计算机视觉:图像是二阶张量(矩阵);视频是三阶张量(时间序列图像)
- 信号处理:高阶统计量用张量表示;盲源分离使用张量分解
从认知的角度看,本章帮助你建立"多维思维"。不再局限于单一向量空间,而是考虑多个空间的相互作用。这种高维视角是理解复杂系统的关键。
9.3 核心问题引导
在学习本章时,请持续思考以下问题:
什么是双线性形式? 它与内积有什么区别?如何分类双线性形式?
张量积的泛性质是什么? 为什么张量积是"最一般"的双线性构造?
张量与多维数组有什么关系? 为什么说张量不仅仅是多维数组?
外积为什么是反对称的? 这与行列式和体积有什么关系?
行列式的几何意义是什么? 为什么行列式表示线性变换对体积的缩放?
张量积在深度学习中如何应用? 注意力机制中的 $QK^T$ 本质上是张量积吗?
多线性代数与微积分有什么联系? 微分形式、外导数如何用外代数描述?
二、核心概念详解
9.1 双线性形式
定义 9.1(双线性形式)
设 $V$ 是 $\mathbb{F}$ 上的向量空间。双线性形式(Bilinear Form)是一个函数 $B: V \times V \to \mathbb{F}$,满足:
对第一变元线性:$B(\lambda u + v, w) = \lambda B(u, w) + B(v, w)$
对第二变元线性:$B(u, \lambda v + w) = \lambda B(u, v) + B(u, w)$
如果还满足 $B(u, v) = B(v, u)$,则称 $B$ 是对称的。
如果 $B(u, v) = \overline{B(v, u)}$(复情况),则称 $B$ 是Hermitian的。
例 9.1:常见双线性形式
内积:标准内积 $\langle u, v \rangle$ 是 Hermitian 双线性形式(复情况)或对称双线性形式(实情况)。
矩阵双线性形式:给定矩阵 $A$,定义 $B(u, v) = u^T A v$。如果 $A$ 对称,则 $B$ 对称。
Minkowski 度规:在狭义相对论中,$B(u, v) = -u_0v_0 + u_1v_1 + u_2v_2 + u_3v_3$ 是不对称的双线性形式。
辛形式:在经典力学中,$\omega(u, v) = u^T J v$,其中 $J = \begin{pmatrix} 0 & I \\ -I & 0 \end{pmatrix}$ 是反对称双线性形式。
定义 9.2(二次型)
设 $B$ 是对称双线性形式。定义二次型(Quadratic Form):
$$Q(v) = B(v, v)$$
在实情况下,给定对称矩阵 $A$,二次型为:
$$Q(x) = x^T A x = \sum_{i,j} a_{ij} x_i x_j$$
关键洞察:二次型是双线性形式的"对角"部分。给定二次型,可以恢复对称双线性形式:$B(u, v) = \frac{1}{2}(Q(u+v) - Q(u) - Q(v))$(极化恒等式)。
定理 9.1:主轴定理
设 $Q$ 是 $\mathbb{R}^n$ 上的二次型,对应对称矩阵 $A$。则存在正交变换 $x = Qy$ 使得:
$$Q(x) = \lambda_1 y_1^2 + \cdots + \lambda_n y_n^2$$
其中 $\lambda_i$ 是 $A$ 的特征值。
证明:由谱定理,$A = QDQ^T$,其中 $Q$ 正交,$D$ 对角。令 $y = Q^T x$,则:
$$Q(x) = x^T A x = x^T Q D Q^T x = y^T D y = \sum_{i=1}^n \lambda_i y_i^2$$
$\square$
几何直觉:主轴定理表明任何二次曲面(椭球、双曲面等)都可以通过旋转对齐到坐标轴。这在优化问题中非常重要,因为可以将复杂的二次函数简化为标准形式。
定义 9.3(正定性)
对称双线性形式 $B$ 称为:
- 正定:如果 $B(v, v) > 0$ 对所有 $v \neq 0$
- 半正定:如果 $B(v, v) \geq 0$ 对所有 $v$
- 负定:如果 $B(v, v) < 0$ 对所有 $v \neq 0$
- 不定:如果存在 $v, w$ 使得 $B(v, v) > 0$ 且 $B(w, w) < 0$
定理 9.2:正定性的判定
对称矩阵 $A$ 正定当且仅当:
所有特征值为正
所有顺序主子式为正(Sylvester 准则)
存在可逆矩阵 $C$ 使得 $A = C^T C$(Cholesky 分解)
证明思路:
由主轴定理,$Q(x) = \sum \lambda_i y_i^2$。如果所有 $\lambda_i > 0$,则 $Q(x) > 0$ 对所有 $x \neq 0$。
Sylvester 准则通过归纳法证明。
Cholesky 分解给出了显式构造。$\square$
9.2 张量积
定义 9.4(张量积)
设 $V$ 和 $W$ 是 $\mathbb{F}$ 上的向量空间。张量积 $V \otimes W$ 是一个新的向量空间,配备一个双线性映射 $\otimes: V \times W \to V \otimes W$,满足以下泛性质:
对于任意向量空间 $U$ 和双线性映射 $B: V \times W \to U$,存在唯一的线性映射 $\tilde{B}: V \otimes W \to U$ 使得:
$$B(v, w) = \tilde{B}(v \otimes w)$$
即下图交换:
V × W --⊗--> V ⊗ W
| |
B ∃! B̃
| |
v v
U关键洞察:张量积的泛性质表明,任何双线性映射都可以"分解"为张量积后的线性映射。这使得我们可以将多线性问题转化为线性问题。
构造方法
如果 $V$ 有基 $v_1, \ldots, v_m$,$W$ 有基 $w_1, \ldots, w_n$,则 $V \otimes W$ 有基:
$$\{v_i \otimes w_j : 1 \leq i \leq m, 1 \leq j \leq n\}$$
因此 $\dim(V \otimes W) = (\dim V)(\dim W)$。
例 9.2:张量积的例子
$\mathbb{R}^2 \otimes \mathbb{R}^3$:维度为 $2 \times 3 = 6$。基向量为 $e_i \otimes f_j$。
多项式张量积:$P_m(\mathbb{F}) \otimes P_n(\mathbb{F}) \cong P_{m+n}(\mathbb{F})$(在一定条件下)。
矩阵空间:$\mathbb{F}^m \otimes \mathbb{F}^n \cong \mathbb{F}^{m \times n}$(通过 $v \otimes w \mapsto vw^T$)。
量子态空间:两个量子比特的态空间是 $\mathbb{C}^2 \otimes \mathbb{C}^2 \cong \mathbb{C}^4$。
定理 9.3:张量积的性质
对于 $v, v_1, v_2 \in V$,$w, w_1, w_2 \in W$,$\lambda \in \mathbb{F}$:
$(v_1 + v_2) \otimes w = v_1 \otimes w + v_2 \otimes w$
$v \otimes (w_1 + w_2) = v \otimes w_1 + v \otimes w_2$
$(\lambda v) \otimes w = v \otimes (\lambda w) = \lambda(v \otimes w)$
注意:不是 $V \otimes W$ 中的每个元素都能写成 $v \otimes w$ 的形式(纯张量)。一般元素是纯张量的线性组合。例如,$v_1 \otimes w_1 + v_2 \otimes w_2$ 通常不能写成单个纯张量。
9.3 张量
定义 9.5(张量)
设 $V_1, \ldots, V_k$ 是向量空间。$(k, l)$-张量是一个多线性映射:
$$T: V_1^ \times \cdots \times V_k^ \times V_1 \times \cdots \times V_l \to \mathbb{F}$$
其中 $k$ 是逆变阶数,$l$ 是协变阶数。
在有限维情况下,给定基后,张量可以表示为多维数组。
例 9.3:常见张量
向量:$(1, 0)$-张量
线性泛函:$(0, 1)$-张量
矩阵:$(1, 1)$-张量(或 $(2, 0)$ / $(0, 2)$,取决于解释)
内积:$(0, 2)$-张量
曲率张量:$(1, 3)$-张量
应力张量:在连续介质力学中,$(0, 2)$-张量描述材料内部的应力分布
张量的分量表示
给定基 $e_1, \ldots, e_n$,$(k, l)$-张量 $T$ 的分量为:
$$T^{i_1 \cdots i_k}_{j_1 \cdots j_l} = T(e^{i_1}, \ldots, e^{i_k}, e_{j_1}, \ldots, e_{j_l})$$
其中 $e^i$ 是对偶基。
重要说明:张量的分量在基变换下按照特定规则变化,保持张量的几何意义不变。这是张量在物理学中重要的原因:物理定律应该独立于坐标系的选择。
9.4 外代数
定义 9.6(外积)
设 $V$ 是向量空间。外积(Exterior Product)或楔积(Wedge Product)$\wedge: V \times V \to \Lambda^2 V$ 满足:
双线性:对每个变元线性
反对称:$v \wedge w = -w \wedge v$
交替性:$v \wedge v = 0$
$\Lambda^k V$ 是由 $k$-向量($k$ 个向量的外积)张成的空间。
定理 9.4:外积的性质
对于 $v_1, \ldots, v_k \in V$:
$v_{\sigma(1)} \wedge \cdots \wedge v_{\sigma(k)} = \text{sgn}(\sigma) v_1 \wedge \cdots \wedge v_k$(置换符号)
如果 $v_1, \ldots, v_k$ 线性相关,则 $v_1 \wedge \cdots \wedge v_k = 0$
$\dim \Lambda^k V = \binom{n}{k}$,其中 $n = \dim V$
几何直觉:$v_1 \wedge \cdots \wedge v_k$ 表示由这些向量张成的平行多面体的"定向体积"。在 $\mathbb{R}^3$ 中,$v \wedge w$ 对应叉积,其大小是平行四边形的面积,方向由右手定则确定。
定义 9.7(行列式)
设 $T: V \to V$ 是线性算子,$\dim V = n$。$T$ 诱导 $\Lambda^n T: \Lambda^n V \to \Lambda^n V$。由于 $\dim \Lambda^n V = 1$,$\Lambda^n T$ 是标量乘法。这个标量定义为 $T$ 的行列式:
$$\det(T) = \text{标量使得 } (\Lambda^n T)(v_1 \wedge \cdots \wedge v_n) = \det(T) (v_1 \wedge \cdots \wedge v_n)$$
定理 9.5:行列式的性质
$\det(I) = 1$
$\det(AB) = \det(A)\det(B)$
$\det(A^T) = \det(A)$
$\det(A^{-1}) = 1/\det(A)$(如果可逆)
行列式是列(或行)的多线性交替函数
$\det(A) = 0$ 当且仅当 $A$ 不可逆
几何解释
$\det(A)$ 表示线性变换 $A$ 对单位立方体体积的缩放因子。如果 $\det(A) < 0$,则表示方向反转。
深入理解:行列式的绝对值是变换后平行多面体的体积,符号表示定向是否改变。这就是为什么行列式为零意味着变换将空间"压扁"到低维,导致不可逆。
9.5 张量积的应用
量子力学中的张量积
多粒子量子系统的态空间是单粒子态空间的张量积:
$$\mathcal{H}_{\text{total}} = \mathcal{H}_1 \otimes \mathcal{H}_2 \otimes \cdots \otimes \mathcal{H}_n$$
纠缠态是不能写成纯张量积形式的态,如 Bell 态:
$$|\Phi^+\rangle = \frac{1}{\sqrt{2}}(|00\rangle + |11\rangle)$$
深度学习中的张量
- 输入数据:图像是 3 阶张量(高 × 宽 × 通道)
- 权重:卷积核是 4 阶张量(输出通道 × 输入通道 × 高 × 宽)
- 注意力机制:$QK^T$ 本质上是将查询和键投影后进行张量积类型的操作
张量分解
- CP 分解:将张量分解为秩-1 张量的和
- Tucker 分解:高阶 SVD,将张量分解为核心张量和因子矩阵的乘积
三、程序员的视角
3.1 在机器学习中的应用
注意力机制:Transformer 中的自注意力计算 $Attention(Q, K, V) = \text{softmax}(\frac{QK^T}{\sqrt{d_k}})V$。这里的 $QK^T$ 可以看作查询和键之间的某种"相关性张量"。
张量分解:将大型权重张量分解为小型因子的张量积,实现模型压缩。如 Tucker 分解、CP 分解。
高阶特征交互:在推荐系统中,使用张量机(Factorization Machines)捕捉用户、物品、上下文之间的高阶交互。
卷积神经网络:卷积操作本质上是张量运算。输入图像、卷积核、输出特征图都是张量。
3.2 常见陷阱与误区
误区 1:认为张量就是多维数组
张量是几何对象,其定义独立于坐标系。多维数组只是张量在特定基下的表示。张量的分量在基变换下按照特定规则变化。
误区 2:混淆张量积与克罗内克积
克罗内克积是张量积在矩阵表示中的一种实现,但张量积是更抽象的概念。
误区 3:忽略外积的反对称性
外积 $v \wedge w = -w \wedge v$,这与普通乘法不同。这反映了"定向"的概念。
误区 4:认为行列式只用于判断可逆性
行列式的几何意义(体积缩放)和代数意义(特征值乘积)同样重要。
误区 5:忽视张量分解的近似性质
与矩阵 SVD 不同,高阶张量的最佳低秩近似不一定存在(可能只有下确界而无最小值)。
3.3 与其他层级的联系
- 与微分几何的联系:微分形式是外代数的元素;外导数是微分形式的导数
- 与量子力学的联系:多粒子态空间是张量积空间
- 与深度学习的联系:高阶张量操作用于特征提取和注意力计算
- 与数值分析的联系:张量分解用于降维和压缩
- 与广义相对论的联系:时空曲率由黎曼曲率张量描述
四、代码实战
9.1 张量积计算
import numpy as np
def tensor_product(v, w):
"""
计算两个向量的张量积(外积)
参数:
v: m 维向量
w: n 维向量
返回:
m x n 矩阵,表示 v ⊗ w
"""
return np.outer(v, w)
# 示例
v = np.array([1, 2, 3])
w = np.array([4, 5])
V_otimes_W = tensor_product(v, w)
print("v ⊗ w:")
print(V_otimes_W)
# 验证维度
print(f"\n维度: {V_otimes_W.shape} = {len(v)} x {len(w)}")
# 张量积的线性性质
v2 = np.array([0, 1, 0])
result = tensor_product(v + v2, w)
expected = tensor_product(v, w) + tensor_product(v2, w)
print(f"\n线性性验证: {np.allclose(result, expected)}")
# 多个向量的张量积
u = np.array([1, 0])
# u ⊗ v ⊗ w 是 3 阶张量
tensor_3rd = np.einsum('i,j,k->ijk', u, v, w)
print(f"\n3 阶张量形状: {tensor_3rd.shape}")9.2 外积与行列式
import numpy as np
def wedge_product_2d(v, w):
"""
计算 R^2 中两个向量的外积(标量,表示有向面积)
"""
return v[0] * w[1] - v[1] * w[0]
def wedge_product_3d(v, w):
"""
计算 R^3 中两个向量的外积(向量,叉积)
"""
return np.cross(v, w)
# 2D 示例
v = np.array([1, 2])
w = np.array([3, 4])
area = wedge_product_2d(v, w)
print(f"v ∧ w 的有向面积: {area}")
# 与行列式的关系
matrix = np.column_stack([v, w])
det = np.linalg.det(matrix)
print(f"det([v, w]): {det}")
print(f"两者相等: {np.isclose(area, det)}")
# 3D 示例
v3 = np.array([1, 0, 0])
w3 = np.array([0, 1, 0])
cross = wedge_product_3d(v3, w3)
print(f"\nv × w (叉积): {cross}")
# 三个向量的外积(有向体积)
u3 = np.array([0, 0, 1])
volume = np.dot(cross, u3) # 混合积
det_3d = np.linalg.det(np.column_stack([v3, w3, u3]))
print(f"有向体积: {volume}")
print(f"det([v, w, u]): {det_3d}")
# 验证行列式的多线性
a = np.array([1, 0, 0])
b = np.array([0, 1, 0])
c = np.array([0, 0, 1])
# det(a, b, c) = 1
print(f"\ndet(a, b, c) = {np.linalg.det(np.column_stack([a, b, c]))}")
# det(2a, b, c) = 2
print(f"det(2a, b, c) = {np.linalg.det(np.column_stack([2*a, b, c]))}")
# det(a+b, b, c) = det(a, b, c) + det(b, b, c) = 1 + 0 = 1
print(f"det(a+b, b, c) = {np.linalg.det(np.column_stack([a+b, b, c]))}")9.3 二次型与正定性判定
import numpy as np
def is_positive_definite(A):
"""
判断对称矩阵是否正定
参数:
A: 对称矩阵
返回:
bool: 是否正定
"""
# 方法1:检查特征值
eigenvalues = np.linalg.eigvalsh(A)
if np.all(eigenvalues > 0):
return True
return False
def sylvester_criterion(A):
"""
Sylvester 准则:检查顺序主子式
参数:
A: 对称矩阵
返回:
bool: 是否正定
"""
n = A.shape[0]
for k in range(1, n + 1):
submatrix = A[:k, :k]
det = np.linalg.det(submatrix)
if det <= 0:
return False
return True
def cholesky_check(A):
"""
尝试 Cholesky 分解
参数:
A: 对称矩阵
返回:
bool: 是否正定
"""
try:
np.linalg.cholesky(A)
return True
except np.linalg.LinAlgError:
return False
# 示例
A = np.array([[2, 1],
[1, 2]])
print("矩阵 A:")
print(A)
print(f"特征值: {np.linalg.eigvalsh(A)}")
print(f"是否正定(特征值法): {is_positive_definite(A)}")
print(f"是否正定(Sylvester): {sylvester_criterion(A)}")
print(f"是否正定(Cholesky): {cholesky_check(A)}")
# 不定矩阵
B = np.array([[1, 0],
[0, -1]])
print(f"\n矩阵 B:")
print(B)
print(f"特征值: {np.linalg.eigvalsh(B)}")
print(f"是否正定: {is_positive_definite(B)}")
# 二次型可视化
import matplotlib.pyplot as plt
x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, y)
# Q(x,y) = [x,y] A [x;y]
Z = A[0,0]*X**2 + 2*A[0,1]*X*Y + A[1,1]*Y**2
plt.figure(figsize=(10, 8))
contour = plt.contour(X, Y, Z, levels=20)
plt.clabel(contour, inline=True, fontsize=8)
plt.title('Quadratic Form: $x^T Ax$')
plt.xlabel('x')
plt.ylabel('y')
plt.grid(True, alpha=0.3)
plt.axis('equal')
plt.savefig('/tmp/quadratic_form.png', dpi=150, bbox_inches='tight')
plt.show()9.4 张量分解(Tucker 分解)
import numpy as np
# 手动实现简单的 Tucker 分解
def tucker_decompose(tensor, ranks):
"""
简化的 Tucker 分解
参数:
tensor: 3 阶张量
ranks: 各阶的秩 (r1, r2, r3)
返回:
core: 核心张量
factors: 因子矩阵列表
"""
modes = len(tensor.shape)
factors = []
for mode in range(modes):
# 沿当前模式展开
unfolded = np.moveaxis(tensor, mode, 0).reshape(tensor.shape[mode], -1)
# SVD
U, Sigma, Vt = np.linalg.svd(unfolded, full_matrices=False)
# 取前 rank 个左奇异向量
factors.append(U[:, :ranks[mode]])
# 计算核心张量
core = tensor
for mode in range(modes):
core = np.tensordot(core, factors[mode].T, axes=(mode, 1))
return core, factors
# 创建 3 阶张量
np.random.seed(42)
tensor = np.random.rand(10, 8, 6)
# Tucker 分解
ranks = (5, 4, 3)
core, factors = tucker_decompose(tensor, ranks)
print("核心张量形状:", core.shape)
print("因子矩阵形状:")
for i, f in enumerate(factors):
print(f" 因子 {i+1}: {f.shape}")
# 重构
reconstructed = core
for mode, f in enumerate(factors):
reconstructed = np.tensordot(reconstructed, f, axes=(mode, 1))
reconstructed = np.moveaxis(reconstructed, -1, mode)
print(f"\n重构误差: {np.linalg.norm(tensor - reconstructed):.6f}")
print(f"压缩率: {tensor.size / (core.size + sum(f.size for f in factors)):.2f}x")9.5 注意力机制中的张量操作
import numpy as np
def scaled_dot_product_attention(Q, K, V):
"""
缩放点积注意力
参数:
Q: 查询矩阵 (batch_size, seq_len, d_k)
K: 键矩阵 (batch_size, seq_len, d_k)
V: 值矩阵 (batch_size, seq_len, d_v)
返回:
注意力输出
"""
d_k = Q.shape[-1]
# 计算注意力分数: QK^T / sqrt(d_k)
scores = np.einsum('bij,bkj->bik', Q, K) / np.sqrt(d_k)
# Softmax
exp_scores = np.exp(scores - np.max(scores, axis=-1, keepdims=True))
attention_weights = exp_scores / np.sum(exp_scores, axis=-1, keepdims=True)
# 加权求和
output = np.einsum('bik,bkj->bij', attention_weights, V)
return output, attention_weights
# 示例
np.random.seed(42)
batch_size = 2
seq_len = 5
d_k = 8
d_v = 16
Q = np.random.randn(batch_size, seq_len, d_k)
K = np.random.randn(batch_size, seq_len, d_k)
V = np.random.randn(batch_size, seq_len, d_v)
output, weights = scaled_dot_product_attention(Q, K, V)
print(f"注意力输出形状: {output.shape}")
print(f"注意力权重形状: {weights.shape}")
print(f"\n样本注意力权重矩阵 (batch 0):")
print(weights[0].round(3))五、深入思考
5.1 历史背景
多线性代数的发展:
- 19世纪:Grassmann 引入了外代数;Ricci 和 Levi-Civita 发展了张量分析
- 20世纪初:Einstein 在广义相对论中使用了张量记号
- 1930年代:Cartan 系统研究了外微分形式
- 1980年代:张量分解在化学计量学中开始应用
- 2000年代:张量方法在机器学习和数据科学中兴起
- 2010年代:深度学习推动了高阶张量运算的研究
5.2 前沿方向
张量神经网络:将张量分解与神经网络结合,实现高效的模型压缩和加速。Tensor Train 和 Tensor Ring 分解用于压缩大型神经网络。
量子张量网络:使用张量网络表示量子多体态,如 MPS、PEPS、MERA。这在凝聚态物理和量子计算中有重要应用。
几何深度学习:将群论和张量分析结合,构建具有几何不变性的神经网络。
高阶优化:使用张量信息(如 Hessian)进行二阶优化,加速收敛。
5.3 延伸阅读
Sheldon Axler, Linear Algebra Done Right, 3rd Edition, Springer, 2015 - Chapter 9
Loring W. Tu, An Introduction to Manifolds - 外代数和微分形式
Tamara G. Kolda, Brett W. Bader, "Tensor Decompositions and Applications" - SIAM Review 综述
Sergey Levine et al., "TensorFlow for Machine Learning" - 张量在深度学习中的应用
Wolfgang Hackbusch, Tensor Spaces and Numerical Tensor Calculus - 张量计算的数值方法
六、实验笔记
实验 1:探索二次型的几何性质
目标:理解二次型与二次曲面的关系
步骤:
选择不同的对称矩阵 $A$(正定、半正定、不定)
绘制对应的二次型 $Q(x) = x^T A x$ 的等高线图
观察等高线的形状(椭圆、双曲线、抛物线)
计算特征值和主轴方向,验证主轴定理
尝试非对称矩阵,观察结果
扩展:在 3D 中可视化二次曲面,使用 matplotlib 的 plot_surface。
实验 2:张量积在注意力机制中的应用
目标:理解 Transformer 中注意力计算的张量本质
步骤:
实现简化的自注意力机制
分析 $QK^T$ 的计算过程,理解其与张量积的关系
可视化注意力权重矩阵
尝试不同的缩放因子,观察 softmax 的输出变化
研究多头注意力如何捕捉不同的特征交互
挑战:实现一个基于张量分解的注意力机制变体,减少参数量。
实验 3:外积与体积计算
目标:理解外积的几何意义
步骤:
在 $\mathbb{R}^3$ 中选择三个向量
计算它们的外积(混合积)
验证结果等于由这三个向量张成的平行六面体的体积
改变向量顺序,观察符号变化
验证线性相关性时外积为零
import numpy as np
# 三个向量
a = np.array([1, 0, 0])
b = np.array([0, 1, 0])
c = np.array([0, 0, 1])
# 混合积 = 行列式
volume = np.dot(a, np.cross(b, c))
print(f"平行六面体体积: {volume}")
print(f"det([a,b,c]): {np.linalg.det(np.column_stack([a, b, c]))}")
# 改变顺序
volume_perm = np.dot(b, np.cross(a, c))
print(f"\n改变顺序后: {volume_perm}")
print(f"符号变化: {volume_perm == -volume}")
# 线性相关
d = np.array([1, 1, 0])
e = np.array([2, 2, 0]) # e = 2d
f = np.array([0, 0, 1])
volume_dep = np.dot(d, np.cross(e, f))
print(f"\n线性相关时的体积: {volume_dep}")七、本章小结
本章介绍了多线性代数的基本概念,核心内容包括:
核心概念:
- 双线性形式是两个变元的线性函数,二次型是其特殊情况
- 张量积通过泛性质定义了"最一般"的双线性构造
- 张量是多线性映射,可以用多维数组表示
- 外积是反对称的双线性运算,捕捉定向体积
- 行列式是线性变换对体积的缩放因子
关键定理:
- 主轴定理:二次型可以通过正交变换对角化
- 张量积的泛性质:双线性映射等价于线性映射
- Sylvester 准则:正定性可通过顺序主子式判定
- 行列式的多重线性交替性质
几何直觉:
- 二次型对应二次曲面(椭球、双曲面等)
- 张量积将多个空间"粘合"成新空间
- 外积表示定向平行多面体的体积
- 行列式表示体积缩放
编程实践:
- 用
np.outer计算张量积 - 用行列式计算有向体积
- 用特征值判定正定性
- 用 Tucker 分解压缩张量
- 实现注意力机制中的张量操作
应用领域:
- 量子力学:多粒子态空间
- 深度学习:注意力机制、张量分解
- 微分几何:度量张量、曲率
- 物理学:广义相对论
多线性代数是线性代数的高级主题,为微分几何、量子力学、深度学习等领域提供了基础语言。
八、习题
基础题
判断下列双线性形式是否对称、正定:
- (a) $B(x, y) = x_1y_1 + 2x_2y_2$
- (b) $B(x, y) = x_1y_2 + x_2y_1$
- (c) $B(x, y) = x_1y_1 - x_2y_2$
计算向量 $(1, 2, 3)$ 和 $(4, 5)$ 的张量积,并验证其维度。
计算 $\begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}$ 的行列式,并解释其几何意义。
证明:如果 $v_1, \ldots, v_k$ 线性相关,则 $v_1 \wedge \cdots \wedge v_k = 0$。提示:利用外积的交替性。
进阶题
设 $A$ 是 $n \times n$ 对称矩阵。证明:$A$ 正定当且仅当存在可逆矩阵 $C$ 使得 $A = C^T C$。进一步,证明 $C$ 可以选为上三角矩阵(Cholesky 分解)。
设 $V$ 和 $W$ 是有限维向量空间。证明:$(V \otimes W)^ \cong V^ \otimes W^*$。提示:构造自然同构。
证明:$\det(AB) = \det(A)\det(B)$,使用外代数的定义。提示:考虑 $\Lambda^n(AB)$。
设 $T: V \to V$ 是线性算子。证明:$\det(T) = \prod_{i=1}^n \lambda_i$,其中 $\lambda_i$ 是特征值。提示:使用三角化。
挑战题
证明 Cayley-Hamilton 定理:设 $p_T$ 是 $T$ 的特征多项式,则 $p_T(T) = 0$。(使用三角化或 Jordan 标准形)进一步,利用此定理证明:任何 $n \times n$ 矩阵的逆(如果存在)可以表示为该矩阵的 $n-1$ 次多项式。
设 $T$ 是 $(k, l)$-张量。证明:在基变换下,$T$ 的分量按照特定的变换规则变化,保持张量的几何意义不变。具体地,如果基从 $\{e_i\}$ 变为 $\{e'_i\}$,变换矩阵为 $P$,则分量如何变化?