张量 Tensor 简述
向量是箭头,对偶向量是标尺——它们的配对产生不变的标量。张量是带多个可填充槽位的线性机器,化解了「向量进向量出」与「输出标量」之间的悖论。度量张量连接二者,使长度与能量保持坐标不变。
张量是标量、向量和矩阵的高维推广
你几乎肯定见过这句话。它出现在几乎所有教科书的第一页,也几乎是所有困惑的出发点。
原因在于,这句话只描述了张量的存储格式,而对它的本质只字未提。这就好比说「人是一堆细胞的集合」——不算错,却没有回答「人到底是什么」这个真正的问题。
本文只追求一个目标:为什么物理学家和数学家如此坚持区分向量与「对偶向量」,并坚持区分张量中的「上标」与「下标」?只要你能抓住这一点,围绕张量的所有神秘感都会消散。
我们按以下顺序展开:先重新审视向量本身;接着介绍它的孪生兄弟——对偶向量;然后给出张量的严格定义;用一个具体例子拆解一个常见的困惑点;最后阐明连接向量与对偶向量的那座关键桥梁——度量。
箭头
假设平面上有一支物理意义上的箭头,指向北偏东 30°,长 5 米。这支箭头具有客观存在性——无论你如何建立坐标系,它都在原处;它的长度和方向并不会因为你的参考系变了就改变。
然而,当你写下 (3, 4) 这样的坐标时,你已经做了一次隐蔽的操作:你选择了一个坐标基,然后把这个箭头相对于该基「翻译」成了一组数字。换一个基(比如把坐标轴旋转 45°),同一支箭头会被翻译成完全不同的数字,比如 (4.95, 0.71)。
数字变了,箭头没变。这正是向量作为几何对象与其坐标表示(数组)之间最根本的区别。深度学习里的张量(例如 torch.tensor([3,4]))只是这个「翻译结果」,从不关心背后是否站着一个不变的几何对象。纯粹做数值计算时这完全没问题,但一旦你想谈论「物理定律不依赖于观察者的选择」这类命题,就必须回到箭头本身。
抛开坐标不谈,向量空间 的定义其实相当简洁:只要一个对象集合支持加法(首尾相接的合成)和标量乘法(拉伸或压缩),并满足少数几条自然的代数定律,它就构成一个向量空间,其元素就是向量。速度、力、位移都是这类对象。
对偶空间
向量是箭头;那么,「测量」这支箭头的工具又是什么?
它是一种完全不同类型的对象,叫作对偶向量(也叫余向量或 1-形式)。它不是箭头,而是一把标尺——一组等距的平行线。把箭头放上去,箭头穿过的线数就是它输出的数字。
严格定义:对偶空间 是 上所有线性泛函的集合。也就是说, 中的每个元素 都是一条规则:给它一个向量 ,它输出一个实数 ,并且这条规则对向量加法和标量乘法都是线性的。
在有限维线性代数中,这简单到几乎平庸:
- 向量 是列向量:
- 对偶向量 是行向量:
它们的「配对」就是矩阵乘法:
所有行向量构成的空间,正是列向量空间的对偶空间。这听起来像是同一组数字换了个摆法——但当坐标系发生变换时,这两个对象的「命运」迥异,这正是问题的关键所在。
想象把单位从米换成厘米(这相当于把坐标基缩小为原来的 )。
- 以厘米度量时,向量分量被放大 100 倍(同一支箭头,单位更小,需要的刻度数更多)。
- 而对偶向量分量(即「每单位对应多少刻度」的标尺密度量)则缩小为 (刻度线本身变得更密;密度本身不变,但「每单位多少刻度」这个数字变了)。
两者相乘:,配对的结果——那个实数——保持不变。
这正是「逆变」(向量,其分量与基的变换方向相反)与「协变」(对偶向量,其分量与基的变换方向相同)这两个物理学名词的来历。对偶空间存在的全部理由,就是要保证最终算出的那个数——无论是长度、功、能量还是概率——是一个客观事实,不依赖于你选择米还是厘米,也不依赖于你采用哪套坐标系。
这也是全篇最重要的一句话:向量与对偶向量构成互补的一对;它们各自的分量随坐标选择而变化,但二者配对得到的标量永远不变。张量理论的每一项技术细节,归根结底都在为守护这个不变性服务。
张量的严格定义
向量和对偶向量就位之后,张量的定义便自然浮现:
型张量 是一个多重线性映射:它同时接受 个对偶向量和 个向量作为参数,输出一个实数。
用符号表示:
两个关键词,一个都不能少:
- 多重线性:对每个槽位分别线性(加法保持、对标量乘法齐次)。这保证张量运算可以像矩阵运算一样,完全展开为分量的加权和。
- 标量输出:无论有多少个槽位、输入的是什么类型,最终出来的都是一个不随坐标变化而变化的绝对数字。
由此直接得到张量阶数的公式:
这也是为什么单说「阶数」信息量不够——它只告诉你张量有几个槽位,却不告诉你哪些槽位吃向量、哪些槽位吃对偶向量。这种区分绝非咬文嚼字;下一章将用一个具体例子说明,为什么它是生死攸关的问题。
槽位哲学
物理教科书常常这样描述二阶张量:
「应力张量 作用在一个法向量 上,产生一个应力向量 。」
这句话听起来像是「输入一个向量,输出一个向量」。而第 3 章的定义明明说,张量是「输入几个向量和对偶向量、输出一个标量」的东西。两种说法似乎完全不可调和——而这正是绝大多数读者卡壳的地方。
解开这个矛盾的钥匙是:多重线性映射并不要求你一次填满所有槽位。
应力张量 是 型张量,有两个槽位:一个对偶向量槽位和一个向量槽位。当你只把法向量 塞进它的向量槽位时:
- 向量槽位已被填满;
- 对偶向量槽位仍然空着。
此时 变成了什么?它变成了一个仍在等待对偶向量输入的中途产物——而「一台等待对偶向量、随后输出标量的机器」,恰好是定义向量的另一种严格方式(通过自然同构 )。
- 只填一个槽位: 退化成一个「待定」向量,这正是教科书里说的「输出应力向量 」;
- 两个槽位都填满(法向量 + 某个方向上的对偶向量/标尺):张量终于输出一个标量,即该方向上应力分量的大小。
因此,「输入一个向量、输出一个向量」与「输入两个参数、输出一个标量」并不矛盾;前者只是后者的中间状态。物理教科书为了照顾直觉,通常只展示「喂了一半」的结果;数学定义则严谨地描述所有槽位填满后的最终行为。理解了这一层,关于张量「到底是映射还是运算」的争论几乎会自行消解。
那么,为什么必须区分 和 ,而不是只说阶数?
型张量与 型张量,写成数组时都是二维矩阵——视觉上无法区分。但它们在坐标变换下的行为截然不同:
- 型(例如线性变换、惯性张量):一个上标一个下标;变换时一个分量「逆变」、一个分量「协变」,两者相互抵消。
- 型(例如度量张量):两个下标;变换时两个分量都「协变」,向同一方向累积。
如果只说「阶数」而忽略 之分,在计算散度、缩并等运算时必然误套公式——而在广义相对论里,这种错误足以让「能量守恒」这样的物理定律在计算层面崩塌。这就是数学家坚持用 型而非笼统的「阶数」来标注张量的原因。
度量张量
至此还有一个问题悬而未决:向量和对偶向量居于两个显然不同的空间,物理学家却经常把二者混用(比如说「把一个向量的指标降下来」)。这到底是怎么回事?
在一个配有度量张量 的空间里(几乎所有的物理空间都是如此),存在一台自然的「翻译机」,能把向量翻译成对偶向量,也能反向翻译。这个操作叫作指标升降:
降指标:向量到对偶向量
升指标:对偶向量到向量
度量张量本身是 型张量;它的作用正是「吞进两个向量,输出它们的内积」——而内积正是长度与角度的定义。正因有了度量,我们才能谈论「向量的长度」这个听起来像是向量固有属性、实际上离开对偶配对就无法定义的量。
在欧几里得空间(比如熟悉的笛卡尔坐标系)里,度量恰好是单位矩阵,指标升降「看起来」什么也没做。这也是为什么中学物理里向量与对偶向量的区别被完全掩盖了。一旦坐标系变得复杂(极坐标、球坐标),或者空间本身弯曲(广义相对论的时空),度量就不再是单位矩阵,向量与对偶向量的区别就会以决定性的姿态重新登场。
坐标变换法则
前面几章都在诉诸直觉;这里给出具体的分量变换法则作为「锚」。设坐标从 变换到 。 型张量的分量变换法则为:
不必被这个公式吓到;它只是在重复同一个要点:
- 每个上标(对应向量槽位的「逆变」分量)乘以一个形如 的雅可比因子;
- 每个下标(对应对偶向量槽位的「协变」分量)乘以一个形如 的雅可比因子(正是前者的倒数)。
这就是第 2 章那个直观例子「厘米与米」的严格数学版:上下指标的雅可比因子互为倒数,配对缩并时精确抵消,从而保证张量整体(作为几何对象)不变,只有相对于特定坐标系的分量在变。
常见张量
下面列举各个领域中遇到的张量示例。
| 张量类型 | (对偶向量槽位) | (向量槽位) | 总阶数 | 典型例子 |
|---|---|---|---|---|
| 标量 | 0 | 0 | 0 | 温度、质量 |
| 向量 | 0 | 1 | 1 | 速度、力 |
| 对偶向量(1-形式) | 1 | 0 | 1 | 梯度、行向量 |
| 线性变换/惯性张量 | 1 | 1 | 2 | 转动惯量、应力张量 |
| 度量张量 | 0 | 2 | 2 | 长度定义 |
| 黎曼曲率张量 | 1 | 3 | 4 | 广义相对论中的时空弯曲 |
两种语境
最后需要澄清一点:「张量」一词在深度学习和在物理/微分几何中,指的是两个不同抽象层级上的概念,这是困惑的重要来源。
- 深度学习:
tensor只是一个多维数组;唯一关心的是并行计算的效率。这里没有「坐标变换不变性」,也没有协变与逆变之分。把张量理解成「广义数组」就完全够用,不必给这个词背上哲学重负。 - 物理与微分几何:张量首先是一个不依赖任何坐标选择的几何或物理对象;数组只是它相对于某个坐标基的「临时快照」。协变、逆变、度量、缩并——这些概念存在的目的只有一个:保证从这些临时快照算出的物理量(长度、能量、曲率)是客观的、绝对的,不随观察者改变。
两种语境没有对错之分;它们服务的目的大相径庭。真正的困惑往往来自用深度学习的直觉去理解广义相对论的张量,或者反过来。一旦意识到这是两回事,很多「教科书讲不清楚」式的挫败感就会自行消解。
结语
让我们回到最初的问题:张量到底是什么?
它是一台带有若干「槽位」的机器:有的槽位等待「箭头」(向量),有的槽位等待「标尺」(对偶向量)。当所有槽位都被填满时,它输出的数字永远相同——无论你从哪个坐标系观察,无论你用什么单位度量。而度量张量,则是连接向量世界与对偶向量世界的桥梁,使「长度」这样一个看似无辜的概念得以被严格定义。
下次你写下下标或上标时,不妨停下来想一想:这个位置是在等一支箭头,还是在等一把标尺?