预训练大模型上的持续学习主要有三条线: 继续预训练, 在指令与对齐数据上的持续微调, 冻结骨干的参数高效适配 (L2P, O-LoRA, InfLoRA). 另有一类做法不做顺序训练, 直接合并独立微调的模型. 第 1.1 篇第 4.2 节算过显存: 70B 模型仅 BF16 权重就是 140 GB, 混合精度 Adam 全量训练每参数约 16 字节. 资源之外, 大模型上的持续学习还有三点与传统设定不同.
- 起点是一个已经学了大量知识的模型. 传统设定从随机初始化出发, 遗忘的对象是前几个任务; 大模型还可能遗忘预训练阶段获得的通用能力. 评测要覆盖通用能力, 不能只看序列里的任务.
- 任务边界模糊. 继续预训练是连续的语料流, 指令微调的「任务」划分常常是人为的. 很多需要任务边界的方法 (第 2.1 篇的 EWC, SI) 不能直接使用.
- 旧数据通常拿不到. 开源模型一般不公开预训练语料, 回放只能用分布相近的公开数据代替.
后面的讨论按更新范围分三层:继续预训练更新全部参数,数据是无标签语料;指令和任务的持续微调更新全部或部分参数,数据是有标签的指令;参数高效方法冻结骨干,只训练提示或低秩矩阵。三条路线汇合到模型合并与版本管理问题。
1. 继续预训练
学习率. 预训练的学习率通常衰减到峰值的一小部分. 在衰减后的学习率上继续训练, 模型几乎学不动新分布. Gupta et al. (2023) 用 Pythia 410M 研究这个问题: 先在 Pile 上训练 300B token, 再在 SlimPajama 上继续训练 297B token. 学习率先线性升温, 再余弦衰减, 峰值取 , , 三档. 主要发现:
- 重新升温先让 loss 上升. 升温阶段上游 (Pile) 和下游 (SlimPajama) 的 loss 都会先上升. 长期看, 升温后的模型在下游上超过从头训练的模型.
- warmup 长度不重要. 对 297B token 的日程比较 0%, 0.5%, 1%, 2% 四种 warmup 比例, 结果差别很小.
- 峰值决定适应与遗忘. 峰值越高, 下游适应越多, 上游遗忘也越多. 提高峰值会一致地抬高 Pile 上的最终 loss.
- 从最新的 checkpoint 出发最好.
困惑度和 loss 是连续量, 比较时用「降低多少」或比值, 不用百分点. Code Llama (Rozière et al., 2023) 从 Llama 2 出发继续训练, 发现沿用 Llama 2 的原学习率效果最好: 7B 和 13B 为 , 34B 和 70B 为 . 这与微调阶段降学习率的惯例相反. Code Llama 初始阶段训练 500B token, 是 Llama 2 预训练 2T token 的四分之一, 更接近第二次预训练.
第二次预训练改动参数的幅度也接近预训练的量级. DARE 论文 (Yu et al., 2024) 给出了一个可以量化的差别: SFT 前后的参数差 (delta) 通常在 0.002 以内, 而经过继续预训练后可以很快达到 0.03 左右. 这时随机丢掉 delta 的 DARE 不再可用; 只丢掉 10% 的微调后参数 (预训练参数加 delta), 性能就会崩溃到接近零. 继续预训练对参数的改动比微调大一个数量级, 第 4 节的模型合并方法大多以「增量很小」为前提, 不能直接用在继续预训练得到的模型上. 回放与数据配比.
Ibrahim et al. (2024) 用 405M 模型先在 Pile 上训练 300B token, 再分别继续训练 SlimPajama (300B token, 弱分布偏移) 和德语 Common Crawl (200B token, 强分布偏移). 每次继续训练都重置优化器状态. 回放采用算力等价的方式: 回放的旧数据 token 从新数据预算中扣除, 总 token 数不变. 设新数据预算为 个 token, 回放比例为 , 则实际看到的新数据为 , 旧数据为 . 强分布偏移下的最终验证 loss (论文 Table 2):
| 设置 | Pile loss | 德语 loss | 平均 |
|---|---|---|---|
| 无回放 | 3.56 | 1.11 | 2.34 |
| 1% 回放 | 2.83 | 1.12 | 1.97 |
| 5% 回放 | 2.57 | 1.12 | 1.85 |
| 25% 回放 | 2.33 | 1.16 | 1.75 |
| 50% 回放 | 2.24 | 1.22 | 1.73 |
| 并集从头训练 (500B) | 2.26 | 1.25 | 1.75 |
1% 回放就把 Pile loss 从 3.56 降到 2.83, 德语 loss 只从 1.11 升到 1.12. 回放到 25% 时平均 loss 与并集从头训练持平. 弱分布偏移下, 0.5% 回放把 Pile loss 从 2.44 降到 2.27, 5% 回放的平均 loss 为 2.37, 并集从头训练为 2.35. 论文据此给弱偏移选 5% 回放, 强偏移选 25%. 在已有 Pile 模型的基础上, 这样做的额外算力只有从头训练的一半 (弱偏移 300B 对 600B) 或 40% (强偏移 200B 对 500B). 这些数字的前提是回放的确实是原始的 Pile. 用替代语料时效果会打折扣, 需要自己测.
公开的继续预训练配方里也混着旧数据. Code Llama 初始阶段的数据中, 代码占 85%, 与代码相关的自然语言占 8%, 一般自然语言占 7%. 后两部分的作用之一就是回放, 保住自然语言能力. Code Llama - Python 在此基础上再训练 100B token, 配比为 Python 75%, 其他代码 10%, 与代码相关的自然语言 10%, 一般自然语言 5%: 每往专门方向走一步, 前一阶段的数据都以一定比例留在新阶段里. Instruct 阶段又混入 6% 的代码数据和 2% 的自然语言数据作为 rehearsal. 这些比例没有系统的消融, 与 Ibrahim et al. 的「强偏移约 25% 回放」处在同一量级.
回放的反面是新数据取多少. 知识随时间变化时, 继续预训练要处理的是「新事实替换旧事实」, 未变的那部分知识要不要再训一遍, 就是这里的回放问题. Jang et al. (2022) 的 TemporalWiki 比较相邻的英文 Wikipedia 快照, 只取变化的部分作为训练语料 (TWiki-Diffsets), 用对应的 Wikidata 快照构造评测集 (TWiki-Probes), 把事实分为未变和已变两类. 论文报告, 只在差异数据上做持续学习, 困惑度与在整个快照上训练相当或更好, 计算量少 12 倍. 数据规模可以说明这个差距从哪来: 论文用 2021 年 8 月到 12 月的月度快照, 每个 Wikipedia 快照约 630 万篇文章, 46 亿到 47 亿 token; 相邻两月的差分集约 30 万篇文章, 3.5 亿到 3.8 亿 token, 不到完整快照的十分之一. 第 3.2 篇在基准部分给出了探针的构造细节. 目标函数、token 混合与梯度冲突. 继续预训练仍然优化下一个 token 的负对数似然. 设语料域为 , 域采样权重为 , 有效 token 掩码为 , 混合目标可以写成
应对应实际进入损失的 token 比例, 不一定等于文档或样本的抽样比例. 长文档、截断、padding 和损失掩码都会改变有效贡献. 若按样本数混合而不核对有效 token, 标称的 5% 回放可能并不是梯度里的 5%. 算例一: 从 token 预算反推样本数. 一个训练步预算 1,000,000 个有效 token, 回放比例 , 则旧域应提供 50,000 token, 新域提供 950,000 token. 若旧样本平均有 500 个有效 token, 新样本平均有 1,000 个, 这一批约需 100 个旧样本与 950 个新样本. 此时旧样本占样本总数的 , 却只占 token 的 5%. 反过来若机械地抽 5% 旧样本, 旧 token 占比会低于 5%. 所以配比记录至少要同时报告样本数、原始 token、有效 token 与总训练 token. 遗忘也可以从梯度局部解释. 记旧域和新域在当前位置的梯度为 、, 混合梯度为
若 , 沿新域梯度下降会在一阶近似下抬高旧域损失. 新语料很少出现旧域稀有 token 或旧上下文时, 它们没有校正梯度; 与新域共用的词表、注意力和前馈参数却仍被更新, 因而条件分布会漂移. 这比把遗忘描述成「旧知识被删掉」更准确.
取一个二维玩具例子, , . 则 . 时结果为 , 局部冲突仍在; 只有 才变为正. 这个计算只说明回放比例取决于梯度几何, 不能用它推出真实模型需要 37.5% 回放. 同样, 旧域验证 loss 上升能证明分布拟合变差, 不能单独定位哪些事实丢失; loss 不变也不能证明问答、安全或指令遵循没有退化.
1.1. 指令与任务的持续微调
TRACE. Wang et al. (2023) 的 TRACE 是为对齐后的大模型设计的持续学习基准, 由 8 个数据集组成: 领域任务 ScienceQA, FOMC, MeetingBank; 多语言任务 C-STANCE (中文立场检测) 和 20Minuten (德语文本简化); 代码补全 Py150; 数学推理 NumGLUE 的两个子集. 每个任务采样 5000 条, 分类任务按类别均衡. 除了传统的持续学习指标, TRACE 增加了三个指标: General Ability Delta (通用能力的变化), Instruction Following Delta (指令遵循能力的变化), Safety Delta (安全性的变化). 论文的主要发现:
- 在 TRACE 上依次训练后, 通用能力明显下降, 数学和推理最严重. Llama-2-Chat 13B 的 GSM8K 准确率从 28.8% 降到 2%.
- 多语言能力反而普遍提高. Llama-2-Chat 7B 的 TydiQA F1 从 23.47 升到 33.23.
- 全参数训练比 LoRA 更容易拟合目标任务, 通用能力的下降也更明显.
- 指令遵循能力在持续学习后显著下降.
论文还提出 Reasoning-augmented Continual Learning (RCL): 训练时让模型先生成任务分析和推理过程. 论文报告这样做既提高了目标任务的表现, 也更好地保住了模型原有的能力. TRACE 的数据说明, 在大模型上只看序列内任务的平均准确率是不够的. 序列任务都学会了, GSM8K 却从 28.8% 掉到 2%, 这种遗忘只有在序列外的通用基准上才能看到. Continual-T0.
Scialom et al. (2022) 从 T0 3B 出发. T0 已经在 50 个数据集上做过多任务指令微调, 在 12 个未见数据集上有零样本能力. 他们在 T0 上依次学习 8 个新的生成任务 (连同之前的数据集共 70 个), 用回放防止遗忘: 每个旧训练任务取 100,000 条样本, 回放比例 取 0, 0.25%, 1%, 1% 对应每个任务 1,000 条. 结果是在 1% 回放下, 模型几乎保持了旧数据集上的全部表现, 未见数据集上的零样本能力也得以保持. 论文还观察到, 模型能把学过的指令以训练中从未出现的方式组合起来. 论文把成功归因于自监督预训练. 这个结论与 Ibrahim et al. 的继续预训练实验一致: 对一个已经在大量数据上训练过的模型, 很少的回放就够了. 微调与安全对齐. Qi et al. (2023) 研究了微调对安全对齐的影响, 把风险分为三级:
- 显式有害样本: 用 10 条对抗设计的有害样本微调 GPT-3.5 Turbo, 通过 OpenAI 的接口花费不到 0.20 美元, 模型就会响应几乎所有有害指令.
- 身份转换数据: 微调数据不含有害内容, 但让模型总以肯定的前缀开头回答.
- 良性数据: 只用 Alpaca, Dolly, LLaVA-Visual-Instruct 这类常用的良性数据集微调, 安全对齐也会被削弱, 程度较轻.
论文认为第三种情况可能来自对初始对齐的灾难性遗忘, 也可能来自有用性与无害性之间的固有张力. 从持续学习的角度看, 安全对齐是模型的一项「旧能力」, 每次微调后都应当和其他能力一起评测. TRACE 的 Safety Delta 就是为此设计的. SFT 与继续预训练的边界.
两者都可能更新同一组参数, 两者的监督信号不同. 继续预训练对完整文档做因果语言建模, 主要改变领域词汇、事实、文体与条件分布; SFT 把输入组织成指令和回答, 通常只让回答 token 计入损失, 主要学习「收到这种请求时怎样作答」. 因而领域文档上的 loss 下降不能直接推出指令遵循提高, SFT 基准提高也不能证明模型已系统吸收领域知识.
常见流水线是先用领域原文继续预训练, 再用少量领域指令做 SFT. 前一阶段解决覆盖面, 后一阶段建立调用知识的交互格式. 若只有结构化问答而没有大规模原文, 任务更接近 SFT; 若训练数据是新闻、论文或代码仓库的连续文本, 即使最终服务某个任务, 仍属于继续预训练. 两阶段都可能损害旧能力和安全对齐, 不能因为第二阶段数据「良性」就省掉安全回归测试. 比较两者时还要固定 tokenizer、模板、有效 token 数与更新参数范围, 否则无法把收益归因于目标函数本身.
1.2. 冻结骨干的参数高效方法
记号与思路. LoRA (Hu et al., 2022) 冻结预训练权重 , 只训练一个低秩增量:
本文统一用这套记号: 是降维矩阵 (把输入从 维投到 维), 是升维矩阵. 注意 O-LoRA 和 InfLoRA 两篇论文的记号与此不同, 下文会逐一对应. 每个任务训练一组独立的 LoRA 或提示, 推理时按任务切换, 就是第 2.3 篇参数隔离在大模型上的形式. 每个任务的增量只有 个参数, 存储不是问题. 问题回到两处: 推理阶段如何知道用哪一组 (路由), 以及如果多组同时生效, 它们之间如何不干扰. L2P 处理前者, O-LoRA 和 InfLoRA 处理后者. L2P: 提示池. Wang et al. (2022) 的 Learning to Prompt 冻结 ImageNet 预训练的 ViT-B/16, 维护一个提示池 , 每个提示 配一个可学习的键 . 对输入 , 先用冻结的 ViT 算出查询特征 (取 [CLS] 的输出), 再按匹配函数 (余弦距离) 选出最近的 个键:
对应的 个提示拼在输入嵌入前面, 送入 ViT, 取提示位置输出的平均做分类. 训练目标是
第一项是分类损失, 是分类头; 第二项把被选中的键拉向查询特征, 使相似的输入选中相同的提示. 论文还可以加一个选择频率的惩罚, 让不同任务倾向于使用不同的提示. L2P 不需要任务标识, 路由由键和查询的匹配决定. Split CIFAR-100 (10 个任务, 每个任务 10 类, Class-IL) 上取 , , , 新增参数 46,080 个, 约为骨干的 0.05%. 论文 Table 1 的结果 (平均准确率 / 遗忘, %):
| 方法 | 缓冲区 | 平均准确率 | 遗忘 |
|---|---|---|---|
| FT-seq-frozen | 0 | 17.72 | 59.09 |
| FT-seq | 0 | 33.61 | 86.87 |
| EWC | 0 | 47.01 | 33.27 |
| LwF | 0 | 60.69 | 27.77 |
| L2P | 0 | 83.83 | 7.63 |
| ER | 每类 10 | 67.87 | - |
| DER++ | 每类 10 | 61.06 | - |
| L2P-R | 每类 10 | 84.21 | - |
| ER | 每类 50 | 82.53 | - |
| DER++ | 每类 50 | 83.94 | - |
| L2P-R | 每类 50 | 86.31 | 5.83 |
| 上界 (联合训练) | - | 90.85 | - |
论文称对比方法在同一环境下实现. 不存样本的 L2P 与每类存 50 个样本的 ER 相当. 5-datasets 基准上 L2P 为 81.14%. 在 CORe50 的 Domain-IL 设定下, 不存样本的 L2P 为 78.33%, 低于每类存 50 个样本的 ER (80.10%), 上界为 82.15%; 在类别分布随时间平滑变化的 Gaussian scheduled CIFAR-100 (任务无关设定) 上, L2P 为 88.34%, 高于同设定下存样本的 ER (82.63%). O-LoRA. Wang et al. (2023) 的 O-LoRA 为第 个任务新建一组 LoRA, 之前各组冻结. 论文的 LoRA 记号是 , 其中 是升维的一侧, 对应式 (1) 里的 . 论文假设 LoRA 的列空间能刻画任务的梯度子空间, 要求新旧任务的子空间正交:
用式 (1) 的记号, 就是 . 训练目标在任务损失上加正交惩罚:
LoRA 只加在注意力的 和 上. 推理阶段所有 LoRA 组同时生效, 不需要任务标识. 实验用 T5-large, 两个基准: 标准 CL 基准 (AG News, Amazon, Yelp, DBpedia, Yahoo 五个文本分类任务, 3 种顺序) 和 15 任务的长序列 (再加 GLUE 的 4 个, SuperGLUE 的 5 个和 IMDB, 每个任务 1000 条训练样本), 结果取 3 次运行均值. 论文 Table 2 的平均准确率 (%):
| 方法 | 标准基准 (3 种顺序均值) | 15 任务 (3 种顺序均值) |
|---|---|---|
| SeqFT (顺序全量微调) | 28.5 | 7.4 |
| SeqLoRA (一组 LoRA 顺序训练) | 43.7 | 1.6 |
| IncLoRA (每个任务新增 LoRA, 无约束) | 66.4 | 61.2 |
| Replay | 57.8 | 54.2 |
| EWC | 50.3 | 45.1 |
| LwF | 52.3 | 46.9 |
| L2P | 60.7 | 56.1 |
| LFPT5 | 72.7 | 69.2 |
| O-LoRA | 75.8 | 69.6 |
| ProgPrompt | 75.1 | 77.9 |
| PerTaskFT (每个任务单独模型) | 70.0 | 78.1 |
| MTL (多任务联合, 上界) | 80.0 | 76.5 |
IncLoRA 与 O-LoRA 的差距 (标准基准 9.4 个百分点, 15 任务 8.4 个百分点) 就是式 (4) 正交约束的贡献. ProgPrompt 在 15 任务上更高, 但它为每个任务存一个提示, 推理时用任务标识选择, 与 PerTaskFT 一样依赖任务标识. InfLoRA. Liang & Li (2024) 的 InfLoRA 全称 Interference-Free Low-Rank Adaptation. 它的记号是 , 其中 是降维矩阵, 是升维矩阵, 对应式 (1) 的 和 .
1.3. InfLoRA 的无干扰子空间
InfLoRA 与 LoRA 的区别在于降维矩阵不训练. 学第 个任务前, 先设计好 并冻结, 只训练 (初始化为零). 论文证明, 只训练 等价于在 的行空间 内微调预训练权重. 只要让这个子空间与旧任务的梯度正交, 新任务的更新就不会干扰旧任务. 这个等价关系可以直接推出来. 层的输出为 , 由链式法则, 的梯度为
学习率为 时 走一步, 等效权重的…10237 tokens truncated…二阶矩、全部清零以及短暂重热身. 为了分离状态影响, 五组实验应从同一参数 checkpoint 出发, 看到相同的批次顺序, 并按实际参数位移而非训练步数对齐. 若清零状态组在相同位移下仍更快遗忘, 原因…2 tokens truncated… tokens truncated…能帮助模型离开狭窄解, 但会让稀有旧域样本的影响波动很大; 大 batch 使混合比例更稳定, 却可能让每一步都呈现相似的平均方向. 若总 token 固定而 batch 扩大, 更新次数随之减少, 优化轨迹不可直接相比. 应至少给出每次更新中新旧域样本数量的分布, 并检查某些 batch 是否完全没有回放数据. 分层组批可保证每步都有旧域证据, 但它改变了自然采样的协方差结构; 随机混合更忠于语料分布, 却可能连续多步只见新域. 两种组批方式需要单独做消融.
参数高效方法的比较必须先对齐可训练容量. LoRA 的 rank 从 8 增到 64, 可训练参数、表达子空间和优化难度都改变; adapter 的瓶颈宽度、插入层数与非线性同样决定容量; 软提示长度则影响可用的连续控制向量数量. 只写「LoRA 对 adapter」没有意义. 可以固定总可训练参数, 再比较不同放置位置; 也可以固定放置位置, 扫描容量曲线. 前者回答哪种结构更会利用预算, 后者回答各方法随预算如何扩展. 若某方法只在参数更多时占优, 结论应归因于容量, 而非名称.
LoRA 中 , rank 给出代数上限, 实际有效秩还取决于奇异值谱. 两个 rank 都是 64 的模块, 一个可能只有前六个奇异值显著, 另一个则均匀使用几十个方向. 训练后应报告奇异值累计能量、稳定秩和不同层的谱形状. 若不断到来的任务把能量挤进少数方向, 后续更新更容易发生干扰; 若强制正交使每个任务占据独立方向, 容量会随任务数快速耗尽. 正交约束的价值不能只看当前任务保持率, 还要观察第十个、第二十个任务到来时是否已经没有足够的新方向.
低秩模块放在哪一层往往比 rank 本身更关键. 注意力投影影响信息路由, MLP 投影影响特征变换, embedding 与输出头直接牵涉词形和词频. 领域术语主要变化时, 靠近输入与输出的层可能更敏感; 需要新推理过程时, 中高层的注意力与 MLP 更重要. 可以用逐层冻结、逐层单独注入和成组注入来估计边际贡献. 若只在输出投影训练就能提升闭卷事实题, 却不能改善改写与组合题, 说明模块可能在调答案偏置; 若中层模块能在多种表达下稳定提升, 更像是形成了可复用表征.
LoRA 的缩放系数与初始化也会改变比较. 由于 , 矩阵分解存在尺度不唯一, 但优化器对两个因子的更新并不尺度不变. 一个因子零初始化、另一个随机初始化可让初始函数保持不变, 却使第一步只有一个因子获得有效梯度. 持续任务中若每次新建模块, 早期学习速度会被这种不对称影响; 若复用旧模块, 初始化问题又变成旧方向偏置. 验收应记录因子初始化、缩放规则、是否合并进底座和合并后的数值精度, 避免把实现细节造成的差异解释成持续学习规律.
adapter 的瓶颈不是免费的隔离层. 串行 adapter 改变每层残差路径, 即使底座冻结, 也会让所有输入经过新增变换; 并行 adapter 将增量加到原输出, 关闭模块时更容易恢复底座. 多任务共享同一个 adapter 会发生参数干扰, 为每个任务单独保存又需要路由器识别输入属于哪个域. 路由错误时, 模块本身再优秀也无法使用. 应分别报告理想路由、学习路由和无路由混合三种结果, 并给出错路由代价矩阵: 把法律请求送到医学模块、把通用对话送到代码模块, 各自损失多少. 平均路由准确率无法显示少数高风险错配.
软提示与前缀方法把更新放入输入侧, 参数量小, 却会占用上下文或注意力缓存. 提示长度为 时, 每层前缀键值会增加与 成正比的缓存和注意力计算. 训练比较若忽略这部分推理成本, 会得到不完整的资源前沿. 更重要的是, 提示依赖底座对提示向量的解释方式; 底座升级后, 即使隐藏维度没有改变, 同一向量也可能触发不同特征. 可用固定探针输入比较升级前后的中间激活、输出分布与注意力模式, 再决定是否只做线性映射、重新蒸馏提示, 或彻底重训.
模块迁移应以功能等价为目标, 不能只最小化参数距离. 设旧底座与模块组成教师 , 新底座与待迁移模块组成学生 . 在代表性输入 上, 可以联合匹配输出分布、选定层表征和行为约束. 输出蒸馏保留可观察功能, 表征对齐帮助重建接口, 行为约束防止学生复制教师的错误. 数据必须覆盖模块擅长区、边界区和普通输入; 若只采擅长区, 迁移后可能对所有请求都过度调用专项行为. 还要保留一组教师本来不会的题, 确认学生的新增能力来自新底座, 迁移目标没有把它压回旧水平.
底座升级的四格实验可以进一步拆出责任. 旧底座加旧模块给出历史系统, 旧底座加新模块估计模块训练收益, 新底座加旧模块测接口漂移, 新底座加新模块给出最终系统. 若第四格优于第一格而第三格严重下降, 说明新模块确实修复了接口; 若第三格已经很好, 重新训练模块可能没有必要; 若第二格也下降, 则训练数据或模块目标发生了问题. 对每项能力计算四格差值, 还能区分底座主效应、模块主效应与二者交互项, 不必用一句「升级后效果更好」掩盖来源.
密封测试集与合并系数的选择过程保持隔离. 在开发集扫描 , 找到多个任务加权分数最高的点, 再在同一批题上报告结果, 会把测试信息泄漏到配方. 数据预先分为合并开发集、门槛验证集和密封测试集. 开发集用于选系数与裁剪率, 验证集只判断是否越过接受门槛, 测试集在配方冻结后打开一次. 若任务很少而无法再切分, 可以使用嵌套交叉验证: 外层留出任务或数据切片, 内层选择合并参数, 汇总外层结果. 所有尝试次数也要记录, 因为扫描一千组系数与只试十组具有不同的过拟合机会.
任务向量合并还受底座一致性限制. 两个模型即使架构相同, 只要起始 checkpoint、词表顺序或权重重参数化不同, 坐标相加就可能失效. 合并前要校验每个张量的来源哈希、shape、参数名与 tokenizer; 对采用旋转或置换等价的网络, 必要时先做神经元匹配. 模型输出相近并不意味着参数坐标天然对齐. 尤其当一个分支经历全量持续预训练, 另一个只做轻量 SFT, 二者位移尺度差距很大, 直接平均容易让大位移支配. 按整体范数归一化也可能放大原本微弱但噪声很高的分支, 因而需要层级尺度与功能验证共同决定权重.
合并后的校准变化常被准确率遮住. 分类或选择题准确率相同, 置信度可能显著变高; 生成任务的答案仍对, 拒答边界却可能移动. 需要检查负对数似然、期望校准误差、选择性回答曲线和安全拒答率. 若合并提升了新域正确率, 却让错误答案更自信, 部署时的风险可能上升. 温度缩放只能修正整体置信度, 无法恢复被破坏的知识, 因此校准后还要看分组误差: 旧域、新域、冲突事实和分布外输入是否得到一致改善.
知识内化与检索增强应按信息生命周期分工. 稳定、频繁调用且允许写入参数的规律适合内化; 变化快、需要出处或有删除要求的事实更适合外部检索; 介于两者之间的能力可以先由模块承载, 积累足够证据后再蒸馏进底座. 一个简单决策量是单位请求的摊销成本: 参数更新有一次性训练与验证成本, 检索有持续的索引、查询和上下文成本, 模块还有版本与路由成本. 成本之外还要加入错误恢复时间. 外部文档写错可以替换索引, 合并进参数的错误往往需要反向编辑或重新训练, 这一差异在高变动领域比单次推理费用更重要.
闭卷测试也不能直接证明知识已经进入底座. 训练资料可能残留在提示模板、缓存、工具返回或评测预处理里. 应在无网络、无索引、清空会话状态的环境运行, 并检查请求日志中没有隐藏上下文. 随后做表达变换: 实体别名、问题倒置、多跳组合、否定条件和不同语言. 若模型只在原句附近成功, 得到的是表面记忆; 能把事实用于新的约束推理, 才说明知识具有一定可调用性. 即便如此, 也只能说在测试分布内观察到内化迹象, 不能推出任意场景都会稳定调用.
冲突知识需要测概率质量如何迁移. 对新旧两个答案分别计算条件概率或成对偏好, 在训练过程中观察质量从旧答案向新答案转移的曲线. 理想更新不会把与该实体相关的全部答案一起扰动. 可以加入邻近实体、同关系实体和同词形实体作为控制组, 估计影响半径. 如果只更新「甲公司的负责人」, 却连其他公司的负责人问题都发生系统偏移, 说明模型学到了过宽的词法关联. 对时间变化事实, 还应允许旧答案在历史条件下保留较高概率, 这比无条件压低旧答案更符合版本化知识.
删除与遗忘请求要区分「不再输出」和「内部不可恢复」. 通过提示约束压制答案, 只能改变表面行为; 移除 adapter 只删除模块中的增量; 从检索库删除文档也不影响已经写入底座的内容. 若目标是参数层遗忘, 应设计成员推断、提示绕过、改写查询和相关表征探针, 并与从未见过该数据的模型比较. 严格证明某条信息完全不存在通常做不到, 报告应改为在给定攻击集合与置信水平下没有检测到显著残留, 同时明确攻击能力边界.
统计判定要以独立训练运行为单位. 一次训练里的一万道题不是一万个独立的训练样本, 它们共享同一个 checkpoint. 题级 bootstrap 可估计评测抽样误差, 却不能代替跨随机种子的训练方差. 至少应同时给出种子间均值与区间、每个种子内部的题级区间, 并使用配对设计: 不同方法尽量共享初始模型、数据顺序和评测样本. 配对差值通常比两个独立均值更灵敏, 也能减少某个种子本来就容易的影响. 任务顺序是研究对象时, 则应把顺序作为更高层随机因素, 不能把同一顺序下的多个 checkpoint 当成独立重复.
多指标门槛还会带来多重选择问题. 若研究者查看几十个旧域、新域和安全指标, 再挑出有利的几个, 偶然波动很容易被包装成提升. 实验前应指定主指标、关键风险指标和探索指标. 主指标决定收益是否成立, 风险指标拥有否决权, 探索指标用于解释机制. 对大量子任务可报告经过校正的区间, 或先按能力族聚合再检验. 统计程序最终要让「接受该更新」对应一个事先可执行的判据, 形式显著却无法支持决策的结果没有多少价值.
可以把最终门槛写成可计算规则. 比如新域主指标相对基线至少提升三点, 百分之九十五置信下界仍大于一点; 旧域宏平均下降不超过一点, 任何高风险子集下降不超过两点; 安全违规率的置信上界不得高于既定阈值; 跨三个训练种子均保持方向一致. 候选若只满足平均条件而某一高风险域越界, 直接拒绝; 若区间过宽, 增加种子或样本, 而非取最有利的点估计. 门槛数值由业务风险决定, 但确定以后不能因某次候选「看起来很有希望」临时放宽.
回滚演练要在发布前真的执行一次. 全量更新需要恢复旧 checkpoint、优化器无关的推理配置、tokenizer 与服务路由; PEFT 更新要验证卸载模块后输出确实回到底座基线; 模型合并要能重新定位所有源向量和系数; 检索更新要恢复索引快照与文档权限. 回滚后的系统用固定金丝雀请求比对输出哈希或容差范围. 若参数已经合并而源增量没有保留, 所谓回滚只能加载整份旧模型, 存储与切换时间需要计入恢复目标.
每个发布候选应留下足以复算结论的最小档案: 基础模型与 tokenizer 哈希, 训练代码版本, 数据清单与许可状态, 各来源 token 和文档计数, 去重规则, 采样日程, 学习率与优化器状态处理, 随机种子, PEFT 插入位置与容量, 合并公式与系数搜索范围, 逐 checkpoint 指标, 失败运行, 统计脚本和回滚结果. 它让下一轮更新能够回答一个很具体的问题: 能力变化究竟来自新数据、训练路径、模块容量、合并选择还是评测波动. 持续学习的难处就在这里——每一轮都继承此前的选择; 只有证据链也随版本一起保存, 后来的改进才不会建立在无法解释的偶然结果上.
遗忘还应沿训练深度拆开观察. 对同一批旧域探针, 记录各层隐藏状态与原模型的中心核对齐度、线性探针可分性和最终输出变化. 底层表征相近而输出变差, 干扰可能集中在后部读出与决策边界; 中层已经明显漂移, 再靠输出校准通常救不回来. 这类诊断要使用与训练目标无关的探针, 并设置随机投影和未更新模型作为参照. 表征指标本身不能替代行为结果, 但能指导下一轮将回放放到哪些层、是否冻结 embedding、是否给某些投影单独降低学习率.
梯度冲突也可以在训练前小规模估计. 从新域与若干旧域各抽一批样本, 在相同参数点计算梯度余弦与范数比. 余弦长期为负的旧域是重点回放对象; 余弦接近零但范数远小于新域时, 它虽然方向不冲突, 仍会被新域更新淹没. 只看全模型余弦会抵消层间差异, 因此还要按注意力、MLP、归一化与输出头分组. 若冲突主要集中在少数层, 全局降低学习率会牺牲新域学习速度, 分层学习率、局部冻结或在这些层增加旧域批次更有针对性. 训练后的实际遗忘若与预估冲突完全无关, 说明一阶梯度几何不足以解释路径, 需要检查曲率与数据顺序.
曲率影响可以用局部损失切片理解. 沿新域更新方向 和旧域敏感方向 构造二维平面 , 测量新旧损失随 的变化. 若新域下降方向立即让旧域损失陡升, 两个目标在当前位置存在尖锐权衡; 若附近有一条弯曲低损路径, 优化器与日程可能尚未找到它. 这种切片只覆盖局部平面, 不能证明高维空间没有更好的路径, 却能比较不同 replay 比例是否把模型带入更平坦的交汇区. 与参数范数相比, 损失切片直接展示位移的功能代价.
对参数模块还要测容量饱和的早期信号. 每轮任务后计算新增方向相对既有子空间的投影比例、模块输出范数和有效秩. 新方向几乎全部落入旧子空间, 同时新任务损失降不下去, 说明当前容量不够; 有效秩持续增长而保持率稳定, 说明模块仍在利用空余方向; 输出范数不断增大但有效秩不变, 则可能只是用幅度覆盖旧模块. 此时盲目增加训练步数会强化竞争, 更合理的选择是扩 rank、拆分路由模块或把稳定能力蒸馏回底座后释放模块容量.
线上灰度可以验证离线门槛没有覆盖的分布, 但灰度指标也需要因果对照. 将用户或请求稳定随机到旧版与候选版, 保持检索索引、解码参数和安全策略一致; 对长会话按会话而非单轮请求分桶, 防止同一上下文跨版本. 观察人工纠错率、任务完成率、拒答变化和严重事件, 同时按新域、旧域与未知域分层. 若候选版触发更多工具调用, 延迟和成功率变化可能来自工具链, 应进一步做模型版本与工具开关的二乘二对照. 灰度发现越界就按预演路径回滚, 而非继续收集到结果显著.
一轮更新结束后还应保留「没有采用的方案」. 失败方案记录预算、关键超参、失败指标和原因判断, 后续数据分布改变时可以重新检验, 也能避免团队反复踩同一个坑. 原因判断要和观察分开: 「旧域下降三点」是结果, 「回放不足」只是待验证解释. 下一轮通过提高回放、保持其他条件不变来验证; 若下降仍在, 再检查学习率、优化器状态和容量冲突. 这种逐轮排除让持续预训练从一次配方搜索变成可积累的研究过程.
参考文献
- Gupta, K., et al. (2023). Continual Pre-Training of Large Language Models: How to (re)warm your model?. arXiv:2308.04014.
- Ibrahim, A., et al. (2024). Simple and Scalable Strategies to Continually Pre-train Large Language Models. arXiv:2403.08763.
- Rozière, B., et al. (2023). Code Llama: Open Foundation Models for Code. arXiv:2308.12950.
- Jang, J., et al. (2022). TemporalWiki: A Lifelong Benchmark for Training and Evaluating Ever-Evolving Language Models. EMNLP 2022.
- Wang, X., et al. (2023). TRACE: A Comprehensive Benchmark for Continual Learning in Large Language Models. arXiv:2310.06762.
- Scialom, T., Chakrabarty, T., & Muresan, S. (2022). Fine-tuned Language Models are Continual Learners. EMNLP 2022.
- Qi, X., et al. (2023). Fine-tuning Aligned Language Models Compromises Safety, Even When Users Do Not Intend To!. ICLR 2024.
- Hu, E. J., et al. (2022). LoRA: Low-Rank Adaptation of Large Language Models. ICLR 2022.
- Wang, Z., et al. (2022). Learning to Prompt for Continual Learning. CVPR 2022.
- Wang, X., et al. (2023). Orthogonal Subspace Learning for Language Model Continual Learning. Findings of EMNLP 2023.
- Liang, Y.-S., & Li, W.-J. (2024). InfLoRA: Interference-Free Low-Rank Adaptation for Continual Learning. CVPR 2024.
- Ilharco, G., et al. (2023). Editing Models with Task Arithmetic. ICLR 2023.
- Yadav, P., Tam, D., Choshen, L., Raffel, C., & Bansal, M. (2023). TIES-Merging: Resolving Interference When Merging Models. NeurIPS 2023.
- Yu, L., Yu, B., Yu, H., Huang, F., & Li, Y. (2024). Language Models are Super Mario: Absorbing Abilities from Homologous Models as a Free Lunch. ICML 2024.