Frozen Fine-Tuning(冻结微调) 是一种通过冻结预训练模型的大部分参数,仅更新少数特定层或模块的微调方法。其核心目标是在保留预训练知识的同时,以较低成本适配新任务。以下是其冻结策略的详细说明,涵盖原理、具体方法、实现步骤及实践建议:
一、冻结策略的核心原理
- 保留通用特征:预训练模型(如BERT、GPT)的底层通常学习通用特征(如词法、句法),冻结这些层可避免破坏其泛化能力。
- 局部适配:仅解冻与目标任务相关的模块(如顶层、分类头),使其适应特定任务的语义或模式。
- 降低计算成本:减少可训练参数,节省显存和训练时间,适合资源受限场景。
二、常见冻结策略及适用场景
1. 冻结底层(Freeze Lower Layers)
- 原理:预训练模型的底层(如BERT的前几层)捕捉通用特征,高层(顶层)捕捉任务相关语义。
- 操作:
- 冻结所有Transformer层,仅解冻最后N层。
- 解冻分类头(分类任务必须更新)。
- 适用场景:
- 任务与预训练任务相似(如文本分类、情感分析)。
- 数据量中等(数千样本)。
- 示例(以BERT为例):
model = BertForSequenceClassification.from_pretrained("bert-base-uncased") # 冻结所有层 for param in model.parameters(): param.requires_grad = False # 解冻最后2层和分类头 for layer in model.bert.encoder.layer[-2:]: for param in layer.parameters(): param.requires_grad = True for param in model.classifier.parameters(): param.requires_grad = True
2. 冻结特定模块
- 原理:选择性地冻结与任务无关的模块(如Embedding层、注意力键/值投影)。
- 操作:
- 按模块名称匹配参数,针对性冻结。
- 通常保留注意力查询(Query)和输出层可训练。
- 适用场景