如前所述,通过迁移学习使用预训练模型是现代计算机视觉的基础。然而,简单地在基本特征提取和完全微调之间做出选择通常不够。最佳策略在很大程度上取决于源数据集和目标数据集之间的关联、目标数据集的大小以及可用的计算资源。让我们来审视在确定如何调整预训练模型时需要进行的高级考量。回顾基本策略在讨论高级技术之前,回想两种基本方法:特征提取:将预训练的卷积神经网络(通常不包含最终分类层)视为一个固定的特征提取器。您将目标数据集的图像通过网络,并保存由此产生的激活值(通常来自最终分类器之前的一层)。然后,您在这些提取的特征上训练一个新的、通常简单的分类器(如逻辑回归、支持向量机或小型多层感知器)。此方法计算成本低,当目标数据集较小或与用于预训练的源数据集非常相似时,效果相当不错。微调:使用预训练的权重初始化您的模型。将最终分类层替换为适合您目标任务的层。然后,使用较低的学习率在目标数据集上继续训练网络(可以是所有层或一部分层)。这使得模型能够将它学到的特征调整以适应新数据和任务的精妙之处。高级考量:基础之上特征提取和微调之间的决定并非总是二元的。更精细的策略涉及网络层的选择性训练、仔细选择的学习率以及分阶段的训练方案。层冻结策略微调的中心思想是,卷积神经网络的早期层学习一般特征(如边缘、角点、纹理),而后期层学习更复杂、更抽象的特征,这些特征更接近模型最初训练的特定任务(例如,物体部分、特定物体类别)。当迁移到新任务时,早期层学习的一般特征通常仍然关联度高。这一观察促使了针对网络特定部分进行冻结(保持权重不变)或解冻(允许权重更新)的不同策略。只微调分类头:这是最简单的微调形式。冻结所有卷积基层,只训练新添加的分类层(或多层)的权重。这与特征提取非常接近,但它是在深度学习框架内端到端完成的。如果目标任务与源任务非常相似,且数据集大小为小到中等,此方法快速有效。微调顶层,冻结底层:如果您的目标数据集更大,或者与源数据差异更大,仅训练头部可能不够。一种常见策略是冻结初始的卷积块(例如,ResNet的前几个阶段),然后与分类头一起微调后面的块。这使得模型能够调整其更复杂、特定于任务的特征表示,同时保留早期层学习到的一般特征。关于冻结多少层的决定通常需要实验。逐步解冻(分阶段微调):这是一种更精细的方法。您首先只微调头部(所有基层冻结)。经过几个周期后,解冻卷积基的最后一个块,并继续训练(通常使用略微调整的学习率)。您可以重复此过程,分阶段逐步解冻更深层的块。这种方法可以带来更稳定的训练和潜在的更好性能,特别是对于与源数据不相似的数据集。它使得网络能够逐步适应,从最特定于任务的层开始,然后转向更一般的层。微调整个网络:如果您的目标数据集非常大,并且可能与源任务有很大不同,通过微调网络的所有层可能会取得最佳结果。然而,这需要小心处理。使用非常低的学习率以避免过快地干扰预训练权重,这可能导致“灾难性遗忘”,即模型丢失预训练期间学到的有用信息。此方法计算成本最高。digraph G { rankdir=LR; node [shape=box, style=filled, fontname="Helvetica", margin=0.1]; edge [fontname="Helvetica"]; subgraph cluster_base { label = "CNN基础(预训练)"; bgcolor="#e9ecef"; Conv1 [label="早期层\n(一般特征)", fillcolor="#a5d8ff"]; Conv2 [label="中间层", fillcolor="#74c0fc"]; Conv3 [label="后期层\n(特定特征)", fillcolor="#4dabf7"]; Conv1 -> Conv2 -> Conv3; } subgraph cluster_head { label = "分类器头部"; bgcolor="#ffec99"; FC [label="新分类器\n(任务特定)", fillcolor="#ffe066"]; } Conv3 -> FC; subgraph cluster_legend { label = "图例"; bgcolor="#dee2e6"; rankdir=TB; node [shape=plaintext] Train [label="训练权重", fontcolor="#37b24d"]; Freeze [label="冻结权重", fontcolor="#f03e3e"]; } # Example Scenarios (use annotations or separate diagram if too complex) # Add invisible nodes/edges for positioning if needed }一个CNN的流程图,突出显示了用于冻结策略的典型层分组。早期层捕获一般模式,而后期层变得更具任务特定性。微调策略根据任务相似性和数据可用性,选择性地更新这些层中的权重。学习率很要紧微调时,学习率的选择极其重要。由于模型权重已被初始化为有用的值,您需要温和地更新它们。使用与从头训练时相同的大学习率可能会破坏预训练的特征。低初始学习率:从一个明显小于从头训练的典型学习率开始,通常在 $10^{-4}$ 到 $10^{-6}$ 的范围。差异化学习率:在微调多个层组时(例如,在逐步解冻或仅微调后期层时),对网络的不同部分使用不同的学习率通常有益。对更深、更早的层(靠近输入端)应用较小的学习率,并对分类头和正在适应的后续层应用相对较大的学习率。许多深度学习框架提供了设置每参数组学习率的机制。例如,已解冻的早期层可能使用 $10^{-5}$,而新添加的头部则使用 $10^{-4}$。数据大小与相似性矩阵目标数据集大小及其与源数据集(例如 ImageNet)的相似性,会显著影响最佳策略:小数据集,相似任务:特征提取或只微调头部通常是最佳选择。数据量不足以在不过拟合的情况下有效微调深层,而且预训练的特征已经具有关联性。小数据集,不同任务:这很有挑战性。特征提取可能捕获一些有用的一般特征,但它们可能不是最优的。小心微调带强正则化的后期层可能有效,但过拟合是一个主要风险。像少样本学习(稍后会介绍)这样的技术可能是必要的。大数据集,相似任务:微调非常有效。您很可能可以微调大部分或所有层,受益于大数据集,以精确地调整预训练特征以适应您的任务。从微调后期层开始,如果需要,可以考虑解冻更多层。大数据集,不同任务:微调整个网络通常是最佳方法,但需要最细致的处理(初始学习率非常低,可能逐步解冻)。由于任务不同,模型需要显著调整,大数据集使得这成为可能。预训练权重仍然提供了比随机初始化好得多的起点。计算预算与权衡记住实际限制:特征提取:最快,内存占用最少。每张图像只需通过冻结网络进行一次前向传播,并训练一个独立的、更小的分类器。微调头部:相对较快,内存使用中等。反向传播只发生在最终层(或多层)。微调更多层:较慢,需要更多内存,因为需要为更多层计算和存储梯度。逐步解冻增加了训练循环的复杂性,但可以进行管理。微调所有层:最慢,内存占用最多,需要仔细的超参数调整。做出选择:一个迭代过程没有适用于完美迁移学习策略的单一公式。有效调整通常涉及实验:从简开始:从特征提取或只微调分类头开始,特别是当您的数据集较小或计算资源有限时。建立基准性能。评估性能:在验证集上评估您的模型。如果性能不足,考虑更复杂的策略。逐步解冻:尝试微调预训练网络的顶层块。密切监测验证损失。如果它改善并稳定,您可能会尝试解冻更多层(逐步解冻)。记住相应地调整学习率。正则化:确保在微调期间使用适当的正则化(如 dropout、权重衰减),尤其是在训练更多层或处理较小数据集时,以防止过拟合。监控:仔细跟踪训练和验证指标。寻找过拟合(验证损失增加而训练损失减少)或不稳定的迹象。通过了解这些关于层冻结、学习率以及数据集之间关联的高级考量,您可以摆脱基本方法,做出更明智的决定,以有效地调整强大的预训练模型来应对您特定的计算机视觉难题。