张量初步:从矩阵到高阶数组

05-进阶结构 进阶 约 15 分钟 #张量#高阶数组#模态展开#einsum 更新 2026-10-02
当前状态:未学
本文基于模型知识整理(生成时未联网核对),关键结论建议对照 Kolda & Bader 的张量分解综述复核。

一句话定义

张量是矩阵的高阶推广:向量=1 阶(单指标)、矩阵=2 阶(双指标)、3 阶以上统称高阶张量(多指标数组);张量的"线性代数"通过固定一个指标做矩阵化(模态展开)或用 einsum 记号的多重求和来实现——深度学习的所有数据与运算都是张量语言。

为什么重要

现代 ML 的一切都是张量:批次×通道×高×宽的图像(4 阶)、序列×头×嵌入的注意力(4 阶)。矩阵直觉(乘法=复合、转置=换指标序、分解=结构提取)逐级外推,但高阶也带来矩阵没有的新现象(秩不唯一、分解 NP 难)——知道边界在哪,才能不滥用矩阵直觉。

前置知识

kp-007(矩阵乘法)、einsum 的求和记号直觉。

核心概念

  • 阶(order)与形状:阶=指标个数;形状=各指标维数。图像批张量 (N, C, H, W) 是 4 阶张量。
  • 模态展开(matricization):把张量沿某一指标摊平成矩阵(如把 (C,H,W) 沿 C 摊成 C×HW)——把矩阵工具借给张量的标准桥。
  • 张量-矩阵乘法:固定其余指标、对某指标做矩阵乘(模态积 $\times_n$)。
  • einsum 记号:ik,kj->ij 即 $C_{ij}=\sum_kA_{ik}B_{kj}$(矩阵乘);bijh,bihd->bajd 即注意力(kp-031)——多重求和的通用语言,形状对错的静态检查器。
  • 张量分解家族:CP 分解(一组秩一张量之和,秩定义唯一但计算难)、Tucker(高阶 PCA,含核张量)、Tensor-Train(压缩高阶)——"SVD 直推"只在 2 阶成立。

原理与机制

矩阵直觉哪些能直推、哪些会翻车:

概念矩阵高阶张量
秩唯一定义CP 秩不唯一可算(NP 难),Tucker 秩=向量
分解SVD 最优无统一"SVD";各家族各最优性
转置唯一指标排列有多种(1,0,2 等)
乘法一种模态积/内积/收缩多种

为什么深度学习用 einsum 而非手写 reshape:reshape+matmul 的等价实现要"摊平-乘-摊回",步骤易错且优化器难识别;einsum 直接声明指标级求和,语义清晰、可自动融合——kp-031 的注意力实现范式。

低秩张量的意义:参数化压缩(Tensor-Train 层)、隐变量模型(CP=多视角因子分析)——把 SVD 的"用少量因子表示大矩阵"思想带入高阶。

图示

阶1 向量 vᵢ  → 阶2 矩阵 Aᵢⱼ → 阶3+ Tᵢⱼₖ…
模态展开: T (2,3,4) → 沿指标1 摊平 → 矩阵 (2, 12)
einsum:  'bijh,bihd->bajd'
          批/序列×序列×头 × 批/序列×头×维度 → 注意力输出
分解: CP(秩一和) | Tucker(高阶PCA) | TT(链式压缩)

直观类比

矩阵是一张表格,张量是一摞带索引的表格柜(3 阶)乃至仓库货架系统(高阶)。矩阵技巧像"单张表格的分析术";张量技巧是"先把某几层货架摊平成一张表(模态展开)再套用旧术,或直接用货架级算法(CP/TT)"。

实例或案例

  • Transformer 注意力:softmax(QKᵀ/√d)V 的批×头张量运算,einsum 一行表达(kp-031)。
  • 卷积:输入×核 = 相关运算的 4 阶张量收缩;im2col 是其"模态展开式"实现。
  • 张量网络压缩大模型:TT/LoRA 类低秩参数化压缩权重(kp-031 的低秩微调思想)。

常见误区

  • 误区一:"张量=SVD 套壳"。高阶秩不唯一、分解不可交换最优性——矩阵结论必须重新证明才能搬。
  • 误区二:"reshape 不改变数据所以随便摊"。摊平方式决定"哪些指标被当行、哪些当列",模态选错=语义错误(尤其通道/空间指标混淆)。
  • 误区三:"einsum 只是记号糖"。它是正确性声明(指标收缩关系)+实现优化提示;shape bug 排查效率数量级提升。

与其他知识点的关系

  • kp-007:矩阵乘法的外推母体。
  • kp-018:SVD 的 2 阶最优性在 3 阶不再"唯一最优"。
  • kp-031:注意力/卷积的张量运算本体。

自测题

  1. 把形状 (2,3,4) 的张量沿模态 2(第二个指标)摊平,矩阵形状?

答:3×8(把指标 2 保留为行、指标 1×3 摊成 8 列)。

  1. einsum i,j->ij 计算什么?

答:外积 $a_ib_j$——两个向量张成秩一矩阵(CP 分解的积木)。

  1. 为什么 CP 秩比矩阵秩难算?

答:矩阵秩=非零奇异值个数(SVD 一次搞定);CP 秩=最少秩一项数,最优分解 NP 难且最佳低秩逼近可能不存在(边界吸引)。

延伸阅读

  • Kolda & Bader, "Tensor Decompositions and Applications"(SIAM Review 2009,入门综述)。
  • NumPy einsum 文档(半天的投入终身受用)。
  • Oseledets, "Tensor-Train Decomposition"(TT,2011)。