冻结层在微调中的作用是什么?
- 标签:大模型、AI、微调
🏛 业务架构师
冻结层(Frozen Layers)指微调时保持原参数不更新的网络层,价值要从"训练效果"和"工程经济性"两方面看:
训练效果层面:
- 保住通用能力:底层 Transformer 层承载语言基础表征(语法、常见模式),冻结它们可显著降低灾难性遗忘——微调目标是"学新行为",不是"重学说话";
- 稳定训练:冻结主干减少了参数漂移,小数据集上训练曲线更稳,不容易过拟合到训练集话术。
工程经济性层面:
- 冻结层不需要存梯度和优化器状态,显存大幅下降;
- 冻结层的激活可以做缓存(数据不变时前向结果复用),进一步提速。
实践策略:全量微调常用"部分冻结"——冻结底层、微调靠近输出的高层(高层更贴近任务语义);LoRA 类方法本质是"冻结全部+旁路低秩更新"的极致形态。业务上如何选层没有玄学:拿验证集做对比实验,通常"冻结 70%底层+微调上层"和 LoRA 效果接近,那就选工程上更省的 LoRA。
我的建议:冻结策略是"防御性设计"——保护既有能力、控制成本。除非实验证明解冻更多层能带来业务可感知的提升,否则保守冻结永远是性价比更高的选择。
🏗 系统架构师
冻结层(Layer Freezing)= 微调时停止更新底层(通常是靠近输入的层)的参数,只训练高层或旁路模块。
作用机理:Transformer 各层有功能分工——底层学通用特征(语法、局部模式),高层学任务相关语义(领域概念、输出行为)。领域适配时底层通用特征几乎不用变,冻结它们:
- 防灾难性遗忘:底层表征是预训练知识的物理载体,动它就伤通用能力——冻结是物理性保护;
- 省资源:不训练的层无梯度、无优化器状态、激活可释放,显存和时间双降;
- 小数据防过拟合:可训练参数少 = 模型容量约束 = 正则化效果,几千条样本时尤其重要。
典型策略:微调分类头 + 顶层几层(NLU 小任务);LoRA 全层冻结主干只训旁路(冻结的极致形式);渐进解冻(逐步放开上层)用于继续预训练场景。
架构师视角的权衡:冻结是"保留通用性 vs 任务上限"的交换——数据量小、通用能力重要 → 多冻结;数据量大、任务与原分布差异大(如领域继续预训练)→ 少冻结。工程上不必手调冻结策略:LoRA 已经隐式实现了"冻结主干"的最优平衡,直接用即可;手工分层冻结更多出现在学术实验和分类头微调场景。
💻 全栈开发专家
冻结层的作用:保住预训练学到的通用特征 + 省下这些层的训练开销。
原理上,Transformer 低层学的是通用特征(语法、局部模式),高层才任务特化。微调小数据集时若全层放开,低层权重被小数据梯度带偏,既浪费算力又造成灾难性遗忘;冻结低层相当于把「特征提取器」固化,只在高层做任务适配。
工程上的三种用法:
- 经典 NLP 微调(BERT 时代):冻结 embedding 层和前 N 个 encoder 层,只训顶部 2~4 层 + 分类头——数据少(<10k)时必备,训练快 3~5 倍;
- 渐进解冻(Gradual Unfreezing):先只训顶层,若干 epoch 后逐层向下解冻,让低层缓慢适应,避免早期大梯度冲击;ULMFiT 论文的技巧,全量微调小数据集时很有效;
- LLM 时代与 PEFT 结合:LoRA 本身就是「冻结一切、只挂旁路」的极端形式;有时再叠一层策略——视觉分支冻结、只训 projector 和 LLM 的 LoRA,多模态微调的标准配置。
判断该冻几层的经验:看数据量和任务差异。数据 <1 万条、任务与基座接近:冻 70%+ 底层;数据充足、领域差异大:少冻或不冻;中间态用「分层学习率」(底层 lr 小、顶层 lr 大)做软冻结,往往比硬冻结效果更稳。