TADAM:Task dependent adaptive metric for improved few-shot learning

本文提出TADAM,一种任务依赖的度量学习方法,用于优化少样本学习。通过动态调整度量尺度和使用任务依赖的特征提取,TADAM减少了欧式距离和余弦相似度之间的差距,提高了模型的泛化能力。同时,通过辅助任务的协同训练,解决了任务条件学习的困难,提升了模型的训练效果。

本文基于度量学习,发现简单的度量尺度会完全改变少样本学习参数更新的本质,同时提出了一个简单且有效的任务依赖的度量空间学习方法,可以根据不同的任务进行特征提取。通过度量缩放的方式,作者将余弦相似度与欧拉距离在少样本学习上的差距缩小了10%,也就是说度量的选择没有那么重要。另外,还提出了辅助任务协同训练,使得具有任务依赖性的特征提取更容易训练,并且具有很好的泛化能力

背景

考虑episodic形式的K-shot,C-way的分类问题

  • sample(support) set S={ (xi,yi)}i=1KC\mathcal{S}=\{(x_i,y_i)\}_{i=1}^{KC}S={ (xi,yi)}i=1KC,样本集,C类每类K个样本
  • query set Q=(xi,yi)i=1q\mathcal{Q}={(x_i,y_i)}_{i=1}^qQ=(xi,yi)i=1q,待分类样本
  • 相似度度量d:R2Dz→R\mathbb{R}^{2D_z} \rightarrow\mathbb{R}R2DzR,d不需要满足一般度量的性质(非负,对称,可加性),Dz表示特征提取后的维度,fϕ:RDx→rDzf_{\phi}:\mathbb{R}^{D_x}\rightarrow\mathbb{r}^{D_z}fϕ:RDxrDz
  • 为属于Sk\mathcal{S_k}Sk每一个类别k中的所有样本找到一个唯一的特征表示ckc_kckck=1K∑xi∈Skfϕ(xi)c_k=\frac{1}{K}\sum_{x_i\in S_k}f_{\phi}(x_i)ck=K1xiSkf
在基于骨架的动作识别领域,无监督学习方法近年来受到了广泛关注。《Actionlet-Dependent Contrastive Learning for Unsupervised Skeleton-Based Action Recognition》提出了一种新颖的对比学习框架,旨在通过动作依赖的方式增强特征表示,从而提升无监督动作识别的性能。 ### 方法概述 该论文的核心思想是利用对比学习(Contrastive Learning)来构建一种能够区分不同动作类别的特征表示。与传统的对比学习方法不同,本文提出了“动作依赖”机制,即通过引入特定于动作的上下文信息来指导特征学习过程。这种机制能够在特征空间中拉近同一动作实例之间的距离,并推远不同动作实例之间的距离。 具体而言,模型首先从输入的骨架序列中提取局部时空特征,然后将这些特征送入一个基于编码器-解码器结构的网络中进行处理。编码器负责生成隐藏状态下的特征表示,而解码器则用于重构原始输入。在此基础上,作者设计了一个对比损失函数,使得模型能够在无标签的情况下通过最大化正样本对的相似性、最小化负样本对的相似性来优化特征表示[^2]。 ### 实现细节 实现上,该方法采用循环神经网络(RNN)作为基础架构,尤其是长短时记忆网络(LSTM),以捕捉骨架数据中的时间动态信息。对比学习部分通过定义正样本和负样本对来构建损失函数。正样本通常来自同一动作的不同视角或变体,而负样本则来自其他动作类别。为了进一步增强模型的表现力,文中还引入了多尺度策略,使得模型可以在不同的时间尺度上进行特征提取和对比学习。 以下是一个简化的代码示例,展示如何构建一个基于LSTM的对比学习框架: ```python import torch import torch.nn as nn class ContrastiveLSTM(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim): super(ContrastiveLSTM, self).__init__() self.lstm = nn.LSTM(input_dim, hidden_dim, batch_first=True) self.fc = nn.Linear(hidden_dim, output_dim) def forward(self, x): out, (h_n, _) = self.lstm(x) # 取最后一个时间步的隐状态作为特征表示 feature = h_n.squeeze() return self.fc(feature), feature # 对比损失函数 class ContrastiveLoss(nn.Module): def __init__(self, margin=1.0): super(ContrastiveLoss, self).__init__() self.margin = margin def forward(self, output1, output2, label): euclidean_distance = F.pairwise_distance(output1, output2) loss = torch.mean((1 - label) * torch.pow(euclidean_distance, 2) + label * torch.pow(torch.clamp(self.margin - euclidean_distance, min=0), 2)) return loss ``` ### 性能评估 实验结果显示,该方法在多个基准数据集上均取得了优于现有无监督方法的性能表现。特别是在交叉视图测试中,其准确率显著高于基于RGB+D的无监督方法,并且接近有监督方法的水平。此外,由于仅需输入身体关键点,该方法具有良好的通用性和灵活性,适用于2D或3D形式的骨架数据[^2]。
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值