深度学习中的微调是指采用预训练的神经网络模型,并使其适应新的特定任务的过程。 你不是从头开始训练模型,而是从已经从大型数据集中学习了通用模式的模型开始(例如,图像的 ImageNet 或文本的 Wikipedia/BookCorpus)。 然后,您使用针对您的任务量身定制的较小数据集来修改和重新训练此模型的各个部分。 这种方法在您的特定于任务的数据集有限时尤其有用,因为预训练模型提供了对数据域的强大基础理解。
该过程通常涉及调整模型的架构和重新训练特定的层。 例如,在 ImageNet 上预训练的卷积神经网络 (CNN) 中,您可以将最终分类层(最初设置为 1,000 个图像类别)替换为与您的任务输出大小匹配的新层(例如,用于医学成像任务的 10 个类别)。 在训练期间,您可以选择冻结早期层(保持其权重固定)以保留其学习到的特征,同时仅更新新的或后面的层。 这在新的任务与原始训练数据相似的情况下很常见。 如果任务差异很大,您可以解冻更多层并使用较低的学习率,以避免覆盖有用的特征。 例如,针对情感分析微调 BERT 可能涉及重新训练顶部的转换器层,同时保持嵌入层冻结,具体取决于数据集的大小。
微调的一个主要优点是效率。 从头开始训练大型模型需要大量的计算资源和数据,而许多团队都缺乏这些资源和数据。 微调通过利用现有知识来减少这种负担。 例如,开发自定义对象检测器的开发人员可以从预训练的 ResNet-50 主干开始,添加检测头,并在带注释的图像的小型数据集上进行微调。 但是,必须仔细调整学习率和 epoch 数等超参数。 使用过高的学习率可能会擦除有用的预训练权重,而过低的学习率可能会导致收敛缓慢。 PyTorch 的 torchvision
或 TensorFlow 的 Keras API 等工具通过提供预训练模型和冻结/解冻层的方法来简化此过程。 通过平衡保留的知识和特定于任务的调整,微调使开发人员能够以有限的资源实现强大的性能。