深度学习模型架构常见术语详解
在阅读深度学习论文或技术博客时,我们经常会遇到backbone、head、neck等术语。这些概念在目标检测、图像分割等任务中非常常见,本文将对这些术语进行详细解释。
backbone(主干网络)
backbone直译为主干网络,它是整个模型架构中的核心组成部分,负责从输入图像中提取特征信息。可以将backbone理解为特征提取器,它的任务是将原始图像转换为具有丰富语义信息的特征图,供后续网络使用。
在实际应用中,backbone通常采用成熟的预训练模型,如ResNet、VGG、EfficientNet等。这是因为这些网络经过大量数据训练,已经具备了强大的特征提取能力。使用时可以直接加载官方提供的预训练权重,然后在此基础上添加自定义的网络层进行联合训练。在训练过程中,backbone的参数会进行微调,使其更好地适应特定任务。
head(检测头)
head是负责生成最终预测结果的网络层。它接收backbone提取的特征,并利用这些特征完成具体的任务,如分类、边界框回归等。head的设计取决于具体任务的需求,在目标检测中可能包括类别预测和位置回归,在语义分割中则是每个像素的类别预测。
neck(特征融合层)
neck位于backbone和head之间,起到桥梁和调节的作用。它的主要任务是更好地利用backbone提取的多尺度特征,通过特征融合的方式增强特征的表达能力。常见的neck结构包括FPN(Feature Pyramid Network)、PAN(Path Aggregation Network)等。
bottleneck(瓶颈层)
bottleneck原意为瓶颈,在深度学习中通常指输入输出维度不一致的网络层,输出维度明显小于输入维度,形成类似瓶颈的收缩结构。常见的参数设置如bottle_num=256,表示该层输出的特征维度为256,而输入维度可能是1024或更高。这种设计可以有效减少参数量和计算量。
GAP(全局平均池化)
GAP即Global Average Pooling全局平均池化,是深度学习中常用的一个操作。它的作用是将每个特征通道的所有像素值求平均,得到一个单一的数值。在PyTorch中,可以使用AdaptiveAvgPool2d(1)实现这一功能:
self.feature_pool = nn.AdaptiveAvgPool2d(1)
这种池化方式可以显著减少全连接层的参数数量,有效防止过拟合。
Embedding(嵌入向量)
Embedding是将复杂高维数据转换为低维稠密向量的过程。在深度学习中,我们通过线性和非线性变换对原始数据进行自动特征提取,最终将数据表示为向量形式。这个过程使得原始数据能够被神经网络更好地处理和理解。
pretext task和downstream task(代理任务与下游任务)
在迁移学习的框架中,用于预训练的任务称为代理任务或前置任务(pretext task),而用于实际应用的任务则称为下游任务(downstream task)。例如,使用图像旋转预测作为代理任务预训练模型,然后在具体的目标检测任务上进行微调。
temperature parameters(温度参数)
温度参数是softmax函数中的一个重要超参数,通常用τ或T表示。它用于调节softmax输出的概率分布平滑程度。下面通过代码示例说明其作用:
import torch
scores = torch.tensor([1.0, 2.0, 3.0])
base_probs = torch.softmax(scores, dim=0)
print(f"基础概率: {base_probs}")
# 温度参数较大时,分布更加平滑
smoothed_scores = scores / 2.0
smoothed_probs = torch.softmax(smoothed_scores, dim=0)
print(f"平滑后的概率 (T=2): {smoothed_probs}")
# 温度参数较小时,分布更加尖锐
sharp_scores = scores / 0.5
sharp_probs = torch.softmax(sharp_scores, dim=0)
print(f"尖锐化的概率 (T=0.5): {sharp_probs}")
运行结果:
tensor([0.0900, 0.2447, 0.6652])
tensor([0.1863, 0.3072, 0.5065])
tensor([0.0159, 0.1173, 0.8668])
当温度参数大于1时,输出的概率分布变得更加平滑,不同类别之间的差异减小;当温度参数小于1时,分布变得更加尖锐,模型对预测结果更加自信。在对比学习等场景中,合理设置温度参数对模型性能有重要影响。
热身Warm up
Warm up即学习率预热策略,指在训练初期使用较小的学习率进行几个epoch的训练,然后再恢复到正常的学习率。这是因为网络参数在随机初始化后直接使用较大的学习率容易导致训练不稳定,甚至出现数值爆炸的情况。
端到端end to end
端到端学习是指模型直接从原始输入得到最终输出,中间不需要人工设计特征或进行复杂的预处理。以图像分类为例,输入一张图片,经过特征提取、特征映射、分类器等步骤,直接输出预测类别。整个学习过程和数据处理流程都由神经网络自动完成,不需要额外的模块设计和参数调整。
domain adaptation 和domain generalization(域适应与域泛化)
域适应(Domain Adaptation)是指源域数据完全已知,目标域数据部分已知或完全未知的情况下,将知识从源域迁移到目标域的方法。域泛化(Domain Generalization)则更为挑战性,要求模型在从未见过的目标域上也能表现良好。这种设置更符合实际应用场景,因为部署时面对的数据分布往往与训练数据不同。由于目标域没有训练样本,模型无法进行微调,因此域泛化是一个更具难度的研究问题。