深夜的后厨里,林师傅对着一本厚得能砸核桃的菜谱发愁。这本菜谱有 1000 道菜、200 种食材,每道菜和每种食材交叉的格子里都填着用量,足足 20 万个数字。可干了三十年的大厨心里清楚:真正撑起整本菜谱的,不过是鸡高汤、牛骨汤、菌菇汤这几款基础底汤。只要记住底汤配方、每道菜用哪几款底汤、各加多少,就能用很少的数字把 99% 的菜复刻出来,味道几乎没差别。 神经网络里的权重矩阵,和这本菜谱惊人地相似:看起来又大又密,内部却藏着大量可被提炼的“底汤结构”。低秩分解(Low-Rank Decomposition,LVD)就是帮我们找到底汤、重新配方的技术。它把一张巨大的权重矩阵拆成两张小矩阵相乘,用更少的参数近似出原模型的行为,让模型体积变小、推理变快,是手机、摄像头等边缘设备上模型轻量化的利器。本文全程用“菜谱与底汤”这条线,带你理解 LVD 的数学原理、压缩策略与工程部署。

岗位关联

掌握低秩分解,你就能在几乎不掉精度的情况下把模型压缩数倍甚至十余倍,这是边缘部署场景最实用、也最容易被面试官追问的模型轻量化基本功。

目录
  1. 可视化演示
  2. LVD核心思想
  3. 数学原理
  4. 全连接层压缩
  5. 卷积层压缩
  6. 分解秩选择
  7. 性能权衡
  8. 评估与部署
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。

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

系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T

LVD核心思想

林师傅的菜谱有 1000 道菜、200 种食材,但他心里清楚:绝大多数菜谱页只是把鸡高汤、牛骨汤、菌菇汤这几款底汤换个比例组合,再撒把葱花而已。真正需要记住的,是“底汤配方”和“每道菜用哪几款底汤”。整本大表里,藏着巨大的重复冗余。

AI 模型里的权重矩阵,和这本菜谱惊人地相似。一个全连接层有 m 个输出神经元、n 个输入神经元,权重就是一个 m×n 的矩阵;训练好的权重内部通常有大量相关性,许多行之间高度相似,信息冗余明显。LVD 的思路就是:用两个很小的矩阵相乘,去逼近这张大矩阵。

只要 r 取得合适,比如 m=n=1000 时取 r=50,参数就从 100 万降到 10 万,菜谱薄了 90%,味道却几乎没变。这就是 LVD 的压缩本质:把庞大的信息表,浓缩成少数“底汤成分”的组合。

Wm×n≈W1m×r×W2r×n\displaystyle W_{m\times n}\approx W1_{m\times r}\times W2_{r\times n}
通俗理解:原来要记 mn 个数,现在只要记 m×r 和 r×n 两小块,总共 r(m+n) 个数。
  1. 原矩阵 W待压缩的权重矩阵,相当于完整菜谱的用量表,m 行 n 列,mn 个参数。
    Wm×nW_{m\times n}
  2. 左因子 W1m×r 小矩阵,可以理解为“每道菜对 r 款底汤的用量表”。
    W1m×rW1_{m\times r}
  3. 右因子 W2r×n 小矩阵,可以理解为“每款底汤对 n 种食材的配方表”。
    W2r×nW2_{r\times n}
  4. 秩 r 与近似等号r 远小于 m 和 n,乘积只能近似还原原矩阵,近似等号表示允许可控误差。
    r≪min⁡(m,n),W1×W2≈Wr\ll\min(m,n),\qquad W1\times W2\approx W

数学原理

想提炼底汤,不能靠瞎猜,得有一套系统的“分子料理分析”工具,数学里对应的就是奇异值分解(SVD)。SVD 告诉你:任何一张实数矩阵,都能被拆成三个结构清晰的矩阵相乘,而且每个部分都有明确的物理含义。

奇异值排名靠前的成分,对矩阵的“贡献能量”最大,就像客流最高的几款底汤撑起了整间餐厅。于是我们可以只保留前 k 个成分,丢掉后面的“冷门汤底”:

SVD 等价于一次彻底的“后厨盘点”:把每款底汤的客流排好序,优先保留最核心的几款,其余的下架。这就是低秩分解背后的数学地基。

Am×n=Um×m Σm×n Vn×nT\displaystyle A_{m\times n}=U_{m\times m}\,\Sigma_{m\times n}\,V_{n\times n}^{\mathrm{T}}
通俗理解:把“菜谱用量表”拆成“行方向的特征”(U)、“各成分的浓度排名”(Σ)、“列方向的特征”(Vᵀ)三张表。
  1. 保留前 k 个成分只取前 k 个奇异值对应的行列,得到三块瘦身后的矩阵。
    Uk∈Rm×k,Σk∈Rk×k,VkT∈Rk×nU_k\in\mathbb{R}^{m\times k},\quad \Sigma_k\in\mathbb{R}^{k\times k},\quad V_k^{\mathrm{T}}\in\mathbb{R}^{k\times n}
  2. 最佳 k 秩近似根据 Eckart–Young 定理,这样重构出的矩阵是所有 k 秩矩阵中与 A 误差最小的。
    A^=UkΣkVkT\widehat{A}=U_k\Sigma_k V_k^{\mathrm{T}}
  3. 误差来源重构误差的平方等于被丢弃奇异值的平方和,所以丢掉“浓度最低”的成分损失最小。
    ∥A−A^∥F2=∑i=k+1min⁡(m,n)σi2\left\|A-\widehat{A}\right\|_F^2=\sum_{i=k+1}^{\min(m,n)}\sigma_i^{2}

全连接层压缩

全连接层就像餐厅的“标准化大菜”:每个输出都要汇总所有输入,权重矩阵动辄几千乘几千,是参数大户。它的计算可以写成 y = Wx,W 就是前面说的菜谱用量表。

对全连接层做 LVD 很简单:把 W 替换成 W1 和 W2 两个小矩阵,前向计算从一层变成两层:

除参数外,前向计算顺序也很重要:一定是先算 W2x 再算 W1·(·),这样中间激活值只有 r 维;如果反过来先算 W1,中间向量反而会膨胀,浪费内存和算力。当 m=n=1024、r=64 时,参数量从约 105 万降到 13 万,省了近 87%。这就是“两层小楼梯替代一座大滑梯”的威力。

y=Wx≈W1 (W2 x)=W1 x~\displaystyle y=Wx\approx W1\,(W2\,x)=W1\,\widetilde{x}
通俗理解:先用 W2 把输入压缩到 r 维的“底汤空间”,再用 W1 从底汤空间恢复出输出。
  1. 压缩投影先用 W2(r×n)把输入 x 从 n 维压到 r 维,中间的向量大幅变小。
    x~=W2 x∈Rr\widetilde{x}=W2\,x\in\mathbb{R}^{r}
  2. 恢复输出再用 W1(m×r)把 r 维向量映射回 m 维输出空间。
    y≈W1 x~∈Rmy\approx W1\,\widetilde{x}\in\mathbb{R}^{m}
  3. 参数减少量原参数量 mn,新参数量 mr+rn,省下的参数就是两者的差。
    Δ=mn−(mr+rn)\Delta=mn-(m r+r n)

卷积层压缩

全连接层的菜谱是“一张平面大表”,卷积层的菜谱则是“一摞带坐标的立体卡片”:卷积核是四维张量,形状是 c_out×c_in×k×k,比二维矩阵复杂得多。不过别慌,主厨自有办法——把所有卡片按顺序摊平成一张大纸。

方法是把四维卷积核 reshape 成二维矩阵(c_out 行,c_in×k×k 列),对它做 SVD,再把分解出的两个因子还原成两层卷积:

实际使用中,1×1 卷积先把通道数从 c_in 压到 r,再做 k×k 卷积,或反过来先做 k×k 再 1×1 升通道,两种顺序对应不同计算图。通道缩减意味着卷积计算乘法次数大幅下降,尤其在后半段网络通道数动辄 512、1024 时收益明显。这就好比把一道需要 20 种食材的佛跳墙,改成“一锅底汤 + 三样主料”,工序变短,味道依然在线。

Wcout×cink2′≈Ucout×r Vr×(cink2)\displaystyle W^{\prime}_{c_{out}\times c_{in}k^{2}}\approx U_{c_{out}\times r}\,V_{r\times (c_{in}k^{2})}
通俗理解:把“立体卡片”压成“平面大表”,拆完再折回两层小工序。
  1. 张量折叠四维卷积核按输出通道为行、其余维度展平为列,变成二维矩阵。
    W′∈Rcout×cink2W^{\prime}\in\mathbb{R}^{c_{out}\times c_{in}k^{2}}
  2. 矩阵分解对折叠后的矩阵做截断 SVD,得到 U 和 V 两个瘦矩阵。
    W′≈Ucout×r Vr×(cink2)W^{\prime}\approx U_{c_{out}\times r}\,V_{r\times (c_{in}k^{2})}
  3. 还原两层卷积U 重排成 1×1 卷积核,V 重排成 r 个输入通道的 k×k 卷积核,串联起来近似原卷积。
    Convk×k≈Conv1×1  ∘  Convk×k\mathrm{Conv}_{k\times k}\approx\mathrm{Conv}_{1\times 1}\;\circ\;\mathrm{Conv}_{k\times k}

分解秩选择

底汤留几款?这是整个压缩过程中最关键的决策。留太少,菜的味道淡得被投诉;留太多,菜谱还是厚,省不了多少纸。工程上,我们靠“能量占比”来做初选。

SVD 给出的奇异值天然按贡献从大到小排序,奇异值的平方代表该成分携带的“能量”(方差贡献)。保留前 k 个成分的能量占全部能量的比例:

工程实践常用的准则:取能量占比 ≥ 0.95 的最小 k 作为初值。但注意,这只是“开局推荐”,不同层要区别对待:靠近输入的层对精度最敏感,通常保留更大的秩;冗余度高的层可以用很小的秩。最后在验证集上,用压缩率和精度两个目标做小范围搜索,找到每层自己的“黄金比例”。主厨的经验永远要结合当天客流微调,模型压缩也一样。

ρ(k)=∑i=1kσi2∑i=1min⁡(m,n)σi2\displaystyle \rho(k)=\frac{\sum_{i=1}^{k}\sigma_i^{2}}{\sum_{i=1}^{\min(m,n)}\sigma_i^{2}}
通俗理解:把底汤按客流排序,看前 k 款底汤贡献了全店营业额的多少比例。
  1. 奇异值的平方第 i 个成分的能量,等于第 i 个奇异值的平方。
    σi2\sigma_i^{2}
  2. 前 k 个能量之和保留的前 k 个成分的总能量。
    ∑i=1kσi2\sum_{i=1}^{k}\sigma_i^{2}
  3. 归一化占比占比越接近 1,说明保留的信息越完整,重构误差越小。
    ρ(k)∈[0,1],lim⁡k→min⁡(m,n)ρ(k)=1\rho(k)\in[0,1],\qquad \lim_{k\to\min(m,n)}\rho(k)=1

性能权衡

底汤款数定了,菜谱厚度和口味之间的那杆秤也就立起来了。压缩率是 LVD 最直观的收益指标:原参数量与新参数量的比值。

除参数量外,还要盯住三个指标:FLOPs 反映计算量,内存访问量影响显存带宽,单次推理延迟直接决定用户体验。压缩率不等于加速比——小矩阵把一次大矩阵乘法拆成两次小乘法,在并行度低的 CPU 或极小的层上,额外的 kernel 调用开销可能吃掉收益;而在 GPU 上,卷积层的 1×1+3×3 分解往往能实测加速 2 倍以上。常用的权衡策略是:先按能量占比缩小 r 的搜索范围,再在验证集上网格搜索,选“精度损失可接受、压缩率尽可能高”的点。好主厨不会一味追求菜谱最薄,而是要保证招牌菜口感达标才敢正式推新菜单。

压缩率=mnr(m+n)\displaystyle \text{压缩率}=\frac{mn}{r(m+n)}
通俗理解:原菜谱 100 万格,新菜谱 13 万格,压缩率约 8 倍;纸省了,味能不能保住另说。
  1. 原参数量大权重矩阵的元素总数。
    mnmn
  2. 新参数量两个小矩阵的元素总数 mr+rn。
    r(m+n)r(m+n)
  3. 压缩率比值r 越小压缩率越高,但精度损失也越大。
    mnr(m+n)=1r⋅mnm+n\frac{mn}{r(m+n)}=\frac{1}{r}\cdot\frac{mn}{m+n}

评估与部署

新菜谱定稿后,正式上架前还有两道关:试菜和后厨改流程。模型压缩同样如此,评估与部署是 LVD 落地的临门一脚。

评估的核心是精度对比。压缩前后模型在验证集上的准确率差值 δ 是硬指标:

如果 δ 超了,最常见的手段是端到端微调:用很小的学习率把压缩后的两层小矩阵继续训练几轮,让它们协同适应整个网络的分布,通常能把精度拉回原点。部署流程上,一般按这样走:先分析各层敏感性(哪些层不能压太狠),逐层或整体做低秩分解,端到端微调,再配合量化进一步瘦身,然后在目标硬件(手机、摄像头、NPU)上实测延迟、显存和功耗,最后灰度上线。工具链方面,PyTorch 的 torch.svd、TensorFlow 的 tf.linalg.svd 可以直接做分解,ONNX Runtime、TensorRT、TFLite 负责导出和加速。菜谱换代不是把纸变薄就完事,后厨重新排流程、试火候、确认出餐速度,全部达标才算真正上架。

δ=Acc原模型−Acc压缩模型\displaystyle \delta=\mathrm{Acc}_{\text{原模型}}-\mathrm{Acc}_{\text{压缩模型}}
通俗理解:δ 就是“新菜和老菜的味道差”,越小越好,一般要求压到 1% 以内。
  1. 原模型准确率压缩前模型在验证集上的准确率。
    Acc原模型\mathrm{Acc}_{\text{原模型}}
  2. 压缩模型准确率低秩分解并(可选)微调后模型的准确率。
    Acc压缩模型\mathrm{Acc}_{\text{压缩模型}}
  3. 精度差值两者之差衡量压缩带来的精度损失,超出阈值就用微调来救。
    δ=Acc原模型−Acc压缩模型\delta=\mathrm{Acc}_{\text{原模型}}-\mathrm{Acc}_{\text{压缩模型}}

AI 应用场景

移动端推荐模型的 Embedding 压缩

阶段:模型压缩与部署优化

解决的问题:推荐模型的用户 Embedding 表动辄“几亿用户 × 128 维”,占存储极大。传统做法直接上线大表,App 安装包膨胀、冷启动加载慢,低端手机内存吃紧。

具体案例:某电商 App 召回模型把用户 Embedding 矩阵 E(1 亿 × 128)用 LVD 分解为 E1(1 亿 × 16)和 E2(16 × 128)两个小矩阵。线上实测显存占用下降 70% 以上,召回率仅下降 0.3%,端到端微调两轮后完全持平。这就好比把每位顾客的详细口味档案,浓缩成“口味底汤编号 + 通用配方表”两份精简记录。

安防摄像头的实时目标检测加速

阶段:边缘推理加速

解决的问题:YOLO 骨干网络的 3×3 卷积在边缘芯片上算力吃紧,帧率上不去,传统方案只能换更贵的芯片,成本压力大。

具体案例:将骨干网络卷积核做折叠 SVD 后,改写为“1×1 卷积 + 3×3 卷积”的两层串联结构。模型体积减半,单帧延迟从 62ms 降到 35ms,mAP 几乎不变。相当于把每道菜从“20 种食材现做”改成“底汤打底 + 主料快炒”,出餐速度翻倍。

大语言模型 FFN 层的显存优化

阶段:推理部署与显存优化

解决的问题:大模型的 FFN 层本质是两个巨大的全连接矩阵,占显存大头,服务器推理成本高;直接换小模型又损失能力。

具体案例:对 7B 模型 FFN 的 down_proj 做低秩近似,再配合量化技术,GPU 显存占用下降约 30%,吞吐提升明显,困惑度损失控制在 0.2 以内。FFN 层正是本文“全连接层压缩”最典型的实战对象,主厨的底汤配方在这里换成了“低秩投影 + 恢复映射”。

Python 演示

python43 行
import numpy as np  def low_rank_compress(W, k=None, energy_threshold=0.95):    """对权重矩阵 W 做截断 SVD 低秩近似, 返回两个小矩阵和统计指标."""    U, s, Vt = np.linalg.svd(W, full_matrices=False)    if k is None:        total = np.sum(s ** 2)        acc = 0.0        k = 1        for i in range(len(s)):            acc += s[i] ** 2            if acc / total >= energy_threshold:                k = i + 1                break    W1 = U[:, :k] * s[:k]          # m x r, 相当于"菜品->底汤"    W2 = Vt[:k, :]                 # r x n, 相当于"底汤->食材"    W_approx = W1 @ W2    mse = float(np.mean((W - W_approx) ** 2))    ratio = W.size / (W1.size + W2.size)    return W1, W2, W_approx, mse, ratio  def simulate_fc_layer(m=256, n=128, true_rank=8, noise=0.01):    """构造一个本质低秩的全连接层权重, 模拟真实模型中的冗余结构."""    rng = np.random.default_rng(42)    W = rng.standard_normal((m, true_rank)) @ rng.standard_normal((true_rank, n))    W = W + rng.standard_normal((m, n)) * noise    return W  def main():    W = simulate_fc_layer()    print("原始参数量:", W.size)    for k in [2, 4, 8, 16]:        _, _, _, mse, ratio = low_rank_compress(W, k=k)        print(f"rank={k:3d} 压缩率={ratio:6.2f}x MSE={mse:.6f}")    _, _, _, mse, ratio = low_rank_compress(W, energy_threshold=0.95)    print(f"自动选秩(能量>=0.95): 压缩率={ratio:6.2f}x MSE={mse:.6f}")  if __name__ == "__main__":    main()
目的:用 NumPy 实现低秩分解的核心流程——对一个本质低秩的全连接层权重做截断 SVD,输出不同秩下的压缩率与重构误差,并演示按能量占比自动选秩。
  1. W = rng.standard_normal(...) @ rng.standard_normal(...)先构造本质秩为 8 的权重矩阵,模拟真实模型的信息冗余结构
  2. U, s, Vt = np.linalg.svd(W, full_matrices=False)SVD 分解,得到左奇异向量、奇异值和右奇异向量
  3. W1 = U[:, :k] * s[:k]把奇异值合并进左因子,得到第一个小矩阵(“菜品→底汤”)
  4. W2 = Vt[:k, :]取前 k 行右奇异向量,得到第二个小矩阵(“底汤→食材”)
  5. ratio = W.size / (W1.size + W2.size)计算压缩率,即原参数与小矩阵参数总量之比
  6. acc / total >= energy_threshold按能量占比自动确定最小 k,是“0.95 初选准则”的工程实现

常见误区

误区听说低秩分解是“近似”,我以为是直接把模型变模糊,精度一定会掉很多,所以一直不敢用。

正解权重矩阵的信息冗余极高(尤其大模型),就像菜谱里 80% 的菜都源于几款底汤;截断 SVD 丢掉的都是能量占比很小的成分。实践中只要秩选得保守,压缩后几乎不掉点,端到端微调几轮还能完全恢复。真正掉精度往往是秩选太小或没有微调,而不是 LVD 本身“有害”。

为何常见:直觉上“丢掉信息”听起来就会变差,忽略了被丢弃的主体是冗余信息,而不是有效信息。

误区既然大秩还原更精确,那我就把 r 设成接近原始维度,反正更安全。

正解r 越大,两个小矩阵越接近原矩阵大小,压缩效果趋近于零,部署毫无收益。正确做法是用能量占比定初值,再在验证集上按“压缩率与精度”双目标调,不是越大越好,也不是越小越好。

为何常见:只盯着精度看,把压缩问题当成了单纯的重构问题,忘了压缩率和精度的跷跷板关系。

误区卷积核是四维张量,不是二维矩阵,所以低秩分解对卷积层无效。

正解把四维卷积核折叠成二维矩阵即可做同样的 SVD,分解结果能还原成“1×1 卷积 + k×k 卷积”的两层串联结构,卷积层照样能压,而且在边缘芯片上加速效果往往比全连接层更明显。

为何常见:被“二维矩阵”的教科书例子吓住,忽略了张量可以 reshape 这一基本操作。

误区分解是纯数学操作,算完保存两个小矩阵上线就行,微调是多此一举。

正解截断 SVD 是对单层线性映射的最优近似,但整个网络是非线性的,单层误差会被后续层逐层放大。用极小学习率做端到端微调,能让两层小矩阵协同修正误差,通常能显著恢复精度。

为何常见:只考虑了“单层近似误差最小”,没意识到误差在网络中的传播效应。

面试题

Q1. 低秩分解 LVD 的核心思想是什么?

单选题 · easy

  • A.把大矩阵拆成两个小矩阵相乘近似← 正确答案
  • B.把模型权重全部变成稀疏矩阵
  • C.把权重矩阵进行二值化存储
  • D.用更低精度数据类型保存权重

答案:A。LVD 的核心是用两个小矩阵的乘积近似原权重矩阵,就像用几款底汤复刻整本菜谱。稀疏化、二值化、低精度存储是另外的压缩路线,它们不改变矩阵结构,因此不是低秩分解的核心思想。

Q2. 下列关于低秩分解的说法,哪一项正确?

单选题 · easy

  • A.低秩分解能够无损恢复原始权重矩阵
  • B.低秩分解利用权重矩阵的信息冗余来压缩← 正确答案
  • C.低秩分解压缩后推理结果完全不变
  • D.低秩分解只适用于卷积神经网络模型

答案:B。权重矩阵存在大量相关性,LVD 正是利用这种信息冗余,用少量“底汤成分”近似。分解是近似而非无损,推理结果会有细微变化;它既适用于全连接层,也适用于卷积层。

Q3. 截断 SVD 重构误差的大小主要取决于什么?

单选题 · mid

  • A.被丢弃奇异值的平方和大小← 正确答案
  • B.矩阵的行数和列数较大值
  • C.原始矩阵的总参数量大小
  • D.模型训练时使用的学习率

答案:A。根据公式,重构误差的平方等于被丢弃奇异值的平方和。丢弃的奇异值越小,误差越小;矩阵规模和学习率与单步重构误差没有直接关系。

Q4. 全连接层 W(m×n) 分解为 W1(m×r) 和 W2(r×n) 后,参数量变为原来的多少?

单选题 · mid

  • A.约 r(m+n)/(mn) 倍← 正确答案
  • B.约 mn/(m+n) 倍
  • C.约 (m+n)/(mn) 倍
  • D.约 rmn/(m+n) 倍

答案:A。新参数量是 mr+rn = r(m+n),原参数量是 mn,所以比值是 r(m+n)/(mn)。压缩率则是其倒数 mn/[r(m+n)],r 越小压缩越狠。

Q5. 对卷积核做低秩分解时,通常用什么结构承接降维后的特征?

单选题 · easy

  • A.使用 1×1 卷积完成通道降维← 正确答案
  • B.使用 5×5 大卷积核完成合并
  • C.使用池化层直接压缩通道数
  • D.使用全连接层代替卷积操作

答案:A。卷积核折叠成矩阵做完 SVD 后,左因子重排成 1×1 卷积、右因子重排成 k×k 卷积,串联两层近似原卷积。1×1 卷积专门负责通道维度的升降,是卷积低秩分解的标准结构。

Q6. 一个 1024×1024 的权重矩阵,取秩 r=64,压缩率最接近多少?

单选题 · mid

  • A.约 4 倍
  • B.约 8 倍← 正确答案
  • C.约 16 倍
  • D.约 32 倍

答案:B。压缩率 = 1024×1024 ÷ (64×1024+64×1024) = 1048576 ÷ 131072 = 8。也就是说,两个小矩阵总共约 13 万参数,替代了原来约 105 万参数。

Q7. 奇异值能量占比 ρ(k) 达到多少,通常作为秩 r 的初选参考?

单选题 · hard

  • A.0.50 左右
  • B.0.75 左右
  • C.0.95 左右← 正确答案
  • D.1.50 以上

答案:C。工程实践常用“能量占比 ≥ 0.95”作为初选秩的启发式准则,即保留前 k 个成分携带 95% 的能量。0.5 或 0.75 太低,精度风险大;能量占比不可能超过 1。

Q8. 关于低秩分解后精度损失的恢复,下列说法正确的有?

多选题 · mid

  • A.可以用端到端微调让两层小矩阵适应原分布← 正确答案
  • B.微调时通常使用很小的学习率避免破坏结构← 正确答案
  • C.压缩后精度不会损失,无需任何恢复操作
  • D.逐层误差补偿可以辅助恢复部分精度← 正确答案

答案:ABD。端到端微调是恢复精度的主流手段,小学习率能避免破坏已学到的结构;逐层误差补偿也是可用的辅助手段。低秩分解是近似操作,精度必然有微小损失,C 说法错误。

Q9. 在边缘设备部署低秩压缩模型时,需要综合评估的指标包括?

多选题 · mid

  • A.模型体积与内存占用大小← 正确答案
  • B.单次推理延迟和功耗← 正确答案
  • C.压缩前后的精度差值← 正确答案
  • D.模型训练时的数据增强策略

答案:ABC。部署评估关注体积、内存、延迟、功耗以及压缩前后的精度差,这些决定模型能否在边缘设备上落地。数据增强是训练阶段的事,与部署评估无关。

Q10. 下列关于秩 r 的选择实践,正确的有?

多选题 · hard

  • A.不同层可以采用不同的秩大小← 正确答案
  • B.敏感层保留较大秩以保证精度← 正确答案
  • C.秩越小压缩率越高且精度不变
  • D.在验证集上搜索压缩率与精度的平衡点← 正确答案

答案:ABD。实践中逐层设置不同 r 是常规做法,靠近输入的敏感层用大秩守住精度;最终在验证集上以压缩率和精度双目标搜索。秩越小压缩率越高,但精度会下降,C 的“精度不变”错误。