https://blog.csdn.net/tunhuzhuang1836/article/details/78058184
MMD理解
1.定义
MMD:maximum mean discrepancy。最大平均差异。参考网上定义为:基于两个分布的样本,通过寻找在样本空间上的连续函数f,求不同分布的样本在f上的函数值的均值,通过把两个均值作差可以得到两个分布对应于f的mean discrepancy。寻找一个f使得这个mean discrepancy有最大值,就得到了MMD。最后取MMD作为检验统计量(test statistic),从而判断两个分布是否相同。
如果这个值足够小,就认为两个分布相同,否则就认为它们不相同。同时这个值也用来判断两个分布之间的相似程度。而在迁移学习中,我们这个f一般是用高斯核函数(RBF)。
基于RHKS的MMD公式为:
2.推导
根据定义来理解,我们可以知道求解MMD首先需要知道样本s和t经过函数f输出后的均值usus和utut。均值的求法就是对该分布下的各个样本经过函数ff隐射后值的平均,即us=1m2∑mi,j=1f(s)us=1m2∑i,j=1mf(s),ut=1n2∑ni,j=1f(t)ut=1n2∑i,j=1nf(t)。
既然知道了分布的均值的求法,那映射函数f(∗)f(∗)又是怎么来的呢。从MMD的定义我们注意到,分布间距离的度量是在H空间中,而不是我们平时计算所在的空间。这里我们需要借助核的概念。
核(kernel)其实就是帮助我们省去在高维空间中进行繁琐计算的“简便运算法”,甚至还能解决无限维空间无法计算的问题。核运算隐式地将两个向量转换为其他形式然后求内积f=k(s,s′)=<ϕ(s),ϕ(s′)>f=k(s,s′)=<ϕ(s),ϕ(s′)>。
所以我们的样本经过函数f=k(x,x′)f=k(x,x′)(这里我们使用高斯核函数)映射到RHKS空间后,用欧几里得距离表示为:
MMD[f,s,t]=1m2∑mi,j=1k(s,s′)−2mn∑m,ni,j=1k(s,t′)+1n2∑ni,j=1k(t,t′)MMD[f,s,t]=1m2∑i,j=1mk(s,s′)−2mn∑i,j=1m,nk(s,t′)+1n2∑i,j=1nk(t,t′)
MMD[f,s,t]=∑||∣∣∣∣∣∣ k(s1,s1)−k(t1,t1)k(s2,s1)−k(t2,t1)...k(sn,s1)−k(tn,t1)k(s1,s2)−k(t1,t2)k(s2,s2)−k(t2,t2)...k(sn,s2)−k(tn,t2)............k(s1,sn)−k(t1,tn)k(s2,sn)−k(t2,tn)...k(sn,sn)−k(tn,tn)∣∣∣∣∣∣||HMMD[f,s,t]=∑||| k(s1,s1)−k(t1,t1)k(s1,s2)−k(t1,t2)...k(s1,sn)−k(t1,tn)k(s2,s1)−k(t2,t1)k(s2,s2)−k(t2,t2)...k(s2,sn)−k(t2,tn)............k(sn,s1)−k(tn,t1)k(sn,s2)−k(tn,t2)...k(sn,sn)−k(tn,tn)|||H
高斯核函数k(s,t)=e−||s−t||/bk(s,t)=e−||s−t||/b又跟带宽参数b下的向量ss和s′s′的欧几里得距离相关。这里我们可以忽略了指数和带宽的作用,则MMD可以进一步表示为:
MMD[f,s,t]=∑||∣∣∣∣∣∣ ||s1−s1||−||t1−t1||||s2−s1||−||t2−t1||...||sn−s1||−||tn−t1||||s1−s2||−||t1−t2||||s2−s2||−||t2−t2||...||sn−s2||−||tn−t2||............||s1−sn||−||t1−tn||||s2−sn||−||t2−tn||...||sn−sn||−||tn−tn||∣∣∣∣∣∣||HMMD[f,s,t]=∑||| ||s1−s1||−||t1−t1||||s1−s2||−||t1−t2||...||s1−sn||−||t1−tn||||s2−s1||−||t2−t1||||s2−s2||−||t2−t2||...||s2−sn||−||t2−tn||............||sn−s1||−||tn−t1||||sn−s2||−||tn−t2||...||sn−sn||−||tn−tn|||||H
这里我们取k(s,s′)=e−||s−s′||/bk(s,s′)=e−||s−s′||/b作分析,单个元素挨个化简得:||s−s′||=s2−2s⋅s′+s′2||s−s′||=s2−2s⋅s′+s′2。这里的s就是我们源域的图像经过特征抽取得到的[n_batch, m_vector]向量矩阵了。
需要注意的一点是,在这里求解||s−s′||||s−s′||时,矩阵间的次方s2s2并不是单纯对每一个元素求平方。而是通过点乘后续求矩阵迹(trace)来求得,具体实现为:
s2=tr(s⋅s)+tr(sT⋅sT)−2z⋅sTs2=tr(s⋅s)+tr(sT⋅sT)−2z⋅sT
s′2=tr(s′⋅s′)+tr(s′T⋅s′T)−2s′⋅s′Ts′2=tr(s′⋅s′)+tr(s′T⋅s′T)−2s′⋅s′T
s⋅s′=tr(s⋅s)+tr(s′T⋅s′T)−2s⋅s′Ts⋅s′=tr(s⋅s)+tr(s′T⋅s′T)−2s⋅s′T
那这个[n_batch, m_vector]向量矩阵是怎么来的呢?在迁移学习任务中,我们首先通过特征抽取层将每个batch输入的n张图片向量化为一个大小为[n,m]的矩阵,m为每张图片特征向量的长度。我们假定源域s=∣∣∣∣∣∣ s1s2...sn............∣∣∣∣∣∣s=| s1...s2.........sn...|,目标域为t=∣∣∣∣∣∣ t1t2...tn............∣∣∣∣∣∣t=| t1...t2.........tn...|,y轴长度为m。注意,这里的s1s1到snsn表示的是一个图片的[1,m]大小的特征向量。则可根据上式,分别求得
s2=tr(s⋅s)+tr(sT⋅sT)−2s⋅sT=∣∣∣∣∣∣ s1⋅s1s1⋅s1...s1⋅s1s2⋅s2s2⋅s2...s2⋅s2............sn⋅snsn⋅sn...sn⋅sn∣∣∣∣∣∣+∣∣∣∣∣∣ s1⋅s1s2⋅s2...sn⋅sns1⋅s1s2⋅s2...sn⋅sn............s1⋅s1s2⋅s2...sn⋅sn∣∣∣∣∣∣−2⋅∣∣∣∣∣∣ s1⋅s1s2⋅s1...sn⋅s1s1⋅s2s2⋅s2...sn⋅s2............s1⋅sns2⋅sn...sn⋅sn∣∣∣∣∣∣s2=tr(s⋅s)+tr(sT⋅sT)−2s⋅sT=| s1⋅s1s2⋅s2...sn⋅sns1⋅s1s2⋅s2...sn⋅sn............s1⋅s1s2⋅s2...sn⋅sn|+| s1⋅s1s1⋅s1...s1⋅s1s2⋅s2s2⋅s2...s2⋅s2............sn⋅snsn⋅sn...sn⋅sn|−2⋅| s1⋅s1s1⋅s2...s1⋅sns2⋅s1s2⋅s2...s2⋅sn............sn⋅s1sn⋅s2...sn⋅sn|。
同理可求得z′2z′2和z⋅z′z⋅z′。
所以我们可以进一步得到||s−s′||=∑∣∣∣∣∣∣ 0s1⋅s1+s2⋅s2−2⋅s1⋅s2...s1⋅s1+sn⋅sn−2⋅s1⋅sns1⋅s1+s2⋅s2−2⋅s1⋅s20...s2⋅s2+sn⋅sn−2⋅s2⋅sn............s1⋅s1+sn⋅sn−2⋅s1⋅sns2⋅s2+sn⋅sn−2⋅s2⋅sn...0∣∣∣∣∣∣||s−s′||=∑| 0s1⋅s1+s2⋅s2−2⋅s1⋅s2...s1⋅s1+sn⋅sn−2⋅s1⋅sns1⋅s1+s2⋅s2−2⋅s1⋅s20...s2⋅s2+sn⋅sn−2⋅s2⋅sn............s1⋅s1+sn⋅sn−2⋅s1⋅sns2⋅s2+sn⋅sn−2⋅s2⋅sn...0|
MMD的大致计算过程就这么多,有兴趣可自行推导。
3.理解
根据以上推导,我们可以将MMD公式简化为|| ||S−S′||2−||T−T′||2 ||2H|| ||S−S′||2−||T−T′||2 ||H2。第一个“||…||”为RKHS空间的欧几里得距离,第二个“||…||”为普通空间的欧几里得距离。所以最小化MMD的过程就是在迫使不同域中样本之间的差异应该保持一致。
怎么理解这句话呢?我们由梯度公式∇f=f(s)−f(s+Δ)∇f=f(s)−f(s+Δ)可以联想到,那我们求的||S−S′||2||S−S′||2和||T−T′||2||T−T′||2其实就可以看作求源域S和目标域T两两元素间的梯度,或者变化量。假设我们源域S样本经过映射函数f(s)=k(s,s′)=||S−S′||2f(s)=k(s,s′)=||S−S′||2后满足高斯分布(黑色实线),目标域T经过映射函数f(t)=k(t,t′)=||T−T′||2f(t)=k(t,t′)=||T−T′||2后满足拉普拉斯分布(黑色虚线),则其MMD(红色实线)计算出来曲线为:
由图像可知:
1)MMD函数和两个分布之间的差异接近线性关系;
2)当两个分布重合的时候,MMD为0.
具体到三维空间中来,假设我们的源域S的分布如下:X和Y为在源域中不同的抽样方式,Z维(Z=f(x,y)=k(x,y)=||X−Y||Z=f(x,y)=k(x,y)=||X−Y||)即表示各点经过映射函数后的值。
这样通过求得不同域下样本间的差异度的差异度,就是我们的MMD值。
4.问题
1)在迁移学习中,为什么要挨个对样本间求差呢?
因为我们从目标域数据集中抽取一个batch样本的时候,事先并不知道每一个样本的类别。所以为了消除类别间差异的特殊性,我们能想到的就是对全局样本间分别计算差异。
2)MMD和GAN有什么区别呢?
两者都是对数据分布距离的一种度量。在迁移学习方面也有很多使用GAN替代MMD的例子。MMD我们采用的RKHS空间类间差的欧几里得距离,GAN采用的JS距离。但GAN在考虑样本间关系上是采用鉴别器多层神经元来拟合。
3)MMD是如何在源域和目标域类别不对应的情况下还能迁移呢?
如果是传统方法我们首先肯定会疑惑,既然不知道从数据集抽取样本的类别,那在拉近距离的过程中把不同类别的距离拉近怎么办。所以MMD才会考虑把同域的类间差异当做是比较项而不是跨域的类别互相比较。
4)域适应忠的MMD和风格迁移中的提取content feature的Gram Matrax有什么区别?
已经有人证明了Gram Matrix就是多项式核的MMD。具体证明过程可以参照论文《Demystifying Neural Style Transfer》
reference
【1】http://blog.csdn.net/a1154761720/article/details/51516273
【2】Gretton A, Borgwardt K M, Rasch M J, et al. A kernel two-sample test[J]. Journal of Machine Learning Research, 2012, 13(Mar): 723-773.
【3】Long M, Zhu H, Wang J, et al. Unsupervised domain adaptation with residual transfer networks[C]//Advances in Neural Information Processing Systems. 2016: 136-144.
【4】https://github.com/thuml/transfer-caffe
【5】https://www.zhihu.com/question/30371867
【6】Li Y, Wang N, Liu J, et al. Demystifying Neural Style Transfer[J]. 2017:2230-2236.