news 2026/10/17 9:13:45

【finetune】Full Fine-tuning vs Frozen Backbone:迁移学习中的参数调优实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【finetune】Full Fine-tuning vs Frozen Backbone:迁移学习中的参数调优实践

​ 在迁移学习(Transfer Learning)中,是否更新预训练模型的全部参数,往往直接决定了训练稳定性、收敛速度以及最终性能表现。

​ 实践中最常见的两种策略是Full Fine-tuning(全量微调)与Frozen Backbone(冻结主干网络)。

​ 本文将围绕参数配置与调优策略,系统对比这两种方法的核心差异,并给出可直接落地的工程实践建议。

一、两种策略概述

1.1 Full Fine-tuning(全量微调)

​ Full Fine-tuning 会对模型中的全部参数进行更新,包括预训练的特征提取层(Backbone)与任务相关的分类头(Head)。

# 所有参数都参与训练forparaminmodel.parameters():param.requires_grad=Trueoptimizer=torch.optim.SGD(model.parameters(),lr=0.01)
  • 核心特征:
    • 模型具有最大表达能力,可充分适配目标任务
    • 训练成本高(计算量、显存占用均较大)
    • 若参数设置不当,易出现预训练特征退化(catastrophic forgetting)
    • 更适合数据规模较大或任务分布差异明显的场景

1.2 Frozen Backbone(冻结主干网络)

​ Frozen Backbone 仅更新分类头参数,预训练 Backbone 权重保持不变。

# 冻结 Backboneforparaminmodel.backbone.parameters():param.requires_grad=False# 只训练 Headforparaminmodel.head.parameters():param.requires_grad=True# 优化器只接收可训练参数optimizer=torch.optim.SGD(filter(lambdap:p.requires_grad,model.parameters()),lr=0.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 显存占用低,可用更大 batch
Epochs较少 (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 Rates)optimizer=torch.optim.AdamW([{'params':model.backbone.parameters(),'lr':1e-5},# Backbone 用小学习率{'params':model.head.parameters(),'lr':1e-3}# Head 用大学习率],weight_decay=1e-4)
  • 要点:
    • Backbone 使用小学习率(1e-5 ~ 1e-4),避免破坏预训练特征
    • Head 使用较大学习率(1e-3 ~ 1e-2),快速适应新任务
    • 分层学习率是 Full Fine-tuning 的最佳实践
(2) Frozen Backbone:统一但相对更大的学习率
# 只训练 Head,可以使用相对较大的学习率optimizer=torch.optim.SGD(model.head.parameters(),lr=0.01,momentum=0.9)
  • 要点:
    • 学习率可以比 Full Fine-tuning 大 1~10 倍
    • 但不宜过大(如 0.1),否则会导致训练不稳定
    • 推荐范围:0.01 ~ 0.05
(3) 常见误区
# 错误示例:Frozen 时使用过大学习率optimizer=torch.optim.SGD(model.head.parameters(),lr=0.5)# 太大,容易震荡# 错误示例:Full Fine-tuning 全部用同一个大学习率optimizer=torch.optim.SGD(model.parameters(),lr=0.01)# 会破坏预训练特征

3.2 Batch Size(批次大小)效率与稳定性的权衡

(1) Full Fine-tuning
batch_size=32# 受显存限制,通常较小
  • 需要存储所有参数的梯度,显存占用大
  • 较小的 batch size 提供更多梯度更新,有助于模型适应新任务
  • 典型值:16 ~ 64
(2) Frozen Backbone
batch_size=64# 显存占用低,可以用更大 batch# 或者保持与 Full Fine-tuning 一致batch_size=32# 更多梯度更新次数,可能带来更好效果
  • 只计算 Head 梯度,显存占用大幅降低
  • 可以使用更大 batch size 加速训练
  • 但更小的 batch size 意味着更多更新次数,对只训练 Head 的场景可能更有利
  • 典型值:32 ~ 128
(3) 实践建议

​ 对于 Frozen Backbone,建议先与 Full Fine-tuning 保持一致的 batch size,确保对比公平,之后再根据需要调整。

3.3 训练轮数(Epochs)

  • Full 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-tuning
weight_decay=1e-4# 标准正则化强度
  • 数百万参数需要正则化防止过拟合
  • 1e-4 ~ 5e-4 是常用范围
  • AdamW 比 SGD + L2 正则化效果更好
(2) Frozen Backbone
weight_decay=5e-5# 较小的正则化强度# 或者weight_decay=0# 某些场景可以不用
  • Head 参数量少(通常只有几万到几十万)
  • 过强的正则化会限制 Head 的学习能力
  • 推荐使用较小值或不使用

3.5 Learning Rate Scheduler(学习率调度)

(1) Full Fine-tuning
# 推荐:带 Warmup 的 Cosine Annealingscheduler=torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer,T_0=10,T_mult=2)# 或者使用 Warmup + Linear Decayfromtransformersimportget_linear_schedule_with_warmup scheduler=get_linear_schedule_with_warmup(optimizer,num_warmup_steps=100,num_training_steps=1000)
  • Warmup 的重要性:
    • 训练初期用小学习率,避免预训练特征被破坏
    • 逐渐增大到目标学习率
    • Full Fine-tuning 几乎必须使用 Warmup
(2) Frozen Backbone
# Cosine Annealing(可选 Warmup)scheduler=torch.optim.lr_scheduler.CosineAnnealingLR(optimizer,T_max=epochs)# 或者 Step Decayscheduler=torch.optim.lr_scheduler.StepLR(optimizer,step_size=5,gamma=0.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,# 可选:标签平滑}# 分层学习率优化器optimizer=torch.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_decay=config['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():if'head'notinname:param.requires_grad=False# 只优化 Headoptimizer=torch.optim.SGD(model.head.parameters(),lr=config['lr'],momentum=config['momentum'],weight_decay=config['weight_decay'])

五、策略选择决策树

​ 下图从数据规模和任务相似度两个维度,总结了迁移学习中Full Fine-tuning与Frozen Backbone的常见选择逻辑。

​ 在样本规模较小或目标任务与预训练任务高度相似的场景下,冻结 Backbone 通常能够在保留预训练特征泛化能力的同时,有效降低过拟合风险,并显著减少训练时间与显存开销。

​ 相反,当数据规模充足或任务分布与预训练数据存在明显差异时,全量微调可以释放模型的表达能力,使其学习到更具领域针对性的特征表示。

  • 实践提示:
    该决策树用于初始策略选择。在真实工程中,建议先采用 Frozen Backbone 作为基线方案,再根据验证集表现逐步解冻部分层或切换至 Full Fine-tuning。

六、常见问题与解决方案

Q1: Frozen Backbone 准确率比 Full Fine-tuning 低很多

  • 可能原因:

    1. 预训练特征与目标任务差异大
    2. 训练轮数不够
    3. 学习率设置不当
  • 解决方案:

    1. 尝试 Partial Fine-tuning:只冻结前几层,微调后几层
    2. 增加训练轮数
    3. 调整学习率(尝试 0.001 ~ 0.1 范围)

Q2: Full Fine-tuning 训练不稳定

  • 可能原因:

    1. 学习率过大
    2. 缺少 Warmup
    3. Batch size 过小导致梯度噪声大
  • 解决方案:

    • 降低学习率,使用分层学习率
    • 添加 Warmup 阶段
    • 使用梯度累积增大有效 batch size

Q3: 显存不足

  • 解决方案:
    • 使用 Frozen Backbone(显存占用降低约 60-70%)
    • 减小 batch size + 梯度累积
    • 使用混合精度训练(FP16)
    • 使用梯度检查点(Gradient Checkpointing)

七、总结

维度Full Fine-tuningFrozen Backbone
表达能力⭐⭐⭐⭐⭐⭐⭐⭐
稳定性要求高低
训练成本高低
适用数据规模中~大小
调参难度高低
  • 黄金法则:
    1. 先用 Frozen Backbone 快速验证基线
    2. 效果不满意再尝试 Full Fine-tuning
    3. Full Fine-tuning 务必使用分层学习率 + Warmup
    4. Frozen Backbone 重点调整轮数和学习率

参考资料

  1. How transferable are features in deep neural networks? - Yosinski et al., 2014
  2. ULMFiT: Universal Language Model Fine-tuning - Howard & Ruder, 2018
  3. An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale - Dosovitskiy et al., 2020
  4. A ConvNet for the 2020s - Liu et al., 2022
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/17 9:13:44

jQuery blur事件绑定与on()方法使用指南

为DOM元素添加onblur事件是jQuery交互开发中的基础且重要的一环。它允许我们在用户离开一个输入元素(如文本框)时触发特定逻辑,常用于表单验证、数据同步或界面状态更新。理解其与原生JavaScript的区别及jQuery的简化写法,能有效提…

作者头像 李华
网站建设 2026/10/15 20:25:59

2026年度抽屉拉篮深度测评与推荐,五款优选,助你厨房收纳力MAX

在寸土寸金的现代厨房中,如何高效利用每一寸空间,让锅碗瓢盆各得其所,是每个家庭面临的共同课题。抽屉拉篮,作为橱柜收纳的“灵魂组件”,其选择直接关系到厨房的整洁度与使用便捷性。面对市场上琳琅满目的产品&#xf…

作者头像 李华
网站建设 2026/10/16 18:44:23

8个月赚690万!两人团队靠Ollama插件创业,被收购后揭秘普通人可复制的AI风口玩法

一、AI内卷时代,他们凭什么8个月躺赢690万? 当下AI赛道卷到窒息,大厂扎堆布局大模型,创业者挤破头做应用,多数人要么血本无归,要么勉强糊口。但有这样一个两人小团队,没有融资、没有豪华背景,甚至没租写字楼,仅凭聚焦Ollama插件开发,只用8个月就实现盈利,最终被一家…

作者头像 李华
网站建设 2026/10/15 13:36:16

任务识别回收技术:基于任务识别的GT-SUITE闲置许可证回收

任务识别回收技术:基于任务识别的GT-SUITE闲置许可证回收一、我遇到的问题:许可证浪费严重,如何有效回收?作为一名长期从事整车仿真与开发的技术人员,我经常面对一个棘手的问题:在项目推进过程中&#xff0…

作者头像 李华
网站建设 2026/10/16 5:19:14

canvas树叶画法教程:从叶脉到光影绘制技巧

绘制树叶是数字绘画中常见的练习,也是考验基本功的课题。无论是作为独立元素还是场景点缀,逼真的树叶能极大提升作品的生动感。掌握canvas绘制树叶的方法,关键在于理解叶片的结构、光影关系和笔触运用,而不是简单描摹形状。 canva…

作者头像 李华
网站建设 2026/10/16 12:07:51

S3 + Deep-sleep + EXT1 电平唤醒后功耗到 ~130 µA 量级

你这个现象(S3 Deep-sleep EXT1 电平唤醒后功耗到 ~130 A 量级)很常见,通常不是“CPU没睡”,而是 EXT1 把 GPIO 作为 RTC IO 输入在工作,再叠加 IO电平不够“干净”(靠 300k 下拉太弱、落在阈值附近&…

作者头像 李华