课程/M03/转置、对称与分块矩阵
M03 · 矩阵与线性映射核心约 30 分钟

3.6 转置、对称与分块矩阵

本节位置:模块 3 · 矩阵与线性映射 | 前置:3.3 | 预计:30 分钟

一句话:转置是「把矩阵搬到点积的另一边」,对称是「两边一样」,分块是「把大矩阵当成小矩阵来算」。

0. 场景引入

手机相册的「人像虚化」,要在 30 fps 内对一张 4K 照片做 的高斯模糊。 个像素,RGB 三个通道。

直接做二维卷积:每个像素乘 次,整图 次乘加,约 3.7 GFLOP。30 fps 就是 111 GFLOP/s——吃掉手机 GPU 十分之一的算力,还持续发热、掉电。

但高斯核可以拆开写成一个外积:

先按行卷 15 次、再按列卷 15 次,一共 30 次乘加/像素,算力降到 FLOP——省 7.5 倍。

决定:能不能把所有卷积核都这么拆?拆不了的时候怎么办?另外,一张 4K 图 fp16 也有 47.5 MB,装不进几 MB 的 L2 缓存,必须分块处理——块与块的边界怎么接?

代价:拆错的核不会报错,只会「只在一个方向糊、另一个方向还是锐的」,人像边缘出现方向性拖影;分块的 halo 少算几个像素,照片上会出现规则方格接缝,在天空、墙面这种纯色区域最扎眼——用户一眼就能看见。

问题:为什么转置能让「按列卷」变成「按行卷」?什么样的核能写成 ,什么样的不能?分块为什么省带宽,又为什么会在边界留下接缝?

读完本节,你应该能回答三件事:

  1. 转置在几何上做了什么,为什么它是「换到点积另一边」;
  2. 对称矩阵与秩 1 核的关系,以及可分离卷积的数学条件;
  3. 分块运算的边界代价怎么估,halo 该留多宽。

1. 直觉

1.1 转置是照镜子,也是伴随

转置是沿对角线照镜子。 的转置是 :第 行变成第 列,形状从 变成 。

转置是伴随(adjoint)。 对任意 、,

左边是「先变换再比较」,右边是「先比较再变换」。转置就是让矩阵换到点积另一侧时该长的样子——这比「照镜子」更本质,也是内积空间里「伴随」的标准含义(Horn & Johnson)。

对称是「两个方向一样」。 若 ,则 ,且 :从 看 与反过来看得到同一个数。

💡 一句话直觉:转置 = 换到点积另一边;对称 = 换过去也不变;分块 = 把矩阵当成分块的「数」来乘。

类比边界:转置不是逆。 总存在, 只对满秩方阵存在;正交矩阵两者相等,但一般矩阵不是。

1.2 现实对应:把「按列扫」变成「按行扫」

转置在图像处理里有一个非常具体的动作:把「按行扫」变成「按列扫」。你在图像上按列做一维卷积,等价于——先把图像转置(行列互换),然后还是按行做同一个卷积,最后再转置回来:

这个式子说的是:转置把「列」这个方向搬到了「行」上,于是你只需要写一份沿行扫描的代码。

对称在这里对应「互易」:从像素 到 的影响等于从 到 的影响。高斯核就是对称的,因为 对 互换不变。这不只是好看,它直接给出可分离性:

指数把「和」变成了「积」,于是二维核等于两个一维核的外积——一个 的核本来有 225 个自由度,可分离之后只剩 15 个。

分块则对应「把大图切成邮票大小,逐张处理,再拼回去」。这么做不是为了数学,是为了让每一块能塞进缓存。

这个类比在哪里失效:转置不是「把图像旋转 90°」。旋转会同时移动像素位置、改变采样网格;转置只交换索引 ,内容不动,动的只是「你按什么顺序去读它」。在非方阵图像上转置还会改变形状—— 转置成 ,这已经不是同一张图的「旋转」了。

1.3 量级直觉

的高斯核,权重在 像素外已小于 , 外小于 。所以 (半径 7)对 够用,上 纯属浪费。

可分离的收益是 : 时 ,7.5 倍; 时 ,15.5 倍。核越大,可分离越值钱——这就是大半径模糊必须可分离的原因。

2. 定义

2.1 转置、对称与反对称

对 ,转置(transpose) 定义为 ,即行列互换;本书统一写 ,不写 。

方阵 对称(symmetric) 若 ;反对称(skew-symmetric) 若 。反对称矩阵的对角线必须为 0,因为 。

2.2 与

对任意实矩阵 , 与 都对称、半正定:

且 :它是所有列向量两两内积组成的 Gram 矩阵。

2.3 分块矩阵(block matrix)运算

把矩阵切成小块,每块当元素处理:

分块乘法要求左矩阵的列分法与右矩阵的行分法一致:

只要每块形状接得上,公式与 数字矩阵完全相同。上三角块求逆:

一般分块矩阵的逆要用 Schur 补(Schur complement) 。

3. 为什么这样定义

为什么转置要行列互换?因为点积要求两个向量长度相同。 与 都是 维, 合法;要让 维的 也出现在左边, 必须是 维——行列互换恰好做到。

为什么大模型里到处都是 ?因为它记录列向量两两的相似度。协方差矩阵、最小二乘的正规方程、PCA 的核心都是它。

为什么分块?因为硬件有层级:寄存器、共享内存、显存。把大矩阵切成能塞进缓存的小块,可以大幅提高数据复用;矩阵乘法的 tiling 优化(第 10.3 节)就是分块思想的工程化。

3.1 反事实:如果所有核都当可分离的

可分离的定义是 ,也就是 的秩为 1(对称核就是 )。问题在于:绝大多数核不是秩 1。

取最简单的不可分离核—— 的恒等核(「不模糊」,原样输出):

强行写成 , 只有两个自由度。逐项对:,,。前两式要求 、,第三式要求至少一个是 0。无解。

硬要「最接近」,只有两条路:

  • 取 ,得 。作用在 上输出 ——图的右半边直接变黑。
  • 取 ,得 。作用在 上输出 ——一个亮点被抹成两个半亮的点,锐边变糊。

一眼可见的坏:恒等核本该「什么都不做」,两种近似一个把内容删了、一个把内容糊了。结论是硬性的——可分离只对秩 1 核成立。高斯核、盒式核(box filter)是秩 1;对角方向的运动模糊核 秩为 3,只能老实用二维卷积,或者用 SVD 截断成几个秩 1 核之和(第 7.3 节的低秩近似)。

4. 性质与推导

4.1 转置的性质

性质式子
对合
和的转置
数乘
乘积的转置
逆的转置

乘积转置要反序: 的 元素是 的 ,即 第 行与 第 列的点积,也就是 第 行与 第 列的点积。

4.2 伴随恒等式的推导

第三步交换求和顺序。这说明转置是唯一能让矩阵在点积中换边的矩阵。

4.3 对称分解

任意方阵可唯一写成 ,两项分别对称与反对称,直接相加即可验证。

4.4 分块求逆的推导

设 ,猜 。由 :右下块 得 ;左上块 得 ;右上块 得 。

一般分块矩阵用 Schur 补把 消掉,化归为上三角情形。

5. 例子

5.1 手算: 与伴随恒等式

取 ,则

它对称,,正定。

伴随验证:取 、。,;,。两边相等。

对称分解:。

5.2 手算:分块求逆

取 ,其中 、、。按公式:、、。所以

验证第一行第三列:;第二行第三列:;对角线为 1。正确。

5.3 场景闭环:4K 人像,30 fps

输入: 的 RGB 图,fp16 每通道 2 字节,共 MB。 高斯核(),拆成两个长 15 的向量 ,各 30 字节,可以忽略。

计算:可分离后每像素 30 次乘加,整图 次乘加/帧。30 fps 即 次乘加/秒,约 45 GFLOP/s——手机 GPU 的 fp16 峰值在 1 TFLOP 量级,占 5%,可以接受。直接二维卷积是它的 7.5 倍,约 340 GFLOP/s,占三分之一,会明显发热。

输出:模糊后的背景 + 用深度图抠出的人像,按深度做 alpha 混合,得到虚化照片。

成本:真正的瓶颈不是算力而是带宽。整图 47.5 MB,读一遍写一遍是 95 MB;L2 只有几 MB,每一趟都直穿主存(LPDDR5 约 50 GB/s)。 ms/帧,而 30 fps 的预算是 33 ms——看起来宽裕。但可分离要做两趟(先横后竖),若两趟之间不留在缓存里,带宽就翻倍。

分块:把图切成 的块(每块三通道 fp16 占 MB),一块能留在 L2 里做完行卷积和列卷积再写回,带宽回到 95 MB/帧。代价是边界:每块要向外多读 个像素的 halo,块边长从 256 变成 270,多读 ——这是分块必须付的「重叠税」。

失败条件与兜底:

  • halo 不够:只扩 3 像素而不是 7 像素,块边界会少算几个像素的贡献,拼起来出现网格状接缝,纯色区域最明显。兜底:halo 严格等于核半径 。
  • 边界延拓:图像最外圈没有邻居,补零会让边缘暗一圈(黑边)。兜底:镜像或复制边缘像素。
  • fp16 累加:15 个 的数相加,fp16 只有约 3 位十进制,累加误差在纯色区域显现为色带。兜底:累加用 fp32,只在存储时转回 fp16。

6. 常见误区

  1. 误区:。纠正:顺序要反转,,否则形状常常接不上。

  2. 误区:。纠正:两者形状都不同( 与 ),即使方阵也一般不相等。

  3. 误区:转置就是求逆。纠正:转置永远存在;逆只对满秩方阵存在。

  4. 误区:分块乘法可以随便切。纠正:左矩阵的列切法必须与右矩阵的行切法一致,否则块形状接不上。

7. 概念网络

8. 通往大模型:、多头拼接与 LoRA

出现位置:注意力打分 、多头拼回 (两者的原始定义见 Vaswani 等,2017)、LoRA 的 、输出投影 。

形状与运算:单头 , 只转置最后两维,得到 ,相乘得 。以 为例, 有 个元素,fp16 占约 268 MB——这是长上下文显存吃紧的直接原因。多头拼接时,先把 转置成 ,再 reshape 成 ,最后乘 。

为什么需要: 让「每个 query 与每个 key 的点积」成为一个矩阵;没有转置, 与 的行无法两两做点积。分块则让 不必一次性算完:FlashAttention 按块计算 ,在片上完成 softmax 的在线归约,避免把 矩阵完整写回显存。

可检验结论:LoRA 把全量更新 分解为 、 的乘积,参数量从 降到 。、 时,从 16,777,216 降到 65,536,只有原来的 。

如果这一步算错,用户会看到什么现象:转置转错了轴(该转最后两维却转了前两维),图像会整体错位或出现带状错乱,人像和背景的边缘对不上、抠图出锯齿;分块 halo 不够,照片上出现规则方格接缝,放大看像马赛克;把不可分离的核硬拆成 ,虚化会「只在一个方向糊」,人像边缘出现方向性拖影。在模型侧, 的转置写错通常直接崩在形状检查上——反而是最安全的一种。

9. 练习

  1. 概念:用点积语言解释「转置是伴随」,并说明为什么 。
  2. 计算:,求 、,判断是否对称、是否正定。
  3. 计算:,写出它的对称部分与反对称部分。
  4. 计算:,用分块求逆公式求 。
  5. 开放:为什么 FlashAttention 要分块计算 ,而不是先算完整的 矩阵?
参考答案
  1. 伴随恒等式 说明转置是让矩阵换到点积另一边的唯一矩阵;对 反复用伴随,可得 。
  2. ,;都对称;顺序主子式为 与 ,都正定。
  3. 对称部分 ;反对称部分 。
  4. ,;。所以 。
  5. 完整 矩阵的显存与带宽是 ,长上下文时成为瓶颈;分块后每块在片上算完就丢弃,显存降到 。

10. 一页速记

  • ,形状 。
  • 物理意义 / 现实对应:转置是「换个方向看同一张表」(图像里就是「把按列扫变成按行扫」);可分离核 是「先横着糊一遍、再竖着糊一遍」。
  • 伴随:;转置让矩阵换到点积另一边。
  • 对称 ,反对称 ;任意方阵 = 对称 + 反对称。
  • 对称半正定,。
  • 分块乘法切法要一致;上三角块逆公式见 §2.3。

11. 参考文献与致谢

这一页的知识不是凭空来的。下面列出本页直接借用的原始工作与权威整理;正文中的人名、定理名已链接到对应条目。链接优先指向 DOI、arXiv 或可长期访问的原文存档。

  • Horn & Johnson(2012):Matrix Analysis(第 2 版)。把转置解释为内积空间中的伴随,并处理 的半正定性与分块矩阵运算,本页 §2.2–2.3 以它为准。Cambridge University Press
  • Zhang(Fuzhen Zhang, 2005):The Schur Complement and Its Applications。系统整理 Schur 补的性质与分块求逆公式,本页 §2.3 的 与 §4.4 的推导都以它为准。Springer
  • Vaswani 等(2017):Attention Is All You Need。给出 与多头拼接,本页 §8 的转置形状推导直接来自它。arXiv:1706.03762
  • Dao 等(2022):FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness。按块计算 、在片上完成 softmax 的在线归约,本页「分块为什么能省显存」的出处。arXiv:2205.14135

下一篇 → 3.7 四个基本子空间与秩-零化度定理

返回 M03 导览去练习场

随堂测 · 5 题

数值难度 1第 1 / 5 题
设 , 的第 个元素是多少?

源文件:03-矩阵与线性映射/06-转置对称与分块.md

输入关键词开始搜索