我将结合LoRA微调背景,对大模型训练与微调 中四个截然不同的核心课题:防遗忘(正则化) 、模型压缩(迁移) 、优化策略(调参) 和 **课程安排(数据调度)**逐一进行技术拆解,最后再串联它们的协同关系。
1. 弹性权重合并(EWC,Elastic Weight Consolidation)
解决痛点 :灾难性遗忘(Catastrophic Forgetting)。当模型学完任务A再去学任务B时,更新全量参数会把任务A的"记忆"覆盖掉。
核心数学机制 :
EWC不冻结参数,而是给每个参数加一根"松紧带"。它通过Fisher信息矩阵(对角近似)来评估每个权重对旧任务(任务A)的"重要程度"。
-
如果某个权重对旧任务极其重要(Fisher值大),更新它时,损失函数会施加极大的二次惩罚项。
-
如果权重不重要,则可以随意更新。
损失函数变为:
L(θ)=LB(θ)+λ2∑iFi(θi−θA∗)2L(θ)=LB(θ)+2λi∑Fi(θi−θA∗)2
(其中 FiFi 是重要性,θA∗θA∗ 是旧任务的最优点,λλ 是正则化强度)
与LoRA的区别 :LoRA是"完全不碰旧权重(冻结)",属于硬隔离;EWC是"允许动旧权重,但微调时给关键参数上枷锁",属于软约束。EWC更适合**持续学习(Continual Learning)**场景,但计算Fisher矩阵在百亿参数模型上极其昂贵,因此在LLM微调中,EWC使用率远低于LoRA。
2. 知识蒸馏(KD,Knowledge Distillation)
解决痛点 :模型太大,推理太慢,或者想把"大模型(教师)的泛化能力"迁移到"小模型(学生)"上。
核心机制 :
传统的训练是让模型学硬标签(Hard Labels) (即"正确答案是猫")。知识蒸馏的关键在于引入温度系数(Temperature, TT) ,让学生模型去模仿教师模型输出的软概率分布(Soft Labels)。
-
教师模型输出的logits除以温度 TT 后做Softmax,概率分布变得"平滑"(例如,猫的概率0.9,狗0.08,汽车0.02)。这个平滑分布包含了教师对"猫和狗很像"的暗知识(Dark Knowledge)。
-
学生模型不仅要拟合真实标签(硬损失),还要拟合教师输出的软分布(蒸馏损失,通常用KL散度)。
在LLM中的高阶玩法:
-
自蒸馏(Self-Distillation):用自身在充足数据上的输出,去微调自身在稀疏数据上的表现。
-
上下文蒸馏:把复杂的CoT(思维链)推理过程,蒸馏为直接输出的最终答案,提升推理速度。
3. 增大学习率(Increasing Learning Rate)
重要前提 :在LLM领域,"无脑增大学习率"通常是危险的 ,但它的确是一种关键的策略性操作,主要出现在以下三个特定阶段:
-
① Warm-up(预热阶段) :这是LLM训练的必修课 。在训练初期(前几百步),学习率从 0 线性增大 到目标值(如 2e-4)。因为初期模型梯度方差极大,如果直接用大学习率,会导致Adam优化器极不稳定。所以这里的"增大"是为了稳定过渡。
-
② 循环退火(Cyclical / Cosine Restart) :如SGDR算法,训练一段时间后学习率衰减到极小值,然后瞬间跳回较大的学习率。目的是让模型跳出当前的"尖锐局部极小值",探索更"平坦"的损失平面(平坦区域泛化能力更强)。
-
③ 逃离瓶颈期:当Loss长期不动时,手动短时间增大学习率,利用梯度冲击打破优化僵局。
绝对禁忌 :在LoRA微调 后期,如果你的 loss 震荡剧烈,绝对不要增大学习率,否则 AA 和 BB 矩阵会瞬间梯度爆炸,破坏基座能力。
4. 渐进式学习(Progressive Learning)
解决痛点 :模型一次性接触复杂数据容易不收敛或过度拟合 。核心思想是课程学习(Curriculum Learning),即由易到难、由简到繁。
在LLM中的典型落地场景:
-
数据维度(长度渐进) :先用**短文本(如 512 tokens)**训练模型学习句法和局部语义,待收敛后,再逐步增加上下文长度(如 1024 -> 2048 -> 4096)训练长程依赖。Google的Transformer早期训练常用此招,可节省30%训练时间。
-
任务维度(难度渐进) :先让模型做选择题(判别式) ,再做简答题(生成式);或者先学小学数学,再学微积分。
-
模型维度(深度/宽度渐进) :先训练一个12层的小Transformer作为"胚胎",然后将权重复制并堆叠(如把第ii层参数复制给第i+6i+6层),再继续训练扩展成24层大模型。MSRA的StackBERT就是典型代表。
5. 四者横向对比与组合应用
| 维度 | 弹性权重合并 (EWC) | 知识蒸馏 (KD) | 增大学习率 (LR) | 渐进式学习 |
|---|---|---|---|---|
| 本质归属 | 正则化 / 约束算法 | 迁移学习 / 压缩算法 | 优化器超参调度 | 数据 / 架构调度策略 |
| 操作对象 | 模型的全量权重 | 模型的输出Logits | 训练的梯度步长 | 训练的输入批次 |
| 主要目标 | 抵抗灾难性遗忘 | 提升小模型能力 / 加速推理 | 逃离局部极小 / 启动训练 | 稳定训练 / 加速收敛 |
| 是否改变模型结构 | 否 | 否(只改变输出目标) | 否 | 可能(如逐层增加深度) |
| 与LoRA的兼容性 | 极差(EWC计算量巨大,很少和LoRA一起用) | 极好(可在微调时用基座做教师,蒸馏LoRA学生) | 一般(仅用Warm-up增大,后期必须衰减) | 极好(LoRA微调时先训简单指令,再训复杂推理) |
6. 实战组合拳建议(针对LoRA微调项目)
假设你现在要用LoRA微调一个7B的数学推理模型,这四者的配合是:
-
先用"渐进式学习":准备数据集时,先喂入3000道简单的一步算术题,模型稳定后,再加入2000道复杂的多步应用题(由易到难),防止早期梯度震荡。
-
设置"学习率" :前5%的步数,将LoRA的学习率从 0 缓慢增大 到 1e-4(Warm-up);剩下的95%步数,使用余弦衰减将学习率降至 1e-6(切记:后期是减小,而不是增大)。
-
用"知识蒸馏"提效:如果你想把7B模型部署到手机端(换3B小模型),在训练3B小模型时,让7B模型(冻结)同时输出soft labels,辅助3B训练,这样3B模型能达到接近7B的80%能力。
-
慎用EWC :如果你是在旧领域模型上硬加新领域知识(如先学法律,再学医疗,且不能遗忘法律),且不方便保留旧数据,此时考虑使用EWC;但如果你的场景允许混训,直接抛弃EWC,用LoRA+数据混合重放更省心。