跳到正文
动手理解 · CONCEPT LAB

跟着 Shape 穿过线性层与自注意力

不要先盯每个数字,先盯每条轴的含义。Batch、Sequence 和 Hidden 是接口约定的数据坐标;常见的逐位置 Linear 层只改变最后一条特征轴,不会混合前导位置。

已经发生 正在观察 接下来
01 / 03

状态传导图

B=2 两条样本
T=4 每条四个位置
H=3 每位置三维
X [2,4,3]

示例 B=2、T=4、H=3,共有 24 个标量。其他 API 也可能使用 [T,B,H];下方刻度只帮助理解本例,不是性能或质量基准。

观察点 01

先为三条轴起名字

这里采用 batch-first 合同:[B,T,H] 表示一批 B 条序列,每条有 T 个位置,每个位置用 H 个特征坐标描述。Shape 只记录轴长;B/T/H 的语义与顺序来自模型接口,不是张量额外存着的内容。

标量总数2×4×3
语义轴数量三条轴
此刻要记住

读张量先确认接口合同,再翻译轴名与轴长。

数学最小底座 · 02 / 04

线性代数,读懂数据形状

AI 里的线性代数,不是先背行列式。你最先要会的是:一个数组的每一轴代表什么,两个矩阵为什么能相乘,乘完形状会变成什么。掌握这三件事,Transformer 里许多公式就不再像密码。

01 · SHAPES

不要先数括号,先给每条轴起名字

在 AI 工程里,一类常见错误不是不会做高等证明,而是把 Batch(批次)、Sequence(序列位置)、Hidden Dimension(隐藏维度)几条轴弄反。把 Shape(形状)当作数据流的“类型签名”,能在计算前发现很多问题。

从零维标量张量、一维向量、二维矩阵到三维张量的形状图,并拆解常见 Transformer 隐藏状态中 B 代表批次、T 代表序列位置、D 代表隐藏维度
这些是不同阶数的独立示例;数组怎样组织,比孤立数字更重要。B、T、D 是轴的语义,不是固定数值。 查看原图 ↗
Scalar · 标量
一个数,比如损失 2.31、学习率 0.001。在 PyTorch 里,它可以表示成 Shape 为 [] 的零维 Tensor(张量)。
Vector · 向量
一组有顺序的坐标,比如一个 Token(文本切分后的符号单元)的隐藏表示。GPT-3(Generative Pre-trained Transformer 3,生成式预训练 Transformer 3)论文中的 6.7B 模型使用 d_model=4096;这在数学上是 ℝ⁴⁰⁹⁶ 中的向量,但各坐标轴承载的功能由训练形成的表示约定决定,通常不能逐一解释成 4096 个可命名语义。
Matrix · 矩阵
二维数组。例如词表 Embedding(嵌入)矩阵可写成 [vocab_size, hidden_size]:Token ID 选择其中一行作为该词表项的向量。
Tensor · 张量
在深度学习框架语境中,Tensor 通常是任意维的规则数组;标量、向量、矩阵也可分别视为 0、1、2 维 Tensor。一批文本隐藏状态常是 [batch, sequence, hidden];图像还会出现高、宽、通道轴。
白话先懂把张量想成一座仓库:每条轴是一层货架标签。[2,4,3] 只告诉你各轴长度;只有知道它是 [batch, sequence, hidden],你才知道“2 条序列、每条 4 个位置、每个位置 3 个特征坐标”。但轴序是接口合同,不是数学定律:[B,T,D] 是常见的 batch-first(批次在前)布局,而 PyTorch 参考实现 nn.Transformerbatch_first=False 时使用 [T,B,D]
02 · MATRIX MULTIPLY

矩阵乘法,就是批量做“行 × 列”

左矩阵的一行与右矩阵的一列做点积,得到结果中的一个数。左边有几行,结果就有几行;右边有几列,结果就有几列。

2×3 矩阵乘以 3×2 矩阵得到 2×2 矩阵,左上角元素由一行和一列点积得到;下方连接到 Transformer 的 X 乘 WQ 得 Q
矩阵乘法不等于逐元素相乘。对这里的二维矩阵,相邻内侧维必须相等并被求和,外侧两维成为输出 Shape。 查看原图 ↗
ab=i=1daibi\mathbf{a}\cdot\mathbf{b}=\sum_{i=1}^{d}a_i b_i

两个等长向量对应元素相乘再求和。注意力中的 Q·K、神经元的加权和,都能看到点积。

手算结果矩阵的右下角

ROW 2 × COLUMN 2
  1. 取左矩阵第 2 行:[4,5,6]
  2. 取右矩阵第 2 列:[2,1,0]
  3. 对应相乘:[4×2, 5×1, 6×0] = [8,5,0]
  4. 求和得到 8+5+0=13,所以 Y₂₂=13
Y=XW+b\mathbf{Y}=\mathbf{X}\mathbf{W}+\mathbf{b}

这里采用行向量约定:X[..., H_in] 乘概念上的 W[H_in, H_out],所有前导轴保持不变。严格说,加上偏置 b 后是 Affine Transformation(仿射变换),但框架 API 仍通常叫 Linear(线性层)。

PyTorch 别看反nn.Linear(H_in, H_out) 实际存储的 weight Shape 是 [H_out, H_in],前向计算写成 Y = X weightᵀ + b。所以 X[2,4,3] 进入 Linear(3,6) 后得到 Y[2,4,6];框架保留任意数量的前导轴,并在 8 个位置复用同一组参数。带偏置时参数量是 6×3+6=24,输出虽有 2×4×6=48 个标量,却不是 48 组参数。
批量 MatMul(Matrix Multiplication,矩阵乘法)当两个输入都至少是二维时,torch.matmul 把最后两轴当作矩阵轴,并对更前面的 batch 轴做广播;一维向量输入另有补轴再移除的规则。例如 Q[B,Hd,Tq,Dk] @ Kᵀ[B,Hd,Dk,Tk] 得到 [B,Hd,Tq,Tk]Hd 是头数,被求和的是每头查询/键特征维 Dk,Batch、Head、Query 和 Key 的位置轴并没有被混在一起。广播要求前导轴可兼容,也不等于数学上自动复制出新的训练样本。
03 · GEOMETRY

向量不仅是数字列表,也可以承载几何解释

几何直觉能帮助理解 Embedding 和注意力,但要谨慎:高维语义并不等于二维图上的真实地图,降维可视化只是投影。

长度:这个表示有多大

向量的 L2(ℓ₂ / Euclidean Norm,欧几里得范数)是 ||x||₂=√Σxᵢ²。L2 归一化会把非零向量缩放到单位长度。Layer Normalization(层归一化,LayerNorm)先在配置的特征轴上减均值、再除以 √(Var+ε),并可应用可学习增益与偏置;PyTorch 默认开启这些仿射参数,但允许关闭。Root Mean Square Layer Normalization(均方根层归一化,RMSNorm)用 √(mean(xᵢ²)+ε) 缩放而不减均值。两者都不等于简单的 L2 归一化。

方向:两个表示有多像

对两个非零实向量,Cosine Similarity(余弦相似度)把点积除以两边 L2 长度,取值在 −1 到 1 之间;零向量的数学余弦没有定义。工程 API 常用 ε 截断分母避免除零,例如 PyTorch F.cosine_similarity 使用 max(||x||₂, ε),因此其零向量数值是稳定实现的结果,不应解释成严格几何夹角。Embedding 检索常用余弦或内积排序;实际选择取决于训练目标和向量是否归一化。

线性映射:重组、投影或压缩特征

不带偏置的矩阵 W 定义 Linear Map(线性映射);取决于 W,它可以实现旋转、反射、剪切、投影、升降维或特征混合,加上偏置后则成为可平移的 Affine Map(仿射映射)。机器学习文章常把学得的线性映射宽泛地简称为 Projection(投影);除非矩阵满足相应条件,它不等于线性代数里反复应用不再变化、即 P²=P 的严格投影算子。严格的 Change of Basis(换基 / 坐标变换)描述的是同一有限维向量空间里、同一个向量在两组基下的坐标互换:换基矩阵必为方阵且可逆,底层向量没有变。一般长方形线性映射或降秩映射却会改变表示维数或丢失信息,不能都解释成“换一副坐标”。Transformer 的自注意力用分别学习的 WQ/WK/WV 把同一份隐藏状态线性映射成 Query(查询)、Key(键)和 Value(值)三种角色,三者 Shape 可以相似,但数值与职责不同。

04 · REAL MODELS

这些线性代数正在模型哪一层发生

05 · MISCONCEPTIONS

看懂形状后,还要避开这些坑

“矩阵乘法就是对应元素相乘”

对应元素相乘是 Hadamard Product(阿达玛积);矩阵乘法是行与列做点积,输出形状和语义都不同。

“维度越高就越智能”

Hidden Size(隐藏维度)只是容量设计之一。其他设置不变时,更宽通常会增加参数量和计算量;效果仍取决于深度、数据、训练方法和架构配比。

“张量的 rank 就是矩阵秩”

部分框架 API 把张量轴数称为 Rank(阶数),例如 tf.rank 对 Shape [2,2,3] 返回 3;线性代数中的 Matrix Rank(矩阵秩)则表示线性独立的行空间或列空间维数。两者同名但不是同一概念。

“转置只是把表转过来”

视觉上是行列互换;在计算中它改变点积配对关系。同长度 Self-Attention(自注意力)用 QKᵀ 得到 T×T 分数矩阵;若 Query 与 Key 序列长度不同,结果是 T_query×T_key

“乘一个矩阵就是换坐标系”

换基需要同维、可逆且两组向量都构成基。神经网络里的投影常常升维、降维或降秩;它可以重组甚至丢弃信息。再加偏置后还是仿射映射,不能用“换坐标”包办解释。

06 · SOURCES

一手资料与继续学习

  1. Deep Learning · Chapter 2: Linear Algebra — 面向深度学习的线性代数基础。
  2. PyTorch · torch.nn.Linear — 仿射计算、输入输出 Shape 与权重存储方向。
  3. PyTorch · torch.nn.Embedding — Embedding 权重的词表大小与向量维度映射。
  4. PyTorch · torch.tensor — 构造零维标量 Tensor 的官方示例。
  5. PyTorch · torch.matmul — 向量、矩阵、批量矩阵乘法及前导轴广播规则。
  6. PyTorch · torch.nn.Transformerbatch_first[T,B,D]/[B,T,D] 轴序合同。
  7. PyTorch · cosine_similarity — 用 ε 截断范数分母的数值稳定实现。
  8. Attention Is All You Need — Q/K/V、缩放点积注意力与 Transformer 架构。
  9. An Image is Worth 16×16 Words — Vision Transformer 的 Patch 线性映射与序列表示。
  10. Language Models are Few-Shot Learners — GPT-3 各规模的层数、隐藏维度与注意力头配置。
  11. Layer Normalization — LayerNorm 的均值、方差与可学习增益/偏置。
  12. Root Mean Square Layer Normalization — RMSNorm 的均方根缩放与不重新居中边界。
  13. PyTorch · torch.nn.LayerNorm — 归一化轴、ε 与可选仿射参数。
  14. PyTorch · torch.nn.RMSNorm — RMS 计算轴、ε 与可学习缩放参数。
  15. TensorFlow · tf.rank — 张量 Rank 是轴数,不等于 Matrix Rank。
  16. MIT · Matrices and Linear Transformations — 线性映射的输入/输出维度与矩阵表示。
  17. UC Berkeley · Change of Basis — 换基矩阵的可逆性与坐标关系。
  18. Stanford · Orthogonal Projection — 投影矩阵的幂等条件 P²=P;正交投影还满足对称性。

核查日期:2026-07-15。图中 2×3 手算矩阵、Linear 参数账与 ViT 的 224×224 Shape 算例为教学推导,不是跨模型统一配置;[B,T,D]、行向量记法和 Attention 轴名均是页面明确采用的合同,模型数字与 API 行为以原论文和当前官方文档为准。