git仓库:git仓库链接
论文地址(2021年10月14日更新的v2版本):论文地址
Yifan Zhang, Bryan Hooi, Dapeng Hu, Jian Liang, Jiashi Feng. Unleashing the Power of Contrastive Self-Supervised Visual Models via Contrast-Regularized Fine-Tuning. Arxiv,2021.
目录
1 研究背景
考虑到在预训练过程中优化无监督对比损失能够生成具有实例判别能力的模型,而现有微调过程主要采用交叉熵损失,其存在以下问题:交叉熵损失通常导致训练数据附近出现尖锐的决策边界,在与训练数据不同的测试数据集中泛化能力有限,因此如何提高模型的泛化能力?
作者探究了将对比损失应用于微调过程的有效性,发现直接添加对比损失到微调过程中,存在以下问题:大多数样本特征易于对比,仅导致微小的梯度损失,对学习更多的判别特征没有帮助,因此如何挖掘困难样本对以促进学习?
为此,作者提出了一种基于特征混合策略生成困难样本对的对比正则化微调方法——Core-tuning。
2 研究目标
- 在对比自监督视觉模型的微调阶段中,作者通过特征混合策略生成困难样本对,设计了基于混合特征的交叉熵损失和焦点对比损失,探究上述方法对于表征学习、分类器训练和模型泛化的影响。
3 论文结论
- 验证了微调过程中采用对比损失,有助于对特征空间正则化,使特征空间具有更强的区分性,有利于模型微调过程的优化;
- 提出了一种在微调阶段下的对比正则化微调方法,能有效提高模型在下游任务(如图像分类、语义分割、领域泛化等)上的性能。
4 主要方法
实验证明该方法对于如图像分类、语义分割、领域泛化、对抗鲁棒性等下游任务是有效的。
4.1 论文核心方法
- 基于特征混合策略生成困难样本对为数据集的每个类别生成准确的困难正 / 负样本对,总的损失函数结合了对比损失和交叉熵损失(设计了一种新颖的基于混合特征的焦点对比损失和基于混合特征的交叉熵损失
- 训练的整体目标:最小化混合特征交叉熵损失和焦点对比损失,即,其中为损失权衡因子。
- 基于混合特征的交叉熵损失:在分类预测层中,使用包含了原样本对及生成的困难正 / 负样本对集合(因生成了困难正 / 负样本对,批量大小为原批量大小的三倍)中的混合特征进行训练,从而学习更平滑的决策边界;
- 焦点对比损失:由于困难样本对对于对比学习的效用更大,对对比损失进行改造,设计一种提升困难样本对权重的损失函数,详细请见【4.3 如何生成困难正 / 负样本对?】;
- 对比损失:等价于最小化类条件交叉熵和最大化特征熵,即,其中最小化类条件交叉熵能够学习每个类的低熵特征聚类,最大化特征熵能够学习高熵特征空间,为特征空间提供了一个额外的正则化优化效果。
- 模型构造:Encoder编码器,对比特征提取层,分类预测层
4.2 与传统方法对比
(1)传统的对比自监督学习方法:利用无标注的数据,最大化同一实例的两个数据增强样本之间的特征相似性,最小化两个实例间的特征相似性。
(2)论文提出的方法提供实例判别的视觉表示,这些视觉表示均匀散布在特征空间中。
- 交叉熵损失:交叉熵倾向于学习类间可分离特征,但在减少类内特征分散方面的能力有限。
- 在微调中将对比损失与交叉熵损失相结合,作用如下:
- 获得类内高紧凑性(学习每个类的低熵特征聚类),类间高分离度(学习高熵特征空间);
- 优化对比损失等价于最小化类条件交叉熵和最大化特征熵,条件交叉熵损失(其中为标签,为通过encoder编码器提取的嵌入向量(embeddings),为预测值,,为任意实例),最小化类条件交叉熵在训练数据中的下确界(Infimum),聚拢正样本对,远离负样本对,使预测的标签分布更接近于真实人工标注(Ground-Truth)的分布,优化模型训练效果;
- 对比损失对于实例判别特征学习具有正则化效果。
- 为什么不能直接通过简单将对比损失添加到微调目标?
- 原因:对比学习高度依赖于正 / 负样本对,但大部分样本对特征易于对比,只能产生微小的对比梯度损失,从而模型无法学习到更多的判别特征。如下表所示,为对比损失,为焦点对比损失,为流形混合(Manifold Mixup)策略,为基于困难样本对生成的特征混合策略。
- 实际做法:
- 通过特征混合策略生成困难正样本对(远离锚点的正样本对)和困难负样本对(远离锚点的负样本对)。
- 通过焦点对比损失(Focal Contrastive Loss),对困难样本对赋予更高权重,从而使得对比学习能够学到更多的信息。
- 对混合特征进行分类器训练,设计基于混合特征的交叉熵损失,从而平滑决策边界,更好地利用已学习的判别特征空间,提高模型的泛化能力。计算如下:,其中n为样本数量,为原样本对以及生成的困难样本对的集合,表示分类预测,表示属于样本对集中的任意样本对。
- 仅用交叉熵损失训练的决策边界:尖锐的,靠近原始训练数据
- 基于混合特征的交叉熵损失训练的决策边界:平滑的,远离原始训练数据
4.3 如何生成困难正 / 负样本对
- 困难正样本对的生成:记锚点为,基于余弦距离计算,从同类别中找到与锚点之间余弦距离最小的困难正样本(记为);从不同类别中找到与锚点余弦距离最小的困难负样本(记为),生成困难正样本对,其中,,其中符合贝塔分布(一组定义在(0,1)区间的概率分布),生成的困难正样本对位于正负样本之间。
- 注意:不一定需要最小余弦距离来生成困难正样本对,就能提高对比微调的性能。
- 困难负样本对的生成:记锚点为,随机选取一个负样本,合成一个半硬负样本对,其中,,其中符合贝塔分布。
- 注意: 没有选择余弦距离最大的负样本,可以避免过强的负面效应降低性能。
- 困难样本对加权:非线性投影能够提高对比学习效果,因此通过附加的两层MLP层来获得L2-正则化的对比特征,困难正样本对的预测概率,对比损失,得到焦点对比损失,其中表示正样本对,表示包含了生成的困难样本对的全体样本对,表示温度系数,n表示样本数量。
4.4 主要消融实验
(1)验证不同预训练方法下的预训练模型下,微调阶段引入Core-tuning方法的有效性。结果表明:Core-tuning微调方法优于基于CrossEntropy的微调方法。
- 基于对比自监督方法:InsDis、PIRL、Moco-v1、InfoMin
- 基于非对比自监督方法:DeepCluster-v2、SwAV、BYOL
- 基于监督方法:CrossEntropy
(2)验证不同backbone网络架构下,Core-tuning微调方法的有效性。结果表明:Core-tuning微调方法能适用于各网络架构,提升其模型性能。
(3)验证大规模和类中数据量不平衡的数据集下,Core-tuning微调方法的有效性。结果表明:Core-tuning微调方法在大规模和类中数据量不平衡的数据集性能表现良好。
(4)验证不同标记数据量下,Core-tuning微调方法的有效性。结果表明:Core-tuning微调方法适用于不同标记数据量的情况,且数据非常稀缺时(如10%),Core-tuning能获得比CE-tuning更显著的改进。
5 实验设置
5.1 图像分类任务实验设置
1、数据集选择:9个数据集,包括ImageNet-20、CIFAR-10、CIFAR-100、Caltech-101、DTD、FGVC Aircraft、Standard Cars、Oxford-IIIT Pets、Oxford 102 Flowers
2、数据预处理:
论文补充材料中描述为:
- 对于大部分数据集,训练时,随机调整图片大小为224 x 224,随机水平翻转概率为0.5;测试时,图像调整为256 x 256,然后中心裁剪为224 x 224。
- 对于CIFAR-10和FGVC Aircraft数据集,将图像调整到不同的尺度,并使用旋转增强。
在作者提供的代码中,其数据预处理如下:
transform_train = transforms.Compose([
transforms.Resize((272,272), interpolation=PIL.Image.BICUBIC), # 采用两次立方插值方法对图像大小调整为272 x 272
transforms.RandomRotation(15,), # 随机旋转15度
transforms.RandomCrop(256), # 裁剪中心点的位置随机选取,随机裁剪图像大小为256 x 256
transforms.RandomHorizontalFlip(), # 随机水平翻转,默认概率为0.5
transforms.ToTensor(),
transforms.Normalize(mean=[0.507, 0.487, 0.441], std=[0.267, 0.256, 0.276])
])
transform_test = transforms.Compose([
transforms.Resize(256, interpolation=PIL.Image.BICUBIC),
transforms.ToTensor(),
transforms.Normalize(mean=[0.507, 0.487, 0.441], std=[0.267, 0.256, 0.276])
])
3、超参数设置:
项 | 值 |
---|---|
Backbone | ResNet-50(1x),通过PyContrast仓库中的各对比自监督学习方法得到的预训练模型,PyContrast仓库链接 |
损失权衡因子 | 0.1、1、10 |
混合因子 (mixup_alpha) | 0.1、1、10 |
温度系数 | 默认为0.07 |
困难正样本对生成阈值 | 0.8 |
4、微调超参数配置
GPU显卡:1张TITAN RTX 2080,运行三次,取均值和标准差
项 | 值 |
---|---|
批量大小 batch_size | 64、128、256 |
优化方法 Optimizer | (1)对于ImageNet-20数据集,采用SGD随机梯度下降,通过为0.1的线性学习率衰减因子来调整每30个时期的初始学习率, lr_start = 0.01,decay = 1e-4,momentum = 0.9; (2)对于除了ImageNet-20以外的数据集,采用基于牛顿动量(Nesterov Momentum)的梯度下降,lr_start = 0.1,decay = 1e-4,momentum = 0.9,余弦学习策略; |
微调轮次 epoch | 100 |
困难正样本对生成阈值 | 0.8 |
困难负样本对生成阈值 | 0.8 |
损失权衡因子 η | (1)ImageNet-20、CIFAR-10、DTD、FGVC Aircraft、Standard Cars、Oxford-IIIT Pets:0.1 (2)CIFAR-100、Caltech-101、Oxford 102 Flowers:1 |
混合因子 α(mixup_alpha) | (1)ImageNet-20、CIFAR-10、DTD、Oxford-IIIT Pets:1 (2)CIFAR-100、Caltech-101、FGVC Aircraft、Standard Cars、Oxford 102 Flowers:0.1 |
温度系数 | 默认为0.07 |
对比特征维度 contrast_dim | 默认为256 |
非线性投影层深度 proj. | 2 |
说明:
- 温度系数 越小(如0.02或0.07),Core-Tuning在ImageNet-20数据集上的性能越好,可能的原因是该温度系数帮助学习困难样本对。
- Core-Tuning中,默认对比特征维度为256,默认MLP深度为2;当特征维度改为128且MLP深度改为3时,Core-Tuning的性能会有所提高。
5.2 特征可视化任务实验设置
1、数据集设置:CIFAR-10
2、模型选择:ResNet-18
3、可视化展示了两种Loss函数下的效果差异:
● 交叉熵损失函数:
● 交叉熵损失函数和对比损失函数相结合:
4、在分类器前,添加了两层全连接层,将512维度的特征映射到一个三维特征球上(MATLAB实现),然后映射回10维特征空间进行预测。