在迁移学习Transfer Learning中是否更新预训练模型的全部参数往往直接决定了训练稳定性、收敛速度以及最终性能表现。 实践中最常见的两种策略是Full Fine-tuning全量微调与Frozen Backbone冻结主干网络。 本文将围绕参数配置与调优策略系统对比这两种方法的核心差异并给出可直接落地的工程实践建议。一、两种策略概述1.1 Full Fine-tuning全量微调 Full Fine-tuning 会对模型中的全部参数进行更新包括预训练的特征提取层Backbone与任务相关的分类头Head。# 所有参数都参与训练forparaminmodel.parameters():param.requires_gradTrueoptimizertorch.optim.SGD(model.parameters(),lr0.01)核心特征模型具有最大表达能力可充分适配目标任务训练成本高计算量、显存占用均较大若参数设置不当易出现预训练特征退化catastrophic forgetting更适合数据规模较大或任务分布差异明显的场景1.2 Frozen Backbone冻结主干网络 Frozen Backbone 仅更新分类头参数预训练 Backbone 权重保持不变。# 冻结 Backboneforparaminmodel.backbone.parameters():param.requires_gradFalse# 只训练 Headforparaminmodel.head.parameters():param.requires_gradTrue# 优化器只接收可训练参数optimizertorch.optim.SGD(filter(lambdap:p.requires_grad,model.parameters()),lr0.01)核心特征训练速度快、显存占用低能最大程度保留预训练模型的泛化能力模型容量受限性能上限依赖预训练特征质量适用于小数据集或任务高度相似的场景二、 核心参数对比参数Full Fine-tuningFrozen Backbone原因分析Learning Rate较小 (0.001 ∼ 0.01 0.001\sim0.010.001∼0.01)可稍大 (0.01 ∼ 0.1 0.01 \sim 0.10.01∼0.1)Frozen 不用担心破坏预训练特征Batch Size较小 (16 ∼ 32 16 \sim 3216∼32)可较大 (32 ∼ 128 32 \sim 12832∼128)Frozen 显存占用低可用更大 batchEpochs较少 (5 ∼ 20 5 \sim 205∼20)较多 (10 ∼ 50 10 \sim 5010∼50)Frozen 每轮更新参数少需更多轮次Weight Decay标准 (0.00005 ∼ 0.0001 0.00005 \sim 0.00010.00005∼0.0001)较小 (0 ∼ 0.00005 0 \sim 0.000050∼0.00005)Frozen 参数少过度正则会限制学习Warmup推荐使用可选Full 需要 warmup 保护预训练特征三、参数调优详解3.1 Learning Rate学习率 学习率是最关键的超参数两种策略的设置逻辑完全不同。(1) Full Fine-tuning分层学习率是默认选择# 推荐分层学习率Discriminative Learning Ratesoptimizertorch.optim.AdamW([{params:model.backbone.parameters(),lr:1e-5},# Backbone 用小学习率{params:model.head.parameters(),lr:1e-3}# Head 用大学习率],weight_decay1e-4)要点Backbone 使用小学习率1e-5 ~ 1e-4避免破坏预训练特征Head 使用较大学习率1e-3 ~ 1e-2快速适应新任务分层学习率是 Full Fine-tuning 的最佳实践(2) Frozen Backbone统一但相对更大的学习率# 只训练 Head可以使用相对较大的学习率optimizertorch.optim.SGD(model.head.parameters(),lr0.01,momentum0.9)要点学习率可以比 Full Fine-tuning 大 1~10 倍但不宜过大如 0.1否则会导致训练不稳定推荐范围0.01 ~ 0.05(3) 常见误区# 错误示例Frozen 时使用过大学习率optimizertorch.optim.SGD(model.head.parameters(),lr0.5)# 太大容易震荡# 错误示例Full Fine-tuning 全部用同一个大学习率optimizertorch.optim.SGD(model.parameters(),lr0.01)# 会破坏预训练特征3.2 Batch Size批次大小效率与稳定性的权衡(1) Full Fine-tuningbatch_size32# 受显存限制通常较小需要存储所有参数的梯度显存占用大较小的 batch size 提供更多梯度更新有助于模型适应新任务典型值16 ~ 64(2) Frozen Backbonebatch_size64# 显存占用低可以用更大 batch# 或者保持与 Full Fine-tuning 一致batch_size32# 更多梯度更新次数可能带来更好效果只计算 Head 梯度显存占用大幅降低可以使用更大 batch size 加速训练但更小的 batch size 意味着更多更新次数对只训练 Head 的场景可能更有利典型值32 ~ 128(3) 实践建议 对于 Frozen Backbone建议先与 Full Fine-tuning 保持一致的 batch size确保对比公平之后再根据需要调整。3.3 训练轮数EpochsFull Fine-tuning每轮更新信息量大通常较少轮次即可收敛Frozen Backbone参数更新受限需要更长训练周期经验估计Frozen Epochs ≈ Full Fine-tuning Epochs × ( 1.5 ∼ 3 ) \text{Frozen Epochs} \approx \text{Full Fine-tuning Epochs} \times (1.5 \sim 3)Frozen Epochs≈Full Fine-tuning Epochs×(1.5∼3)3.4 Weight Decay权重衰减 正则化强度需区分策略。(1) Full Fine-tuningweight_decay1e-4# 标准正则化强度数百万参数需要正则化防止过拟合1e-4 ~ 5e-4 是常用范围AdamW 比 SGD L2 正则化效果更好(2) Frozen Backboneweight_decay5e-5# 较小的正则化强度# 或者weight_decay0# 某些场景可以不用Head 参数量少通常只有几万到几十万过强的正则化会限制 Head 的学习能力推荐使用较小值或不使用3.5 Learning Rate Scheduler学习率调度(1) Full Fine-tuning# 推荐带 Warmup 的 Cosine Annealingschedulertorch.optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer,T_010,T_mult2)# 或者使用 Warmup Linear Decayfromtransformersimportget_linear_schedule_with_warmup schedulerget_linear_schedule_with_warmup(optimizer,num_warmup_steps100,num_training_steps1000)Warmup 的重要性训练初期用小学习率避免预训练特征被破坏逐渐增大到目标学习率Full Fine-tuning 几乎必须使用 Warmup(2) Frozen Backbone# Cosine Annealing可选 Warmupschedulertorch.optim.lr_scheduler.CosineAnnealingLR(optimizer,T_maxepochs)# 或者 Step Decayschedulertorch.optim.lr_scheduler.StepLR(optimizer,step_size5,gamma0.5)Warmup 不是必须的不用担心破坏预训练特征简单的调度策略通常就足够长训练周期建议使用 Cosine Annealing四、 完整配置示例4.1 Full Fine-tuning 配置# ViT Full Fine-tuning on CIFAR-100config{batch_size:32,epochs:10,optimizer:AdamW,lr_backbone:1e-5,# Backbone 小学习率lr_head:1e-3,# Head 大学习率weight_decay:1e-4,warmup_epochs:2,scheduler:cosine,label_smoothing:0.1,# 可选标签平滑}# 分层学习率优化器optimizertorch.optim.AdamW([{params:model.patch_embed.parameters(),lr:config[lr_backbone]},{params:model.blocks.parameters(),lr:config[lr_backbone]},{params:model.norm.parameters(),lr:config[lr_backbone]},{params:model.head.parameters(),lr:config[lr_head]}],weight_decayconfig[weight_decay])4.2 Frozen Backbone 配置# ViT Frozen Backbone on CIFAR-100config{batch_size:32,epochs:20,# 更多轮次optimizer:SGD,lr:0.01,# 统一学习率momentum:0.9,weight_decay:5e-5,# 较小的权重衰减scheduler:cosine,}# 冻结 Backboneforname,paraminmodel.named_parameters():ifheadnotinname:param.requires_gradFalse# 只优化 Headoptimizertorch.optim.SGD(model.head.parameters(),lrconfig[lr],momentumconfig[momentum],weight_decayconfig[weight_decay])五、策略选择决策树 下图从数据规模和任务相似度两个维度总结了迁移学习中Full Fine-tuning与Frozen Backbone的常见选择逻辑。 在样本规模较小或目标任务与预训练任务高度相似的场景下冻结 Backbone 通常能够在保留预训练特征泛化能力的同时有效降低过拟合风险并显著减少训练时间与显存开销。 相反当数据规模充足或任务分布与预训练数据存在明显差异时全量微调可以释放模型的表达能力使其学习到更具领域针对性的特征表示。实践提示该决策树用于初始策略选择。在真实工程中建议先采用 Frozen Backbone 作为基线方案再根据验证集表现逐步解冻部分层或切换至 Full Fine-tuning。六、常见问题与解决方案Q1: Frozen Backbone 准确率比 Full Fine-tuning 低很多可能原因预训练特征与目标任务差异大训练轮数不够学习率设置不当解决方案尝试 Partial Fine-tuning只冻结前几层微调后几层增加训练轮数调整学习率尝试 0.001 ~ 0.1 范围Q2: Full Fine-tuning 训练不稳定可能原因学习率过大缺少 WarmupBatch size 过小导致梯度噪声大解决方案降低学习率使用分层学习率添加 Warmup 阶段使用梯度累积增大有效 batch sizeQ3: 显存不足解决方案使用 Frozen Backbone显存占用降低约 60-70%减小 batch size 梯度累积使用混合精度训练FP16使用梯度检查点Gradient Checkpointing七、总结维度Full Fine-tuningFrozen Backbone表达能力⭐⭐⭐⭐⭐⭐⭐⭐稳定性要求高低训练成本高低适用数据规模中~大小调参难度高低黄金法则先用 Frozen Backbone 快速验证基线效果不满意再尝试 Full Fine-tuningFull Fine-tuning 务必使用分层学习率 WarmupFrozen Backbone 重点调整轮数和学习率参考资料How transferable are features in deep neural networks? - Yosinski et al., 2014ULMFiT: Universal Language Model Fine-tuning - Howard Ruder, 2018An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale - Dosovitskiy et al., 2020A ConvNet for the 2020s - Liu et al., 2022