基于联合分布适配的迁移学习(论文翻译)

基于联合分布适配的迁移学习

Abstract

  迁移学习应用在计算机视觉是一种有效的技术,可以利用源域中丰富的标记数据为目标域构建准确的分类器。然而,大多数现有方法并没有同时减少域间边缘分布和条件分布的差异。在本文中,我们提出了一种新型的迁移学习方法,称为联合分布适配(JDA)。具体而言,JDA的目标是在principled维度降低过程中联合适配边缘分布和条件分布,并构建新的特征表示,其对于适配分布差异有效且robust。大量实验证实,JDA可以在四种类型的跨域图像分类问题上显着优于几种当前最先进的方法。

1. Introduction

  在计算机视觉中,标记信息对于各种识别问题至关重要。 对于标签数据非常稀疏且发展高速的视觉领域,人们可能会期望利用一些相关源域中容易获得的丰富的标记数据来训练准确的分类器,以便在目标域中重用。最近的文献对开发跨领域知识适配问题的迁移学习算法[16]越来越感兴趣。在图像分类[24,12]和图像标注[19,25],目标识别[14,2,7,10]和特征学习[13,11,17]领域中,迁移学习已被证明是值得研究的。

  在跨领域问题中,源数据和目标数据通常是从不同的概率分布中获取的。因此,迁移学习的一个主要计算问题是减少域之间的分布差异。最近的研究旨在发现共享的特征表示,它可以减少分布差异并同时保存输入数据的重要属性[21,15,18];或对源数据进行重新加权以最小化分布差异,然后在重新加权的源数据上学习一个分类器[3,4]。现有的大多数方法都是基于边缘分布或条件分布来度量分布差异。然而,图1展示了同时适配边缘分布和条件分布对于robust 迁移学习的重要性。一些近期的文献开始使用样本选择[26],核密度估计[18]或两阶段重新加权[23]来适配边缘和条件分布,但他们可能需要目标域中存在一些标记数据,或者需要多个源域进行学习。

  在本文中,我们解决一个具有挑战性的场景问题,其中源域和目标域在边缘和条件分布上都不同,且目标域没有标记数据。于是,我们提出了一种新的迁移学习解决方案,称为联合分布适配(Joint Distribution Adaptation,JDA),在principled降维过程中同时调整边缘和条件分布。 具体而言,我们扩展了非参数最大均值差异(MMD)[8]来衡量边缘和条件分布的差异,并将其与主成分分析(PCA)相结合以构建对于substantial分布差异的特征表示。我们提出了JDA优化问题的基本假设和学习算法。

  我们对四种类型的真实数据集进行综合实验:手写数字体(USPS,MNIST),人脸识别(PIE)和目标识别(COIL20,Office + Caltech [20])。从这些数据集中,我们构建了36个跨域图像数据集,每个图像数据集都在不同的适配难度下进行。我们的实验结果表明,在分类精度方面,通过提出的JDA方法相比于几种最先进的迁移学习方法中获得了7.57%的显着提高。我们的结果揭示了跨域适配边缘和条件分布具有实质的影响。

2. Related Word

  在本节中,我们将讨论与我们有关的迁移学习的已有的工作,并强调他们之间的差异。根据文献调查[16],现有的迁移学习方法可以大致组织为两个分类:实例重新加权[3,4]和特征提取。我们的工作属于特征提取这一类别,其可以进一步重新组织为两个粗略的子类别:

  1)保存属性,通过保留数据的重要属性来共享域之间的潜在规律,例如 统计特性[17,11],几何结构[19,6]。

  2)分布适配,其明确地最小化预定义的距离度量方法以减少边缘分布[22,15],条件分布[21]或两者[26,23,18]的差异。然而,为了适配条件分布,这些方法需要一些标记的目标数据或多个源域进行学习。

  据我们所知,我们的工作是共同调整域间边缘和条件分布的首次尝试,目标域中不需要标记数据。我们的工作是一个基于MMD的分布联合适配的principled降维过程,它不同于特征重新加权的方法[1,5]。

  • 0
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了适配JDA联合分布,我们可以使用以下代码: 首先,我们需要导入必要的库和模块: ```python import numpy as np import scipy.optimize as opt ``` 然后,我们定义三个函数:分布适配函数、损失函数和约束函数。 ```python def distribution_adaptation(x, marginals, jda_marginals): n = marginals.shape[0] c = np.zeros((n, n)) for i in range(n): for j in range(n): if marginals[i,j] == 0: c[i,j] = 0 else: c[i,j] = jda_marginals[i,j] * np.log(jda_marginals[i,j] / marginals[i,j]) return np.sum(c) def loss(x, *args): marginals, jda_marginals = args w = x[:marginals.shape[0]] b = x[marginals.shape[0]:] adapted_marginals = np.dot(w * marginals, w.T) + b return distribution_adaptation(adapted_marginals, marginals, jda_marginals) def constraint(x): return np.sum(x) - 1 ``` 接下来,我们定义联合分布适配函数: ```python def joint_distribution_adaptation(marginals, jda_marginals): x0 = np.random.rand(marginals.shape[0]*2) bounds = [(0, 1) for _ in range(marginals.shape[0]*2)] constraints = [{'type': 'eq', 'fun': constraint}] result = opt.minimize(loss, x0, args=(marginals, jda_marginals), bounds=bounds, constraints=constraints) w = result.x[:marginals.shape[0]] b = result.x[marginals.shape[0]:] adapted_marginals = np.dot(w * marginals, w.T) + b return adapted_marginals ``` 最后,我们可以通过调用`joint_distribution_adaptation`函数来适配JDA联合分布: ```python marginals = # 原始联合分布 jda_marginals = # JDA适配联合分布 adapted_marginals = joint_distribution_adaptation(marginals, jda_marginals) ``` 以上就是用于适配JDA联合分布的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值