论文解读与源码复现|Sensitivity-Aware Efficient Fine-Tuning via Compact Dynamic-Rank Adaptation:把敏感参数"重排成块、动态调秩"的高效微调方法(CVPR 2025)

论文首页题目与摘要截图

论文题目:Sensitivity-Aware Efficient Fine-Tuning via Compact Dynamic-Rank Adaptation 发表会议:CVPR 2025(IEEE/CVF Conference on Computer Vision and Pattern Recognition) 作者单位:哈尔滨工业大学(深圳)、贵州电网有限责任公司智能运营中心 说明:本文为论文学习解读。论文未提供官方源码,文末"源码复现"章节给出的是基于论文的复现思路与建议,而非官方实现。

前言

随着视觉大模型(如 ViT、DINOv2、SAM 等)在表征与生成任务上的快速发展,"预训练 + 微调"已经成为计算机视觉领域的主流范式。然而,全量微调(Full Fine-Tuning)需要为每一个下游任务存储一份完整的模型副本,参数量动辄上亿,在资源受限的场景中难以落地。参数高效微调(Parameter-Efficient Fine-Tuning,PEFT)正是为解决这一问题而提出的技术方向:冻结绝大多数预训练参数,只训练极少数参数,就能让模型适配下游任务。

按照可训练参数的引入方式,现有 PEFT 方法大致可分为三类:

  1. 附加式(Addition-based):在主干网络上挂载额外的可训练模块,例如 Adapter(在 Transformer 层间插入小型瓶颈网络)、VPT(Visual Prompt Tuning,在输入中拼接可学习的视觉提示向量)、NOAH 等。缺点是推理时引入额外计算开销。
  2. 重参数化式(Reparameterization-based):训练时可训练参数独立存在,推理时可合并回主干,例如 LoRA(Low-Rank Adaptation,用两个低秩矩阵的乘积建模权重变化)、DoRA、AdaLoRA 等。
  3. 选择式(Selection-based):直接从预训练参数中挑出一个子集进行训练,例如 Bias(只调偏置项)、GPS(基于梯度选择参数)、SPT(Sensitivity-aware Parameter-efficient fine-Tuning,敏感度感知参数高效微调)等。

其中,SPT(ICCV 2023,He et al.)是选择式方法的代表工作:它先评估每个参数的"敏感度"(参数对下游任务的 grads 累积平方),挑出最敏感的一小部分参数,然后根据每个权重矩阵的敏感参数数量,在非结构化微调(带掩码的直接微调)和结构化微调(LoRA)之间做自适应组合。这种"组合拳"显著提升了 PEFT 性能。

但本文作者观察到一个被忽视的问题:SPT 只在"整个参数矩阵"的层面评估敏感参数的稀疏性,却忽略了敏感参数在行、列向量层面的分布特性。这带来两个后果:一是额外的存储负担,二是有限的性能提升空间。论文的核心发现是——敏感参数的分布并不是杂乱无章的,而是集中在参数矩阵中少数几行、少数几列上。基于这一发现,作者提出了 CDRA-SPT(Compact Dynamic-Rank Adaptation for Sensitivity-aware Parameter-efficient fine-Tuning):先把分散的敏感参数按行列重排、聚拢成一个"紧凑子参数矩阵",再在这个小子矩阵上做动态秩(Dynamic-Rank)的低秩适应。

Figure 1:敏感参数的分布示意图——重排前散布在整矩阵(a),重排后聚拢为紧凑子矩阵(b)

图 1:敏感参数分布示意。(a)在原始参数矩阵中,敏感参数集中在少数行/列;(b)按行、列重排后,敏感参数聚拢成紧凑子参数矩阵。(图片来源:论文 Figure 1)

论文的三点主要贡献可以概括为:

  • 新发现:敏感参数的分布并非在整矩阵上杂乱散布,而是集中于少数行或列——这是此前 SPT 类方法未曾利用的分布特性;
  • 新方法:设计紧凑动态秩适应(CDRA),用"子矩阵级别的结构化微调"统一替代了 SPT 中非结构化与结构化微调的手工组合;
  • 新验证:在 VTAB-1k、FGVC 图像分类以及 ADE20K、VOC 语义分割等多类基准上取得了优于此前 SOTA 方法的效果。

方法解析

2.1 预备知识:SPT 是怎么做的

形式化地,设预训练模型权重为 {w₀, ..., wᵢ, ..., w_N}(N 为参数总数),D_train 为下游任务训练集。SPT 分两步执行 PEFT:

  • 第一步(敏感度评估):用约 400 个训练样本计算每个参数的梯度累积平方作为敏感度,即 sᵢ = gᵢ²,选取 top-γ 最敏感的参数,得到二值掩码 mᵢ("1" 表示敏感参数);
  • 第二步(自适应组合微调):对每个权重矩阵 wᵢ,若敏感参数数量足够稀疏(∑mᵢ < α,α 为 LoRA 的参数量阈值),就用带掩码的非结构化微调;否则改用结构化微调(LoRA),即 Δwᵢ = w_down·w_up。

2.2 动机一:敏感参数不是"乱撒点",而是集中在少数行列

SPT 的第一个问题出在 Case 1(敏感参数很稀疏、用掩码直接微调的情形)。表面上看这些参数"很稀疏",但那只是以整矩阵为统计口径得出的结论。论文随机选取预训练 ViT 中的一个 query 权重矩阵,逐行、逐列统计敏感参数的占比(论文 Figure 2):整矩阵的敏感参数占比只有约 0.066(6.6%),但部分行上的敏感参数密度可达 43%,部分列上可达 52%。也就是说,敏感参数高度集中在少数行/列上,从行列视角看它们其实是"稠密"的。

Figure 3:权重变化示意——现有 SPT 的 LoRA 覆盖整矩阵产生三个无效子块(a),本文只在紧凑子矩阵上做低秩适应(b)

图 3:两种权重更新方式对比。(a)现有 SPT 对整矩阵施加 LoRA,权重变化被拆分为 Δw⁰⁰、Δw⁰¹、Δw¹⁰、Δw¹¹ 四个子块,其中只有 Δw¹⁰ 真正对应敏感参数;(b)本文只对重排后的紧凑子矩阵做低秩适应。(图片来源:论文 Figure 3)

这带来一个直观想法:能否把这些稠密的行、列参数"搬运"到一起,组成一个紧凑子参数矩阵,然后在这个小子矩阵上做低秩适应? 这样既能进一步压缩可训练参数量,又能完整刻画敏感行向量与列向量之间的相关性。

2.3 动机二:整矩阵 LoRA 存在大量冗余子块

SPT 的第二个问题出在 Case 2(敏感参数较多、改用整矩阵 LoRA 的情形)。如图 3a 所示,LoRA 用两个低秩矩阵 A、B 的乘积 AB 建模整个矩阵的变化,权重更新可以按敏感行/列的边界划分为四个子块:

  • Δw⁰⁰:非敏感行 × 非敏感列;
  • Δw⁰¹:非敏感行 × 敏感列;
  • Δw¹⁰:敏感行 × 非敏感列;
  • Δw¹¹:非敏感行 × 非敏感列。

其中只有 Δw¹⁰(敏感行 × 敏感列交叉的子块)真正承载了敏感参数的变化建模,其余三个子块要么在拟合非敏感的行,要么在拟合非敏感的列——它们对下游任务而言是"无效参数"。这不仅浪费存储,还可能加剧过拟合。既然如此,能否干脆删掉那三个子块,只保留 Δw¹⁰ 部分的低秩建模?

2.4 CDRA-SPT:三步完成紧凑动态秩适应

CDRA-SPT 的关键洞察是:上述 Case 1 与 Case 2 可以统一为"在紧凑子参数矩阵级别做结构化微调"。整个方法分三步(对应论文 Algorithm 1 的 PyTorch 风格伪代码):

Step 1:敏感参数识别。 与 SPT 类似,用训练样本的梯度累积平方评估每个参数的敏感度并选取 top-γ 敏感参数,得到每个权重矩阵的二值掩码 mᵢ:

$$s_i = g_i^2, \quad g_i^2 = \frac{\sum_{x \in D_{tr}} \left(\nabla \mathcal{L}x(w_i)^2\right)}{|D{tr}|}$$

Step 2:行列重排(Reorganize)。 对每个权重矩阵 wᵢ,按行、按列的敏感参数数量降序重排行与列,得到新矩阵 w̄ᵢ,使所有敏感参数聚拢到左上/交叉位置的紧凑子矩阵 w̄¹⁰ᵢ 中:

$$\bar{w}i = \text{Reorganize}(w_i) = \begin{bmatrix} \bar{w}{00} & \bar{w}{01} \ \bar{w}{10} & \bar{w}_{11} \end{bmatrix}$$

注意:Reorganize 只是行与列的重排序(置换),是可逆的——原始参数可通过逆变换 wᵢ = Reorganize⁻¹(w̄ᵢ) 完整恢复,不损失任何信息。伪代码中的实现要点是:先按掩码的行和 torch.sort 降序得到行置换 r_map,再在重排后的矩阵上按列求和降序得到列置换 c_map,最后扫描找出剩余全零的行列分界,即紧凑矩阵的维度 d̄ᵢ 与 k̄ᵢ。

Step 3:子矩阵级低秩适应。 只对紧凑子矩阵 w̄¹⁰ᵢ 施加低秩适应,其余三个子块冻结不动:

$$\bar{w}'i = \bar{w}i + \Delta\bar{w}i = \begin{bmatrix} \bar{w}{00} & \bar{w}{01} \ \bar{w}{10} + AB & \bar{w}_{11} \end{bmatrix}$$

其中 A ∈ R^(d̄ᵢ×r)、B ∈ R^(r×k̄ᵢ) 为可学习低秩矩阵。训练完成后同样用逆变换把参数还原回原始参数空间,即可正常执行下游推理。

2.5 动态秩分配策略:不同层的子矩阵需要不同的秩

最后一个问题是:低秩矩阵的秩 r 怎么定?直接沿用 LoRA 的做法给所有子矩阵设固定秩(如 r=8 或 16)合理吗?论文用 Figure 4 给出了否定答案:虽然 ViT 中各权重矩阵尺寸相同(均为 768×768),但重排后紧凑子矩阵的尺寸和敏感参数占比差异巨大——第 11 层 query 矩阵的紧凑子矩阵是 153×355(敏感占比 2.5%),第 11 层 FFN 矩阵是 284×589(10.1%),第 10 层 FFN 矩阵是 318×533(11.2%),第 6 层 value 矩阵则达到 614×767(11.5%)。固定秩显然无法同时适配这些差异。

论文提出的动态秩分配基于两条直觉:敏感参数越少、紧凑矩阵维度越小,其内在维度(intrinsic dimension)就越低,所需秩也越小。形式化为一个约束优化:

$$\bar{r}_i = \max(r), \quad \text{s.t.} \quad \sum m_i \geq \frac{(\bar{d}_i \times r + \bar{k}_i \times r) \times d_i \times k_i}{\bar{d}_i \times \bar{k}_i}$$

其目标是保证 CDRA 的可训练参数量始终不超过敏感参数的数量,且紧凑子矩阵越小、分配的秩越低。

数据集与实验设置

论文沿用了 SPT 的评测协议,覆盖图像分类与语义分割两大任务:

  • VTAB-1k:Visual Task Adaptation Benchmark,包含 19 个视觉分类任务,分为三组——自然图像(Natural:CIFAR-100、Caltech101、DTD、Flowers102、Pets、SVHN、Sun397)、专用图像(Specialized:Patch Camelyon、EuroSAT、Resisc45、Retinopathy)、结构化图像(Structured:Clevr/count、Clevr/distance、DMLab、KITTI/distance、dSprites/loc、dSprites/ori、SmallNORB/azi、SmallNORB/ele)。每个任务只用 1000 个训练样本。
  • FGVC:细粒度视觉分类基准,含 CUB-200-2011、NABirds、Oxford Flowers、Stanford Dogs、Stanford Cars 五个任务。
  • 语义分割:ADE20K(超过 2 万张图像、150 个类别)与 PASCAL VOC(20 个目标类别)。

骨干与基线:图像分类使用在 ImageNet-21K 上预训练的 ViT-B/16;语义分割使用 DINOv2 作为预训练模型,以 mDice 和 mIoU 为指标。基线覆盖四类方法:Full 全量微调;附加式(MLP-3、VPT-Shallow/Deep、Adapter、NOAH);重参数化式(Linear、Partial-1、Bias、LoRA);选择式(GPS、SPT-LoRA-8、SPT-LoRA-16)。CDRA-SPT 归入选择式,与 SPT、GPS 构成直接竞争对手。

实现细节:AdamW 优化器 + 余弦学习率衰减,微调 100 个 epoch;标准数据增强;敏感参数选择使用与 SPT 相同数量的训练样本;所有实验在单张 NVIDIA 4090 GPU 上完成。

关键实验结果

3.1 VTAB-1k 主结果:更高精度、更少参数

方法NaturalSpecializedStructured平均精度 (%)可训练参数 (%)
Full75.983.447.665.57100.00
MLP-377.072.830.653.211.50
VPT-Shallow78.279.747.064.850.13
VPT-Deep81.882.455.069.430.70
Adapter84.084.158.571.440.39
NOAH84.484.961.373.250.50
Linear78.577.226.953.000.05
Partial-178.678.534.256.528.38
Bias78.778.344.162.050.16
LoRA85.184.960.272.630.90
GPS87.286.361.373.680.25
SPT-LoRA-885.585.759.973.260.51
SPT-LoRA-1686.486.161.073.871.36
CDRA-SPT (Ours)86.886.361.874.530.49

上表为论文 Table 1 的分组均值与总均值(各任务逐项数值见原文表格截图,与原文逐项核对一致)。

Table 1:VTAB-1k 上与各 PEFT 方法的完整对比(原文表格截图)

表 1 截图来源:论文 Table 1。

要点提炼:

  • CDRA-SPT 平均精度 74.53%,全面领先:比最佳附加式方法 NOAH(73.25%)高 1.28 个百分点,比最佳重参数化方法 LoRA(72.63%)高 1.9 个百分点;
  • 对比同为选择式的关键对手,比 GPS(73.68%)高 0.85 个百分点,比 SPT-LoRA-8(73.26%)高 1.27 个百分点,比 SPT-LoRA-16(73.87%)高 0.66 个百分点;
  • 更难得的是参数量:CDRA-SPT 仅用 0.49% 的可训练参数,低于 SPT-LoRA-8 的 0.51% 与 SPT-LoRA-16 的 1.36%——精度与存储同时占优。

3.2 FGVC 细粒度分类:平均 89.86%,参数量不到 SPT 的一半

方法CUB-2011NABirdsOxford FlowersStan. DogsStan. Cars平均精度 (%)参数 (%)
Full87.382.798.889.484.588.54100.00
Linear85.375.997.986.251.379.320.21
Bias88.484.298.891.279.488.400.33
Adapter87.184.398.589.868.685.660.48
LoRA85.679.898.987.672.084.780.90
VPT-Shallow86.778.898.490.768.784.620.29
VPT-Deep88.584.299.090.283.689.110.99
SPT-LoRA-888.083.599.389.886.789.461.20
SPT-LoRA-1688.283.899.389.787.489.692.28
CDRA-SPT (Ours)88.683.499.389.888.289.860.86

Table 2:FGVC 五个细粒度数据集上的对比(原文表格截图)

表 2 截图来源:论文 Table 2。

CDRA-SPT 平均精度 89.86%,超过全量微调(88.54%)约 1.3 个百分点,比 SPT-LoRA-16(89.69%)高 0.17 个百分点,而可训练参数只有 0.86%,不到 SPT-LoRA-16(2.28%)的 40%。在 Stanford Cars 上优势尤其明显:88.2% vs SPT-LoRA-16 的 87.4%、LoRA 的 72.0%。

3.3 语义分割:ADE20K 与 VOC 双双最优

方法ADE20K mDice (↑)ADE20K mIoU (↑)ADE20K 参数 (%)VOC mDice (↑)VOC mIoU (↑)VOC 参数 (%)
Bias72.860.70.1274.362.40.12
LoRA73.861.91.2075.063.90.34
Adapter72.960.90.3476.765.90.34
SPT-LoRA-873.361.40.8376.565.20.87
SPT-LoRA-1673.361.41.6076.966.31.70
CDRA (Ours)74.062.00.8277.466.40.70

Table 3:ADE20K 与 VOC 语义分割结果(原文表格截图)

表 3 截图来源:论文 Table 3。

在 ADE20K 上 CDRA 取得 mDice 74.0 / mIoU 62.0(超过 LoRA 1.3/0.7 个百分点),VOC 上 mDice 77.4 / mIoU 66.4,均为所有方法最优,且可训练参数(0.82%/0.70%)低于 SPT-LoRA-8(0.83%/0.87%)与 SPT-LoRA-16(1.60%/1.70%),说明方法在密集预测任务上同样通用。

3.4 消融实验:动态秩与紧凑子矩阵都不可或缺

(1)动态秩 vs 固定秩(论文 Table 4,VTAB)

设置NaturalSpecializedStructured平均精度 (%)参数 (%)
Dynamic rank(Ours)82.486.361.876.80.49
Fixed Rank-881.084.559.475.00.42
Fixed Rank-1681.085.259.275.10.76
Fixed Rank-3280.885.260.175.41.45

Table 4:紧凑动态秩适应分析(原文表格截图)

表 4 截图来源:论文 Table 4。

动态秩比固定秩 8/16/32 分别高 1.8 / 1.7 / 1.4 个百分点,且参数量低于秩 16/32 的固定方案——印证了"不同层子矩阵内在维度不同、需要按需分配秩"的设计动机。

(2)CDRA 对 SPT 两种情形的改造效果(论文 Table 5,VTAB)

设置NaturalSpecializedStructured平均精度 (%)参数 (%)
(i) 基线(原始 SPT)80.985.360.075.40.94
(ii) 仅 Case 1 用 CDRA81.285.560.375.70.88
(iii) 仅 Case 2 用 CDRA81.485.860.275.80.46
(iv) Case 1+2 都用 CDRA81.785.860.376.00.37

Table 5:CDRA 在 SPT 的 Case 1 与 Case 2 上的消融(原文表格截图)

表 5 截图来源:论文 Table 5。

同时改造两种情形(即完整 CDRA-SPT)取得最高精度 76.0% 与最小参数量 0.37%——参数量较原始 SPT 下降超过一半,精度反而提升 0.6 个百分点,直接验证了"消除非敏感子块冗余"的核心论点。

(3)其余消融结论(论文 Table 6、7、8)

  • 子矩阵尺寸敏感性(Table 6):把紧凑子矩阵放大 1.5 倍后平均精度降到 75.0%(参数 0.54%),缩小到 0.5 倍降到 74.6%(参数 0.29%),均低于原始尺寸的 76.8%——子矩阵过大或过小会分别引入过拟合或欠拟合;
  • 只调哪个子块(Table 7):对 Δw⁰⁰/Δw⁰¹/Δw¹⁰/Δw¹¹ 四个子块分别施加 CDRA,只有敏感子块 Δw¹⁰ 达到最优(76.8%,0.49%),其余子块不仅精度低(74.8%~75.2%),部分还更耗参数(Δw⁰⁰ 与 Δw¹¹ 均为 0.73%~0.74%);
  • 计算开销(Table 8):CDRA-SPT 推理时延 2.8 ms/图、推理显存 1.3 GB,与 Full、LoRA、SPT 完全持平(因为学习到的权重变化可重参数化合并回主干);微调显存 8.3 GB,低于 Full(11.9 GB)、SPT(9.8 GB)、VPT-Deep(13.2 GB),与 LoRA(8.2 GB)相当。

机制解释与讨论

为什么"重排 + 子矩阵低秩"能同时做到更准、更省? 可以从三个层面理解:

  1. 分布先验的利用。梯度敏感度刻画的是"参数对下游损失的影响强度",而敏感参数集中分布于少数行列,说明下游任务的适配方向在权重空间中具有低维的"结构性"。SPT 把敏感参数当作孤立散点处理(Case 1 的掩码微调),或用整矩阵 LoRA 平铺建模(Case 2),都没有显式利用这种结构。CDRA 通过可逆的行列置换把结构性"显式化"为一个紧凑子矩阵,让低秩假设作用在真正承载任务信息的子空间上。
  2. 参数预算的再分配。Case 2 中被删除的 Δw⁰⁰、Δw⁰¹、Δw¹¹ 三个子块约占整矩阵 LoRA 参数量的绝大部分,删除后节省的预算既可以表现为更低的总参数量(0.49% vs 0.51%),也可以通过动态秩策略倾斜给"更难适配"的层(如紧凑矩阵更大、敏感占比更高的第 6 层 value 矩阵可分配更高秩)。
  3. 正则化效应。消融显示放大子矩阵反而掉点,说明敏感参数之外的区域参与训练会引入有害自由度;CDRA 相当于一种结构化的参数约束,缓解了小样本(VTAB-1k 每任务仅 1000 张训练图)下的过拟合。

关于推理开销:由于行列置换与低秩增量都可以合并回原始权重(Step 3 的逆变换),CDRA-SPT 推理时与全量微调模型结构完全一致,2.8 ms/图、1.3 GB 的推理开销与 Full/LoRA/SPT 持平,明显优于 VPT-Deep(3.8 ms、1.9 GB)——后者在推理时仍需拼接额外的提示向量。

敏感度度量为何能刻画分布结构? 从优化视角看,sᵢ = gᵢ² 衡量的是参数在当前任务损失面上的"梯度能量"。若下游任务的适配方向与权重矩阵的某几行/列强相关,那么这些行列上的参数就会持续获得较大梯度,其累积平方自然更高;反过来,敏感参数在行列上的聚集程度,也间接反映了任务适配方向的"低维结构性"强度。VTAB 中结构化任务(如 dSprites/ori、SmallNORB/ele 的姿态与位置预测)与自然任务的敏感分布显著不同(Figure 5 中各行数据集的紧凑维度差异即为佐证),这解释了为什么固定秩方案在跨任务迁移时表现不稳定,而按每个矩阵的掩码统计量动态定秩的方案更稳健。此外,值得强调的是行列重排是一个"零学习成本"的结构变换:它不引入任何新参数、不改变前向计算的数学等价性,却把原本散落的敏感参数在拓扑上连接成了一个可被低秩假设覆盖的连续区域——这也是论文标题中 "Compact" 一词的真正含义:不是压缩参数,而是压缩敏感参数所占的空间结构。

紧凑子矩阵到底有多紧凑? 论文 Figure 5 统计了自然、专用、结构化三组数据集上全部层紧凑子矩阵的维度分布:平均行维度约 121~221、平均列维度约 384~567(原始矩阵为 768×768)。以 CIFAR 为例均值约 183×567,SmallNORB/azi 约 198×545。这意味着实际训练的低秩矩阵 A、B 的规模通常只有原矩阵的百分之几,直观解释了 0.49% 的参数量从何而来。

局限与工程启示

局限性(基于论文内容与客观分析):

  1. 两阶段流程的开销:方法需要先冻结模型、对训练样本做一轮(或多轮)前向-反向传播来估计敏感度(Eq. 3 使用整个训练集的梯度累积),这是一笔额外的一次性成本;虽然论文报告微调显存 8.3 GB,但敏感度估计阶段的峰值开销并未单独披露。
  2. 敏感度估计的噪声:sᵢ = gᵢ² 本质是单点梯度的二阶统计近似,在小样本、早期训练阶段可能不稳定;top-γ 的 γ 取值与排序阈值的稳健性论文未做超参敏感性分析。
  3. 秩分配是约束搜索而非可学习量:Eq. 7 通过枚举满足参数预算约束的最大秩来确定 r̄ᵢ,与 AdaLoRA 那类可微的秩学习路线相比更简单,但也少了"随训练进程自适应增减秩"的能力。
  4. 实验范围:论文实验集中于 ViT-B/16 与 DINOv2 骨干,未涉及更大的模型规模(如 ViT-L/H)、检测任务或多模态场景;对卷积网络(权重行列语义不同于 Transformer)的适用性也有待验证。
  5. 无官方开源代码:截至本文写作,论文未提供官方实现,第三方复现存在细节对齐成本(如掩码统计口径、秩搜索步长等)。

工程启示:

  • "置换免费"的视角值得记住:对线性层做行列置换不改变模型功能(配合对应输入/输出维度的置换即可逆),这为"把稀疏结构聚拢后做结构化微调"这类设计提供了零成本的结构变换原语,可迁移到 LoRA 变体与 LLM 微调场景。
  • 参数预算应"按层按需"分配:固定秩 8/16 在 768×768 的同尺寸矩阵上都会带来 1.4~1.8 个百分点的损失,动态秩以几乎为零的额外成本换回了明显收益,这在自研 PEFT 方案中是可以直接借鉴的低垂果实。
  • 选择式 PEFT 的上限可以更高:CDRA-SPT 以 0.49% 的参数超过全量微调(VTAB 上 74.53% vs 65.57%),再次说明"选对参数"比"多给参数"更重要;敏感度分析是低成本定位关键参数的实用工具。
  • 部署友好性:训练产物可完全合并回主干,推理侧无需任何插件或额外分支,适合对时延敏感的边缘部署。

源码复现

再次说明:该论文未提供官方源码,以下内容是基于论文方法描述整理的复现思路、公开数据集与建议超参数,属于作者个人的复现建议,并非官方实现,细节需自行验证与调优。

复现环境与数据

  • 框架:PyTorch ≥ 2.0,timm(加载 ImageNet-21k 预训练 ViT-B/16);单张 24 GB 显卡即可覆盖论文设置;
  • 数据集:VTAB-1k(官方 tensorflow_datasets 提供,各任务统一采样 1000 训练样本)、FGVC 五件套(CUB-200-2011、NABirds、Oxford Flowers、Stanford Dogs、Stanford Cars 官方下载页)、ADE20K 与 PASCAL VOC 2012(分割);
  • 评测协议:每任务训练 100 epoch,AdamW + 余弦学习率衰减,标准数据增强,输入分辨率 224×224。

关键实现步骤(对应论文 Algorithm 1)

# 伪代码骨架(与论文 Algorithm 1 对应,示意性质)
class CDRA_SPT(nn.Module):
    def __init__(self, m_i, in_d, out_d, r):        # m_i: Step1 得到的二值敏感掩码
        # Step 2: 按行/列敏感计数降序排序,得到 r_map / c_map 与紧凑维度
        sensitive_row = m_i.sum(dim=1)
        r_map = sensitive_row.argsort(descending=True)
        c_map = m_i[r_map].sum(dim=0).argsort(descending=True)
        d_bar = (m_i[r_map].sum(dim=1) > 0).sum()   # 非全零行数
        k_bar = (m_i[:, c_map].sum(dim=0) > 0).sum() # 非全零列数
        self.A = nn.Parameter(torch.randn(d_bar, r) * 0.01)
        self.B = nn.Parameter(torch.zeros(r, k_bar))

    def forward(self, x):
        W_bar = self.W[self.r_map, :][:, self.c_map]     # 重排
        W_bar[:d_bar, :][:, :k_bar] += self.A @ self.B   # Eq.6:只更新紧凑子矩阵
        W = inverse_reorganize(W_bar, self.r_map, self.c_map)  # 逆置换还原
        return x @ W + self.bias
  1. 敏感度估计(Step 1):冻结全部权重,对训练样本前向并保留计算图,按 Eq. 3 累积每个参数梯度的平方(论文中 SPT 用约 400 个样本,CDRA 的 Eq. 3 写为整个训练集的归一化梯度平方累积;工程上可先采样一批做近似),取 top-γ 得到掩码 mᵢ。注意逐矩阵保存掩码并统计其行列计数;
  2. 秩搜索(Eq. 7):对每个矩阵枚举 r = 1, 2, 4, ...,找出满足"CDRA 参数量 ≤ 敏感参数量"约束的最大秩 r̄ᵢ;
  3. 训练:只优化各层的 A、B(以及必要的 bias/分类头),其余参数 requires_grad=False;
  4. 推理合并:训练完成后执行重排 → 加 AB → 逆置换,把 ΔW 合并回 W,得到零开销的标准 ViT。

复现要点提示

  • 核对基准:先复现 SPT-LoRA-8(VTAB 平均约 73.26%、0.51% 参数)作为 sanity check,再切换到 CDRA,观察平均精度是否到 74% 量级;
  • 易错点:重排矩阵的逆置换容易写错,建议用随机矩阵单元测试验证 Reorganize⁻¹(Reorganize(W)) == W;掩码行/列计数要在重排口径下统计(列计数需在行重排后计算,见 Algorithm 1);
  • 预期指标:VTAB-1k 平均 ≈ 74.53%(0.49% 参数)、FGVC 平均 ≈ 89.86%(0.86% 参数);若明显偏低,优先检查秩搜索约束的实现与学习率(论文未给出具体学习率,可从 1e-3 / 5e-4 / 1e-4 网格搜索起步)。

总结

CDRA-SPT 的价值在于用一个简单却深刻的观察撬动了选择式 PEFT 的上限:敏感参数天然集中于少数行与列,因此"把敏感参数聚拢成紧凑子矩阵、再在其上做动态秩低秩适应"能够同时消除 SPT 中掩码微调与整矩阵 LoRA 两类路线的冗余。三步法(敏感度识别 → 行列重排 → 子矩阵动态秩适应)实现清晰、推理零开销,在 VTAB-1k(74.53%、0.49% 参数)、FGVC(89.86%、0.86% 参数)与语义分割(ADE20K mDice 74.0 / VOC mDice 77.4)上全面超越 SPT、GPS、LoRA、Adapter 等此前方法。对于从事大模型落地、边缘部署或 PEFT 研究的读者,"分布先验 + 结构重排 + 按需秩分配"这一组合思路都具有直接的借鉴价值。

引用信息

Logo

更多推荐