标准回答
先接对任务头
微调的第一步是在预训练 BERT 之上接一个与任务匹配的输出头:文本分类用 [CLS] 位置的向量接一层全连接;序列标注(NER)对每个 token 的输出各接分类层;抽取式问答(QA)则预测答案的起始与结束位置两个指针。任务头随主干一起端到端微调。
超参数设置
BERT 微调是在已有强表示上做小幅调整,所以学习率要小,常用 2e-5~5e-5;训练 epoch 要少,一般 2-4 轮即可,过多容易过拟合且灾难性遗忘预训练知识。配合 warmup(前若干步学习率从 0 线性升上来)再做线性衰减,能让训练更稳。
防过拟合
下游数据通常远小于预训练语料,需控制过拟合:保留并适当调高 dropout;用验证集做早停;数据很少时可冻结底层只训上层,或采用分层学习率(底层用更小学习率、顶层稍大),既保护通用特征又让上层适配任务。
数据不足与继续预训练
标注数据少时,可做数据增强(同义替换、回译等);更有效的是用领域无标注语料继续做 MLM 预训练(domain-adaptive pretraining),让模型先适应目标领域分布,再在小标注集上微调,往往显著提升。
类别不平衡
分类标签分布悬殊时,可用重采样、类别加权损失或 focal loss,并改用 F1、AUC 等更能反映少数类的指标,而非单看准确率。
算力受限用 PEFT
当显存或多任务部署成本是瓶颈时,可用参数高效微调(PEFT,如 LoRA、Adapter、prompt tuning),只训练少量新增参数、冻结主干,大幅降低显存与存储开销,同时效果接近全量微调。
常见误区
⚠️ 常见踩坑
沿用预训练那种大学习率导致训练发散或灾难性遗忘;epoch 设太多在小数据上严重过拟合;NER 任务错用 [CLS] 单一向量而非每个 token 的输出;数据不足时只堆 epoch 却不做数据增强或领域继续预训练;类别不平衡仍只看准确率。
追问
追问 1:什么是分层学习率,为什么微调 BERT 时常用它?
分层学习率指给 BERT 不同层设不同的学习率,通常越靠近输入的底层用越小的学习率、越靠近输出的顶层用越大的学习率(即逐层衰减)。因为底层学到的是通用语法、词法特征,改动应小以免破坏;顶层更贴近具体任务、需要更大幅度调整。这样能在保护预训练通用知识的同时让模型快速适配下游任务,缓解过拟合与遗忘。
追问 2:领域继续预训练(continued pretraining)和直接微调相比好在哪?
当目标领域(如医疗、法律、金融)的语言分布与 BERT 的通用预训练语料差异较大时,直接微调会受领域偏移影响。先用领域无标注语料继续做 MLM,让模型适应领域术语和表达分布,再在小标注集上微调,能让下游任务获得更好的起点,通常在数据稀缺或专业领域提升明显。
追问 3:PEFT(如 LoRA)为什么能在几乎不掉点的情况下大幅省显存?
以 LoRA 为例,它冻结原始权重,只在权重旁注入低秩的可训练矩阵,微调时只更新这少量低秩参数。由于需要存储优化器状态和梯度的参数量大幅减少,显存开销显著下降;而大模型的下游适配往往是低秩的,因此低秩增量足以表达任务所需调整,效果接近全量微调,且每个任务只需保存很小的增量权重,便于多任务部署。
🔗 相似问题
同一考点的不同问法,面试官可能换着问,一起刷更稳
没找到想看的面试题?把你想看的告诉我们 →
延伸学习
按主题分类的相关资源,便于系统复习