论文题目:《Domain Adaptation via Transfer Component Analysis》

论文作者:Sinno Jialin Pan, Ivor W. Tsang, James T. Kwok and Qiang Yang

论文链接https://www.cse.ust.hk/~qyang/Docs/2009/TCA.pdf

会议期刊:IJCAI 2009 / IEEE Transactions on Neural Networks 2010

简介

领域自适应(Domain Adaptation)的一个主要问题是如何减少源域和目标域之间的差异.

一个好的特征表示应该尽可能地减少域间分布差异, 同时保持原始数据重要的特性(如几何/统计特性等).

本文提出一个新的特征提取方式, 叫做迁移成分分析(transfer component analysis, TCA).

TCA学习所有域的公共迁移成分(即不会引起域间分布变化保持原始数据固有结构的成分), 使得不同域在投影后的子空间中分布差异减少.

预备知识

问题设定

源域(source domain)中有带标签数据 \(\mathcal{D}_{S}\), 目标域(target domain)中只有大量无标签数据 \(\mathcal{D}_{T}\).

  • \(\mathcal{D}_{S}=\left\{\left(x_{S_{1}}, y_{S_{1}}\right), \ldots,\left(x_{S_{n}}, y_{S_{n}}\right)\right\}\), \(x_{S_{i}} \in \mathcal{X}\) 为输入数据, \(y_{S_{i}} \in \mathcal{Y}\)为对应的标签.

  • \(\mathcal{D}_{T}=\left\{x_{T_{1}}, \ldots, x_{T_{n_{2}}}\right\}\), \(x_{T_{i}} \in \mathcal{X}\).

  • \(\mathcal{P(X_{S})}\) 和 \(\mathcal{Q(X_{T})}\) 分别为 \(X_S\) 和 \(X_T\) 的边缘分布.

设定: 边缘分布不同 \(\mathcal{P} \ne \mathcal{Q}\), 但类条件概率分布相同 \(P(Y_{S} | X_{S}) = P(Y_{T} | X_{T})\).

任务: 在目标域中预测输入数据 \(x_{T_{i}}\) 对应的标签 \(y_{T_{i}}\).

最大均值差异

我们知道, 存在很多准则可以度量不同分布之间的差异, 如, KL散度等.

但这些方法通常都需要对分布的概率密度进行估计, 因而是参数化的方法. 为了避免引入额外的参数, 我们希望寻找一种非参数化的方法来度量分布的差异.

在2006年, Borgwardt等人[1]提出了一种基于再生核希尔伯特空间(Reproducing Kernel Hilbert Space, RKHS)的分布度量准则 最大均值差异(Maximum Mean Discrepancy, MMD).

令 \(X = \{ x_1, \cdots, x_{n1}\}\) 和 \(Y = \{ y_1, \cdots, y_{n2}\}\) 为两个分布 \(\mathcal{P}\) 和 \(\mathcal{Q}\) 的随机变量集合, 根据MMD的定义, 两个分布的经验估计距离为:

\[\operatorname{Dist}(\mathrm{X}, \mathrm{Y})=\left\|\frac{1}{n_{1}} \sum_{i=1}^{n_{1}} \phi\left(x_{i}\right)-\frac{1}{n_{2}} \sum_{i=1}^{n_{2}} \phi\left(y_{i}\right)\right\|_{\mathcal{H}}
\tag{1}
\]

其中, \(\mathcal{H}\) 是再生核希尔伯特空间, \(\phi : \mathcal{X} \to \mathcal{H}\) 为核函数映射.

迁移成分分析

令 \(\phi : \mathcal{X} \to \mathcal{H}\) 为非线性映射, \(X^{\prime}_{S} = \{ x^{\prime}_{S_{i}} \} = \{ \phi(x_{S_{i}}) \}\), \(X^{\prime}_{T} = \{ x^{\prime}_{T_{i}} \} = \{ \phi(x_{T_{i}}) \}\), \(X^{\prime} = X^{\prime}_{S} \cup X^{\prime}_{T}\) 分别为源域/目标域/结合域映射后的数据.

我们希望找到这样一个映射, 使得映射后的数据分布一致, 即 \(\mathcal{P^{\prime}}(X^{\prime}_{S}) = \mathcal{Q^{\prime}}(X^{\prime}_{T})\).

根据MMD的定义, 我们可以通过度量两个域之间的经验均值的距离平方作为分布的距离.

\[\operatorname{Dist}\left(X_{S}^{\prime}, X_{T}^{\prime}\right)=\left\|\frac{1}{n_{1}} \sum_{i=1}^{n_{1}} \phi\left(x_{S_{i}}\right)-\frac{1}{n_{2}} \sum_{i=1}^{n_{2}} \phi\left(x_{T_{i}}\right)\right\|_{\mathcal{H}}^{2}
\tag{2}
\]

通过最小化公式\((2)\), 我们可以找到想要的非线性映射 \(\phi\).

然而, 对公式\((2)\)直接优化是十分困难的, 通常会陷入局部极值点. 因此, 必须另辟蹊径.

核学习

为了避免显式地直接寻找非线性变换 \(\phi\), Pan等人[2]将该问题转化为核学习(kernel learning)问题.

通过利用核技巧 \(k(x_i, x_j) = \phi(x_i)^{\prime}\phi(x_j)\), 公式\((2)\)中两个域之间的经验均值距离可以被写为:

\[\begin{aligned}
\operatorname{Dist}\left(X_{S}^{\prime}, X_{T}^{\prime}\right) &= \frac{1}{n^{2}_{1}} \sum_{i=1}^{n_1} \sum_{j=1}^{n_1} k\left(x_{S_i}, x_{S_j}\right)+\frac{1}{n^{2}_{2}} \sum_{i=1}^{n_2} \sum_{j=1}^{n_2} k\left(x_{T_i}, x_{T_j}\right)-\frac{2}{n_1 n_2} \sum_{i=1}^{n_1} \sum_{j=1}^{n_2} k\left(x_{S_i}, x_{T_j}\right) \\
&= \operatorname{tr}(K L) \\
\end{aligned}
\tag{3}
\]

其中,

\[K=\left[ \begin{array}{ll}{K_{S, S}} & {K_{S, T}} \\ {K_{T, S}} & {K_{T, T}}\end{array}\right]
\tag{4}
\]

为 \((n_1 + n_2) \times (n_1 + n_2)\) 大小的核矩阵, \(K_{S,S}\), \(K_{T,T}\), \(K_{S,T}\) 分别为由 \(k\) 定义在源域/目标域/跨域的核矩阵.

\(L = [ L_{ij} ] \succeq 0\) 为半正定矩阵, 其中

\[l_{i j}=\left\{\begin{array}{ll}{\frac{1}{n_{1}^{2}}} & {x_{i}, x_{j} \in \mathcal{D}_{s}} \\ {\frac{1}{n_{2}^{2}}} & {x_{i}, x_{j} \in \mathcal{D}_{t}} \\ {-\frac{1}{n_{1} n_{2}}} & {\text { otherwise }}\end{array}\right.
\tag{5}
\]

在直推学习的设置下(直推学习即假设未标记的数据就是最终要用来测试的数据, 学习的目的即为在这些数据上取得最佳泛化能力), 核函数 \(k(\cdot, \cdot)\) 可以通过求解核矩阵 \(K\) 替代.

Pan等人[2:1]将核矩阵学习问题形式化为半定规划(semi-definite program, SDP)问题. 然后, 对学习到的核矩阵使用PCA方法得到跨域的低维隐空间.

参数化核映射

MMDE[2:2]的方法存在如下局限性:

  • 它是直推式的, 不能泛化到未见的样本中
  • 公式\((3)\)中的\(K\)需要是半正定的, 且求解SDP问题十分耗时
  • 为了构造低维表示, 需要对\(K\)进行PCA处理, 这会损失\(K\)中的信息

本文提出一种基于核特征提取来寻找非线性映射 \(\phi\) 的高效方法.

  • 避免求解SDP问题, 减轻计算负担
  • 学习到的核函数\(k\)可以泛化到未见的样本
  • 利用显式的低秩表示得到统一的核学习方法

首先, 公式\((4)\)中的核矩阵 \(K\) 可以被分解为 \(K = (KK^{-1/2})(K^{-1/2}K)\), 这通常称为经验核映射(empirical kernel map)[3].

★注: 这个分解可由矩阵的特征分解得到, 即令 \(K = Q^{-1}\Lambda Q\) 代入.

至于为什么要对核矩阵 \(K\) 进行分解, 可以这样理解, 核矩阵给出的是映射后数据的内积, 即 \(K_{ij} = k(x_i, x_j)\), 但我们只想知道映射后的数据 \(\phi(x)\) 该怎么办? 便可以将矩阵分解成 \(K=A^TA\) 的形式, 使得 \(A = [ \phi(x_1), \cdots, \phi(x_{n_1 + n_2}) ]\), 即 \(A\) 中的每个元素都是映射后的数据.

在上述的分解中, \(A\) 即为 \(K^{-1/2}K\). 注意到 \(K\) 为对称半正定矩阵, 因此 \(A^T = (K^{-1/2}K)^T = KK^{-1/2}\).

考虑使用 \((n_1 + n_2) \times m\) 维的矩阵 \(\widetilde{W}\) 将特征变化到 \(m\) 维空间 (通常 \(m \ll n_1 + n_2\)), 则得到的核矩阵为:

\[\widetilde{K} = (KK^{-1/2}\widetilde{W})(\widetilde{W}^TK^{-1/2}K) = KWW^TK
\tag{6}
\]

其中, \(W = K^{-1/2}\widetilde{W} \in \mathbb{R}^{(n_1 + n_2) \times m}\). 特别地, 任意两个数据 \(x_i\) 和 \(x_j\) 的核函数为:

\[\tilde{k}(x_i, x_j) = k^{T}_{x_i}WW^Tk_{x_j}
\tag{7}
\]

其中, \(k_x = [ k(x_1, x), \cdots, k(x_{n_1 + n_2}, x)]^T \in \mathbb{R}^{n_1 + n_2}\). 因此, 公式\((7)\)中的核函数给出了未见样本的参数化核估计表示.

此外, 根据公式\((6)\)中\(\widetilde{K}\)的定义, 两个域之间的经验均值距离可重新写为:

\[\begin{aligned}
\operatorname{Dist}\left(X_{S}^{\prime}, X_{T}^{\prime}\right) &=\operatorname{tr}\left(\left(K W W^{\top} K\right) L\right) \\
&=\operatorname{tr}\left(W^{\top} K L K W\right) \\
& {\scriptsize //利用迹循环性质:tr(ABC)=tr(BCA)=tr(CAB)}
\end{aligned}
\tag{8}
\]

迁移成分提取

在最小化公式\((8)\)的时候, 通常需要加一个正则项 \(tr(W^TW)\) (即矩阵二范数 \(\Vert W \Vert_{2}\))来控制参数 \(W\) 的复杂度.

从而, 领域自适应的核学习问题可变为:

\[\begin{array}{cl}
{\min \limits_{W}} & {\operatorname{tr}\left(W^{\top} W\right)+\mu \operatorname{tr}\left(W^{\top} K L K W\right)} \\
{\text { s.t. }} & {W^{\top} K H K W=I}
\end{array}
\tag{9}
\]

其中, \(\mu\) 为权衡参数, \(I \in \mathbb{R}^{m \times m}\) 为单位阵, \(H = I_{n_1 + n_2} - \frac{1}{n_1 + n_2} \mathrm{1}\mathrm{1}^T\) 为中心矩阵(centering matrix), \(\mathrm{1} \in \mathbb{R}^{n_1 + n_2}\) 为全1列向量, \(I_{n_1 + n_2} \in \mathbb{R}^{(n_1 + n_2) \times (n_1 + n_)}\) 为单位阵.

★注: 添加 \(W^{\top} K H K W=I\) 限制条件一方面是为了避免平凡解(即\(W = 0\)), 另一方面是为了保持数据的散度(\(W^{\top} K H K W\)为投影后数据\(W^{\top} K\)的散度矩阵), 即前面简介中所说的保持原始数据固有结构.

尽管公式\((9)\)为非凸优化问题, 但其可以转化为迹优化问题:

\[\min _{W} \operatorname{tr}\left(\left(W^{\top} K H K W\right)^{\dagger} W^{\top}(I+\mu K L K) W\right)
\tag{10}
\]

或者

\[\max _{W} \operatorname{tr}\left(\left(W^{\top}(I+\mu K L K) W\right)^{-1} W^{\top} K H K W\right)
\tag{11}
\]

上述转化可由拉格朗日乘子法得到, 具体证明略...

类似于核Fisher判别, 公式\((11)\)中 \(W\) 的解为 \((I + \mu KLK)^{-1}KHK\) 的前 \(m\) 个特征值对应的特征向量.

因此, 本文提出的方法命名为迁移成分分析(Transfer Component Analysis, TCA).

实验结果

toy dataset

跨域WiFi定位

跨域文本分类

代码

via: jindongwang/transferlearning

  1. # encoding=utf-8
  2. """
  3. Created on 21:29 2018/11/12
  4. @author: Jindong Wang
  5. """
  6. import numpy as np
  7. import scipy.io
  8. import scipy.linalg
  9. import sklearn.metrics
  10. import sklearn.neighbors
  11. def kernel(ker, X, X2, gamma):
  12. if not ker or ker == 'primal':
  13. return X
  14. elif ker == 'linear':
  15. if not X2:
  16. K = np.dot(X.T, X)
  17. else:
  18. K = np.dot(X.T, X2)
  19. elif ker == 'rbf':
  20. n1sq = np.sum(X ** 2, axis=0)
  21. n1 = X.shape[1]
  22. if not X2:
  23. D = (np.ones((n1, 1)) * n1sq).T + \
  24. np.ones((n1, 1)) * n1sq - 2 * np.dot(X.T, X)
  25. else:
  26. n2sq = np.sum(X2 ** 2, axis=0)
  27. n2 = X2.shape[1]
  28. D = (np.ones((n2, 1)) * n1sq).T + \
  29. np.ones((n1, 1)) * n2sq - 2 * np.dot(X.T, X)
  30. K = np.exp(-gamma * D)
  31. elif ker == 'sam':
  32. if not X2:
  33. D = np.dot(X.T, X)
  34. else:
  35. D = np.dot(X.T, X2)
  36. K = np.exp(-gamma * np.arccos(D) ** 2)
  37. return K
  38. class TCA:
  39. def __init__(self, kernel_type='primal', dim=30, lamb=1, gamma=1):
  40. '''
  41. Init func
  42. :param kernel_type: kernel, values: 'primal' | 'linear' | 'rbf' | 'sam'
  43. :param dim: dimension after transfer
  44. :param lamb: lambda value in equation
  45. :param gamma: kernel bandwidth for rbf kernel
  46. '''
  47. self.kernel_type = kernel_type
  48. self.dim = dim
  49. self.lamb = lamb
  50. self.gamma = gamma
  51. def fit(self, Xs, Xt):
  52. '''
  53. Transform Xs and Xt
  54. :param Xs: ns * n_feature, source feature
  55. :param Xt: nt * n_feature, target feature
  56. :return: Xs_new and Xt_new after TCA
  57. '''
  58. X = np.hstack((Xs.T, Xt.T))
  59. X /= np.linalg.norm(X, axis=0)
  60. m, n = X.shape
  61. ns, nt = len(Xs), len(Xt)
  62. e = np.vstack((1 / ns * np.ones((ns, 1)), -1 / nt * np.ones((nt, 1))))
  63. M = e * e.T
  64. M = M / np.linalg.norm(M, 'fro')
  65. H = np.eye(n) - 1 / n * np.ones((n, n))
  66. K = kernel(self.kernel_type, X, None, gamma=self.gamma)
  67. n_eye = m if self.kernel_type == 'primal' else n
  68. a, b = np.linalg.multi_dot([K, M, K.T]) + self.lamb * \
  69. np.eye(n_eye), np.linalg.multi_dot([K, H, K.T])
  70. w, V = scipy.linalg.eig(a, b)
  71. ind = np.argsort(w)
  72. A = V[:, ind[:self.dim]]
  73. Z = np.dot(A.T, K)
  74. Z /= np.linalg.norm(Z, axis=0)
  75. Xs_new, Xt_new = Z[:, :ns].T, Z[:, ns:].T
  76. return Xs_new, Xt_new
  77. def fit_predict(self, Xs, Ys, Xt, Yt):
  78. '''
  79. Transform Xs and Xt, then make predictions on target using 1NN
  80. :param Xs: ns * n_feature, source feature
  81. :param Ys: ns * 1, source label
  82. :param Xt: nt * n_feature, target feature
  83. :param Yt: nt * 1, target label
  84. :return: Accuracy and predicted_labels on the target domain
  85. '''
  86. Xs_new, Xt_new = self.fit(Xs, Xt)
  87. clf = sklearn.neighbors.KNeighborsClassifier(n_neighbors=1)
  88. clf.fit(Xs_new, Ys.ravel())
  89. y_pred = clf.predict(Xt_new)
  90. acc = sklearn.metrics.accuracy_score(Yt, y_pred)
  91. return acc, y_pred
  92. if __name__ == '__main__':
  93. domains = ['caltech.mat', 'amazon.mat', 'webcam.mat', 'dslr.mat']
  94. for i in range(4):
  95. for j in range(4):
  96. if i != j:
  97. src, tar = 'data/' + domains[i], 'data/' + domains[j]
  98. src_domain, tar_domain = scipy.io.loadmat(src), scipy.io.loadmat(tar)
  99. Xs, Ys, Xt, Yt = src_domain['feas'], src_domain['label'], \
  100. tar_domain['feas'], tar_domain['label']
  101. tca = TCA(kernel_type='primal', dim=30, lamb=1, gamma=1)
  102. acc, ypre = tca.fit_predict(Xs, Ys, Xt, Yt)
  103. print(acc)

参考文献


  1. Karsten M. Borgwardt, Arthur Gretton, Malte J. Rasch, Hans-Peter Kriegel, Bernhard Scholkopf, and Alexander J. Smola. Integrating structured biological data by kernel maximum mean discrepancy. In ISMB, pages 49–57, Fortaleza, Brazil, 2006 ↩︎

  2. Sinno Jialin Pan, James T. Kwok, and Qiang Yang. Transfer learning via dimensionality reduction. In Proceedings of AAAI, pages 677–682, Chicago, Illinois, USA, 2008. ↩︎ ↩︎ ↩︎

  3. Bernhard Scholkopf, Alexander Smola, and Klaus-Robert Muller. Nonlinear component analysis as a kernel eigenvalue problem. Neural Computation, 10(5):1299–1319,1998. ↩︎

【论文笔记】Domain Adaptation via Transfer Component Analysis的更多相关文章

  1. 论文笔记:Variational Capsules for Image Analysis and Synthesis

    Variational Capsules for Image Analysis and Synthesis  2018-07-16 16:54:36 Paper: https://arxiv.org/ ...

  2. Domain Adaptation (3)论文翻译

    Abstract The recent success of deep neural networks relies on massive amounts of labeled data. For a ...

  3. Domain Adaptation论文笔记

    领域自适应问题一般有两个域,一个是源域,一个是目标域,领域自适应可利用来自源域的带标签的数据(源域中有大量带标签的数据)来帮助学习目标域中的网络参数(目标域中很少甚至没有带标签的数据).领域自适应如今 ...

  4. Perceptual Losses for Real-Time Style Transfer and Super-Resolution and Super-Resolution 论文笔记

    Perceptual Losses for Real-Time Style Transfer and Super-Resolution and Super-Resolution 论文笔记 ECCV 2 ...

  5. Deep Transfer Network: Unsupervised Domain Adaptation

    转自:http://blog.csdn.net/mao_xiao_feng/article/details/54426101 一.Domain adaptation 在开始介绍之前,首先我们需要知道D ...

  6. Domain adaptation:连接机器学习(Machine Learning)与迁移学习(Transfer Learning)

    domain adaptation(域适配)是一个连接机器学习(machine learning)与迁移学习(transfer learning)的新领域.这一问题的提出在于从原始问题(对应一个 so ...

  7. 论文阅读 | A Curriculum Domain Adaptation Approach to the Semantic Segmentation of Urban Scenes

    paper链接:https://arxiv.org/pdf/1812.09953.pdf code链接:https://github.com/YangZhang4065/AdaptationSeg 摘 ...

  8. 《principal component analysis based cataract grading and classification》学习笔记

    Abstract A cataract is lens opacification caused by protein denaturation which leads to a decrease i ...

  9. Principal Component Analysis ---- PRML读书笔记

    To summarize, principal component analysis involves evaluating the mean x and the covariance matrix ...

随机推荐

  1. Sketch网页截屏插件设计开发

    1.需求 在Sketch的Artboard中插入网页截图: 1.1.输入网址,自动截图到Artboard中,并居中显示: 1.2.可截取网页局部图片 2.技术选型 技术的选型主要是针对截图功能的选型, ...

  2. Sketch webView方式插件开发技术总结

    相信大家都对Sketch有一定的了解和认识.除了基础的矢量设计功能以外,插件更是让Sketch保持强大的独门秘籍.Sketch开放了第三方插件接口,设计师可以在几百种的插件中轻松找到适合自己工作方式的 ...

  3. 转载 c# automapper 使用(一) https://www.cnblogs.com/caoyc/p/6367828.html

    一.最简单的用法 有两个类User和UserDto 1 public class User 2 { 3 public int Id { get; set; } 4 public string Name ...

  4. Linux监控命令整理(top,free,vmstat,iostat,mpstat,sar,netstat)

    1.1 top 1.1.1 命令说明 Top 命令能够实时监控系统的运行状态,并且可以按照cpu.内存和执行时间进行排序 1.1.2 参数说明 命令行启动参数: 用法: top -hv | -bcis ...

  5. B轮公司技术问题列表(转)

    1.异构系统的接口对接我们有自己的一套统一接口,但是需要与其它公司的接口做对接,但是各个公司的接口各不相同,有什么好的方式能够方便与各公司的接口做对接的同时我们这边也能尽量少或者不需要改动代码就能实现 ...

  6. ConcurrentHashMap中的putIfAbsent方法的使用以及返回值的含义

    public V putIfAbsent(@NotNull K key, @NotNull V value) putIfAbsent方法主要是在向ConcurrentHashMap中添加键—值对的时候 ...

  7. linux如何查看端口被哪个进程占用

    1.lsof -i:端口号 2.netstat -tunlp|grep 端口号 都可以查看指定端口被哪个进程占用的情况 工具/原料   linux,windows xshell 方法/步骤     [ ...

  8. 深入浅出的webpack构建工具---webpack3版本的CommonsChunkPlugin详解(六)

    阅读目录 一:什么是CommonsChunkPlugin, 它的作用是什么? 二:webpack3中CommonsChunkPlugin配置项及含义? 回到顶部 一:什么是CommonsChunkPl ...

  9. CommonJS, AMD, CMD是什么及区别--简单易懂有实例

    CommonJS, AMD, CMD都是JS模块化的规范. CommonJS是服务器端js模块化的规范,NodeJS是这种规范的实现. AMD(异步模块定义)和CMD(通用模块定义)都是浏览器端js模 ...

  10. C++多线程的使用

    很多的时候会遇到多线程跑 ,接下来就写了一个 多线程的demo  废话不说直接上代码 #include <iostream> #include <pthread.h> //多线 ...