← 返回题目列表

CNN 迁移学习中冻结和微调怎么选?

中等 第 18 / 25 题 更新于 2026/09/19
卷积神经网络机器学习面试题模型训练

简化版

冻结适合目标数据少且与预训练域接近的阶段,微调适合数据更多或域差异较大的阶段。常用做法是先冻结主干训练新 Head,再从高层向低层逐步解冻,并使用分层学习率;BN 的参数和运行统计要单独决定。

详细版

  • 冻结减少可训练参数和过拟合风险,也降低反向显存,但限制目标域适配。

  • 高层更任务相关,通常先解冻;底层边缘纹理更通用,使用更小学习率。

  • 新 Head 随机初始化,初期学习率可比主干高 10~100 倍。

  • 解冻会改变优化问题,需重新检查学习率、调度器和 early stopping。

  • 域偏移很大时全量微调可能必要,但要监控灾难性遗忘和校准。

完整版教学

一、冻结与微调是在偏差和方差间取舍

预训练权重携带通用视觉先验。

完全冻结把它当固定特征提取器,估计参数少、方差低;全量微调自由度高,能适配新域但更易把小数据记住。

层级语义给出了自然过渡:先让分类头学会读取已有特征,再逐步允许靠近输出的层改变,通常比一开始全网大步更新稳定。

二、底层机制与关键公式

冻结参数意味着不计算其梯度,但 BN 的 running statistics 不是参数,仍可能在 train 模式更新。

若要真正冻结预训练 BN,应同时设置 eval 或采用明确的模块策略。

分层学习率让 Head 快速适配、高层温和调整、底层基本保持。

解冻新层后,优化器必须包含这些参数;只修改 requires_grad 却不重建参数组是常见代码错误。

stage 1: backbone frozen, lr(head)=1e-3
stage 2: unfreeze stage4, lr(stage4)=1e-4
stage 3: full tune, lr(early)=1e-5, lr(head)=1e-4

三、带数字的推演

模型 2500 万参数,Head 仅 51 万。

先冻结主干时只训练约 2%;若验证集停在 82%,解冻 stage4 后升到 86% 而训练验证差距未扩大,说明新增适配自由度有效。

四、方案对比与选择

方案/场景机制或优势主要代价
只训 Head数据极少、域接近稳定但上限受限
部分解冻多数迁移任务效果与风险较均衡
全量微调数据较多、域差异大成本和过拟合风险高

五、实际执行流程

加载预训练权重 -> 替换 Head -> 冻结并训稳 Head
-> 解冻最高 stage -> 降低 LR -> 观察验证差距 -> 必要时继续向前解冻

六、边界条件与工程代价

输入通道不同(如灰度、医学多通道)时,第一层权重需复制、平均或重新初始化。

该层变化会向后传播,可能需要比常规迁移解冻更多层。

线性探测表现差不一定说明预训练无用,也可能是特征需要非线性适配。

应把只训 Head、部分解冻、全量微调作为递进基线。

记忆钩子:把流程记成“头先学、高层先松、底层小步走”。

七、常见误区与追问

  • 误区:设置 requires_grad=False 就完全冻结了 BN。 running statistics 仍可在 train 模式被更新。

  • 追问:为什么高层先解冻? 高层语义更贴近预训练类别,也更需要适配目标任务。

  • 误区:解冻后沿用原来的大学习率。 大步更新可能迅速破坏预训练表示。

  • 追问:优化器为何可能要重建? 新解冻参数若不在参数组中,就不会被更新。

  • 追问:域越相似越应该怎样做? 通常冻结更多层并减少学习率,用更少自由度降低方差。

八、加强记忆

把流程记成“头先学、高层先松、底层小步走”。

冻结不仅看梯度,还要看 BN 统计;解冻不仅改开关,还要把参数加入优化器并降低学习率。