【读点论文】Domain-Adaptive Few-Shot Learning小样本构建原型学习,对抗适应训练,自适应对齐域特征
它旨在解决DA-FSL中的一个特定挑战:**DA目标意味着源和目标数据分布需要对齐,通常通过共享的域自适应特征嵌入空间;但是FSL目标规定每个类的目标域分布必须不同于任何源域类的目标域分布,这意味着跨域调整分布可能会损害FSL性能**。如何在保持源/目标一致的同时实现全局域分布调整,因此,类区分度成为关键。我们的解决方案是在DAPN中的域自适应特征嵌入学习之前显式地增强源/目标每类分离,以减轻域对
Domain-Adaptive Few-Shot Learning
Abstract
-
现有的少样本学习(few-shot learning,FSL)方法隐含地假设少量目标类样本与源类样本来自同一领域,但在实际应用中,这一假设往往是无效的(目标类可能来自不同的领域)。本文针对领域自适应少样本学习(DA-FSL)问题,提出了一种新的领域对抗原型网络(DAPN)模型,该模型要求在统一的框架下解决FSL和DA问题。
-
它旨在解决DA-FSL中的一个特定挑战:DA目标意味着源和目标数据分布需要对齐,通常通过共享的域自适应特征嵌入空间;但是FSL目标规定每个类的目标域分布必须不同于任何源域类的目标域分布,这意味着跨域调整分布可能会损害FSL性能。如何在保持源/目标一致的同时实现全局域分布调整,因此,类区分度成为关键。我们的解决方案是在DAPN中的域自适应特征嵌入学习之前显式地增强源/目标每类分离,以减轻域对齐对FSL的负面影响。大量的实验表明,我们的DAPN优于最先进的FSL和DA模型,以及它们的简单组合。代码可在 GitHub - dingmyu/DAPN: A pytorch implementation of “Domain-Adaptive Few-Shot Learning”。
-
现有少样本学习(FSL)方法隐含源域与靶域样本来自同一域的假设,而实际中靶域常与源域不同,由此产生需联合解决 FSL 与域适应(DA)的域自适应少样本学习(DA-FSL) 问题。为解决该问题,本文提出域对抗原型网络(DAPN),其核心是在统一框架中平衡 “域全局对齐” 与 “类区分性保持”:通过少样本学习模块(基于原型网络,采用 episode 训练和原型分类损失 L p s L_{ps} Lps/ L p d L_{pd} Lpd)、域对抗适应模块(在特征嵌入前加域判别损失 L d s L_{ds} Lds 增强类分离,嵌入后加域混淆损失 L d c L_{dc} Ldc (改进 CDAN 并引入熵加权)实现域对齐,再通过自适应权重模块自动平衡多损失。
-
现有 FSL 的局限:传统 FSL 假设靶域少样本与源域样本来自同一域,仅解决 “少样本训练新类” 问题,忽略 “源 / 靶域差异” 这一实际场景(如源 = 真实照片、靶 = 素描 / 卡通)。DA-FSL 问题提出:需同时解决 “少样本识别新类” 和 “源 / 靶域适应”,即模型需用源域充足样本( D s D_s Ds,类 C s C_s Cs) 和靶域少样本( D d D_d Dd,类 C d C_d Cd) 训练,泛化到靶域测试类( C t C_t Ct),且满足 C s ∩ C d = ∅ C_s∩C_d=∅ Cs∩Cd=∅、 C t ∩ C d = ∅ C_t∩C_d=∅ Ct∩Cd=∅、 C s ∩ C t = ∅ C_s∩C_t=∅ Cs∩Ct=∅。传统 UDA 方法假设源 / 靶类重叠,通过全局 / 类级域对齐缩小域 gap,但 DA-FSL 中源 / 靶类无重叠,域对齐可能破坏类区分性;简单组合 FSL 与 UDA(如 ProtoNet+CDAN)效果差。
-
源域是 “真实动物照片”(比如 64 种动物,每种 600 张照片,数据多、标签全),靶域是 “动物素描”(比如 16 种素描当 “少样本训练集”,每种只有 1 或 5 张;20 种素描当 “测试集”)。面临两个难题:少样本难题:靶域每种素描只有几张,没法像照片那样 “喂饱” 模型;域差异难题:照片是彩色、有纹理的,素描是黑白、线条的,AI 可能把 “猫的照片” 和 “猫的素描” 当成两种东西。
-
核心思考:“先分清类,再对齐域,自动调平衡”,DAPN 的思路是 “分步处理、互相平衡”:第一步:先让模型在 “源域照片” 和 “靶域少样本素描” 里,把 “猫、狗、鸟” 这些类分清(保证 “类区分”);第二步:再让模型把 “照片的特征” 和 “素描的特征” 变得像一点(缩小域差异,保证 “域对齐”);第三步:自动调整 “类区分” 和 “域对齐” 的重要性(比如某阶段模型总认错类,就多关注 “类区分”;某阶段总分不清照片和素描,就多关注 “域对齐”)。
-
传统方法的坑:只做 “域对齐”(让照片和素描特征像):AI 可能把 “猫的照片” 和 “狗的素描” 搞混(丢了 “类区分”);只做 “少样本学习”(不管域差异):AI 认不出 “猫的素描”(因为没适应素描风格)。
Introduction
-
近年来,小样本学习(FSL)受到越来越多的关注。这是因为,要将视觉识别模型扩展到数千个(甚至更多)类别,必须克服缺乏标记数据的问题。特别是,大多数视觉识别模型都是基于深度卷积神经网络(CNN)的。训练它们通常需要数百个(或更多)本文提出了一种新的分类方法–FSL,它是对每个类进行分类和标注的一种方法,但对于一些稀有的分类,这种方法往往是不可行的,甚至是不可能的。因此,FSL的目标是通过对来自源类的足够多的标注样本进行学习,而只对来自目标类的少量标注样本进行学习,从而识别出一组目标类。
-
FSL 通常被表述为从源类到目标类的迁移学习问题。到目前为止,人们的努力主要是如何用很少的样本构建分类器。然而,还有一个额外的挑战到目前为止在很大程度上被忽视了,那就是,目标类不仅不能很好地被很少的训练样本所代表,例如,目标类样本可以由不同的成像设备收集(例如,移动的手机相机与单样本反光相机),导致不同的照片风格。在更极端的情况下,源类别可以在照片中捕获,目标类别可以在草图或卡通图像中捕获。这意味着从源类别训练的视觉识别模型需要适应新的类别和新的领域,这种问题设置被称为域自适应少样本学习(DA-FSL),如图1所示。
-

-
图1.四个相关的视觉识别问题(即,多样本目标识别、FSL、域适应和DA-FSL)之间的差异说明。
-
-
DA-FSL是一个更具挑战性的问题,因为增加了少样本域自适应的目标。据我们所知,以前从未尝试过同时解决少样本DA和少样本识别问题。然而,DA本身,特别是无监督DA(UDA),已经被深入研究。一个简单的解决方案似乎是将FSL与现有的DA方法相结合。特别是,大多数现有的FSL方法依赖于从源学习的特征嵌入空间中对目标类的特征重用,因此,通过对准该嵌入空间中的源和目标数据分布来引入DA学习目标是自然的。
-
然而,现有的DA和FSL方法的简单组合未能提供有效的解决方案(参见表1-2)。这是因为现有的UDA方法假设目标域和源域具有相同的标签空间。由于它们主要是为跨域的分布对齐而设计的,(最近专注于每类对齐),它们本质上不适合FSL,因此目标类与源类完全不同:无论是全球性的还是个人的,类分布对齐会对类分离和模型区分度产生不利影响。如何实现DA的域分布对齐同时保持源/目标每类区分度因此成为DA-FSL的关键。
-

-
表1.三个数据集在DA-FSL设置(5向1次)下的95%置信区间的比较准确度(%,前1)。
-

-
表2.三个数据集在DA-FSL设置(5-way 5-shot)下的95%置信区间的比较准确度(%,top-1)。
-
-
为此,我们提出了一个域对抗原型网络(DAPN)来解决DA-FSL问题。具体来说,在原型网络之上(专为FSL设计),我们引入了一种新的对抗学习方法,用于少样本域自适应。注意,域对抗学习在现有的UDA方法中很流行,由于按类对齐是UDA的最终目标,因此在这些UDA方法中的成功使用表明,全局分布对齐将间接导致按类对齐。
-

-
图2.建议的DA-FSL DAPN模型概述。明确包括源/目标域混淆和域区分。
-
-
由于目标类与源类不同,这对我们的DA-FSL问题是不利的,因此,除了现有的UDA方法通常使用的领域混淆目标来学习领域自适应特征嵌入空间外,在特征嵌入之前引入了新的损失(见图2)来加强源/目标类的区分性。最终的结果是我们将两全其美:对准源和目标的全局分布以减小DA的域间隙;同时,每个类的分布不对齐,源类和目标类保持良好的可分离性,这有利于FSL任务。利用分别为DA和FSL设计的两组损耗,为了消除对多个损失的权重选择的需要,还引入了自适应重新加权模块,以进一步平衡这两个目标。我们的贡献是:
- (1)对DA-FSL问题进行了形式化的定义和求解,首次提出了一种新的DA-FSL问题求解方法,
- (2)提出了一种新的对抗性学习方法来学习特征表示,该方法不仅可以用于领域自适应,而且可以用于领域特定的类分离。大量的实验表明,我们的模型优于现有的特征表示方法FSL和域自适应模型(以及它们的简单组合)。
Related Work
-
在过去的几年里,FSL一直由基于元学习的方法主导。它们可以分为三组:(1)第一组采用基于模型的学习策略,微调从源类训练的模型,然后快速适应目标类。(2)第二组专注于最近邻(NN)搜索的距离度量学习。匹配网络(MatchingNet)为支持集和查询集构建不同的编码器。原型网络(ProtoNet)通过计算测试样本到每个目标类的原型表示的距离来学习一个度量空间,在这个度量空间中可以进行对象分类。对ProtoNet进行了改进,使未标记的样本也可以在每个事件中使用。(CNET)通过计算查询图像与每个新类的少数样本之间的关系得分来识别新/目标类的样本。(3)第三组选择利用新的优化算法而不是梯度下降来适应少数群体。制定了基于LSTM的元学习者模型来学习用于在少数群体中训练另一个神经网络分类器的精确优化算法。提出了模型不可知元学习(MAML)学习者,其权重使用梯度更新,虽然我们的DAPN模型属于第二组,ProtoNet作为一个组件,它的目的是解决两个少样本DA和少样本识别问题(包括在DA-FSL)在一个统一的框架,这是以前没有研究过。
-
域自适应。请注意,我们的DA-FSL设置中涉及的域自适应问题无法通过监督域自适应(SDA)解决。尽管在我们的DA-FSL设置下存在用于DA的目标域的一小组标记样本,但目标域的类与源域的类没有重叠。最近,无监督域自适应(UDA)在DA研究中占据主导地位。传统的UDA模型通常利用子空间对齐技术。许多现代UDA方法,诉诸对抗学习,它将源和目标特征之间的距离最小化。
-
然而,如前所述,即使强制执行全局域分布对齐,它也经常导致每类对齐,这降低了FSL任务的学习特征表示的区分度。此外,由于现有的UDA方法仍然假设目标域包含与源域相同的类,因此关注每类跨域对齐的最近方法不适合我们的DA-FSL问题。因此,在我们的DAPN中采用全局域数据分布对齐,并引入特殊机制来防止每个类对齐。
-
领域自适应+少样本学习。请注意,跨领域数据集(miniImageNet ,CUB )在中用于FSL。然而,它仅用于评估跨数据集的综合,而不是开发新的跨域FSL方法。相比之下,这项工作关注更大的域变化(例如,自然图像与卡通图像)。重要的是,我们开发了一种新的DA-FSL模型来解决这个问题。请注意,提出了一种称为少数样本域自适应(FSDA)的新设置。然而,中的FSDA设置与我们的设置有很大的不同:在FSDA设置下,源和目标域共享同一组类,而在我们的DA-FSL设置下,源和目标类没有重叠。也提出了一个基于DA的FSL设置,但它与我们的工作有很大的不同:除了一些标记的样本,假设可以访问来自目标域的大量未标记样本。相反,我们没有做这个假设。因此,中的问题设置比我们的简单得多,并且旨在利用未标记的目标域数据,[Meta-learning with domain adaptation for few-shot learning under domain shift]中的方法不能在这里使用。
-
类别 核心方法 局限(针对 DA-FSL) FSL 1. 模型基:Meta Networks(微调适配)2. 距离度量基:ProtoNet(原型分类)、MatchingNet(双编码器)、RelationNet(关系分数)3. 优化基:MAML(梯度元学习) 未考虑源 / 靶域差异,无法处理域 gap DA 1. SDA:需源 / 靶类重叠,不适用 DA-FSL2. UDA:域对抗(CDAN、ADDA)、子空间对齐,聚焦全局 / 类级域对齐 假设源 / 靶类重叠,域对齐会破坏 DA-FSL 的类区分性 DA+FSL 1. FSDA:源 / 靶类重叠,与 DA-FSL 设定冲突2. 跨域 FSL 评估(如 miniImageNet→CUB):仅验证泛化性,未提新方法3. 需大量无标签靶样本的 DA-FSL:依赖额外无标签数据,假设过强 设定与本文 DA-FSL(类无重叠、无额外无标签数据)不符
Methodology
- 特征提取:
prototypical_module/resnet.py和domain_adaptive_module/network.py的骨干网络(ResNet/AlexNet)提取通用特征。 - 域对齐:
loss.py的 CDAN 通过对抗学习对齐源 / 目标域的 “特征 - 类别” 联合分布,GRL 和熵加权确保对齐的有效性和鲁棒性。 - 少样本分类:
utils.py的原型计算和距离度量,在对齐后的特征空间中,用少量样本构建类原型并完成分类。 - 联合优化:
learnedweight类动态平衡两个任务的损失,使模型同时优化 “域对齐” 和 “类别判别性”,最终在目标域的少样本任务上实现高泛化性能。
Problem Definition
-
在我们的DA-FSL设置下,我们被给予来自源域中的源类Cs的集合的大样本集Ds、来自目标域中的目标类Cd的集合的少量样本集Dd、以及来自目标域中的目标类Ct的另一集合的测试集T,其中 C s ∩ C d = ∅ ; , C t ∩ C d = ∅ C_s \cap C_d =\emptyset ;,C_t \cap C_d =\emptyset Cs∩Cd=∅;,Ct∩Cd=∅;,并且 C s ∩ C t = ∅ C_s \cap C_t = \emptyset Cs∩Ct=∅ ;。然后,我们的重点是用Ds和Dd训练模型,然后评估其在T上的泛化能力。注意,还有一个来自目标类Ct集合的少量样本集Dt(即支持集),也可以用于模型训练。
-
然而,我们遵循不需要微调的FSL方法,因此在训练阶段忽略Dt。由于域差异,源类Cs集合的数据分布Ps(x)与(即Pt(x)),其中x表示样本。形式上,我们有 D s = { ( x 1 ; y 1 ) , . . . , ( x N ; y N ) ∣ x i ~ P s ( x ) ; y i ∈ C s } D_s = \{(x_1; y_1),...,(x_N ; y_N)| x_i ~P_s(x); y_i \in C_s\} Ds={(x1;y1),...,(xN;yN)∣xi~Ps(x);yi∈Cs} 和 D d = { ( x 1 ; y 1 ) , . . . , ( x N ; y N ) ∣ x i ~ P t ( x ) ; y i ∈ C d } D_d = \{(x_1; y_1),...,(x_N ; y_N)| x_i ~P_t(x); y_i \in C_d\} Dd={(x1;y1),...,(xN;yN)∣xi~Pt(x);yi∈Cd} ,其中yi表示样本xi的类标签。我们的DA-FSL的目标是利用Ds和Dd来训练可以很好地推广到T的分类器。
-
提出的DAPN模型如图2所示。网络中的各个模块被设计用于少量学习,域自适应以及自适应重新加权以平衡两个主要目标。它们分别在接下来的三个小节中详细介绍。
-
问题形式化定义:源域数据: D s = { ( x i , y i ) ∣ x i ∼ P s ( x ) , y i ∈ C s } D_s=\{(x_i,y_i)|x_i∼P_s(x),y_i∈C_s\} Ds={(xi,yi)∣xi∼Ps(x),yi∈Cs}( P s P_s Ps为源域分布,样本充足)靶域少样本数据: D d = { ( x i , y i ) ∣ x i ∼ P t ( x ) , y i ∈ C d } D_d=\{(x_i,y_i)|x_i∼P_t(x),y_i∈C_d\} Dd={(xi,yi)∣xi∼Pt(x),yi∈Cd}( P t P_t Pt为靶域分布,仅 k 个样本 / 类)靶域测试数据: T = { ( x i , y i ) ∣ x i ∼ P t ( x ) , y i ∈ C t } T=\{(x_i,y_i)|x_i∼P_t(x),y_i∈C_t\} T={(xi,yi)∣xi∼Pt(x),yi∈Ct}目标:利用 D s D_s Ds和 D d D_d Dd训练分类器,在T上泛化(不使用 C t C_t Ct的预训练样本 D t D_t Dt)。
-
少样本学习模块(基于 ProtoNet),
- Episode 训练:模拟少样本场景,生成训练 episode:源域 episode( e s e_s es):从 D s D_s Ds随机选 N s c N_{sc} Nsc类( N s c > N m e t a N_{sc}>N_{meta} Nsc>Nmeta,如 N m e t a = 5 N_{meta}=5 Nmeta=5则 N s c = 20 N_{sc}=20 Nsc=20),每类选 k 个样本构成支持集 S s S_s Ss,剩余样本构成查询集 Q s Q_s Qs。靶域 episode( e d e_d ed):对 D d D_d Dd做数据增强(水平翻转 + 5 次随机裁剪)得到 D ^ d \hat{D}_d D^d,选 N d c = N m e t a N_{dc}=N_{meta} Ndc=Nmeta类,生成 S d S_d Sd(k 样本 / 类)和 Q d Q_d Qd。
- 原型计算与损失:类原型: p c s = 1 ∣ S c ∣ ∑ ( x i , y i ) ∈ S c f φ ( x i ) p_c^s=\frac{1}{|S_c|}\sum_{(x_i,y_i)∈S_c} f_φ(x_i) pcs=∣Sc∣1∑(xi,yi)∈Scfφ(xi)( f φ f_φ fφ为嵌入函数)。分类损失: L p s = − E S s , Q s ∑ ( x , y ) ∈ Q s l o g p φ ( y = c ∣ x ) L_{ps}=-\mathbb{E}_{S_s,Q_s}\sum_{(x,y)∈Q_s} log p_φ(y=c|x) Lps=−ESs,Qs∑(x,y)∈Qslogpφ(y=c∣x)( p φ p_φ pφ为基于欧氏距离的 softmax 概率),同理得 L p d L_{pd} Lpd(靶域 episode 损失)。
-
域对抗适应模块(平衡域对齐与类区分)
- 域自适应嵌入:输入→ResNet18(提取 512 维特征 f ~ \tilde{f} f~)→自编码器 + 注意力子模块(输出嵌入特征 f = F ( x ) f=F(x) f=F(x),注意力用 sigmoid (FC ( f ~ \tilde{f} f~)) 去除域特异信息)。
- 域混淆损失( L d c L_{dc} Ldc):改进 CDAN,对齐源 / 靶域全局分布:联合特征: h = ( f , g ) h=(f,g) h=(f,g)(g为分类器预测),用 T ( h ) T(h) T(h)(小维度近似外积,避免维度爆炸)输入域判别器。熵加权:用 w ( H ( g ) ) = 1 + e − H ( g ) w(H(g))=1+e^{-H(g)} w(H(g))=1+e−H(g)( H ( g ) H(g) H(g)为预测熵)加权样本,优先拟合易迁移样本。
- 域判别损失( L d s L_{ds} Lds):在 ResNet18 输出( f ~ \tilde{f} f~)上添加域判别器,增强源 / 靶类分离,避免域对齐破坏类区分:损失为 E ~ = − E x s ∼ P s l o g D ~ ( f ~ s , g ~ s ) − E x t ∼ P t l o g [ 1 − D ~ ( f ~ t , g ~ t ) ] \tilde{E}=-\mathbb{E}_{x_s∼P_s} log \tilde{D}(\tilde{f}_s,\tilde{g}_s) - \mathbb{E}_{x_t∼P_t} log [1-\tilde{D}(\tilde{f}_t,\tilde{g}_t)] E~=−Exs∼PslogD~(f~s,g~s)−Ext∼Ptlog[1−D~(f~t,g~t)]。
-
自适应权重模块(平衡多损失)
- 基于 “任务依赖不确定性”,最大化高斯似然自动学习损失权重:总损失: L = 1 σ 1 2 L p s + 1 σ 2 2 L p d + 1 σ 3 2 L d c + 1 σ 4 2 L d s + l o g σ 1 + l o g σ 2 + l o g σ 3 + l o g σ 4 L=\frac{1}{\sigma_1^2}L_{ps}+\frac{1}{\sigma_2^2}L_{pd}+\frac{1}{\sigma_3^2}L_{dc}+\frac{1}{\sigma_4^2}L_{ds}+log\sigma_1+log\sigma_2+log\sigma_3+log\sigma_4 L=σ121Lps+σ221Lpd+σ321Ldc+σ421Lds+logσ1+logσ2+logσ3+logσ4。权重定义: w j = l o g σ j 2 w_j=log\sigma_j² wj=logσj2(j=1~4),无需手动调参。
Few-Shot Learning Module
-
Episode Training:为了在训练阶段模拟少样本测试过程,我们从Ds和Dd中抽取少量数据,形成episodic训练集。具体来说,我们首先从大样本集Ds中构建训练episode。为了形成训练episode es,我们从Ds中随机选择 N s c N_{sc} Nsc 个类,然后从 N s c N_{sc} Nsc 个类中构建两组样本:支持集Ss由 k × N s c k × N_{sc} k×Nsc 个样本组成(每个类k个样本),查询集Qs由来自相同 N s c N_{sc} Nsc 个类的样本组成。对于 Nmeta路k-shot问题,我们用Nsc路k-shot训练集训练我们的模型,其中 N s c > N m e t a N_{sc} > N_{meta} Nsc>Nmeta,如所示。
-
例如,如果我们在测试阶段进行5向分类和5次学习,则每个训练集可以在 N s c = 20 N_{sc} = 20 Nsc=20 和k = 5的情况下生成。除了来自Ds的训练集之外,我们还从少次样本集Dd中构建训练集。由于Dd中的样本稀缺,甚至无法形成单个训练集,我们执行标准的数据扩充方法(即广泛用于训练现有CNN模型的水平翻转和5个随机裁剪),并获得增强样本集 D ^ d \hat D_d D^d。为了形成训练片段 e d e_d ed,我们然后从 D ^ d \hat D_d D^d中随机选择Ndc类,并从Ndc类中构建两组样本:支持集Sd包含k× Ndc个样本,每个类k个样本,查询集Qd从相同的Ndc个类的剩余部分中采样。
-
原型网络:原型网络被选为我们模型中的主要FSL组件,因为它简单但仍然非常有竞争力。它学习支持集Ss中每个类的原型,并根据每个样本与不同原型之间的距离对查询集Qs中的每个样本进行分类具体地,通过嵌入函数f’计算M维原型,带有可学习参数“的。对于嵌入函数 f ϕ : R d → R M f_\phi:\R^d\rightarrow R^M fϕ:Rd→RM,将样本从d维视觉空间投影到M维视觉空间中,维特征空间,其中来自同一类的样本彼此接近,而来自不同类的样本彼此远离。
-
形式上,支持集Ss中的类c的原型 p c s p^s_c pcs 被定义为属于该类的嵌入支持样本的均值向量:
-
p c s = 1 ∣ S c ∣ ∑ ( x i ; y i ) ∈ S c f ϕ ( x i ) ; ( 1 ) p^s_c = \frac1{|S_c|}\sum_{(xi;yi)\in S_c} f_\phi(x_i); (1) pcs=∣Sc∣1(xi;yi)∈Sc∑fϕ(xi);(1)
-
其中 S c = { ( x i ; y i ):( x i ; y i ) ∈ S s ; y i = c } S_c = \{(x_i ; y_i):(x_i ; y_i)\in S_s; y_i = c\} Sc={(xi;yi):(xi;yi)∈Ss;yi=c} 表示来自类别c的支持样本的集合。
-
-
原型网络然后基于softmax输出w.r.t.样本嵌入f '(x)和类原型 p c s p^s_c pcs 之间的距离产生查询样本x的类分布,如下所示:
-
p ϕ ( y = c ∣ x ) = e x p ( − d i s t ( f ϕ ( x ) ; p s c ) ) ∑ c ′ e x p ( − d i s t ( f ϕ ( x ) ; p c ′ s ) ) ; ( 2 ) p_\phi(y = c|x) =\frac{exp(−dist(f_\phi(x); ps c ))}{\sum_{c'} exp(−dist(f_\phi(x); p^s_{c'} ))}; (2) pϕ(y=c∣x)=∑c′exp(−dist(fϕ(x);pc′s))exp(−dist(fϕ(x);psc));(2)
-
其中dist(·;·)表示RM空间中的欧几里德距离。利用上述类别分布,基于查询样本x相对于其真实类别标签c的负对数概率来定义每个片段es上的损失函数:
-
L p s = E S s ; Q s [ − ∑ ( x ; y ) ∈ Q s l o g p ϕ ( y = c ∣ x ) ] : ( 3 ) L_{ps} = E_{S_s;Q_s} [− \sum_{(x;y)\in Q_s} log p_\phi(y = c|x)]: (3) Lps=ESs;Qs[−(x;y)∈Qs∑logpϕ(y=c∣x)]:(3)
-
类似地,每个片段 e d e_d ed 上的损失函数可以基于查询样本x相对于其真实类别标签c的负对数概率来公式化:
-
L p d = E S d ; Q d [ − ∑ ( x ; y ) ∈ Q d l o g p ϕ ( y = c ∣ x ) ] : ( 3 ) L_{pd} = E_{S_d;Q_d} [− \sum_{(x;y)\in Q_d} log p_\phi(y = c|x)]: (3) Lpd=ESd;Qd[−(x;y)∈Qd∑logpϕ(y=c∣x)]:(3)
-
原型学习的上述两个损失在我们提出的DAPN模型中用于域自适应嵌入模块的特征输出(见图2),这将在下面描述。
-
Domain Adversarial Adaptation Module
-
如前所述,域自适应模块的主要目标是学习一个特征嵌入空间,在该空间中,源域和目标域的全局分布是对齐的,同时仍然保持特定于域的判别信息。为此,我们选择在嵌入模块之前和之后执行域区分度和域对齐学习目标。然后,自适应损失重新加权模块将在第3.4节中描述。
-
域自适应嵌入如图2所示,嵌入模块的输入是特征提取CNN的输出。(本作品中的ResNet 18),它将每个样本(图像)x表示为512维特征向量: f ˉ = F ˉ ( x ) \bar f =\bar F(x) fˉ=Fˉ(x)。嵌入模块由自动编码器和注意子模块组成。具体地说,自动编码器将 f ˉ \bar f fˉ 作为输入并输出嵌入向量 f ˉ = F ˉ ( x ) \bar f =\bar F(x) fˉ=Fˉ(x)。此外,为了使 f ˉ \bar f fˉ 尽可能地域混淆,我们在其上强加了由全连接(FC)层组成的注意力子模块:注意力得分 s i g m o i d ( F C ( f ˉ )) sigmoid(FC(\bar f)) sigmoid(FC(fˉ))用于去除任何特定于域的信息(其中FC(·)表示FC层的输出)。将自动编码器和注意力子模块结合在一起,我们得到嵌入模块的最终输出f = F(x)。
-
域自适应损失尽管自动编码器和注意力子模块都可以隐式地对齐两个域,但需要通过引入域自适应损失来进一步对齐。受条件域对抗网络(CDAN)在域自适应任务上的上级性能的启发,我们在域CJD上定义了跨源分布Ps(x)和目标分布Pt(x)的域对抗损失函数E,以及在特征嵌入模块和分类器预测g = G(x)之后的特征表示f = F(x)上:
-
min D max F ; G E = − E x i s ∼ P s ( x ) l o g [ D ( f i s ; g i s ) ] − E x j t ∼ P t ( x ) l o g [ 1 − D ( f j t ; g j t ) ] : ( 5 ) \min_D \max_{F;G} E = −E_{x^s_i ∼P_s(x)} log[D(f^s_i ; g^s_i )] − E_{x^t_j∼P_t(x)} log[1 − D(f_j^t ; g^t_j )]: (5) DminF;GmaxE=−Exis∼Ps(x)log[D(fis;gis)]−Exjt∼Pt(x)log[1−D(fjt;gjt)]:(5)
-
设h =(f; g)是特征表示f和分类器预测g的联合变量。具体地,选择多线性映射T(h)= f g以使D关于g,g被定义为多个随机向量的外积。然而,多线性映射面临维度爆炸。让df和dg分别表示向量f和g的维度。多线性映射的维度为df ×dg,这通常维数太高,无法嵌入深度学习模型。为了解决这个维度爆炸问题,内积T(f; g)可以近似为点积T(f; g)= 1 p d(Rff)(Rgg),其中是逐元素乘积,Rf 2 Rd×df和Rg 2 Rd×dg是两个仅采样一次的随机矩阵,并在训练阶段固定,并且d df × dg。请注意,Rf或Rg中的每个元素都遵循一个均匀分布和高斯分布等具有不变性的对称分布。最后,我们采用以下条件化策略:
-
T ( h ) = ( T ⊗ ( f ; g ) i f d f × d g ≤ d f e a t T ( f ; g ) o t h e r w i s e ; ( 6 ) T(h) = ( T⊗(f; g) if df × dg ≤ df eat T(f; g) otherwise; (6) T(h)=(T⊗(f;g)ifdf×dg≤dfeatT(f;g)otherwise;(6)
-
其中 D f e a t D_{feat} Dfeat 表示全连接层的输出的维度。对于域自适应,我们解决从等式(5)导出的优化问题:
-
min D max T E = − E x i s ∼ P s ( x ) l o g [ D ( T ( h i s ) ) ] − E x j t ∼ P t ( x ) l o g [ 1 − D ( T ( h j t ) ) ] : ( 7 ) \min_D \max_{T} E = −E_{x^s_i ∼P_s(x)} log[D(T(h^s_i))] − E_{x^t_j∼P_t(x)} log[1 − D(T(h^t_j))]: (7) DminTmaxE=−Exis∼Ps(x)log[D(T(his))]−Exjt∼Pt(x)log[1−D(T(hjt))]:(7)
-
其中maxT E的子问题通过添加梯度对抗层(见图2)来解决,如[9]所示,minD E的子问题通过标准反向传播来解决。
-
-
请注意,有些样品易于转移,而有些样品则难以转移。如果损失函数对不同的样本施加相同的重要性,它可能会削弱学习模型的有效性。因此,我们通过采用熵准则H(g)= − PC c=1 gc log gc来修改原始CDAN 公式,其中C是类别的数量,gc是样本属于类别c的概率。我们通过熵感知权重w(H(g))= 1 + e-H(g),使容易转移的例子优先于困难的例子。学习域混淆特征表示的损失被公式化为:
- L d c = − E x s i ∼ P s ( x ) w ( H ( g s i ) ) l o g [ D ( T ( h s i ) ) ] − E x t j ∼ P t ( x ) w ( H ( g t j ) ) l o g [ 1 − D ( T ( h t j ) ) ] : ( 8 ) Ldc = − Ex s i ∼Ps(x)w(H(gs i )) log[D(T(hs i ))] − Ex t j∼Pt(x)w(H(gt j )) log[1 − D(T(ht j ))]: (8) Ldc=−Exsi∼Ps(x)w(H(gsi))log[D(T(hsi))]−Extj∼Pt(x)w(H(gtj))log[1−D(T(htj))]:(8)
-
域鉴别损失注意,等式(8)中的域自适应/混淆损失对于桥接源和目标之间的域间隙是有用的,但是它也具有在每类级别的过度对准的不希望的副作用,这将损害FSL性能。我们引入了一个域歧视损失,使每-每个域中的类分布彼此不同。请注意,在通过梯度反转嵌入后,已经有一个域对齐的域对齐器(见图2),所以在同一个嵌入空间上添加另一个没有什么意义。相反,我们的域区分损失被添加到特征提取CNN的输出上。
-
具体地,我们首先在域 D ˉ \bar D Dˉ 上定义一个传统的分类损失函数E,该函数跨越源分布Ps(x)和目标分布Pt(x),以及在特征嵌入之前的特征表示 f ˉ = F ˉ ( x ) \bar f =\bar F(x) fˉ=Fˉ(x) 和分类器预测 g ˉ = G ˉ ( x ) \bar g =\bar G(x) gˉ=Gˉ(x):
- m i n D ; F ; G E = − E x s i ∼ P s ( x ) l o g [ D ( f s i ; g s i ) ] − E x t j ∼ P t ( x ) l o g [ 1 − D ( f t j ; g t j ) ] : ( 9 ) min ~D;F ; ~ G~ ~E = −Ex s i ∼Ps(x) log[ ~D( ~f s i ; ~g s i )] − Ex t j∼Pt(x) log[1 − D~( ~f t j ; ~g t j )]: (9) min D;F; G E=−Exsi∼Ps(x)log[ D( fsi; gsi)]−Extj∼Pt(x)log[1−D ( ftj; gtj)]:(9)
-
令 h ˉ = ( f ˉ ; g ˉ ) \bar h =(\bar f; \bar g) hˉ=(fˉ;gˉ)。学习领域特定特征表示的损失为:
- L d s = − E x s i ∼ P s ( x ) l o g [ D ( T ( h s i ) ) ] − E x t j ∼ P t ( x ) l o g [ 1 − D ( T ( h t j ) ) ] : ( 10 ) Lds = −Ex s i ∼Ps(x) log[ ~D(T( ~h s i ))] − Ex t j∼Pt(x) log[1 − D~(T( ~h t j ))]: (10) Lds=−Exsi∼Ps(x)log[ D(T( hsi))]−Extj∼Pt(x)log[1−D (T( htj))]:(10)
Adaptive Re-weighting Module
-
我们的DAPN模型是用上面提到的多个目标(即,在这些损失中,方程(3)(4)中的FSL损失和(10)中的域区分损失与(8)中的域自适应损失一样向不同的方向拉动。这使得在它们之间进行平衡变得更加关键,特别是因为在不同的情节中,不同的识别任务被采样,这对这些竞争的学习目标提出了不同的要求。因此,一个简单的加权损失和是不够的。需要更复杂的自适应损失重新加权机制。
-
如文献所报道的,在多任务学习中存在任务相关的不确定性,它对所有输入数据保持不变,但在不同的任务之间是变化的,因此,我们采用了一种基于最大化高斯似然的自适应多任务损失函数,为了自动确定各目标的权重,设输入为x,权重为 W 的神经网络模型的输出为 f W ( x ) f^W(x) fW(x),(其中 f c W ( x ) f^W_c(x) fcW(x) 是 f W ( x ) f^W(x) fW(x) 的第c个元素),并且模型的离散输出表示为y。我们利用分类似然性来用softmax函数压缩模型输出的缩放版本,如下所示:
- p ( y ∣ f W ( x ) ) = s o f t m a x ( f W ( x ) ) : ( 11 ) p(y|f^W(x)) = softmax(f^W(x)): (11) p(y∣fW(x))=softmax(fW(x)):(11)
-
具体而言,对于正标量σ,该输出的对数似然为:
-
l o g p ( y = c ∣ f W ( x ) ; σ ) = 1 σ 2 f c W ( x ) − l o g ∑ c ′ e x p ( 1 σ 2 f c ′ W ( x ) ) : ( 12 ) log p(y = c|f^W(x); σ) =\frac 1 {σ^2}f^W_c (x)−log\sum_{c'} exp(\frac 1{σ^2} f^W_{c'} (x)): (12) logp(y=c∣fW(x);σ)=σ21fcW(x)−logc′∑exp(σ21fc′W(x)):(12)
-
在这项工作中,我们的DAPN有四个离散输出y1; y2; y3; y 4,分别用多个softmax似然建模。联合损失L(W; σ1; σ2; σ3; σ4)为:
-
L ( W ; σ 1 ; σ 2 ; σ 3 ; σ 4 ) = s o f t m a x ( y 1 = c ; f W ( x ) ; σ 1 ) ⋅ s o f t m a x ( y 2 = c ; f W ( x ) ; σ 2 ) ⋅ s o f t m a x ( y 3 = c ; f W ( x ) ; σ 3 ) ⋅ s o f t m a x ( y 4 = c ; f W ( x ) ; σ 4 ) ≈ 1 σ 21 L 1 ( W ) + 1 σ 22 L 2 ( W ) + 1 σ 23 L 3 ( W ) + 1 σ 24 L 4 ( W ) + l o g σ 1 + l o g σ 2 + l o g σ 3 + l o g σ 4 : L(W; σ1; σ2; σ3; σ4) = softmax(y1=c; fW(x); σ1) · softmax(y2=c; fW(x); σ2) · softmax(y3=c; fW(x); σ3) · softmax(y4=c; fW(x); σ4) ≈ 1 σ 2 1 L1(W) + 1 σ 2 2 L2(W) + 1 σ 2 3 L3(W) + 1 σ 2 4 L4(W) + log σ1 + log σ2 + log σ3 + log σ4: L(W;σ1;σ2;σ3;σ4)=softmax(y1=c;fW(x);σ1)⋅softmax(y2=c;fW(x);σ2)⋅softmax(y3=c;fW(x);σ3)⋅softmax(y4=c;fW(x);σ4)≈1σ21L1(W)+1σ22L2(W)+1σ23L3(W)+1σ24L4(W)+logσ1+logσ2+logσ3+logσ4:
-
-
本文将L1、L2、L3和L4之间的自适应权直接定义为: w j = l o g σ j 2 ( j = 1 ; 2 ; 3 ; 4 ) w_j = log σ^2_j(j = 1; 2; 3; 4) wj=logσj2(j=1;2;3;4) 设 L 1 = L p s L_1 = L_{ps} L1=Lps(参见等式(3)), L 2 = L p d L_2 = L_{pd} L2=Lpd(参见等式(4)), L 3 = L d c L_3 = L_{dc} L3=Ldc(参见等式(8))和 L 4 = L d s L_4 = L_{ds} L4=Lds(参见等式(10))。
- L = w 1 / 2 + e x p ( − w 1 ) L s + w 2 / 2 + e x p ( − w 2 ) L d + w 3 / 2 + e x p ( − w 3 ) L d c + w 4 / 2 + e x p ( − w 4 ) L d s : ( 13 ) L = w_1/2 + exp(−w_1)L_s + w_2/2 + exp(−w_2)L_d\\+ w_3/2 + exp(−w_3)L_{dc} + w_4/2 + exp(−w_4)L_{ds}: (13) L=w1/2+exp(−w1)Ls+w2/2+exp(−w2)Ld+w3/2+exp(−w3)Ldc+w4/2+exp(−w4)Lds:(13)
-
算法思想:3 个核心 “工具”
-
原型学习:给每个类找 “平均特征”,先看 “标准答案的核心要点”(比如 “猫” 的标准答案要点是 “尖耳朵、长尾巴”),再对比学生答案 ——AI 会给每个类算一个 “原型”(所有样本特征的平均值)。模型判断一张新素描是不是猫,就看这张素描的特征离 “猫的素描原型” 有多近(近就是猫,远就不是)。
-
参数 含义 例子 影响 k(shot 数) 每类少样本的数量 k=1(1 张 / 类)、k=5 k 越小越难(1 张猫素描比 5 张难学) N_sc 源域 episode 的类数 N_sc=20 类数越多,训练越全面(学 20 类比学 5 类好) N_dc 靶域 episode 的类数 N_dc=5 和测试任务一致(测试是 5-way,训练也用 5 类) 数据增强方式 翻转、裁剪等 水平翻转 + 5 次随机裁剪 增强越多,靶域样本越充足(避免过拟合) -
对抗学习:“判别器” 和 “嵌入器” 的 “猫鼠游戏”,让 AI 分不清 “照片” 和 “素描”(域对齐),但能分清 “猫” 和 “狗”(类区分)。判别器:像 “警察”,任务是判断输入的特征是 “照片来的” 还是 “素描来的”;嵌入器:像 “小偷”,任务是把 “照片特征” 和 “素描特征” 变得像一点,骗判别器认错。
-
参数 含义 例子 影响 嵌入维度 嵌入器输出的特征维度 256 维 维度越高,能存的信息越多(但计算越慢) 判别器层数 判别器的神经网络层数 2 层全连接层 层数越多,判别越准(但容易过拟合) 熵加权系数 1+e^-H (g) 中的参数 固定公式,无手动调参 自动区分易难样本(不用手动改) -
自适应权重:“哪个难就多帮哪个”,会自动调整 “类区分损失” 和 “域对齐损失” 的权重。
-
-
原型计算(均值):用 “所有样本特征的平均值” 当原型,本质是找 “类的中心”;分类损失(负对数概率):让 AI 的预测更 “确定”;熵加权(1+e^-H (g)):区分 “易学样本” 和 “难学样本”;高斯似然(自动算权重):给每个损失分配 “合理的权重”
-
平衡矛盾:“域对齐” 和 “类区分” 是天生的矛盾 —— 要适应新域(像融入新环境),又不能丢自己的 “身份”(像分清自己是谁)。DAPN 的解决方案就像 “做人”:既要学新环境的规则,又要守住自己的核心原则。
-
整体大于部分之和:不把 “少样本学习” 和 “域适应” 分开做,而是放在一个框架里。
Experiments
Datasets and Settings
-
数据集。三个数据集用于评估:
-
(1)mini ImageNet :该数据集是ILSVRC-12 的子集。它由100个类组成,所有图像的大小为84 × 84。我们遵循中广泛使用的类划分,并将其调整为我们的DA-FSL设置:Cs为64类(每类600个图像),Cd为16类(每类仅k个图像),Ct为20类(每类仅k个标记图像形成支持集,另一个形成测试集)。在这项工作中,我们设置k = 1或5。此外,我们利用风格转移算法将Cd和Ct的样本转移到一个新的域。具体来说,源域的样本是自然图片,而新/目标域的样本是铅笔画。
-
(2)tieredImageNet :该数据集也是ILSVRC-12的子集,但它比miniImageNet大。(平均每类为1278个图像),CD为97类(每类只有K个图像),所有图像的大小也是84 × 84。在tieredImageNet的Cd和Ct拆分上执行相同样式的传输,以形成新域。
-
(3)DomainNet :为了生成一个新的真实数据集,我们利用了一个现有的多源域自适应数据集,这是迄今为止最大的UDA数据集。(平均每班516张图片),CD 55班(每类只有k个图像),Ct为70个类。在这项工作中,我们以DomainNet中的真实的照片域为源域,草图域为目标域,每幅图像的比例为84 × 84。对于上述三个数据集中的每一个,来自目标域的示例在图3中示出。
-

-
图3.三个数据集的目标域示例。在每个数据集中,源域包含真实的/自然图像。
-
-
评估。我们在5路1-shot和5路5-shot设置下对测试集进行评估,与以前的作品一样。计算每个测试集的top-1准确率,并报告超过2,000个测试集的平均top-1准确率(95%置信区间)。
-
Baselines。选择了三组基线:
- (1)FSL Baselines:代表性的FSL基线包括关系网络,MatchingNet ,PPA ,SGM ,ProtoNet ,MetaOptNet 和Baseline++ 。我们报告了5路1次和5路5次设置下的测试结果。
- (2)UDA基线:选择基于全局域级对齐而不是局部类级对齐的代表性UDA基线。这些包括CDAN ,ADDA ,AFN ,M-ADDA 和CyCADA 。为了在5路1次和5路5次设置下进行测试,我们首先用这些UDA方法训练CNN主干,然后提取测试/目标样本的特征,从而可以使用朴素近邻分类器来识别测试/目标类。
- (3)UDA+FSL基线:直接结合UDA和FSL的代表性基线包括CDAN+ProtoNet和CDAN+MetaOptNet我们基于两个标准选择UDA+FSL基线:1)UDA基线是最新的/最先进的(例如CDAN 是最先进的); 2)FSL基线是代表性的/最先进的(例如ProtoNet 是代表性的,MetaOptNet 是最先进的)。
-
实现细节。我们的模型在PyTorch中实现。ResNet 18模型被用作所有比较方法的主干。我们使用训练集从头开始预训练主干,然后对其进行微调以解决DA-FSL问题。在这项工作中,端到端的训练过程通过使用反向传播和随机梯度下降来实现。学习率最初设置为η0 = 0:001,然后通过 η p = η 0 ( 1 + α p − β η_p = η_0(1+α_p^{−β} ηp=η0(1+αp−β 进行调整,其中α = 10,β = 0:75,p是从0到1的训练进度。还选择了0.9的动量和0.01的权重衰减进行训练。代码和数据集将很快发布。
Main Results
- 在我们的DA-FSL设置下,三个数据集的比较结果见表1和表2。我们有以下观察结果:(1)在所有数据集上,我们的DAPN显著优于最先进的FSL和UDA方法,因为它能够解决这两个问题。(2)我们的DAPN模型也明显优于两个UDA+FSL基线,这表明UDA和FSL的简单组合不如我们专门为DA-FSL设计的DAPN模型有效。(3)有趣的是,当与一个朴素的最近邻分类器(FSL)相结合时,现有的UDA方法的性能与任何现有的FSL方法一样好。这表明解决域自适应问题是我们DA-FSL设置的关键。(4)同样的 5-way 5-shot (或5路1次)评估设置,前两个数据集上的测试结果明显比DomainNet上的测试结果差。这表明域间隙(由风格转移引起)和类别差距前两个数据集的(由FSL引起的)甚至比广泛使用的现实数据集的更大。这证明了将这两个合成数据集纳入DA-FSL设置下的性能评估是合理的。
Further Evaluations
-
我们完整模型的消融研究。为了展示我们完整DAPN模型中每个模块的贡献,我们将其与三个简化版本进行比较:(1)FSL {仅少数样本学习(FSL)模块(在第3.2节中描述);(2)DAA(域对抗适应(DAA)模块)(在3.3节中描述)与朴素最近邻分类器相结合;(3)FSL+DAA {FSL和DAA模块组合用于DAFSL而不使用自适应重新加权。由于我们的完整模型使用自适应重新加权(ARW)组合了两个主要模块,它可以表示为Full或FSL+DAA+ARW。消融研究在5路5次DA-FSL设置下进行,获得的消融结果如图4(a)所示,可以看出:(1)当使用更多模块来解决DA-FSL问题时,性能持续增加,展示每个模块的贡献。(2)DAA相对于经典FSL的改进表明,域自适应模块对于DA-FSL设置是重要的,并且即使对于朴素的最近邻分类器也可以表现良好。ARW模块明显提高了性能,验证了其在确定多重损失权重方面的有效性。
-

-
图4.(a)在三个数据集上,在DA-FSL设置(5向5次激发)下,我们的完整模型的消融研究结果;(B)在三个数据集上,在DA-FSL设置(5向5次激发)下,我们的DAA模块的消融研究结果。误差条显示95%置信区间。
-
-
DAA模块的消融研究我们进一步进行烧蚀研究以显示我们DAA模块的每个组件的贡献。比较了三种方法:(1)FSL - FSL使用等式(3)中定义的两个损耗Lps和等式(4)中定义的Lpd;(2)FSL+DC - DA-FSL使用等式(8)中定义的三个损耗Lps、Lpd和Ldc;(3)FSL + DC使用等式(8)中定义的三个损耗Lps、Lpd和Ldc。(3)FSL+DC+DS - DA-FSL,使用等式(10)中定义的四种损失Lps、Lpd、Ldc和Lds。为了公平比较,自适应重新加权用于所有三种方法。三个数据集上的消融结果如图4(B)所示。我们有两个观察结果:(1)FSL+DC相对于FSL的显著改进表明,嵌入模块之后的域混淆对于我们的DA-FSL设置非常重要。2)FSL+DC+DS的性能始终优于FSL+DC,验证了嵌入模块之前域鉴别的有效性。
-
我们的DAA模块的特征可视化。图4(B)中所示的消融研究结果也得到了嵌入模块之前/之后提取的特征向量的t-SNE可视化的支持。一些定性结果可以在图5中看到。它表明,添加Lds(在等式(10)中定义)导致两个改进:(1)在嵌入之前,源/目标样本被显著更好地区分(参见图5(c)与图5(a));(2)在嵌入之后,源/目标样本被强制为更加混乱(参见图5(d)与图5(a))。图5(B))。这解释了图4(B)中所示的我们的DAA模块(相对于传统域混淆)的更好性能。
-

-
图5.从源域随机选择的5,000幅图像的特征向量的t-SNE可视化(紫色点)和来自目标域的5,000张图像左:在嵌入模块之前提取的特征向量;右:在嵌入模块之后提取的特征向量。符号:DC使用等式(8)中定义的损失Ldc的域自适应; DC+DS {域自适应使用等式(10)中定义的损耗Ldc以及损耗Lds。
-
Conclusion
-
在本文中,我们研究了一种新的FSL设置DA-FSL.为了同时利用少量的样本学习新类的分类器和弥合域鸿沟,我们提出了一种新的DAPN模型,该模型将原型度量学习和域自适应结合在一个统一的框架内.在域自适应嵌入模块之前和之后引入了域区分和域混淆学习目标,实验结果表明,模型能有效提高FSL模型和域自适应模型的性能,优于其他模型。
-
DA-FSL 与传统 FSL、传统域适应(DA)的核心差异
- 与传统 FSL:传统 FSL 假设源 / 靶域样本来自同一分布( P s = P t P_s=P_t Ps=Pt),仅需解决 “少样本学习新类”;DA-FSL 中源 / 靶域分布不同( P s ≠ P t P_s≠P_t Ps=Pt),需同时解决 “少样本学习新类” 和 “源 / 靶域适应”。
- 与传统 DA(尤其是 UDA):传统 UDA 假设源 / 靶域类空间重叠( C s ∩ C t ≠ ∅ C_s∩C_t≠∅ Cs∩Ct=∅),目标是对齐 “相同类” 的跨域分布;DA-FSL 中源 / 靶域类空间无重叠( C s ∩ C t = ∅ C_s∩C_t=∅ Cs∩Ct=∅),对齐全局分布可能破坏 “源类与靶类” 的区分性。
- 需在 “缩小源 / 靶域 gap(域对齐)” 与 “保持源类和靶类的区分性(类分离)” 之间找到平衡 —— 传统 UDA 的 “全局 / 类级对齐” 会损害 FSL 的类区分性,传统 FSL 则无法处理域差异,二者简单组合(如 ProtoNet+CDAN)效果差。
-
DAPN 模型设计框架:域对抗适应模块通过 “特征嵌入前 + 嵌入后” 的双向损失,平衡域对齐与类分离,具体包括:
- 域自适应嵌入层:以 ResNet18 为特征提取器(输出 512 维特征 f ~ \tilde{f} f~),后续接 “自编码器 + 注意力子模块”:自编码器学习域通用特征,注意力子模块(sigmoid (FC ( f ~ \tilde{f} f~)))去除特征中的域特异信息,最终输出嵌入特征f。
- 嵌入后:域混淆损失( L d c L_{dc} Ldc):改进 CDAN 方法,将嵌入特征f与分类器预测g构成联合特征 h = ( f , g ) h=(f,g) h=(f,g),用小维度近似外积(避免维度爆炸)输入域判别器,通过梯度反转实现源 / 靶域全局对齐;同时引入熵加权( w = 1 + e − H ( g ) w=1+e^{-H(g)} w=1+e−H(g)),优先拟合易迁移样本,提升适应效率。
- 嵌入前:域判别损失( L d s L_{ds} Lds):在 ResNet18 的输出( f ~ \tilde{f} f~)上添加域判别器,通过损失 E ~ \tilde{E} E~(最小化源域样本被判别为 “源”、靶域样本被判别为 “靶” 的误差),增强源 / 靶类在嵌入前的分离性,避免后续域对齐导致的类混淆。
-
打破传统 UDA “单一对齐” 的思路,通过 “嵌入前判别说(增强类分离)+ 嵌入后混淆说(实现域对齐)” 的双向设计,首次在 DA-FSL 中解决 “域对齐损害类区分” 的核心矛盾。
核心技术模块
-
领域自适应模块(domain_adaptive_module),该模块聚焦于域对齐,通过对抗学习等技术减少源域(已知域)与目标域(新域)的特征分布差异,对应领域自适应理论中的分布对齐思想。network.py:定义了基础网络(如 ResNetFc、AlexNetFc),在经典骨干网络(ResNet、AlexNet)基础上添加瓶颈层(Bottleneck)和分类头。其中,
ResNetFc类支持加载预训练权重,并通过可选的瓶颈层压缩特征维度,为域对齐和分类做准备。loss.py(推测):包含领域自适应损失函数,如代码中提到的CDAN(Conditional Domain Adversarial Network)、DANN(Domain-Adversarial Neural Network)等,通过对抗训练让特征提取器学习域不变特征(Domain-Invariant Features)。eval.py:支持模型在目标域上的评估,通过image_classification_test函数计算分类准确率,验证域对齐后的特征在新域上的泛化能力。-
# domain_adaptive_module/loss.py 核心代码解析 def CDAN(input_list, ad_net, entropy=None, coeff=None, random_layer=None): softmax_output = input_list[1].detach() # 分类器输出(类别概率) feature = input_list[0] # 骨干网络提取的特征 # 1. 特征与分类输出的交叉融合(条件域对抗的核心) if random_layer is None: # 将特征与分类概率通过矩阵乘法融合,捕捉类别-特征的联合分布 op_out = torch.bmm(softmax_output.unsqueeze(2), feature.unsqueeze(1)) ad_out = ad_net(op_out.view(-1, softmax_output.size(1) * feature.size(1))) else: # 随机映射层增强泛化(可选) random_out = random_layer.forward([feature, softmax_output]) ad_out = ad_net(random_out.view(-1, random_out.size(1))) # 2. 域判别器的目标标签(源域为1,目标域为0) batch_size = softmax_output.size(0) // 2 dc_target = torch.from_numpy(np.array([[1]] * batch_size + [[0]] * batch_size)).float().cuda() # 3. 基于熵的权重调整(重点创新) if entropy is not None: # GRL(梯度反转层):使特征提取器学习域不变特征 entropy.register_hook(grl_hook(coeff)) # 熵值越大,样本不确定性越高,权重越低(抑制噪声样本) entropy = 1.0 + torch.exp(-entropy) source_mask = torch.ones_like(entropy) source_mask[feature.size(0)//2:] = 0 # 源域样本掩码 source_weight = entropy * source_mask target_mask = torch.ones_like(entropy) target_mask[0:feature.size(0)//2] = 0 # 目标域样本掩码 target_weight = entropy * target_mask # 归一化权重,平衡源/目标域贡献 weight = source_weight / torch.sum(source_weight).detach().item() + \ target_weight / torch.sum(target_weight).detach().item() return torch.sum(weight.view(-1, 1) * nn.BCELoss(reduction='none')(ad_out, dc_target)) / torch.sum(weight).detach().item() else: return nn.BCELoss()(ad_out, dc_target) -
条件域对抗(CDAN):通过融合特征与分类输出(
softmax_output),使域判别器不仅关注特征分布,还关注 “特征 - 类别” 的联合分布,解决传统域自适应忽略类别信息的问题。 -
熵加权机制:对高不确定性样本(熵值大)降权,减少噪声对域对齐的干扰,提升对齐稳定性。
-
梯度反转(GRL):通过
grl_hook在反向传播时反转梯度,迫使特征提取器学习对域判别器 “不可区分” 的特征(域不变特征)。
-
-
原型学习模块(prototypical_module),该模块实现少样本学习的核心逻辑 ——原型网络(Prototypical Networks),即通过类原型(Class Prototype)进行分类,对应少样本学习中 “利用样本均值作为类代表” 的理论。resnet.py:实现 ResNet 作为特征提取器,输出的特征用于计算类原型。与领域自适应模块的网络不同,这里的 ResNet 更专注于提取适合少样本分类的判别性特征。extract_feature.py:提取测试集样本的特征并按类别保存,用于后续计算类原型(每个类的特征均值),是原型学习中 “构建原型” 的关键步骤。utils.py(推测):包含少样本学习的核心工具函数,如
euclidean_metric(计算样本与原型的欧氏距离)、count_acc(计算分类准确率),对应原型网络中 “通过距离度量分类” 的逻辑。-
# prototypical_module/utils.py 核心函数 def euclidean_metric(a, b): """计算样本与原型的欧氏距离(原型网络核心)""" n = a.shape[0] m = b.shape[0] a = a.unsqueeze(1).expand(n, m, -1) b = b.unsqueeze(0).expand(n, m, -1) logits = -((a - b)**2).sum(dim=2) # 距离越小,分类得分越高 return logits # train_cross.py 中原型计算与损失 k = config["test_way"] * config["shot"] data_shot, data_query = data[:k], data[k:] # 少样本任务:shot个支持集,query个查询集 # 1. 计算类原型(支持集特征的均值) x, _ = base_network(data_shot) x = x.reshape(config["shot"], config["test_way"], -1).mean(dim=0) # 按类别取平均 p = x # 类原型 # 2. 计算查询集与原型的距离,得到分类logits proto_query, _ = base_network(data_query) logits = euclidean_metric(proto_query, p) # 3. 少样本分类损失(交叉熵) label = torch.arange(config["test_way"]).repeat(config["query"]) fsl_loss = F.cross_entropy(logits, label) -
原型表示:将每个类的少量支持集样本特征取平均作为 “类原型”,简化少样本场景下的类别建模。
-
距离度量学习:通过欧氏距离度量查询样本与原型的相似性,避免传统分类器对大量标注样本的依赖。
-
-
联合训练框架(train_cross.py),该文件是核心训练逻辑,实现了领域自适应与原型学习的联合优化,对应论文可能提出的 “混合损失函数” 理论。定义
learnedweight类,通过可学习参数动态平衡少样本损失(fsl_loss) 与领域自适应损失(da_loss),解决两个任务的优化目标冲突问题(例如,域对齐可能牺牲类别判别性,需动态调整权重)。数据加载部分同时处理源域和目标域的少样本数据(通过CategoriesSampler生成少样本任务),训练过程中既通过原型损失优化分类性能,又通过领域对抗损失对齐域分布,实现 “跨域” 与 “少样本” 的联合优化。-
class learnedweight(nn.Module): def __init__(self): super(learnedweight, self).__init__() # 可学习参数:动态调整两个损失的权重 self.fsl_weight = Parameter(torch.ones(1), requires_grad=True) self.da_weight = Parameter(torch.ones(1), requires_grad=True) def forward(self, fsl_loss, da_loss): # 1. 基于指数函数的权重调整:参数越小,对应损失的权重越大 # 2. 加入偏置项(self.fsl_weight/da_weight)避免权重过小 final_loss = self.fsl_weight + torch.exp(-1 * self.fsl_weight)*fsl_loss + \ self.da_weight + torch.exp(-1 * self.da_weight)*da_loss return final_loss -
自适应权重:通过可学习参数
fsl_weight和da_weight,模型在训练中自动调整两个任务的优先级(例如,当域偏移严重时,da_weight会减小,增强域自适应损失的权重)。 -
非对称优化:指数函数确保权重调整的平滑性,避免手动调参的局限性,使模型更适应不同跨域场景。
-
-
预训练模块(pretrain/),先在大规模数据集(如 TieredImageNet)上预训练 ResNet(
main_resnet.py),为后续跨域任务提供初始化权重。这符合迁移学习理论:利用大规模数据的通用特征提升小样本场景下的泛化能力。 -
领域自适应模块(CDAN)的输入是原型学习模块的特征(
feature)和分类输出(softmax_output),确保域对齐过程围绕 “对少样本分类有用的特征” 进行(而非无差别对齐)。final_loss的计算方式确保:当某一损失值较大时(如域偏移严重导致da_loss增大),模型会通过减小对应权重参数(da_weight)来增强其在总损失中的占比,动态优化对齐与分类的平衡。通过熵值对样本加权(source_weight和target_weight),降低模糊样本(如类别不确定的目标域样本)对域对齐的干扰。
更多推荐



所有评论(0)