想象你家的书架上有一本厚厚的家庭相册,里面贴着 1000 张照片。搬家时你会不会想:这些照片翻来覆去就是爸爸、妈妈、孩子和奶奶,背景里那些路人有必要全保留吗?聪明的主妇会做一件事:把大相册拆成两本小册子——第一本记录家人的 10 种标准表情(人物册),第二本记录每次拍照的场景与姿势(场景册)。想还原某张照片时,只需查“哪个人”和“什么场景”,就能拼个八九不离十。这个“把大相册拆成两本小册子”的智慧,正是深度学习模型压缩里大名鼎鼎的低秩分解(Low-Rank Decomposition)。神经网络的权重矩阵就像那本大相册,里面藏着大量冗余信息;低秩分解把它拆成两个小矩阵的乘积,用“小手册”替代“大相册”,让模型更轻、跑得更快,特别适合手机、摄像头这些资源紧张的边缘设备。这篇教程会带你从相册整理思路出发,一步步看懂低秩分解的原理、算法、流程与避坑指南。

岗位关联

掌握低秩分解,你就能在模型部署时“以小博大”:这是边缘 AI 工程师做推理优化、模型瘦身的必备基本功,直接决定产品能否跑进手机和嵌入式设备。

目录
  1. 可视化演示
  2. 核心概念
  3. 数学原理
  4. 关键算法
  5. 压缩流程
  6. 性能权衡
  7. 应用场景
  8. 优化策略
  9. 工程实践
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示SVD截断近似(奇异值降序保留r个)、LoRA低秩适配(冻结W+BA更新可合并)、张量分解(Tucker核心张量/CP秩1求和)三种低秩分解技术,三模式切换理解压缩原理。

本节配有交互动效(进入视口后自动加载,约 3KB)。

'+C1+'

核心概念

你整理相册时发现的第一个规律是:照片虽多,主角很少。1000 张照片里 80% 的构图都是爷爷、奶奶和孙女的组合,剩下 20% 才是逢年过节的远房亲戚。这种“数据里其实只有少数核心因素在起作用”的现象,数学家称之为低秩(low-rank)。

放到神经网络里,全连接层的权重 W 是一个 m 行 n 列的矩阵,动辄几十万甚至上百万个参数。可是训练完成后你会发现,这个矩阵的“有效信息”常常集中在一个很小的子空间里——就像相册的主角只有几位。低秩分解的核心假设是:W 可以由两个小矩阵相乘来近似表达,这就是“拆相册”的数学版本。

回到相册。如果拆出来的两本小册子加起来的总页数远小于原相册,你就成功地把“大部头”变成了“口袋书”。同理,神经网络的权重也从 mn 个参数降到 (m+n)r 个,参数量骤减。这就是低秩分解的第一课:找对主角,扔掉冗余。

Wm×n≈Um×rVr×n\displaystyle W_{m \times n} \approx U_{m \times r} V_{r \times n}
原始大矩阵 W 被近似成两个小矩阵 U 和 V 的乘积,r 远小于 m 和 n。这个式子告诉我们:与其存一整本大相册,不如只存“人物册”和“场景册”两本小册子。
  1. W 原始权重矩阵$W_{m \times n}$ 是待压缩的矩阵,m 行 n 列,相当于那本 1000 张照片的大相册
  2. 近似等于$\approx$ 表示分解后的乘积不需要精确还原,允许少量信息损失
  3. 左因子矩阵$U_{m \times r}$ 是分解出的第一个小矩阵,m 行 r 列,相当于“人物特征册”
  4. 右因子矩阵$V_{r \times n}$ 是第二个小矩阵,r 行 n 列,相当于“场景影像册”
  5. 秩 r$r$ 是低秩分解的核心超参数,代表保留的核心方向数量,也就是“主角的人数”
  6. 矩阵乘法$\times$ 表示两个小矩阵按照矩阵乘法规则结合,生成与原矩阵形状相同的结果

数学原理

整理相册时,你会给每张照片打分:爸爸出镜 8 分,背景路人 1 分……这个“打分排序”的直觉,正是数学里 SVD(奇异值分解) 在做的事。SVD 能回答一个关键问题:这本相册里,到底谁是主角、谁是路人?

SVD 把任意矩阵 W 分解成三个矩阵的乘积:W = UΣVᵀ。其中 U 和 V 是正交矩阵(可以理解为两套“特征坐标轴”),Σ 是对角矩阵,对角线上的数叫奇异值,按从大到小排列。奇异值越大,说明该方向承载的信息越多——相当于家庭成员的“出镜率排行榜”。

奇异值就是家庭成员的“重要性分数”。前几名是主角,后面的小配角分数趋近于零。截断近似就是狠心删掉那些 1 分、0.5 分的小配角,只保留 8 分以上的主角——相册立刻就薄了一大半,这正是 SVD 用于低秩压缩的数学基础。

W=∑i=1rσiuiviT\displaystyle W = \sum_{i=1}^{r} \sigma_i \boldsymbol{u}_i \boldsymbol{v}_i^{T}
奇异值分解的精髓:把一个大矩阵拆成 r 个“层”的叠加,每一层都是一个奇异值 σᵢ 乘以一对向量 uᵢ 和 vᵢᵀ。奇异值越大,这一层对矩阵的贡献越大。
  1. 求和符号$\sum_{i=1}^{r}$ 表示从第 1 项加到第 r 项,r 是保留的层数
  2. 奇异值$\sigma_i$ 是第 i 大的奇异值,衡量这一层“特征”的重要性,相当于出镜率分数
  3. 左奇异向量$\boldsymbol{u}_i$ 是第 i 个左奇异向量,描述“人物特征”的方向
  4. 右奇异向量转置$\boldsymbol{v}_i^{T}$ 是第 i 个右奇异向量的转置,描述“场景特征”的方向
  5. 乘积项$\sigma_i \boldsymbol{u}_i \boldsymbol{v}_i^{T}$ 表示第 i 层“特征”对原始矩阵的贡献

关键算法

知道要把相册拆成两本小册子,具体怎么拆?你面前有三条路:把所有照片逐张分析(完整 SVD);随机抽 50 张照片估算主角(随机 SVD);或者先随便编一本人物册,再根据照片反推场景册,来回修改(交替最小化)。三者的“成本”和“精度”各不相同。

工程中求低秩分解最常用的也是这三种思路。完整 SVD 精度最高,但计算复杂度高达 O(mn²),对大矩阵太昂贵;随机 SVD 先用随机矩阵采样,捕捉矩阵的主要方向,再对小矩阵做精确 SVD,速度能快一个量级;交替最小化把非凸优化问题拆成两个交替更新的最小二乘子问题,适合超大矩阵的分布式求解。

这三种方法好比:请专业档案员逐页整理(贵但准)、请实习生抽样统计(快但糙)、自己动手来回调(灵活但费时)。按项目预算选一种即可。

min⁡U,V  ∥W−UV∥F2+λ(∥U∥F2+∥V∥F2)\displaystyle \min_{U, V} \; \| W - UV \|_{F}^{2} + \lambda \left( \| U \|_{F}^{2} + \| V \|_{F}^{2} \right)
交替最小化的目标函数:第一项是“重建误差”,逼迫 U 和 V 尽可能还原 W;第二项是“正则约束”,防止 U 和 V 数值过大导致过拟合。λ 控制两者的平衡。
  1. 最小化符号$\min_{U, V}$ 表示我们要寻找最优的 U 和 V,让整个目标函数值最小
  2. 重建误差项$\| W - UV \|_{F}^{2}$ 是原始矩阵与分解乘积之间的 Frobenius 范数平方,衡量“新相册”与“原相册”的差距
  3. 分解乘积$UV$ 是 U 和 V 相乘得到的近似矩阵,相当于用两本小册子拼出的照片
  4. 正则系数$\lambda$ 是超参数,控制正则强度,相当于“简洁度”的考核权重
  5. 正则项$\| U \|_{F}^{2} + \| V \|_{F}^{2}$ 约束 U 和 V 的数值大小,避免分解出的“人物册”过于夸张

压缩流程

真正的搬家不会上来就把相册撕了,而是先翻一遍、定方案、改造、再确认。低秩压缩的工程流程也分四步:分析 → 选秩 → 分解重组 → 微调。

第一步分析权重矩阵:用 SVD 查看奇异值分布,判断这个矩阵“低不低秩”?如果奇异值衰减很快,说明压缩潜力大;如果衰减平缓,说明每列信息都很重要,强行压缩会损失惨重。第二步选秩 r:根据能量保留标准决定保留多少个奇异值。第三步分解重组:用 U、V 两个小矩阵替换原来的权重矩阵,并重写前向计算逻辑。第四步微调:用少量训练数据、较低学习率把精度补回来。

这个流程就像相册改造:先翻看确认主角是谁(分析),决定留几位主角(选秩),把相册拆成两本并打印预览(分解重组),最后让家人对照旧照片提意见、微调补拍(微调恢复)。

ρ=mn(m+n)r\displaystyle \rho = \frac{mn}{(m+n)r}
压缩比 ρ 表示“压缩前参数量 ÷ 压缩后参数量”。例如 m=1000、n=500、r=50 时,参数量从 50 万降到 7.5 万,压缩约 6.7 倍。
  1. 压缩比符号$\rho$ 是压缩比,数值越大说明压缩效果越好
  2. 原始参数量$mn$ 是原始权重矩阵的总元素个数,相当于大相册的页数
  3. 分解后参数量$(m+n)r$ 是 U 和 V 两个小矩阵的参数总和,相当于两本小册子的总页数
  4. 秩的影响$r$ 在分母上,r 越大压缩比越小,保真度越高
  5. 除法含义$\frac{mn}{(m+n)r}$ 表示“省下来的比例”,压缩比 6 意味着模型体积缩小为原来的 1/6

性能权衡

两本小册子越薄,搬家越轻松,但照片越看不清。这就是低秩分解最核心的博弈:省多少 vs 丢多少。性能权衡贯穿压缩的每个决策,不能只盯着体积,还要看精度与速度。

压缩比 ρ 衡量省了多少参数,而参数减少通常也意味着计算量减少——全连接层的矩阵乘法 FLOPs 从 mn 降到 mr + rn,所以参数压缩比在数值上往往等于计算加速比。代价是精度损失:丢掉的信息恰好来自被截断的尾部奇异值,误差大小由这些被舍弃方向的能量决定。

你可以用“模糊度”来理解:留下 90% 的奇异值能量,照片边缘略糊但人物清晰;留下 50% 连主角都认不出。压缩比与精度的平衡没有标准答案,只能靠实验说话。

∥W−W^∥F=∑i=r+1min⁡(m,n)σi2\displaystyle \| W - \hat{W} \|_{F} = \sqrt{\sum_{i=r+1}^{\min(m,n)} \sigma_i^2}
截断误差公式:如果保留前 r 个奇异值、丢弃后面所有奇异值,那么重建矩阵与原矩阵的 Frobenius 范数误差,正好等于被丢弃奇异值的平方和再开根号。
  1. 误差范数$\| W - \hat{W} \|_{F}$ 是原矩阵与重建矩阵的差矩阵的 Frobenius 范数,即所有元素差平方和的平方根
  2. 重建矩阵$\hat{W}$ 是截断后重建的近似矩阵,相当于“新打印的模糊相册”
  3. 求和范围$\sum_{i=r+1}^{\min(m,n)}$ 从第 r+1 项加到矩阵秩的终点,即所有被丢弃的奇异值
  4. 尾部奇异值$\sigma_i$ 是被截断的第 i 个奇异值,代表被放弃的“小配角”信息
  5. 平方根$\sqrt{\quad}$ 将能量和还原成“误差幅度”,便于直观理解

应用场景

低秩分解在真实世界最常出没的地方,是那些“大合影”——全连接层、卷积层、嵌入层。这三类结构在神经网络中占据了绝大部分参数量,也是压缩收益最明显的地方。

全连接层的权重是典型的二维大矩阵,直接套用 W≈UV 即可;卷积层的权重是四维张量,需要先 reshape 成二维矩阵再分解;嵌入层(Embedding)是“词表大小 × 维度”的巨型矩阵,在推荐系统和语言模型中常常占据 90% 以上的参数量,低秩分解能显著缩小模型体积。分解之后,模型可以塞进手机、摄像头、智能音箱等边缘设备。

边缘设备就是裤兜里的“迷你相册”。手机跑大模型太吃力,低秩分解把“全家福大合影”压缩成“主角小卡片”,让 AI 在人人一台的终端上真正跑起来。

W(co,ci,k,k)⟶W(co,cik2)′≈U(co,r)V(r,cik2)\displaystyle W_{(c_o, c_i, k, k)} \longrightarrow W'_{(c_o, c_i k^2)} \approx U_{(c_o, r)} V_{(r, c_i k^2)}
卷积核的 reshape 技巧:把四维权重 (输出通道 × 输入通道 × 核高 × 核宽) 重排成二维矩阵,再对它做低秩分解。这样卷积层也能享受低秩压缩的红利。
  1. 四维卷积核$W_{(c_o, c_i, k, k)}$ 表示卷积权重,$c_o$ 个输出通道、$c_i$ 个输入通道、核尺寸 $k \times k$
  2. 重排操作$\longrightarrow$ 表示 reshape,把四维张量展平成二维矩阵
  3. 展平后矩阵$W'_{(c_o, c_i k^2)}$ 是重排后的二维形状,行数是输出通道,列数是“输入通道 × 核尺寸平方”
  4. 左因子$U_{(c_o, r)}$ 是卷积层分解后的左因子矩阵
  5. 右因子$V_{(r, c_i k^2)}$ 是右因子矩阵,两矩阵相乘近似原卷积权重

优化策略

光会拆相册还不够,高手还会加一些“巧劲”:决定留几个主角看不出镜率能量,拆完再让家人重新拍几张(微调),把相册换成更便宜的纸(量化),再裁掉花边(剪枝)。

秩的选择是低秩分解最关键的优化点。工程上常用“能量保留准则”:保留的奇异值平方和占总能量的比例达到 90% 或 95%。微调是分解后的必修课,学习率通常设成原来的 1/10,只跑少量 epoch,让模型适应新的参数结构。低秩与量化、剪枝是正交的优化维度,可以叠加使用——先低秩降维,再量化压位宽,最后剪枝去冗余。

优化策略就是“组合拳”:低秩当作基础招,微调是恢复功力,量化和剪枝是锦上添花。在边缘设备上,这些招式常常一起上阵。

∑i=1rσi2∑i=1min⁡(m,n)σi2≥0.9\displaystyle \frac{\sum_{i=1}^{r} \sigma_i^2}{\sum_{i=1}^{\min(m,n)} \sigma_i^2} \ge 0.9
能量保留准则:前 r 个奇异值的平方和占总能量的比例 ≥ 90%,就认为保留了绝大部分“有效信息”。这是选择秩 r 的实用标准。
  1. 分子能量$\sum_{i=1}^{r} \sigma_i^2$ 是保留的前 r 个奇异值的平方和,即保留的信息量
  2. 分母总能量$\sum_{i=1}^{\min(m,n)} \sigma_i^2$ 是所有奇异值的平方和,即矩阵携带的全部信息量
  3. 比例阈值$\ge 0.9$ 表示保留比例达到 90%,工程上常用 90% 或 95%
  4. 奇异性$\sigma_i^2$ 是奇异值的平方,对应“该方向承载的能量”
  5. 选择含义满足此条件的最小 r 就是推荐秩,相当于“凑齐 90% 出镜率需要留几位主角”

工程实践

老手整理相册从不会犯两类错误:一是把每个路人都当主角(秩选得太大),二是把爷爷的珍贵合影也压成邮票大小(不分敏感度乱压)。工程实践的要诀,在于摸清每个矩阵的“脾气”。

常见的坑有三个:秩选得过大,压缩收益甚微;选得过小,误差飙升;逐层压缩时误差会逐层累积——前一层的微小偏差会在后续层被放大。此外,不同层对压缩的敏感度差异巨大:浅层特征提取错误会污染全局,而某些冗余的深层可以大胆压缩。敏感层少压、冗余层多压,是工程调优的核心原则。

工程实践的心法:先分析后动手、分级对待(重要层少压、冗余层多压)、压完必须验证。就像搬家前先给相册分类,重要的原图扫描存档,次要的才敢大胆压缩。

min⁡rank⁡(W^)≤r∥W−W^∥F=∑i=r+1min⁡(m,n)σi2\displaystyle \min_{\operatorname{rank}(\hat{W}) \le r} \| W - \hat{W} \|_{F} = \sqrt{\sum_{i=r+1}^{\min(m,n)} \sigma_i^2}
Eckart–Young 定理:在所有秩不超过 r 的矩阵中,截断 SVD 产生的重建误差最小。它给了我们理论上的“最优解”,但最优近似不等于对任务无损。
  1. 最小化目标$\min_{\operatorname{rank}(\hat{W}) \le r}$ 表示在“所有秩不超过 r 的矩阵”中寻找最优近似
  2. 秩约束$\operatorname{rank}(\hat{W}) \le r$ 限制重建矩阵的秩,确保它来自低秩分解
  3. 最优误差$\| W - \hat{W} \|_{F}$ 是理论能达到的最小重建误差
  4. 等号连接$=$ 表示截断 SVD 恰好达到了这个下界
  5. 尾部余量$\sqrt{\sum_{i=r+1}^{\min(m,n)} \sigma_i^2}$ 再次强调误差完全由被舍弃的奇异值决定

AI 应用场景

手机端大语言模型 FFN 层压缩

阶段:模型部署优化

解决的问题:大语言模型动辄数十亿参数,无法直接装入手机。传统做法是直接量化,但精度损失明显;用低秩分解压缩 FFN(前馈网络)层,参数量可降数倍,且与量化叠加损失更小。

具体案例:某 7B 模型的 FFN 层权重为 8192×8192 的大矩阵,奇异值分析发现前 512 个奇异值已贡献 92% 能量。用秩 r=512 分解后,该层参数量从 6700 万降到约 840 万,压缩 8 倍;再配合 4bit 量化,最终模型体积从 14GB 减至 3.2GB,成功部署到旗舰手机,推理速度提升约 3 倍。

推荐系统 Embedding 层压缩

阶段:模型压缩

解决的问题:推荐系统里“用户 ID → 向量”的 Embedding 矩阵巨大,1 亿用户 × 128 维就是 128 亿参数,占模型体积 90% 以上。这些低秩的共现矩阵天然适合用低秩分解压缩。

具体案例:某短视频推荐场景中,用户 Embedding 矩阵 1 亿×128 被分解为 1 亿×16 与 16×128 两个小矩阵的乘积,内存占用从 51GB 降到 6.4GB。压缩后离线 CTR(点击率)预估损失仅 0.1%,线上 A/B 实验无显著差异。

端侧视觉模型卷积核分解

阶段:边缘部署

解决的问题:智能摄像头的人脸检测模型需要在嵌入式芯片上实时运行,模型体积和延迟都受限。卷积核 reshape 后做低秩分解,可以在几乎不影响精度的前提下大幅瘦身。

具体案例:某端侧人脸检测模型的 1×1 卷积层权重 reshape 为二维矩阵后做秩分析,将主要卷积层的秩压缩 50%,再配合结构化剪枝,模型从 8MB 降到 3.5MB,在 RK3588 边缘盒子上推理帧率从 28 FPS 提升到 55 FPS,检测精度 mAP 仅下降 0.4%。

Python 演示

python49 行
import numpy as np  def load_weight_matrix():    """模拟一个全连接层的权重矩阵: 1000 x 500"""    np.random.seed(42)    U0, _ = np.linalg.qr(np.random.randn(1000, 30))    V0, _ = np.linalg.qr(np.random.randn(500, 30))    S0 = np.linspace(5.0, 0.1, 30)    W = U0 @ (S0[:, None] * V0[:, :30].T)    W += np.random.randn(1000, 500) * 0.05    return W  def low_rank_decompose(W, rank):    """用 SVD 做低秩分解, 返回 U, S, Vt"""    U, S, Vt = np.linalg.svd(W, full_matrices=False)    return U[:, :rank], S[:rank], Vt[:rank, :]  def reconstruct(U, S, Vt):    """由分解因子重建权重矩阵"""    return U @ (S[:, None] * Vt)  def compression_ratio(W, rank):    """计算低秩分解的参数压缩比"""    m, n = W.shape    return m * n / ((m + n) * rank + rank)  def evaluate(W, rank):    """按指定秩压缩, 返回重建误差与压缩比"""    U, S, Vt = low_rank_decompose(W, rank)    W_hat = reconstruct(U, S, Vt)    error = np.linalg.norm(W - W_hat) / np.linalg.norm(W)    return error, compression_ratio(W, rank)  def main():    W = load_weight_matrix()    print(f"原始矩阵形状: {W.shape}, 参数量: {W.size}")    for rank in [10, 30, 60, 100]:        err, ratio = evaluate(W, rank)        print(f"秩 r={rank:3d} | 压缩比={ratio:6.1f}x | 相对误差={err:.4f}")  if __name__ == "__main__":    main()
目的:演示低秩分解的完整流程——构造一个带低秩结构的权重矩阵,用 SVD 做分解,按不同秩重建,并输出压缩比与相对误差,帮助你直观理解“秩越大越保真、压缩比越小”的权衡关系。
  1. W = U0 @ (S0[:, None] * V0[:, :30].T)构造一个“真实秩为 30”的矩阵,模拟神经网络中那种信息高度冗余的权重
  2. np.linalg.svd(W, full_matrices=False)调用 numpy 的 SVD,一次性拿到所有奇异值和左右奇异向量
  3. U[:, :rank], S[:rank], Vt[:rank, :]截断操作:只保留前 rank 个奇异值和对应的奇异向量,这就是“删掉小配角”
  4. U @ (S[:, None] * Vt)重建矩阵:奇异值先逐行缩放 Vt,再与 U 做矩阵乘法,还原近似权重
  5. compression_ratio计算 mn / ((m+n)r + r),这是压缩后的参数总量除以原参数总量得到的压缩倍数
  6. np.linalg.norm(W - W_hat) / np.linalg.norm(W)相对误差:用 Frobenius 范数度量重建矩阵与原矩阵的差距,便于不同规模矩阵间比较
  7. for rank in [10, 30, 60, 100]依次尝试四档秩,让你清楚看到压缩比上升、误差也随之上升的规律

常见误区

误区低秩分解的目标就是压缩,那把秩设成 1 不是最省吗?反正分解完还能微调,误差大点无所谓吧?

正解秩太小会把“主角”都删掉,重建矩阵严重失真。就像相册只留一个人的表情,所有照片都变成“大头照”,谁也认不出原样。秩要按奇异值能量保留准则来选择(通常 ≥90%),而不是盲目追小。微调可以修复一部分误差,但无法变出已经被丢弃的信息。

为何常见:刚接触压缩时容易只盯着“参数量减少”这一个指标,忽略了“信息量”才是压缩的底线。

误区既然低秩分解这么好,那我把模型里所有权重矩阵都拆一遍,模型不就变得特别小了吗?

正解并非所有矩阵都低秩。有些层的奇异值衰减平缓,说明每个方向都有信息,强行分解会损失惨重。就像一本记录了几千个不同路人的街拍集,没有“主角”,硬拆成两本小册子必然失真。工程上先用 SVD 看奇异值分布,衰减快的层优先压缩,衰减平的层保持原样。

为何常见:把“低秩假设”当成了所有矩阵的天然属性,忽略了它本身是一个需要验证的假设。

误区SVD 是数学上最优的分解,分解出来的 U 和 V 已经完美还原了权重,直接部署就行。

正解Eckart–Young 定理保证的是 Frobenius 范数意义下“矩阵近似最优”,但神经网络是层层叠加的系统,每一层的微小近似误差都会向后续层传播放大。分解后必须用少量数据、低学习率微调,让下游层适应新权重。就像相册重印后,家人得重新确认“哦原来这张照片现在长这样”。

为何常见:混淆了“矩阵最优近似”和“任务精度无损”两个概念,理论最优不等于部署无损。

误区模型压缩不就是把没用的权重删掉吗?低秩分解和剪枝应该是一回事。

正解两者的机制完全不同。剪枝是“直接置零”:把不重要的神经元或连接删掉,矩阵形状通常会变稀疏;低秩分解是“结构重构”:把一个大矩阵替换成两个小矩阵的乘积,矩阵形状变了但参数密集。剪枝改的是稀疏结构,低秩分解改的是参数表达方式,两者正交,可以叠加。

为何常见:初学者把“减少参数”统称为压缩,忽略了不同压缩技术在数学原理上的根本差异。

误区压缩比 8 倍,那推理速度一定也快 8 倍吧?部署上去准没错。

正解参数压缩比是理论上限,实际延迟还受访存、算力、框架实现影响。小矩阵乘法在 GPU 上未必比大矩阵更快,因为 GPU 擅长并行大矩阵;低秩分解在 CPU 端和小 batch 场景加速明显,在大 batch GPU 上收益可能打折。正确的做法是直接测端到端延迟,而不是用压缩比估算。

为何常见:把“参数量减少”与“计算时间缩短”画了等号,忽略了硬件执行效率这个中间变量。

面试题

Q1. 低秩分解用两个小矩阵的乘积近似一个大矩阵,这样做最直接的收益是什么?

单选题 · easy

  • A.减少参数量和计算量← 正确答案
  • B.提高模型推理精度
  • C.增加训练数据的数量
  • D.让模型更容易过拟合

答案:A。低秩分解把 W(m×n) 拆成 U(m×r) 和 V(r×n) 的乘积,参数量从 mn 降到 (m+n)r,计算量同步下降,这是它的核心价值。精度提升、数据变多、过拟合都不是它的直接作用。

Q2. 在 W≈UV 的近似中,秩 r 表示什么?

单选题 · easy

  • A.两个矩阵的乘积误差
  • B.保留的核心方向数量← 正确答案
  • C.原始矩阵的行数总和
  • D.原始矩阵的列数总和

答案:B。秩 r 是分解后保留的核心方向数量,对应相册比喻里“主角的人数”。它既不是误差也不是矩阵的行列数,而是我们人工选择的关键超参数。

Q3. SVD 中 Σ 矩阵对角线上的元素被称为什么?

单选题 · easy

  • A.矩阵的特征向量
  • B.从大到小排列的奇异值← 正确答案
  • C.神经网络的梯度值
  • D.矩阵的行列式值

答案:B。SVD 中 W=UΣVᵀ,Σ 对角线上的元素叫奇异值,按从大到小排列,衡量每个方向的重要性。特征向量是另一套分解(特征值分解)中的概念,梯度是训练中的概念,行列式是标量,都不对。

Q4. 压缩比 ρ=mn/[(m+n)r] 表示什么?

单选题 · mid

  • A.分解后参数量与原始之比
  • B.原始参数量与分解后之比← 正确答案
  • C.模型训练速度提升倍数
  • D.模型精度损失的比例

答案:B。分子 mn 是原始参数量,分母 (m+n)r 是分解后 U 和 V 的参数总量,两者相除表示“原始是压缩后的多少倍”。压缩比不能直接等同于加速倍数,更不是精度损失。

Q5. 下列哪些层适合用低秩分解压缩?

多选题 · mid

  • A.全连接层和嵌入层← 正确答案
  • B.卷积层和注意力矩阵← 正确答案
  • C.激活函数和归一化层
  • D.损失函数和优化器层

答案:AB。全连接层、嵌入层、卷积层(reshape 后)和注意力矩阵都是“参数密集型矩阵”,适合低秩分解。激活函数、归一化层不包含权重矩阵;损失函数和优化器是训练组件,不属于模型权重。

Q6. 随机 SVD 相比完整 SVD 的主要优势是?

单选题 · hard

  • A.分解结果更加精确
  • B.计算复杂度大幅降低← 正确答案
  • C.不需要选择秩的大小
  • D.适用于所有稀疏矩阵

答案:B。随机 SVD 先用随机投影把大矩阵“压缩”成小矩阵,再对小矩阵做精确 SVD,计算量大幅下降,特别适合超大矩阵。它牺牲了少量精度换取速度;秩依然需要选择,且并非只适用于稀疏矩阵。

Q7. 一次完整的低秩压缩流程包含哪些步骤?

多选题 · mid

  • A.奇异值分析选秩← 正确答案
  • B.分解并重组权重← 正确答案
  • C.微调恢复模型精度← 正确答案
  • D.直接丢弃所有偏置项

答案:ABC。标准流程是分析奇异值分布、选取合适的秩、分解并重组权重、最后微调恢复精度。丢弃偏置项不是低秩分解的必要步骤,偏置通常与低秩压缩无关,不应盲目删除。

Q8. 分解完成后通常还要微调,最关键的原因是什么?

单选题 · hard

  • A.让模型适应近似误差← 正确答案
  • B.让模型变得更轻量化
  • C.加快训练数据的加载
  • D.增大模型的参数量

答案:A。低秩分解引入了近似误差,逐层误差会累积放大,微调能让下游层学会适应新权重,把任务精度补回来。轻量化已经由分解完成,微调不会改变参数规模,更不是为了加速数据加载或增加参数。

Q9. 能量保留准则要求保留 90% 能量时,应如何选择秩 r?

单选题 · extreme

  • A.使前 r 个奇异值平方和占总能量达 0.9← 正确答案
  • B.使所有奇异值完全相等
  • C.使 r 等于矩阵的行数
  • D.使 r 等于矩阵的列数

答案:A。能量保留准则用前 r 个奇异值平方和除以所有奇异值平方和,比值达到 90% 时取最小的 r 为推荐秩。这不是让奇异值相等,也不等于矩阵的行数或列数。这是工程上选秩的标准做法。

Q10. 下列哪些技术可以和低秩分解组合使用?

多选题 · hard

  • A.权重量化← 正确答案
  • B.结构化剪枝← 正确答案
  • C.知识蒸馏← 正确答案
  • D.数据增强

答案:ABC。量化压缩位宽、剪枝删除冗余结构、蒸馏让小模型学大模型,三者与低秩分解正交,可以组合叠加进一步瘦身。数据增强是训练技巧,与模型结构压缩没有直接组合关系。