GFK(Geodesic Flow Kernel)关于测地线核的无监督域适应算法

论文地址:http://www.cs.utexas.edu/users/grauman/papers/subspace-cvpr2012.pdf

通过测地线算法完成迁移学习是一种不同的方向,其中GFK又是测地线算法中经典的一个,整理了网上的一些关于GFK的解释和流形空间的解释形成了此篇笔记,希望能够帮助更好的理解GFK,引用的内容链接详见参考。

背景

有很多迁移学习的方法是将源域映射到目标域,或者将源域和目标域映射到一个共同空间中,然后就可以使用经过映射后的源域辅助目标域完成任务,我们假设源域和目标域是高维空间中的两个点(Grassmann流形),那么从一个点投影到另一个点的一种方法是一个点慢慢一步一步靠近另一个点,在这种情况下,如果是在欧式空间中,已知两个点的坐标,可以直接通过计算两点之间的欧式距离进行映射,当时数据中的现实情况常常不是这么简单的,数据中两点的欧式距离往往也不是我们想要的真实距离,比如下面这张很经典的“瑞士卷图”:

GFK(Geodesic Flow Kernel)关于测地线核的无监督域适应算法

图中两点的欧式距离是两点之间的连线,而这个距离往往对我们来说意义不大,我们需要一个新的距离:一个点沿着卷走到另一个点的距离,即两个点在流形空间中的距离,而走过的这条线称为“测地线”。

流形空间

我们所能观察到的数据实际上是由一个低维流形映射到高维空间上的。由于数据内部特征的限制,一些高维中的数据会产生维度上的冗余,实际上只需要比较低的维度就能唯一地表示。举个例子,比如说我们在平面上有个圆,如何表示这个圆呢?如果我们把圆放在一个平面直角坐标系中,那一个圆实际上就是由一堆二维点构成的。比如一个单位圆: (1, 0) 是一个在圆上的点, (0, 1) 也是一个在圆上的点,但 (0,0) 和 (2,3) 等等很多点是不在这个圆上的。显然如果用二维坐标来表示,我们没有办法让这个二维坐标系的所有点都是这个圆上的点。也就是说,用二维坐标来表示这个圆其实是有冗余的。我们希望,如果能建立某一种描述方法,让这个描述方法所确定的所有点的集合都能在圆上,甚至能连续不间断地表示圆上的点,那就好了!有没有这种方法呢?对于圆来说,当然有!那就是用极坐标。在极坐标的表示方法下,圆心在原点的圆,只需要一个参数就能确定:半径。当你连续改变半径的大小,就能产生连续不断的“能被转换成二维坐标表示”的圆。所以说,实际上二维空间中的圆就是一个一维流形。与之相似的,三维空间中一个球面,用x, y, z三个坐标轴确定时会产生冗余(很多在三维空间中的数据点并不在球面上)。但其实只需要用两个坐标就可以确定了,比如经度和维度。只要给定任何合法的精度和维度,我们就都能保证这个点肯定在球面上!像上面的“瑞士卷”,如果能找到一种空间完整的表示该卷形而很少冗余甚至没有冗余,那么这个空间就是一种流形空间。经典的构造流形空间的方法有ISOMAP、locally linear embedding、laplacian eigenmap等,而其中ISOMAP主要用的是一种在降维的过程中保持原始点距离不变的思想,具体可以参考笔记ISOMAP和MDS算法。

GFK

咳咳,前戏已经做足,那么就到重要时刻了,GFK想要解决了两个问题来完成源域的迁移:

  • 构造一条测地线来使源域靠近目标域
  • 当存在多个源域时,提出Rank of Domain度量计算出各源域与目标域之间的距离,用于选择合适的源域迁移。

构造测地线

既然在流形空间中,坐标信息不好用的情况下,在两点之间构建一条线,我们可以在两点之间选取一些点(比如k个点),通过这些点的连线来完成测地线的构造,这也是另一个迁移学习算法SGF的做法,而其中的d取多少才合适往往是个问题,在GFK中,则是通过对两点所在的流行空间函数进行积分,完成这条线的构造,这样看起来也比较科学、准确呀。

GFK(Geodesic Flow Kernel)关于测地线核的无监督域适应算法

正如上图中,Φ(0)\Phi(0)为空间中的源域表示,Φ(1)\Phi(1)则为空间中的目标域表示,Φ(0)\Phi(0)通过一步一步走到Φ(1)\Phi(1),而中间的路程变换就为测地线(geodesic)。并且有以下性质:

GFK(Geodesic Flow Kernel)关于测地线核的无监督域适应算法

测地线中,靠近Φ(0)\Phi(0)Φ(t)\Phi(t)与源域相似,靠近Φ(1)\Phi(1)Φ(t)\Phi(t)与目标域相似,而中间的类似于二者之间的融合。我们已经看出来了,这个测地线才是主角啊,那怎么构造呢?

我们令PS,PTRDdP_S,P_T\in R^{D*d}​,即PSP_S​PTP_T​为经过降维后的子空间,并令RSRD(Dd)R_S\in R^{D*(D-d)}​,了解SVDd的相当于PSP_S​为特征向量中的前d个,而RSR_S​为剩余的D-d个特征向量,并且他们之间是两两正交的,即:RSTPS=0R_S^TP_S=0​。而将上面的图参数化,则为:
Φ:t[0,1]Φ:tG(d,D)\Phi : t\in [0,1] \rightarrow \Phi : t\in G(d,D)
st.PS=Φ[0],PT=Φ[1]st. P_S=\Phi[0],P_T=\Phi[1]
起点和终点我们知道了,那其他的Φ[t]\Phi[t]怎么表示呢?如下:
Φ(t)=PSU1Γ(t)RSU2Σ(t)\Phi(t)=P_SU_1\Gamma(t)-R_SU_2\Sigma(t)
其中U1U2U_1、U_2为正交矩阵,通过SVD分割而来:
PSTPT=U1Γ(t)VT,RSTPT=U2Σ(t)VTP_S^TP_T=U_1\Gamma(t)V^T,R_S^TP_T=-U_2\Sigma(t)V^T
其中ΣΓ\Sigma、\Gamma为对角矩阵,在矩阵SVD中,ΣΓ\Sigma、\Gamma内的值为称为奇异值,这里对PSTPTP_S^T、P_T的内积进行奇异值分解,ΣΓ\Sigma、\Gamma内的值为cos(θ)\cos(\theta)sin(θ)\sin(\theta),同时称θ\thetaPSTPTP_S^T、P_T的"principal angles"。作为一个标准程序猿,数学基础确实不太好,个人的理解是:在SVD中,有那么一步是关于AATAA^T进行特征值分解AAT=UΣVTAA^T=U\Sigma V^T,对角阵Σ\Sigma在物理意义上可以理解为A在特征向量中权重度量,换句话说最大的特征值所对应的特征向量最重要,其他依次递减,而特征向量则相当于将A分解下的一个线性子空间(变换方向),因此特征分解相当于通过知道变换方向及其方向重要程度即可还原矩阵,这里我则将特征值理解为两个矩阵之间的特征子空间夹角,通过知道各特征子空间(获取流形空间时进行分解得到的)及其夹角,就可还原出PSTPTP_S^T、P_T。当然这是我的yy,关于正统的principal angles,感兴趣的可以参考Jordan在1875年的成果:
http://www.numdam.org/article/BSMF_1875__3__103_2.pdf/。

那么知道了Φ(t)\Phi(t)的表示,就可以得出积分表示了:
01(Φ(t)xi)T(Φ(t)xi)dt=xiTGxj\int_0^1(\Phi(t)x_i)^T(\Phi(t)x_i)dt=x_i^TGx_j
其中G为:

GFK(Geodesic Flow Kernel)关于测地线核的无监督域适应算法

即两个向量xixjx_i、x_j在测地线上的内积的积分,通过这样就构建出了两个向量xixjx_i、x_j之间的测地线啦~ 由此可以通过G将源域"走到"目标域,通过这样就相当于做到了某种程度上的域映射。

Rank of Domain

Rank of Domain用于度量源域和目标域之间的接近程度,如下:
R(S,T)=1didθi[KL(SiTi)+KL(TiSi)]R(S,T)= \frac{1}{d^*} \sum_{i}^{d^*} \theta_i [KL(S_i||T_i)+KL(T_i||S_i)]

大意是通过KL散度和之间的夹角来度量源域和目标域。

参考

Sha F, Shi Y, Gong B, et al. Geodesic flow kernel for unsupervised domain adaptation[C]// IEEE Conference on Computer Vision and Pattern Recognition. IEEE Computer Society, 2015:2066-2073.

《小王爱迁移》系列之五:测地线流式核方法(GFK) - 王晋东不在家的文章 - 知乎
https://zhuanlan.zhihu.com/p/27782708

求简要介绍一下流形学习的基本思想? - 暮暮迷了路的回答 - 知乎
https://www.zhihu.com/question/24015486/answer/194284643