迁移学习五——GFK

点点圈 提交于 2020-01-26 03:14:00

本篇文章是对《Geodesic Flow Kernel for Unsupervised Domain Adaptation》的学习。

格拉斯曼流形

在讲述GFK之前我们先引入一个概念,即格拉斯曼流形。百度百科中的定义:

设W是n维向量空间,考虑W中全体k维子空间构成的集合G=Grass(k,W),因为G上有自然的流形结构,所以我们将它称为格拉斯曼流形。

关于这个定义我们并不需要深究,只要知道n维空间的所有k维子空间构成了一个流形结构即可。

1 SGF

之前博客讲的方法均是将源域和目标域数据映射到同一个空间中,SGF(Sampling Geodesic Flow)则引入了格拉斯曼流形,将源域和目标域看做这个流形结构中的两个点,并构建从源域到目标域的测地线,测地线上的每个点可以看作是一个子空间,通过将数据映射在该测地线上的不同子空间,并进行分析,学习算法可以很好地提取较为恒定的特征(即在子空间变化的过程中较为稳定的一部分)。一个直观的理解就是汽车出发地驶向目的地,这个过程中车身会位移,会旋转,运气不好出现点剐蹭还会发生一些形变,但整个过程车的型号、车牌号、具体的一些硬件配置等等是不会变化的,对车辆在行驶过程的影像进行分析,可以获取这些稳定的特征,用于接下来的特定任务场景中。
SGF的步骤大体如下:(1)构建连接源域和目标域的测地线;(2)对测地线进行采样,获取若干子空间;(3)将特征映射到这些子空间上,并将在这些子空间上的映射结果连接起来,构成一个高维的向量(super-vectors);(4)将这个高维向量进行降维;(5)用最后降维后的样本构建分类器。

2 GFK

SGF存在一些问题,如在该路径中找多少点(即多少子空间),子空间的维度该如何确定等。GFK对这些问题进行了解答。接下来我就主要讲一下GFK(主要还是SGF这篇文章看的不太懂。。。)。
GFK的思路:(1)确定子空间的维度;(2)构建测地线;(3)计算测地线核;(4)使用核在标注数据上构建分类器。

2.1 Subspace disagreement measure(SDM)

首先是子空间维度的确定,本篇文章提出了SDM来对子空间的不一致度进行度量。我们分别对S(源域数据)、T(目标域数据)、S+T(源域数据和目标域数据合并起来)进行PCA,获取相应的PCA子空间:PCASPCATPCAS+TPCA_{S}、PCA_{T}、PCA_{S+T}(列向量构成了该子空间的一组基,每一列为该空间中一个基向量),其中三个矩阵的大小分别为ddSddTddS+Td*d_{S}、d*d_{T}、d*d_{S+T},d为原始数据的维度,dSdTdS+Td_{S}、d_{T}、d_{S+T}为PCA降维后的维度。
文章给出了主角( principal angles)的概念,用PCASPCA_{S}的转置乘以PCAS+TPCA_{S+T},得到矩阵A(dSdS+Td_{S}*d_{S+T}),对A进行奇异值分解,将奇异值向量的每个元素理解为一个cos值,通过arccos获取角度,设角度构成的向量为α\alpha,那么αd\alpha_{d}即为PCASPCA_{S}PCAS+TPCA_{S+T}之间的第d个主角。至于为什么这么定义,谈一下个人理解,因为PCASPCA_{S}PCAS+TPCA_{S+T}中的每个列向量均为单位向量,矩阵A的每个元素代表了两个基向量的内积,即两个坐标轴之间的夹角的余弦值,而A的奇异值则在一定程度上体现了两个坐标系之间的余弦值的大小。
分别获取PCASPCA_{S}PCAS+TPCA_{S+T}PCATPCA_{T}PCAS+TPCA_{S+T}的主角向量,并升序排列,得到向量α\alphaβ\beta。我们定义D(d)=0.5[sinαd+sinβd]D(d)=0.5[sin\alpha _{d}+sin\beta _{d}]。直觉上来说,如果两个子空间越相近,那么两个子空间之间的各个主角会越小。当D(d)=1时,表明αd=βd=π2\alpha _{d}=\beta _{d}=\frac{\pi}{2},此时子空间S和子空间T无法相互获取对方的特征信息(可以理解为均与子空间S+T正交,无法进行投影)。
文章中按照贪心的策略获取最优的维度dd^{*},即d=mind^{*}=min{dD(d)=1d|D(d)=1},也就是找到第一个使得D(d)=1的d,注意主角是升序排列的。
文章对于该部分没有仔细讲解,很大部分是自己进行理解的,一些地方不太清楚,例如dSdTdS+Td_{S}、d_{T}、d_{S+T}三个维度是否相等(个人感觉是相等的,因为文章后面提到在格拉斯曼流形上的距离,这样的话子空间维度应该是一样的,因为一个格拉斯曼流形上的子空间维度是相同的);为什么不直接计算S和T之间的主角,而是引入S+T;确定完维度dd^{*}后如何选取相应的dd^{*}个维度。
上面内容仅供大家参考,最好还是读原论文,这里只是提供了一下我个人的理解。当然这部分也并不是GFK的重点。

2.2 Geodesic Flow Kernel (GFK)

前面说了这么多,大家可能对格拉斯曼流形,子空间等概念没有一个直观的理解,我们可以看下面这个图:
在这里插入图片描述
整个蓝色曲面就是一个格拉斯曼流形,红点是源域,黄点是目标域,我们找到一条测地线(绿色的线)连接源域和目标域,Φ(t)\Phi(t)代表是这条测地线的函数,0t10\leq t\leq 1,可以看到Φ(0)\Phi(0)对应的是源域,Φ(1)\Phi(1)对应目标域,Φ(t)\Phi(t)对应这条测地线上的某个子空间,公式为Φ(t)=PSU1Γ(t)RSU2Σ(t)\Phi (t)=P_{S}U_{1}\Gamma (t)-R_{S}U_{2}\Sigma (t)。其中PSP_{S}代表源域的子空间,PSRDdP_{S}\in R^{D*d}(注意D为原始数据的维数,d为上一节得到的最优的子空间维数,注意与上一节的符号代表进行区分);RSR_{S}代表的是PSP_{S}的正交补空间,RSR(Dd)dR_{S}\in R^{(D-d)*d};其他的符号均来自以下SVD分解:PSTPT=U1ΓVTP_{S}^{T}P_{T}=U_{1}\Gamma V^{T}RSTPT=U2ΣVTR_{S}^{T}P_{T}=-U_{2}\Sigma V^{T}
回顾上一节我们提到的主角的概念,可以看到Γ\Gamma中的对角线元素代表了源域子空间PSP_{S}与目标域子空间PTP_{T}之间主角的余弦值,Σ\Sigma中的对角线元素代表了RSR_{S}与目标域子空间PTP_{T}之间主角的余弦值,由于RSR_{S}PSP_{S}的正交补空间,令θi\theta _{i}(i=1,…,d)为PSP_{S}PTP_{T}之间的主角,那么Σ\Sigma的对角线元素可以理解为θi\theta _{i}的正弦值。即Γ\Gamma中的元素对应cosθicos\theta _{i}Σ\Sigma对应sinθisin\theta _{i},回到Φ(t)\Phi (t)的公式中,Γ(t)\Gamma (t)中的元素对应costθicost\theta _{i}Σ(t)\Sigma (t)对应sintθisint\theta _{i}
我们刚才提到Φ(0)\Phi(0)对应的是源域,令t=0,那么Φ(0)=PSU1Γ(0)RSU2Σ(0)=PSU1\Phi (0)=P_{S}U_{1}\Gamma (0)-R_{S}U_{2}\Sigma (0)=P_{S}U_{1},而U1U_{1}为正交矩阵,所以PSU1P_{S}U_{1}仍对应PSP_{S}这个子空间,只不过进行了一些正交变换;同样的Φ(1)=PSU1Γ(1)RSU2Σ(1)=PSU1ΓRSU2Σ=PTV+PTV\Phi (1)=P_{S}U_{1}\Gamma (1)-R_{S}U_{2}\Sigma (1)=P_{S}U_{1}\Gamma -R_{S}U_{2}\Sigma =P_{T}V+P_{T}V(这里是带入了前面的两个SVD变换),可以看到Φ(1)\Phi (1)对应的是PTP_{T}
前面提到SGF留下的一个问题是在测地线上取多少个子空间,GFK的回答是取所有的子空间,即在测地线上进行积分。Φ(t)\Phi (t)对应一个子空间,样本x在这个子空间上的投影即为Φ(t)Tx\Phi (t)^{T}x,我们将x在这个路径上所有子空间的投影拼接起来,形成一个无穷维的向量z,很显然z没有显式的表达,但我们可以定义zi,zjz_{i},z_{j}之间的内积,即(zi,zj)=01(Φ(t)Txi)T(Φ(t)Txj)=xiTGxj(z_{i},z_{j})=\int_{0}^{1}(\Phi (t)^{T}x_{i})^{T}(\Phi (t)^{T}x_{j})=x_{i}^{T}Gx_{j},其中G=[PSU1RSU2][Λ1Λ2Λ2Λ3][U1TPSTU2TRST]G=\begin{bmatrix} P_{S}U_{1} &R_{S}U_{2} \end{bmatrix}\begin{bmatrix} \Lambda _{1} &\Lambda _{2} \\ \Lambda _{2} &\Lambda _{3} \end{bmatrix}\begin{bmatrix} U_{1}^{T}P_{S}^{T}\\ U_{2}^{T}R_{S}^{T} \end{bmatrix}(可通过对θ\theta积分得到,再此不做推导)
回顾核技巧,也是ϕ(x)\phi(x)无法显式定义,而是直接定义映射后的内积K(xi,xj)=ϕ(xi)Tϕ(xj)K(x_{i},x_{j})=\phi (x_{i})^{T}\phi (x_{j}),这里的思路是一样的,在也是GFK中kernel的由来。
G的使用:计算G\sqrt{G},映射后的数据z=Gxz=\sqrt{G}x

3 总结

该论文中还有一个贡献是存在多个源域时如何选取最优的源域进行迁移,再此不做详述,感兴趣的同学可以学习论文的相关章节。本篇博客写的乱,写的时候感觉这里需要扩充,那里需要扩充,没组织好,前面几篇博客也有这个问题。我写的博客会有一定篇幅去描述本人的理解,如果大家读论文的时候不太清楚为什么要这么做,有的细节不太理解,希望这篇博客可以给大家一些帮助。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!