张量 Tensor 可视化实验室
“张量”这个词听起来像高等数学,但在深度学习里,它最常见的含义其实很朴素:一个带有多个轴的数值容器。标量是 0 阶张量,向量是 1 阶,矩阵是 2 阶,到了 3 阶及以上,就可以自然地表示批次、时间步、通道、头数、位置、隐藏维等更复杂结构。
先把“张量”看成不同维度的数据盒子
点击下面的阶数按钮。你会看到:张量并不是另一种神秘对象,而是“数组维度继续往上长”之后的自然延续。理解了 rank 和 shape,你就已经抓住了一大半。
自己搭一个 3D 张量,点一个元素看看它在哪里
下面这个实验把 3D 张量拆成了“多个切片矩阵”。你可以改 shape、切换语义预设、选择切片,再点击某个元素看它的坐标、值和在展平顺序中的位置。
4 个最常见的张量操作,直接看数据怎么变
这部分不是公式堆砌,而是把深度学习里最常见的张量操作拆成你能直接观察的过程。每个实验都保留了“操作前”和“操作后”的可视化对照。
1. Reshape:只改外形,不改元素总数
你可以把同一组数据重排成不同 shape,但元素总数和顺序不会变。
原始形状 [3, 4]
目标形状
2. Transpose:交换轴的位置
在二维矩阵里,转置最直观的效果是“行变列,列变行”。点击左侧任意元素,看它在转置后的新坐标。
原矩阵 X
转置后 XT
3. Reduce:沿着某个轴做汇总
深度学习里经常会沿某个轴做 sum 或 mean。点击右侧结果矩阵中的任意格子,左侧会高亮它来自哪些原始元素。
原始 3D 张量
汇总后
4. Broadcast:让小 shape 自动扩展去参与运算
Broadcast 最常见的用法,就是把一个偏置向量加到矩阵的每一行上。你可以调每一维偏置,看结果如何联动变化。
矩阵 A
偏置向量 b
A + b
在大模型里,常见 shape 大概长这样
输入表示
[batch, seq, hidden]
一批句子,每个句子有若干 token,每个 token 又有隐藏维向量。这是 Transformer 里最常见的主干形状之一。
注意力得分
[batch, heads, query_len, key_len]
每个 head 都会产出一张“query 看 key”的分数表,所以它天然是更高维的张量。
分类或下一个 token 概率
[batch, vocab] 或 [batch, seq, vocab]
输出层常常要给出对整个词表的打分,所以最后一维很大。
多模态输入
[batch, channel, height, width]
图像、视频和音频的输入张量通常会带有更多空间或时间维度,本质还是“多轴数组”。
概念介绍与相关公式
概念 1:张量的阶与形状
一个张量可以记作 X。如果它有 r 个轴,我们常说它是 r 阶张量;它的 shape 记作 (d1, d2, ..., dr)。
概念 2:索引一个元素
张量里的单个元素需要用多个下标来定位。比如 3 阶张量的一个元素可以写成 x[i, j, k]。
概念 3:reshape
reshape 只改变“怎么看这些数”,不改变元素值和元素总数。因此 reshape 前后的总元素数必须完全相等。
概念 4:transpose / permute
transpose 的本质是交换轴顺序。二维时最直观:行列互换。更高维时则是更一般的轴置换。
概念 5:reduce
沿某一轴做求和或平均,就是把那一轴“压掉”。这也是池化、loss 汇总、batch 平均里常见的操作。
概念 6:broadcast
broadcast 允许更小 shape 的张量在满足规则时自动扩展去参与运算。最常见情形之一,就是向量加到矩阵每一行。
张量的标准介绍与通俗介绍
标准介绍:数学里的张量
更严格地说,张量不是“很多数字随便堆在一起”,而是一类在坐标变换下满足特定变换规律的数学对象。在线性代数和微分几何里,它常被看成一种多线性映射,也可以写成带多个上标、下标的分量对象。
如果只看深度学习里最常用的工程表示,我们常把一个张量写成 X ∈ R^(d1 × d2 × ... × dr),表示它是一个 shape 为 (d1, d2, ..., dr) 的实数张量。
标准介绍:为什么“高维数组”只是工程近似
在机器学习代码里,把张量当成“高维数组”几乎总是够用,所以大家会直接说 Tensor 就是多维数组。但从更严格的数学角度看,真正重要的不只是它有多少维,而是它在不同基底或坐标系之间变换时,分量如何一起变化。
也就是说,高维数组是张量最常见、最容易操作的“存储形式”;而张量本身更强调一种结构和规则。
通俗介绍:把张量理解成“带标签的数字仓库”
如果完全不从抽象数学出发,最容易理解的方法是把张量想成一个“数字仓库”。仓库里装着很多数,每一层标签都在回答一个问题:这是第几个样本?第几个 token?第几个通道?第几个隐藏维?
一旦这些轴标签说清楚了,张量就不神秘了。你看到的不是一团数字,而是“按多个维度组织起来的数据”。
通俗介绍:从点、线、表,到数据立方体
一个数,是标量;一排数,是向量;一张表,是矩阵;很多张表按新方向叠起来,就是更高阶张量。你也可以把它想成 Excel 表不断“再加一个维度”:先有行和列,再加上批次、时间、头数、通道,就变成张量了。
所以张量并不是一种和向量、矩阵完全不同的怪东西,而是它们的自然推广。