迁移学习(NRC)《Exploiting the Intrinsic Neighborhood Structure for Source-free Domain Adaptation》
论文信息
论文标题:Exploiting the Intrinsic Neighborhood Structure for Source-free Domain Adaptation
论文作者:Shiqi YangYaxing WangJoost van de WeijerLuis HerranzShangling Jui
论文来源:Neural Information Processing Systems (2021)
论文地址:download
论文代码:download
视屏讲解:click
1 介绍
域适应(DA)旨在减轻源域和目标域之间的域转移。 大多数 DA 方法需要访问源数据,但这通常是不可能的(例如,由于数据隐私或知识产权)。 在本文中,我们解决了具有挑战性的无源域自适应 (SFDA) 问题,其中源预训练模型在没有源数据的情况下适应目标域。 我们的方法基于观察到目标数据可能不再与源域分类器对齐,但仍形成清晰的集群。 我们通过定义目标数据的局部亲和力来捕获这种内在结构,并鼓励具有高局部亲和力的数据之间的标签一致性。 我们观察到更高的亲和力应该分配给互惠的邻居,并提出自正则化损失以减少嘈杂邻居的负面影响。 此外,为了聚合具有更多上下文的信息,我们考虑具有小亲和力值的扩展邻域。 在实验结果中,我们验证了目标特征的固有结构是域适应的重要信息来源。 我们证明,通过考虑局部邻居、互惠邻居和扩展邻域,可以有效地捕获这种局部结构。 最后,我们在几个 2D 图像和 3D 点云识别数据集上实现了最先进的性能。
2 背景及出发点
相关工作:
- 现有的 DA 方法在域适应训练期间依然需要源域数据,但实际上源域数据始终可以访问是不切实际的,例如当应用于具有隐私或财产限制的数据时;
问题:
- 不管开放集和封闭集的最近 DA 工作,它们都忽略了特征空间中目标数据的内在邻域结构,这对于解决 SFDA 非常有价值;
- 事实1:即使目标数据可能已经在特征空间中移动(协方差移动),但同一类的目标数据仍有望在嵌入空间中形成一个集群;Fig.1(a)
- 想法1:评估高维空间中点结构的一种行之有效的方法是考虑点的最近邻,这些点预计属于同一类;
- 事实2:Fig.1(b) 蓝色曲线表明,大约 75% 的最近邻居具有正确的标签;互惠邻居确实比非互惠最近邻居 (nRNN) 有更多机会预测真实标签;
- 想法2:使用 k 互近邻缓解最近邻部分预测错误的问题;
3 方法
使用源域数据训练好的源模型来生成目标域的簇结构,使用邻域信息来体现这种内在结构,并通过以下目标实现自适应:
$\mathcal{L}=-\frac{1}{n_{t}} \sum\limits _{x_{i} \in \mathcal{D}_{t}} \sum\limits_{x_{j} \in \operatorname{Neigh}\left(x_{i}\right)} \frac{D_{\text {sim }}\left(p_{i}, p_{j}\right)}{D_{d i s}\left(x_{i}, x_{j}\right)} \quad\quad\quad(1)$
其中:
- $\text{Neigh} \left(x_{i}\right)$ 为 $x_{i}$ 的最近邻集合;
- $D_{\text {sim }}$ 计算 $x_{i}$ 和其近邻之间的类分布相似性;
- $D_{d i s}$ 计算 $x_{i}$ 和其近邻之间的特征分布之间的距离;
如上述,最近邻并不一定都能带来有效监督信号,为减少这些邻居带来的潜在负面影响,本文使用连通性来权衡来自邻居的监督,即上述 $1/D_{d i s}(x_{i}, x_{j})$。
为实现 基于 batch 的最近邻训练,本文构建了两个 $\text{memory banks}$:$\mathcal{F}$ 存储所有目标特征,$\mathcal{S}$ 存储相应的预测分数:
$\mathcal{F}=\left[\boldsymbol{z}_{1}, \boldsymbol{z}_{2}, \ldots, \boldsymbol{z}_{n_{t}}\right] \text { and } \mathcal{S}=\left[p_{1}, p_{2}, \ldots, p_{n_{t}}\right]$
$\text{Note}$:简单地更新 $\text{memory bank}$ 中对应于当前 $\text{mini-batch}$ 的旧项;
对于每个样本 $x_{i}$,在 $\text{feature bank}$ 中找到它的 $k$ 个最近邻(余弦相似度),最大化它们 $\text{score}$ 的加权点积,即,使它们的输出相似或者说具有一致性。
$\mathcal{L}_{\mathcal{N}}=-\frac{1}{n_{t}} \sum\limits _{i} \sum\limits_{k \in \mathcal{N}_{K}^{i}} A_{i k} \mathcal{S}_{k}^{\top} p_{i}$
$A_{i, j}=\left\{\begin{array}{ll}1 & \text { if } j \in \mathcal{N}_{K}^{i} \wedge i \in \mathcal{N}_{M}^{j} \\r & \text { otherwise. }\end{array}\right.$
同样可以扩展到其高阶邻居:
$\mathcal{L}_{E}=-\frac{1}{n_{t}} \sum\limits_{i} \sum\limits _{k \in \mathcal{N}_{K}^{i}} \sum\limits_{m \in E_{M}^{k}} r \mathcal{S}_{m}^{\top} p_{i}$
作者没有直接使用 $\text{minimize entropy}$,而是用了一种称为 $\text{self-regularization}$ 的方法,简单来说就是最大化每个样本输出 $\text{score}$ 自己与自己的点积。不难看出当 $\text{score}$ 为 $\text{one-hot}$ 向量时点积最大,所以效果上可能和 $\text{minimize entropy}$ 差不多。
$\mathcal{L}_{\text {self }}=-\frac{1}{n_{t}} \sum\limits _{i}^{n_{t}} \mathcal{S}_{i}^{\top} p_{i}$
为了避免模型将所有数据预测为某些特定类(并且不预测任何目标数据的其他类)的退化解决方案 [8, 39],鼓励预测是平衡的。 本文采用广泛用于聚类 [8、9、13] 以及多个领域适应工作 [21、39、42] 的预测多样性损失:
$\mathcal{L}_{d i v}=\sum\limits _{c=1}^{C} \operatorname{KL}\left(\bar{p}_{c} \| q_{c}\right), \text { with } \bar{p}_{c}=\frac{1}{n_{t}} \sum\limits_{i} p_{i}^{(c)}, \text { and } q_{\{c=1, . . C\}}=\frac{1}{C}$
训练目标
$\mathcal{L}=\mathcal{L}_{\text {div }}+\mathcal{L}_{\mathcal{N}}+\mathcal{L}_{E}+\mathcal{L}_{\text {self }}$
4 实验
消融实验

A:删除亲和力 $A$ 意味着平等对待所有这些邻居;
$\mathcal{L}_{\hat{E}}$:意味着我们删除了方程式中扩展邻居的重复;


迁移学习(NRC)《Exploiting the Intrinsic Neighborhood Structure for Source-free Domain Adaptation》的更多相关文章
- 迁移学习(Transformer),面试看这些就够了!(附代码)
1. 什么是迁移学习 迁移学习(Transformer Learning)是一种机器学习方法,就是把为任务 A 开发的模型作为初始点,重新使用在为任务 B 开发模型的过程中.迁移学习是通过从已学习的相 ...
- 图像识别 | AI在医学上的应用 | 深度学习 | 迁移学习
参考:登上<Cell>封面的AI医疗影像诊断系统:机器之心专访UCSD张康教授 Identifying Medical Diagnoses and Treatable Diseases b ...
- 源码分析——迁移学习Inception V3网络重训练实现图片分类
1. 前言 近些年来,随着以卷积神经网络(CNN)为代表的深度学习在图像识别领域的突破,越来越多的图像识别算法不断涌现.在去年,我们初步成功尝试了图像识别在测试领域的应用:将网站样式错乱问题.无线领域 ...
- 迁移学习( Transfer Learning )
在传统的机器学习的框架下,学习的任务就是在给定充分训练数据的基础上来学习一个分类模型:然后利用这个学习到的模型来对测试文档进行分类与预测.然而,我们看到机器学习算法在当前的Web挖掘研究中存在着一个关 ...
- 【迁移学习】2010-A Survey on Transfer Learning
资源:http://www.cse.ust.hk/TL/ 简介: 一个例子: 关于照片的情感分析. 源:比如你之前已经搜集了大量N种类型物品的图片进行了大量的人工标记(label),耗费了巨大的人力物 ...
- 迁移学习(Transfer Learning)(转载)
原文地址:http://blog.csdn.net/miscclp/article/details/6339456 在传统的机器学习的框架下,学习的任务就是在给定充分训练数据的基础上来学习一个分类模型 ...
- 迁移学习-Transfer Learning
迁移学习两种类型: ConvNet as fixed feature extractor:利用在大数据集(如ImageNet)上预训练过的ConvNet(如AlexNet,VGGNet),移除最后几层 ...
- [DeeplearningAI笔记]ML strategy_2_3迁移学习/多任务学习
机器学习策略-多任务学习 Learninig from multiple tasks 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.7 迁移学习 Transfer Learninig 神 ...
- Gluon炼丹(Kaggle 120种狗分类,迁移学习加双模型融合)
这是在kaggle上的一个练习比赛,使用的是ImageNet数据集的子集. 注意,mxnet版本要高于0.12.1b2017112. 下载数据集. train.zip test.zip labels ...
- 【深度学习系列】迁移学习Transfer Learning
在前面的文章中,我们通常是拿到一个任务,譬如图像分类.识别等,搜集好数据后就开始直接用模型进行训练,但是现实情况中,由于设备的局限性.时间的紧迫性等导致我们无法从头开始训练,迭代一两百万次来收敛模型, ...
随机推荐
- PHP Redis - zSet(有序集合)
有序集合与集合一样,string类型元素的集合,不允许重复的成员. 有序集合,每个元素都会关联一个 double 类型的分数.Redis 通过分数为集合的成员进行从小到大的排序 有序集合的成员是唯一的 ...
- 初步理解1=C
1=C 1=C 表示简谱上看到1就弹C键 1=? 1就从?键出发 例如我们看到1=D, 我们看到1就从D键出发 1=C 到1=D就叫做升了一个key 黑键怎么表示 半音与全音 半音是一个距离单位 1 ...
- 通过Windows定时任务执行Python脚本给钉钉群发送消息
前提:已经存在有成功发送钉钉群机器人消息的python脚本,参考上一篇Python调用钉钉群机器人发送群消息 Windows定时任务设置 1.本机是Win7系统:控制面板->系统和安全-> ...
- vue 数组对象去重
unique(arr) { const res = new Map(); return arr.filter((arr) => !res.has(arr.id) &&am ...
- Nginx 监听同一端口号配置多个域名
同一台nginx服务器通过配置多个server块实现在同一端口号下监听多个域名. 需要注意的是:端口号(listen)+主机名(server_name) 需要在多个server中唯一,否则会报错. 实 ...
- 2003031126-石升福-python数据分析第四周作业-第二次作业
项目 matplotlib 博客名称 2003031126-石升福-Python数据分析第四周作业 班级链接 20级数据班 作业链接 第二次作业 要求 每道题要有题目,代码(使用插入代码,不会插入代码 ...
- Linux让部署在服务器上的项目一直保持运行状态…&跑多个项目
在idea通过package得到的.jar包或者.war包可通过 java -jar xxx.jar/xxx.war 命令直接在linux或者windows系统运行: 将打好包的项目放在linux ...
- Web _Servlet(url-pattern)的配置与优先级
url-pattern的配置方式有三种: 1.完全路径匹配:以 '/' 开始 例: /ServletDemo1 , /aaa/ServletDemo2 , /aa/bb/ServletDemo3 ...
- kubectl命令详解
一.kubectl 基本命令 1.陈述式资源管理方法: 1.kubernetes集群管理集群资源的唯一入口是通过相应的方法调用apiserver的接口 2.kubectl 是官方的CLI命令行工具,用 ...
- python C# DES 加密转换
import time import base64 import pyDes import binascii def DESEncrypt(desKey, target): key = desKey[ ...