正则化要求一组共享参数同时服务新旧任务, 回放让它反复看见新旧数据. 参数隔离选择更直接的处理: 不让新任务更新旧任务依赖的那部分参数. 如果容量允许增长, 还可以为新任务增加模块. 这确实减少了梯度干扰, 但问题没有消失, 而是移动到三个位置: 哪些参数分给谁、推理时怎样找到正确模块、容量耗尽后怎样合并或淘汰.
用二值掩码 表示任务 使用的参数, 预测写成 . 对旧任务冻结 覆盖的位置, 新任务只在剩余参数上学习. 若任务 ID 在推理时可用, 可以直接选择;没有任务 ID 时, 还要学习路由器 , 整体错误分解成模块能力与路由错误. 模块保存完好不等于系统记得旧任务;路由器找不到它时, 行为上仍然是遗忘.
1. 固定容量如何分配
PackNet 先训练一个任务, 剪掉较小权重, 将保留权重冻结, 空余位置交给后续任务. 它在固定网络内实现近乎无干扰的任务参数, 代价是可用容量单调减少, 任务顺序影响谁先占据高质量连接. 剪枝比例太保守, 后续任务无参数可用;太激进, 当前任务立即损失. 这条路线需要同时画准确率与剩余容量曲线.
Piggyback、HAT 和 supermask 类方法学习任务特定掩码. 共享权重减少存储, 每个任务仍需保存掩码;连续松弛与阈值化又引入离散优化误差. 若每个任务独立学习掩码而不限制重叠, 共享可以产生迁移, 也可能在底座继续变化时破坏旧模块. 冻结底座使接口稳定, 同时限制新任务能学到的表示.
低秩 adapter 与 prompt pool 把隔离从单个连接提升到模块. 共享骨干提供通用表征, 每项任务只增加少量参数. 这更适合大模型, 因为复制完整底座代价太高. 不过「参数少」不等于长期容量有界: 用户、领域或任务持续增长时, adapter 数量仍线性增加;加载、缓存和版本管理也成为真实成本.
2. 容量增长解决什么又带来什么
Progressive Networks 为每个任务增加一列网络, 横向连接复用旧特征. 旧列冻结, 所以功能遗忘很小, 新任务也能使用历史表示. 代价是参数和计算随任务数增长, 推理还需要任务标识. 动态扩展方法试图只在现有容量不足时增加神经元、专家或层, 因而需要一个可靠的不足判据.
MoE 提供可复用专家池, 路由器按输入选择少数专家. 与一任务一模块相比, 多个任务可以组合已有专家, 容量增长不必严格线性. 但共享专家重新训练会影响所有调用者, 新专家又可能因路由初期没有流量而学不到. 负载均衡、专家冻结和路由回放需要共同设计.
结构增长还产生接口漂移. 新模块依赖底座表示, 底座升级后输入分布改变, 旧 adapter 即使参数没动也可能失效. 完全冻结底座避免漂移, 却放弃长期改善共享表征;允许底座更新则需要兼容性训练、旧模块回放或版本化底座. 这与软件模块相似: 局部代码不变, 上游接口改变也会破坏行为.
3. 从 task ID 走向输入条件路由
Task-IL 把路由答案作为外部信息, 因而特别适合测模块自身能否保持. 开放流里需要从输入推断路由. 可以用类别原型、任务描述 embedding、可学习 gating 或不确定性选择模块. 路由器本身也在持续学习: 新任务输入会改变决策边界, 旧查询若不回放, 正确模块逐渐失去入口.
评测时必须同时给 oracle routing 与实际 routing. 前者显示模块能力, 后者显示端到端系统. 两者差距随任务数扩大, 说明瓶颈在发现而不是存储. 逐模块替换、混淆矩阵和路由置信度能够定位哪些任务相互抢占. 只报告最终准确率会把路由错误误判成模块遗忘.
组合路由比单选更灵活. 一个新任务可能同时需要代码、数学和某个领域知识, 由多个 adapter 或专家组合. 模块分别训练时, 组合后激活尺度、归一化和低秩方向可能冲突. 组合能力需要单独训练或通过约束维持接口, 不能从单模块成绩直接推出.
4. 合并、回收与安全边界
容量有限时, 相似模块可以合并, 低价值模块需要淘汰. 参数平均只在线性连接模式成立时可靠;两个模块在各自任务上都好, 中间点可能落在高损失区. 权重匹配、低损失路径或蒸馏到新模块能够减少损失, 仍需同时验证所有依赖任务. 淘汰价值不仅是调用频率, 还包括它被多少组合使用、恢复成本以及数据是否仍可获得.
路由同时是权限边界. 用户私有 adapter 不应被其他用户调用, 不可信输入也不应更新全局专家. 模块来源、训练数据和允许调用范围需要进入路由条件. 这部分与通用服务治理不同, 它直接决定哪段经验能修改哪组持久参数, 属于持续学习机制的一部分.
参数隔离与动态架构 会进一步推导 PackNet 容量、门控退火和输入条件路由. 选择结构路线时应同时回答: 任务 ID 是否可用, 容量能否增长, 底座是否继续更新, 模块怎样组合, 路由怎样回放, 资源耗尽后怎样回收. 少任何一项, 「无遗忘」都可能只是把困难移出了论文的指标.
5. 共享与隔离应在什么粒度发生
整网隔离最稳定也最昂贵, 单参数掩码最细却带来稀疏执行和索引成本. 层、adapter、attention head 与专家是常见中间粒度. 粒度越大, 路由简单、复用较少;粒度越小, 组合灵活、冲突与硬件开销更难控制. 方法应按任务共享结构选择粒度, 不能只按参数百分比比较.
模块之间还可能存在依赖. 新 adapter 建立在某个旧专家输出上, 淘汰旧模块会让多项能力同时失效. 单独统计每个模块调用频率看不到这种组合中心性. 通过反事实关闭、依赖图和恢复成本估计价值, 才能在容量满时作出合理回收. 这种依赖也要求版本化接口: 输入维度相同不代表表示语义兼容.
结构路线最有说服力的证据来自真实路由下保持的端到端行为;旧模块权重不变只证明参数没有被覆盖. 评测应随任务数画累计容量、路由准确率、oracle 与实际性能差距以及加载延迟. 若性能依靠持续增长才不忘, 它解决的是干扰而非有限资源下的终身学习;若固定容量长期可用, 还要说明模块复用和淘汰为何没有损坏旧能力.
参考文献
- Rusu, A. A. et al. (2016). Progressive Neural Networks.
- Mallya, A., & Lazebnik, S. (2018). PackNet.
- Serra, J. et al. (2018). Overcoming Catastrophic Forgetting with Hard Attention to the Task.
- Mallya, A. et al. (2018). Piggyback.