LANCE: Low Rank Activation Compression for Efficient On-Device Continual Learning¶
会议: ECCV 2026
论文: ECCV 原文
代码: https://github.com/mapolinario94/LANCE
领域: 模型压缩
关键词: 激活压缩、HOSVD 低秩分解、端侧持续学习、灾难性遗忘、零空间投影
一句话总结¶
LANCE 在微调开始前用一次高阶奇异值分解(HOSVD)为每层激活标定一组固定的低秩投影子空间,训练时只把激活压缩成核张量存进内存、反向用同一组正交因子重投影出梯度贡献,把激活峰值显存压到全量 BP 的 1/25 到 1/380;同一套固定子空间还可以在离线标定阶段按任务分配到彼此正交的零空间里,从而在不存回放样本、不驻留大矩阵的前提下做端侧持续学习。
研究背景与动机¶
端侧学习——手机、IoT、微控制器上的本地微调——是隐私、个性化和长周期适配的共同前提,而真实场景往往不只要求"学会一个任务",还要求模型在一个持续到来的数据流上不断吸收新任务且不遗忘旧任务。这两件事撞在同一堵墙上:反向传播必须在内存里留住前向的中间激活。对现代卷积网络,激活显存常常是参数显存的 5–10 倍,而微控制器只有几百 KB 的 SRAM,放权重都勉强,更不用说成倍的激活。已有的绕法都带着明显代价:checkpointing 用重算换内存,可逆网络要求专门设计的架构,量化与激活剪枝引入近似误差或额外硬件开销,前向-前向、局部学习规则这类仿生替代方案则普遍掉精度。
低秩路线是最贴合"激活冗余"这一事实的一支——张量分解类方法(HOSVD)能把激活表示压得很小。但它们几乎都在训练过程中反复重算分解:每一步都要重新做 SVD/Tucker 分解,算力开销高、硬件不友好;更关键的是,这些方法从没被放到持续学习场景里考虑过。按任务反复重新分解会留下大量任务专属矩阵,与端侧存储约束直接冲突。另一侧,持续学习里靠正交子空间抗遗忘的梯度投影方法(GPM、TRGP、SGP、CODE-CL)虽然证明了"激活落在稳定低秩子空间"这一事实可用,却必须把每层的记忆矩阵 {M^(l)} 常驻 SRAM 并在每一步优化里做在线投影——把刚才从激活上省下来的显存又吃了回去。
于是这篇论文抓住了两条线之间那个明显的空隙:既然激活所在的低秩子空间足够稳定、稳定到可以只标定一次就反复使用,那么"抗遗忘"这件事就不必发生在训练的每一步里,而可以在离线标定阶段一次性编码进子空间本身——让新任务只能落在旧任务用过的方向的正交补上。核心 idea:用一次 HOSVD 标定出可复用的固定激活子空间,前向只存低秩核张量、反向用正交因子重投影以保住梯度方向(因此仍是合法的下降方向),持续学习则通过把新任务的 mode-d 因子约束在上一任务记忆矩阵的零空间内来结构性抑制遗忘。
方法详解¶
整体框架¶
LANCE 改的不是模型,而是反向传播"缓存什么"。全量 BP 里第 l 层的激活张量 \(X^{(l)}\) 必须原样留在 SRAM 中供反向使用;LANCE 把它替换成一个远小于原张量的核张量 \(G^{(l)}\),只在需要时用一组固定的正交因子矩阵把信息投回去。整个方法分成两段执行:一段在训练开始前离线跑,逐层估计校准激活的协方差并做一次 HOSVD,用能量阈值自动决定每个模式要保留多少秩;另一段在目标设备上跑,前向把激活投影成核张量存下来,反向用同一套因子把核张量重投影出梯度贡献——注意被压缩的只有"存哪些前向张量",反向本身仍由自动微分照常计算,模型所有层的权重都全量更新。持续学习时再补一段离线收尾:每个任务训练结束后估计最后一维(权重输入维)激活的主方向,把它对旧任务已占据的方向做互补投影后并入记忆矩阵,供下一个任务标定时避开。
参数流向用一句话概括:输入是小批量数据,输出是更新后的权重 θ,中间被压缩的只有激活缓存——权重、梯度、优化器状态一概不动。每层激活的存储从 \(O(\prod_{i=1}^{d} n_i)\) 降到 \(O(\prod_{i=1}^{d} r_i + \sum_{i=1}^{d} n_i r_i)\),前者是核张量,后者是必须保留的因子矩阵;因子矩阵只需算一次,整个微调过程共享,所以它的开销被完全摊销。
关键设计¶
1. 一次性 HOSVD 子空间标定:把每步都要做的分解挪到训练之前
ASI、HOSVD 张量分解这类方法已经证明激活可以低秩表示,但它们在每个训练步重新求解分解。这个开销在端侧是不可接受的:论文实测 MCUNet 每步重算分解会让训练算力从近乎 0 涨到 1.93 TFLOPs,在 Raspberry Pi 上比 LANCE 慢 2.1–4.4 倍。LANCE 的做法是把分解彻底移出训练循环:用 \(N\) 个校准 mini-batch 过一遍预训练模型,对每层每个模式的激活展开矩阵维护一个递推的协方差估计,最后对协方差做一次 SVD,取前 \(r_i\) 个奇异向量作为该模式的因子矩阵 \(U_i\)。
秩不做手工指定,而由能量阈值自动决定——取满足下式的最小 \(r_i\):
其中 \(\sigma_j\) 是协方差的第 \(j\) 个奇异值,\(\varepsilon\) 默认取 0.7。这一步的全部输入只是二阶统计量,不需要标签、不需要反向,因此可以在离线阶段纯前向完成;一次分解的成本被整段微调摊销后可以忽略。让这个设计真正成立的经验事实是校准的鲁棒性:论文发现 \(N=2\) 个校准批次就足以得到稳定子空间,精度在很宽的 \(N\) 范围内几乎不动——说明预训练模型的激活子空间本身非常稳定,这才使得"只标定一次、全程复用"不是一个勉强的近似。
2. 只存核张量、反向用正交因子重投影:压缩激活却保住梯度方向
前向阶段,激活张量被投影成低秩核张量:
只有 \(G^{(l)}\) 与固定的因子矩阵被保留;反向阶段,权重梯度用核张量重投影出的贡献计算。这样做的合法性来自因子的正交性:因为每个 \(U_i\) 的列正交归一,\(P^{(l)} := U_1U_1^\top \otimes \cdots \otimes U_dU_d^\top\) 是一个正交投影算子,于是 LANCE 的权重梯度恰好等于完整梯度在这个子空间上的右投影,即 \(\nabla_W \mathcal{L}_{\text{LANCE}} = \nabla_W \mathcal{L}_{\text{full}} P^{(l)}\)。由此可以直接得到两条结论:两个梯度的内积 \(\langle \nabla_W \mathcal{L}_{\text{LANCE}}, \nabla_W \mathcal{L}_{\text{full}} \rangle = \lVert \nabla_W \mathcal{L}_{\text{LANCE}} \rVert_F^2 \ge 0\),所以 \(-\nabla_W \mathcal{L}_{\text{LANCE}}\) 是下降方向(Theorem 1);在损失 L-光滑的假设下,损失单调下降并收敛到"投影稳定点",与真稳定点的残差只由能量阈值决定,即 \(\lVert \nabla \mathcal{L}(\theta^\star) \rVert_2 \le C\sqrt{1-\varepsilon}\)(Theorem 2 与 Proposition 1)。最后这一点很实用:压缩强度不是一个黑箱旋钮,它给出了精度损失的可量化上界——\(\varepsilon\) 越高解越接近真稳定点,越低则用精度换效率。与渐进式低秩方法(ASI)的区别正在于此:ASI 的子空间会随训练漂移、需要不断修正,LANCE 用"固定子空间 + 正交投影"交换掉了这部分表达力,换来的是零额外分解开销与端侧可承受的时延。
3. 零空间约束的标定与记忆更新:让固定子空间自己承担抗遗忘
要把 LANCE 用到持续学习上,需要回答"上一个任务占过的激活方向如何不让下一个任务踩到"。论文只在最后一维(mode-d,也就是该层权重的输入维度)上做约束,因为权重与该模式直接相乘,这里才是任务间干扰的入口。每个任务 \(t\) 结束后,用 \(N_{CL}\) 个校准批次估计最后一维激活的协方差 \(B_d^t\),先把它对已有记忆做互补投影,只保留与旧任务正交的成分:
在投影后的协方差上再取满足能量阈值 \(\varepsilon_{CL}\) 的前 \(r_d\) 个主方向,与旧记忆正交化拼接成新的记忆矩阵 \(M^t\)(\(M^0\) 初始化为空)。到下一个任务做标定时,mode-d 的因子矩阵直接换成这组落在零空间里的方向,其余模式照常按第 1 个设计走;于是新任务的激活在 mode-d 上只会落到与前任务正交的子空间里,这个方向上的干扰被结构性消除,而不是靠损失正则去"软性"压制。
它与梯度投影方法的差别不在"用不用正交子空间",而在正交性在哪一层被执行:GPM/TRGP/CODE-CL 投影的是梯度,必须在线执行,记忆矩阵要在整个训练过程中驻留 SRAM;LANCE 投影的是激活,只在离线标定阶段用到 \(M\)——更新记忆、算零空间、生成因子——在线阶段就是普通的低秩激活 BP,记忆矩阵不进训练显存也不需要回放缓冲。代价也很清楚:抗遗忘只覆盖被 mode-d 子空间表达的那部分方向,其他模式与非线性、BN 统计量都不受约束。
损失函数 / 训练策略¶
LANCE 不引入任何额外损失项,训练目标仍是标准的分类损失,它改的是缓存对象与子空间约束。标定超参:微调阶段用 \(N=100\) 个校准 mini-batch、能量阈值 \(\varepsilon=0.7\),微调 50 个 epoch;持续学习阶段另有校准批次数 \(N_{CL}\) 与阈值 \(\varepsilon_{CL}\)。持续学习的协议是:第一个任务用完整 BP 无约束训练,之后每个任务以上一个任务的模型为初始化、用 LANCE 的子空间约束训练,采用多头网络,不使用任何回放样本。记忆更新与零空间标定都在离线完成,因此不影响设备上在线微调的开销。
实验关键数据¶
主实验¶
持续学习结果见下表(ACC 为全部任务的平均最终精度,BWT 量化新任务引入时对旧任务的遗忘,Mem 为激活存储开销;五轮均值)。Multitask 表示所有任务联合训练的上界。
| 方法 | Split CIFAR-100 ACC / BWT / Mem (MB) | Split MiniImageNet ACC / BWT / Mem (MB) | 5-Datasets ACC / BWT / Mem (MB) |
|---|---|---|---|
| Multitask(上界) | 79.58 ± 0.54 / − / − | 69.46 ± 0.62 / − / − | 91.54 ± 0.28 / − / − |
| EWC | 68.80 ± 0.88 / −2 ± 1 / − | 52.01 ± 2.53 / −12 ± 3 / − | 88.64 ± 0.26 / −4 ± 1 / − |
| HAT | 72.06 ± 0.50 / 0 ± 0 / − | 59.78 ± 0.57 / −3 ± 0 / − | 91.32 ± 0.18 / −1 ± 0 / − |
| A-GEM | 63.98 ± 1.22 / −15 ± 2 / − | 57.24 ± 0.72 / −12 ± 1 / − | 84.04 ± 0.33 / −12 ± 1 / − |
| ER_Res | 71.73 ± 0.63 / −6 ± 1 / − | 58.94 ± 0.85 / −7 ± 1 / − | 80.31 ± 0.22 / −4 ± 0 / − |
| GPM | 72.48 ± 0.54 / −0.9 / 22.27 | 60.41 ± 0.61 / −0.9 / 127.37 | 91.22 ± 0.20 / −1.0 / 70.33 |
| TRGP | 74.64 ± 0.32 / −0.9 ± 0.01 / 78.86 | 61.78 ± 0.60 / −0.5 ± 0.60 / 543.22 | 93.56 ± 0.10 / −0.04 ± 0.01 / 181.57 |
| CUBER | 75.54 ± 0.22 / +0.13 ± 0.08 / 326.79 | 62.67 ± 0.74 / +0.23 ± 0.15 / 604.61 | 93.48 ± 0.10 / −0.00 ± 0.02 / 196.91 |
| SGP | 76.05 ± 0.43 / −1 / 22.27 | 62.83 ± 0.33 / −1 / 127.37 | − |
| CODE-CL | 77.21 ± 0.32 / −1.1 ± 0.28 / 33.80 | 71.16 ± 0.32 / −1.1 ± 0.3 / 283.82 | 93.51 ± 0.13 / −0.11 ± 0.01 / 116.72 |
| LANCE | 71.52 ± 0.27 / −0.17 ± 0.34 / 2.32 | 59.68 ± 1.17 / −0.99 ± 0.78 / 32.96 | 90.76 ± 0.31 / −1.02 ± 0.15 / 34.96 |
单任务微调侧,论文在 CIFAR-100 上微调各模型最后 2 或 4 层,对比全量 BP、逐步 HOSVD 与 ASI(Acc / 峰值激活存储 / 训练 TFLOPs):
| 模型 | 方法(层数) | Acc ↑ | Mem (MB) ↓ | TFLOPs ↓ |
|---|---|---|---|---|
| MCUNet | BP (2) | 52.47 | 11.71 | 0.000 |
| MCUNet | HOSVD (2) | 52.34 | 0.10 | 2.590 |
| MCUNet | LANCE (2) | 47.57 | 0.04 | 0.000 |
| MCUNet | LANCE (4) | 52.59 | 0.09 | 0.000 |
| MobileNetV2 | BP (4) | 74.69 | 57.42 | 0.01 |
| MobileNetV2 | HOSVD (4) | 69.33 | 0.15 | 22.86 |
| MobileNetV2 | ASI (4) | 66.18 | 0.63 | 0.06 |
| MobileNetV2 | LANCE (4) | 68.79 | 0.17 | 0.01 |
| ResNet18 | BP (4) | 77.07 | 61.25 | 0.09 |
| ResNet18 | HOSVD (4) | 75.35 | 1.21 | 15.56 |
| ResNet18 | ASI (4) | 71.93 | 1.61 | 0.06 |
| ResNet18 | LANCE (4) | 75.70 | 1.16 | 0.05 |
| ResNet34 | BP (4) | 77.50 | 49.00 | 0.12 |
| ResNet34 | HOSVD (4) | 76.01 | 0.95 | 12.25 |
| ResNet34 | ASI (4) | 70.60 | 1.00 | 0.07 |
| ResNet34 | LANCE (4) | 75.94 | 1.02 | 0.06 |
⚠️ 原文 Tab. 2 中 ResNet18/CIFAR-100 的 LANCE 4 层精度排版为 "75.7 0",此处按 75.70 处理,以原文为准。
消融实验¶
能量阈值 ε 是本文唯一的主控旋钮。下表用 ImageNet 规模实验(500 类预训练 + 500 类微调,ResNet18/34)展示 ε 在 0.8 与 0.9 之间的精度—显存权衡:
| 配置 | ResNet18 2 层 Acc / Mem | ResNet18 4 层 Acc / Mem | ResNet34 2 层 Acc / Mem | ResNet34 4 层 Acc / Mem |
|---|---|---|---|---|
| BP | 60.70 / 24.50 MB | 64.28 / 61.25 MB | 60.77 / 24.50 MB | 64.21 / 49.00 MB |
| LANCE (ε=0.8) | 57.04 / 2.48 MB | 59.76 / 5.79 MB | 56.57 / 1.58 MB | 60.56 / 3.87 MB |
| LANCE (ε=0.9) | 59.18 / 7.12 MB | 62.20 / 16.59 MB | 58.59 / 4.49 MB | 62.66 / 10.79 MB |
(单位同为 MB;ε=0.9 时显存比 ε=0.8 涨约 3–4 倍,精度回升 1.5–2 个点。)
另一项消融是校准批次数 \(N\)(CIFAR-100,ε=0.7):精度在很宽的 \(N\) 区间内保持稳定,显存随 \(N\) 增大而上升,\(N=2\) 即可得到稳定子空间;论文仅在图 3 给出曲线,未报告逐点数值,⚠️ 具体数值以原文为准。
关键发现¶
- 一次性标定的收益在真实硬件上可测量,而不只是纸面 FLOPs。Raspberry Pi 3B+(ARM Cortex-A53)上微调 MCUNet(CIFAR-10,batch size 128,1–10 层可训练,五轮取均值):LANCE 的前向、反向、总训练时延均最低,BP 比它慢 3–9%,ASI 慢 19–76%,逐步分解的 HOSVD 慢 2.1–4.4 倍。这条结果直接支撑了"重复分解是不必要的"这一核心论点。
- 梯度保真度给了 Theorem 1 一个可看的实测:LANCE 与全量 BP 的梯度夹角始终在 ~70° 以内,并随训练推进趋于稳定;压缩越狠(ε 越小)夹角越大,但退化平滑可控,即使在激活存储被压缩两个数量级的设置下方向仍然可用。这与"LANCE 的梯度是完整梯度的正交投影"这一理论刻画一致。
- 压缩率高度依赖架构,不能只报最好看的一个数。MCUNet 上 11.71 MB → 0.04 MB(约 293×),ResNet18/ResNet34 上约 50×,MobileNetV2 上 57.42 MB → 0.17 MB(约 338×)。论文摘要与结论给出的区间是 25×–380×,而 3.1 节与图 1c 写作 up to 250×,两处口径不一致,⚠️ 以原文为准。
- 在持续学习上,LANCE 的 BWT 反而比同族基线更稳(Split CIFAR-100 上 −0.17 对比 GPM 的 −0.9),但 ACC 落后:71.52 vs GPM 72.48、CODE-CL 77.21,距离 Multitask 上界 79.58 还有明显差距;Split MiniImageNet 上差距被拉大到 59.68 vs CODE-CL 71.16。论文"与梯度投影方法相当"的表述对 GPM/SGP 一档成立,对 CODE-CL 一档偏乐观。
- 记忆开销的优势是实打实的:Split CIFAR-100 上 2.32 MB,约为 GPM 的 1/10(22.27 MB)、TRGP 的 1/34(78.86 MB)、CUBER 的 1/141(326.79 MB);MiniImageNet 与 5-Datasets 上的优势缩小到约 4× 与 2×,说明任务/类别分布越难,LANCE 压缩记忆的相对优势越小。
- 低秩约束偶尔带来正则化收益:MobileNetV2 在 Oxford-IIIT Pets 上 LANCE 微调 4 层反而高于全量 BP(90.40 vs 90.32),但在 CUB-200 上明显更低(61.21 vs 65.86),说明这种收益是任务相关的,不是稳定现象。
- 微调层数换取精度这一条很实用:ImageNet 规模上 LANCE 微调 4 层的 ResNet34 达到 62.66,已经超过全量 BP 微调 2 层的 60.77,而显存只需 10.79 MB 对 24.50 MB——在严格 SRAM 预算下,"用 LANCE 多训几层"比"用 BP 少训几层"更划算。
亮点与洞察¶
- 把"抗遗忘"从训练循环搬进离线标定,是本文最漂亮的一步。梯度投影方法必须每一步在线做正交投影并让记忆矩阵常驻 SRAM,LANCE 把正交性预先编码进固定的激活子空间,在线阶段几乎零额外开销。这一思路可以迁移到任何"子空间稳定 + 任务序列化 + 内存受限"的场景,例如联邦学习里客户端的本地个性化、或机器人长周期技能累积。
- "改存什么"比"改算什么"更划算。别人压缩权重、梯度或适配器,本文只改前向缓存对象,完全不动反向的函数形式,因此天然与 checkpointing、量化、TinyTL 一类系统侧方法正交,可以叠加使用。
- 用二阶统计量做一次性标定便宜到几乎免费,而 \(N=2\) 个校准批次就够用这一观察本身很有价值:它说明预训练模型的激活子空间非常稳定,"固定子空间"的近似代价被系统性低估了。
- 用能量阈值(而非固定秩)逐层逐模式决定秩,让秩自动适配不同层的重要性差异,省掉了逐层调参;这个技巧可以直接搬到任何按层做低秩近似的压缩方法里。
- 收敛性分析不是装饰:Theorem 1/2 与 Proposition 1 把"梯度是正交投影""损失单调下降""残差由 ε 界定"三件事串起来,让 ε 从实验旋钮变成有上界语义的超参。
局限与展望¶
- 持续学习精度确实低于同族最强基线:Split CIFAR-100 上 71.52 对 CODE-CL 的 77.21,Split MiniImageNet 上 59.68 对 71.16,差距不是噪声级别;论文用"competitive"描述时主要对标的是 GPM 一档,读者需要留意这个口径。
- 抗遗忘的机制边界偏窄。正交约束只施加在 mode-d(权重的输入维),其余模式的因子、非线性层以及 BN 统计量都不受约束,任务间仍可能通过那些路径互相干扰;任务数增大时记忆矩阵 \(M\) 不断累积、可用零空间持续收缩,论文没有给出长任务序列(例如 20 个任务以上)下的饱和或退化分析。
- 每个任务结束后仍需一次离线协方差标定与 SVD,虽然不进在线训练开销,但要求能拿到该任务的校准数据并停下来做一次离线处理;这对流式、不能暂停的部署场景是个隐含前提。
- 验证范围集中在 CNN 与视觉分类:模型只有 MCUNet、MobileNetV2、ResNet18/34 与 AlexNet,任务只有图像分类,没有 Transformer/ViT 类激活、没有检测/分割等更复杂的下游,也没有语言模型上的验证——而 Transformer 激活的冗余结构(尤其是序列维度)与传统 CNN 差异较大,方法能否平移尚不清楚。
- 效率口径存在不一致与排版疑点:摘要/结论的 25×–380× 与正文/图 1 的 up to 250× 冲突;Tab. 2 的 TFLOPs 列把 LANCE 记作 0.000/0.01 而 HOSVD 记作 1.93/22.86,两者是否计入分解开销的统计口径不同;ResNet18/CIFAR-100 的 LANCE 4 层精度排版为 "75.7 0"。以上均 ⚠️ 以原文为准。
- 可改进方向:把零空间约束从 mode-d 扩展到所有模式(每个模式各自维护记忆与正交补投影);用增量/在线协方差更新替代逐任务离线重标定,去掉"必须暂停"的前提;把 ε 做成按层自适应(重要层高 ε、次要层低 ε),在同样的显存预算下换更高精度。
相关工作与启发¶
- vs ASI 与张量 HOSVD 激活压缩(Nguyen et al.): 他们同样利用激活的低秩结构,但在训练过程中增量更新或每步重算子空间;LANCE 改成一次性 HOSVD 后固定复用。代价是子空间不再随训练漂移、表达力被固定住,收益是训练算力与硬件开销的大幅下降(MCUNet 上 1.93 → 0.000 TFLOPs,Raspberry Pi 上 2.1–4.4× 时延差距)。
- vs GPM / TRGP / SGP / CODE-CL: 同为"正交子空间抗遗忘",本质区别是投影作用的对象与时机——他们投影梯度且必须在线执行、记忆矩阵常驻 SRAM;LANCE 投影激活、在离线标定期执行,记忆只占存储不占训练显存(Split CIFAR-100 上 2.32 MB 对 GPM 22.27 MB、CUBER 326.79 MB)。代价是精度略逊,尤其在 MiniImageNet 上明显不如 CODE-CL。
- vs LoRA 类低秩适配(如 Inflora): LoRA 式方法低秩的是权重更新 \(\Delta W\),省的是可训练参数与优化器状态,模型前向仍是全精度的;LANCE 低秩的是激活缓存,省的是训练时的峰值 SRAM,权重全量更新、不新增参数、不改结构。两者优化的是不同资源,原则上可以叠加(低秩适配器 + 低秩激活缓存)。
- vs TinyTL / MCUNet / 256KB 训练引擎: 系统侧方法通过冻结层、限制更新范围、剪掉梯度路径来塞进 SRAM 预算,牺牲的是可训练容量;LANCE 不缩小优化范围,让所有层都能做完整反向传播,只把缓存变小,因此与它们是互补关系。
- vs 回放类(ER、A-GEM)与正则类(EWC、HAT): 前者要保存样本、后者要保存 Fisher 信息或注意力掩码,都会额外占用设备存储;LANCE 既不存样本也不改损失函数,抗遗忘来自标定阶段的结构性约束,因此在存储极度受限的场景更合适。
评分¶
- 新颖性: ⭐⭐⭐⭐ 一次性 HOSVD 复用本身是工程化的清晰简化,但把它与零空间约束的持续学习标定接在一起、让激活压缩直接承担抗遗忘,是有辨识度的新组合。
- 实验充分度: ⭐⭐⭐⭐ 四个模型 × 五个微调数据集 + 三个持续学习 benchmark + 真实边缘硬件时延,覆盖面好且有收敛性分析支撑;扣分在缺乏 Transformer/长任务序列验证与若干指标口径不一致。
- 写作质量: ⭐⭐⭐⭐ 阶段划分与理论部分清楚,公式(在缓存文本中)有损坏、表格存在排版疑点,读者需对照原表核对。
- 价值: ⭐⭐⭐⭐ 端侧全量 BP 的激活显存瓶颈是真实且普遍的问题,方法简单、可直接落地、与系统侧方法正交;持续学习精度虽非最优,但记忆开销优势明确,适合作为"用一点精度换大量内存"的工程选项。