Domain Adaptation 相关介绍

2024-01-09 14:12

本文主要是介绍Domain Adaptation 相关介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. Transfer Learning

Transfer learning 是机器学习的一个分支, 而 Domain adpatation 是 transfer learning 的一个分支.
在 transfer learning 中有两个概念: source domain (源域) 和 target domain (目标域).
源域中往往有丰富的信息, 比如有大量的数据点和其真实的标签; 但目标域中相反, 数据不带有标签或少量数据带有标签, 所以无法用传统的方式学习. Transfer learning 的目标是: 利用两个域的信息, 学习一个能在 target domain 上准确率高的分类器.

根据两个域的背景设定不同, transfer learning 有以下分类, 本文关注于 domain adaptation.
在这里插入图片描述
上图来自于综述论文 A survey on domain adaptation theory: learning bounds and theoretical guarantees.

  • 传统的学习设定: 两个域的输入分布相同, 且任务相同. 这时的 source domain 就是训练集, target domain 就是测试集.
  • Inductive transfer learning: 两个域的输入分布相同, 但任务不同.
  • Transductive transfer learning/ Domain adaptation: 两个域的输入分布不同, 但任务相同.
  • Unsupervised transfer learning: 两个域的输入分布不同, 且任务不同.

所以在 Domain adaptation 任务中, source domain 与 target domain 是不同的, 这种差别称为: distributional change, distributional shift 或 domain shift. 下面介绍下 domain shift.

2. Domain Shift

Domain shift 主要分为以下三种: prior shift, covariate shift 和 concept shift.

2.1 Prior shift

用于 Y → X Y\rightarrow X YX problems, 设定为:

  • posterior distributions are equivalent: p s ( x ∣ y ) = p t ( x ∣ y ) p_s(x|y)=p_t(x|y) ps(xy)=pt(xy)
  • prior distributions of classes are different: p s ( y ) ≠ p t ( y ) p_s(y)\neq p_t(y) ps(y)=pt(y)

2.2 Covariate shift

用于 X → Y X\rightarrow Y XY problems, 设定为:

  • marginal distributions are different: p s ( x ) ≠ p t ( x ) p_s(x)\neq p_t(x) ps(x)=pt(x)
  • conditional distributions are equivalent: p s ( y ∣ x ) = p t ( y ∣ x ) p_s(y|x)=p_t(y|x) ps(yx)=pt(yx)

Covariate shift 是最常见的设定, 大多domain adaptation 的论文都是以这个为背景. 上图是一个例子, source 与 target 的分布不同(左图), 但它们的样本点都坐落在 true function 的周围(右图), 如果只用 source samples 做训练可能会得到绿色的函数, 无法用在 target domain上.

2.3 Concept shift

又叫 Data drift, 用于 X → Y X\rightarrow Y XY Y → X Y\rightarrow X YX problems.

  • In X → Y X\rightarrow Y XY problems: p s ( x ) = p t ( x ) p_s(x)=p_t(x) ps(x)=pt(x) and p s ( y ∣ x ) ≠ p t ( y ∣ x ) p_s(y|x)\neq p_t(y|x) ps(yx)=pt(yx)
  • In Y → X Y\rightarrow X YX problems: p s ( y ) = p t ( y ) p_s(y)=p_t(y) ps(y)=pt(y) and p s ( x ∣ y ) ≠ p t ( x ∣ y ) p_s(x|y)\neq p_t(x|y) ps(xy)=pt(xy)

3. Closed-set Unsupervised Domain Adaptation

Domain Adaptation 其实也有很多类型, 比如 closed-set 或 open-set, unsupervised 或 supervised. 研究最多的是 closed-set unsupervised domain adaptation. 每个单词的意思是:

  • Domain Adaptation(DA): 正如前面讲的, source 与 target domain 的分布不同, 但任务相同
  • Unsupervised DA: target domain 中的数据不带有标签
  • Closed-set DA (traditional DA): source 与 target domain 的输入和输出空间相同,但联合概率分布不同 ⇒ X S = X T , Y S = Y T , p s ( x , y ) ≠ p t ( x , y ) \Rightarrow \mathcal{X_S}=\mathcal{X_T}, \mathcal{Y_S}=\mathcal{Y_T}, p_s(x,y)\neq p_t(x,y) XS=XT,YS=YT,ps(x,y)=pt(x,y).

4. 经典方法

DA 的目标是学习一个在 target domain 上效果好的分类器, 这等价于最小化在 target domain 上的expected risk, 用数学表示:
R T ( h ) = E ( x , y ) ∼ p t ( x , y ) [ ℓ ( h ( x ) , y ) ] = ∑ y ∈ Y ∫ X ℓ ( h ( x ) , y ) p t ( x , y ) p s ( x , y ) p s ( x , y ) d x = ∑ y ∈ Y ∫ X ℓ ( h ( x ) , y ) p s ( x , y ) p t ( x , y ) p s ( x , y ) d x = E ( x , y ) ∼ p s ( x , y ) [ p t ( x , y ) p s ( x , y ) ℓ ( h ( x ) , y ) ] R_T(h)=\mathbb{E}_{(x,y)\sim p_t(x,y)} [\ell(h(x),y)]\\ =\sum_{y\in Y} \int_{X} \ell(h(x),y)p_t(x,y)\frac{p_s(x,y)}{p_s(x,y)} dx\\ =\sum_{y\in Y} \int_{X} \ell(h(x),y)p_s(x,y)\frac{p_t(x,y)}{p_s(x,y)} dx\\ =\mathbb{E}_{(x,y)\sim p_s(x,y)} [\frac{p_t(x,y)}{p_s(x,y)}\ell(h(x),y)] RT(h)=E(x,y)pt(x,y)[(h(x),y)]=yYX(h(x),y)pt(x,y)ps(x,y)ps(x,y)dx=yYX(h(x),y)ps(x,y)ps(x,y)pt(x,y)dx=E(x,y)ps(x,y)[ps(x,y)pt(x,y)(h(x),y)]
这就可以与 source 建立联系, 且当设定为 covariate shift 时 [ p s ( x ) ≠ p t ( x ) , p s ( y ∣ x ) = p t ( y ∣ x ) p_s(x)\neq p_t(x), p_s(y|x)=p_t(y|x) ps(x)=pt(x),ps(yx)=pt(yx)]:
R T ( h ) = E ( x , y ) ∼ p s ( x , y ) [ p t ( x ) p t ( y ∣ x ) p s ( x ) p s ( y ∣ x ) ℓ ( h ( x ) , y ) ] = E ( x , y ) ∼ p s ( x , y ) [ p t ( x ) p s ( x ) ℓ ( h ( x ) , y ) ] R_T(h)=\mathbb{E}_{(x,y)\sim p_s(x,y)} [\frac{p_t(x)p_t(y|x)}{p_s(x)p_s(y|x)}\ell(h(x),y)]\\ =\mathbb{E}_{(x,y)\sim p_s(x,y)} [\frac{p_t(x)}{p_s(x)}\ell(h(x),y)] RT(h)=E(x,y)ps(x,y)[ps(x)ps(yx)pt(x)pt(yx)(h(x),y)]=E(x,y)ps(x,y)[ps(x)pt(x)(h(x),y)]
当设定为 prior shift 时 [ p s ( x ∣ y ) = p t ( x ∣ y ) , p s ( y ) ≠ p t ( y ) p_s(x|y)=p_t(x|y), p_s(y)\neq p_t(y) ps(xy)=pt(xy),ps(y)=pt(y)]:
R T ( h ) = E ( x , y ) ∼ p s ( x , y ) [ p t ( y ) p t ( x ∣ y ) p s ( y ) p s ( x ∣ y ) ℓ ( h ( x ) , y ) ] = E ( x , y ) ∼ p s ( x , y ) [ p t ( y ) p s ( y ) ℓ ( h ( x ) , y ) ] R_T(h)=\mathbb{E}_{(x,y)\sim p_s(x,y)} [\frac{p_t(y)p_t(x|y)}{p_s(y)p_s(x|y)}\ell(h(x),y)]\\ =\mathbb{E}_{(x,y)\sim p_s(x,y)} [\frac{p_t(y)}{p_s(y)}\ell(h(x),y)]\\ RT(h)=E(x,y)ps(x,y)[ps(y)ps(xy)pt(y)pt(xy)(h(x),y)]=E(x,y)ps(x,y)[ps(y)pt(y)(h(x),y)]
其中 w ( x ) = p t ( x ) p s ( x ) w(x)=\frac{p_t(x)}{p_s(x)} w(x)=ps(x)pt(x) 被称为 importance weight 或 re-weighting factor, w ( y ) = p t ( y ) p s ( y ) w(y)=\frac{p_t(y)}{p_s(y)} w(y)=ps(y)pt(y) 被称为 class weight.

所以很多早期经典论文都是从估计 w ( x ) w(x) w(x)角度出发, 主要思路是寻找一个合适的 w ( x ) w(x) w(x) 使得 re-weighted source dist. 与 target dist. 之间的差距最小化, 这种方法称为 Density Ratio Estimation (DRE), 可以读以下论文:

  • KMM - NeurIPS 2006
  • KLIEP - NeurIPS 2007

还有很多方法从 source 和 target 的子空间进行研究 (GFK, SA, SDA), 随着神经网络的流行, 又有一些文章用 DNNs 学习 source 和 target 之间的关系 (DDC, DAN, DANN, DeepCoral, DRCN, CoGAN), 多为基于GAN的模型.

5. 常用数据集

  1. Office-Home: https://arxiv.org/abs/1706.07522
  2. VLSC: https://openaccess.thecvf.com/content_iccv_2013/papers/Fang_Unbiased_Metric_Learning_2013_ICCV_paper.pdf
  3. DomainNet: https://ai.bu.edu/M3SDA/
  4. RMNIST: https://arxiv.org/abs/1508.07680
  5. CMNIST: https://arxiv.org/abs/1907.02893
  6. PACS: https://arxiv.org/abs/1710.03077
  7. Terra Incognita: https://arxiv.org/abs/1807.04975

这篇关于Domain Adaptation 相关介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/587404

相关文章

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

关于Maven生命周期相关命令演示

《关于Maven生命周期相关命令演示》Maven的生命周期分为Clean、Default和Site三个主要阶段,每个阶段包含多个关键步骤,如清理、编译、测试、打包等,通过执行相应的Maven命令,可以... 目录1. Maven 生命周期概述1.1 Clean Lifecycle1.2 Default Li

numpy求解线性代数相关问题

《numpy求解线性代数相关问题》本文主要介绍了numpy求解线性代数相关问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 在numpy中有numpy.array类型和numpy.mat类型,前者是数组类型,后者是矩阵类型。数组

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

Redis的Hash类型及相关命令小结

《Redis的Hash类型及相关命令小结》edisHash是一种数据结构,用于存储字段和值的映射关系,本文就来介绍一下Redis的Hash类型及相关命令小结,具有一定的参考价值,感兴趣的可以了解一下... 目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSET

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,