标量、向量、矩阵、张量(scalar, vector, matrix, tensor)
/ SKAY-lur, VEK-tur, MAY-triks, TEN-sur /
这四个词,不过是装数字的容器层层往上叠的一架梯子,每一级都比上一级装得更多。标量就是孤零零的一个数,比如温度21。向量是一串有顺序的数,比如把温度、湿度、气压三项测量值排成 [21, 64, 1013]。矩阵是按行和列摆成的一格格数字,就像一张电子表格。而张量则是个总称——上面这些东西,再往任意多个维度扩展,都叫张量:一摞表格、一摞「一摞表格」,如此类推。
关键概念是维度,也就是你需要几个下标才能锁定其中一个数。标量需要零个(它就在那儿)。向量需要一个(给我第2项)。矩阵需要两个(给我第3行、第5列)。更高阶的张量则需要三个、四个或更多。举个例子,一张彩色照片天然就是一个三维张量:高 × 宽 × 三个颜色通道(红、绿、蓝)。
机器学习为什么离不开这些对象:数据几乎总是成批成批地以数字形式到来,把它们装进向量、矩阵和张量,计算机就能借助高速并行的硬件一口气处理上百万个数。流行的软件库 TensorFlow,名字正是由此而来。别被物理学家那套更严格、更花哨的「张量」含义唬住——在日常的机器学习里,张量就是一个多维数字数组,没有比这更玄乎的东西。
一张28像素宽、28像素高的灰度照片,就是一个 28×28 = 784 个亮度数字组成的矩阵。把100张这样的照片摞起来,就得到一个形状为 100×28×28 的三维张量。再把它们变成彩色,就多出一个通道维度:100×28×28×3,一个四维张量——这正是图像模型期望喂进来的形状。
拾级而上:一个数、一串数、一格格数,再到「格中有格」——同样是数据,只是轴更多了。
阶(或称秩)数的是轴的个数,不是元素的个数:一个有一千个数的向量,仍然是一阶的。而且机器学习里的张量只是个数字数组——别把它和物理与微分几何里要求严苛得多的「张量」混为一谈。