精华内容
下载资源
问答
  • 机器学习中的数学——距离定义(二十八):最大均值差异(Maximum Mean Discrepancy, MMD)
    万次阅读
    2022-01-09 22:52:15

    分类目录:《机器学习中的数学》总目录
    相关文章:
    · 距离定义:基础知识
    · 距离定义(一):欧几里得距离(Euclidean Distance)
    · 距离定义(二):曼哈顿距离(Manhattan Distance)
    · 距离定义(三):闵可夫斯基距离(Minkowski Distance)
    · 距离定义(四):切比雪夫距离(Chebyshev Distance)
    · 距离定义(五):标准化的欧几里得距离(Standardized Euclidean Distance)
    · 距离定义(六):马氏距离(Mahalanobis Distance)
    · 距离定义(七):兰氏距离(Lance and Williams Distance)/堪培拉距离(Canberra Distance)
    · 距离定义(八):余弦距离(Cosine Distance)
    · 距离定义(九):测地距离(Geodesic Distance)
    · 距离定义(十): 布雷柯蒂斯距离(Bray Curtis Distance)
    · 距离定义(十一):汉明距离(Hamming Distance)
    · 距离定义(十二):编辑距离(Edit Distance,Levenshtein Distance)
    · 距离定义(十三):杰卡德距离(Jaccard Distance)和杰卡德相似系数(Jaccard Similarity Coefficient)
    · 距离定义(十四):Ochiia系数(Ochiia Coefficient)
    · 距离定义(十五):Dice系数(Dice Coefficient)
    · 距离定义(十六):豪斯多夫距离(Hausdorff Distance)
    · 距离定义(十七):皮尔逊相关系数(Pearson Correlation)
    · 距离定义(十八):卡方距离(Chi-square Measure)
    · 距离定义(十九):交叉熵(Cross Entropy)
    · 距离定义(二十):相对熵(Relative Entropy)/KL散度(Kullback-Leibler Divergence)
    · 距离定义(二十一):JS散度(Jensen–Shannon Divergence)
    · 距离定义(二十二):海林格距离(Hellinger Distance)
    · 距离定义(二十三):α-散度(α-Divergence)
    · 距离定义(二十四):F-散度(F-Divergence)
    · 距离定义(二十五):布雷格曼散度(Bregman Divergence)
    · 距离定义(二十六):Wasserstein距离(Wasserstei Distance)/EM距离(Earth-Mover Distance)
    · 距离定义(二十七):巴氏距离(Bhattacharyya Distance)
    · 距离定义(二十八):最大均值差异(Maximum Mean Discrepancy, MMD)
    · 距离定义(二十九):点间互信息(Pointwise Mutual Information, PMI)


    最大均值差异(Maximum Mean Discrepancy,MMD)是迁移学习,尤其是域适应(Domain Adaptation)中使用最广泛的一种损失函数,主要用来度量两个不同但相关的分布的距离。最大均值差异还可以用来测试两个样本,是否来自两个不同分布 p p p q q q,如果均值差异达到最大,就说明采样的样本来自完全不同的分布。

    最大均值差异度量了在再生希尔伯特空间中两个分布的距离,是一种核学习方法。通过寻找在样本空间上的连续函数 f : x → R f:x\rightarrow R f:xR随机投影后,分别求这两个分布的样本在 f f f上的函数值均值,并对两个均值做差得到这两个分布对应于 f f f的均值差(Mean Discrepancy)。最大均值差异的目标是寻找一个 f f f使得均值差最大,即得到最大均值差异。
    MMD ( F , p , q ) = sup ⁡ ∣ ∣ f ∣ ∣ H ≤ 1 E p [ f ( x ) ] − E q [ f ( y ) ] \text{MMD}(F, p, q)=\sup_{||f||_H\leq1}{E_p[f(x)]-E_q[f(y)]} MMD(F,p,q)=fH1supEp[f(x)]Eq[f(y)]

    更多相关内容
  • 针对这个问题,提出了一种基于类内最大均值差异的分布对齐策略。该策略首先预测所有样本的伪标签,然后借助伪标签样本信息依次对齐每个类别的领域类内分布。在深度学习框架下,所提算法能够有效保留分类信息,提高了...
  • 利用matlab来实现Maximum Mean Discrepancy(最大均值差异)的计算。
  • 针对湿式球磨机工况改变时,实时数据与建模数据分布不...然后,使用最大均值差异对适配后的数据进行分布度量并为源域构建的回归器加权;最后,对目标域数据进行负荷预测.通过对比实验与交叉实验表明了模型的实用性和有效性.
  • 最大均值差异

    万次阅读 2017-04-06 18:04:10
    引言最大均值差异(maximum mean discrepancy, MMD)提出时候是用来双样本检测,也就直观的判断两个数据的分布。

    引言

    最大均值差异(maximum mean discrepancy, MMD)提出时候是用来双样本检测,也就直观的判断两个数据的分布。

    原理

    MMD的基本原理如下所述:假设有一个满足P分布的数据集 Xs=[xs1,...,xsn] 和一个满足Q分布的数据集 Xt=[xt1,...,xtm] 并且存在一个再生希尔伯特空间H(RKHS) 存在一个映射函数 ϕ():X>H 表示从原始空间到希尔伯特空间的一个映射,并且当 n,m 趋于无穷时 Xsx Xtx 的最大均值差异可以表示为下式:

    f(X(S),X(T))=||1ni=1nϕ(xsi)1mi=1mϕ(xti)||

    通过上式可以看出,其原理是对每一个样本进行投影并求和,利用和的大小表述两个数据的分布差异。

    运用

    MMD在最近的风格迁移中运用的比较多,其神经网络主要是通过最小化两个网络的分布差异,同时MMD在吴恩达提出最近10年要火的迁移学习中应用很广,很多迁移学习神经网络就是把MMD做为最后的损失函数而进行优化的,并且提出了很多改进方法。

    展开全文
  • 如果两个分布的均值和方差都相同的话,它们应该很相似,比如同样均值和方差的高斯分布和拉普拉斯分布。但是很明显,均值和方差并不能完全代表一个分布,这时候我们就需要更高阶的矩来描述一个分布。 MMD的基本思想...

    可以参考我知乎的文章:

    统计知识(一)MMD Maximum Mean Discrepancy 最大均值差异 - 卡兵的文章 - 知乎
    https://zhuanlan.zhihu.com/p/163839117

    基本思想

    一个随机变量的反应了对应的分布信息,比如一阶中心矩是均值,二阶中心矩是方差等等。如果两个分布的均值和方差都相同的话,它们应该很相似,比如同样均值和方差的高斯分布和拉普拉斯分布。但是很明显,均值和方差并不能完全代表一个分布,这时候我们就需要更高阶的矩来描述一个分布。

    MMD的基本思想就是,如果两个随机变量的任意阶都相同的话,那么两个分布就是一致的。而当两个分布不相同的话,那么使得两个分布之间差距最大的那个矩应该被用来作为度量两个分布的标准。

    定义

    MMD常被用来度量两个分布之间的距离,是迁移学习中常用的损失函数。定义如下:

    从定义中可以看到, f f f 就相当于将 x x x映射到高阶上去,比如 [ x , x 2 , x 3 ] [x,x^2,x^3] [x,x2,x3],那么对应的求期望就相当于分别在求一、二、三阶矩。然后将他们的上确界作为MMD的值。注意这里举的例子只是便于理解。

    Kernel Emmbedding

    刚才讲到,两个分布应该是由任意阶来描述的,那么 f f f 应该能够将 x x x映射到任意阶上,这里就用到了核技巧,高斯核函数对应的映射函数恰好可以映射到无穷维上。映射到无穷维上再求期望,有一个更高大上的名字,叫做kernel embedding of distributions,这个简单理解就是将一个分布映射到再生希尔伯特空间(每个核函数都对应一个RKHS)上的一个点,这样两个分布之间的距离就可以用两个点的内积进行表示。

    在这里插入图片描述

    用公式进行表达就是:

    在这里插入图片描述

    第一个等号就是利用期望展开;第二个等号利用的是RKHS的再生性,用人话来讲就是RKHS中的 f ( x ) f(x) f(x)都可以写成一个无穷维的向量 k ( x , ⋅ ) k(x,\cdot) k(x,)与基底向量 f f f的内积;第三个等号利用的是内积的性质;最后一个等号 μ p \mu_p μp表示的就是kernel mean embedding

    在这里插入图片描述

    这个等价的概念就是将 x x x 利用 k ( x , ⋅ ) k(x,\cdot) k(x,)映射到无穷维上,然后在每一个维度上都求期望。

    MMD中sup的消去

    MMD中需要求一个sup,我们要将它用更直观的形式表达出来。
    在这里插入图片描述

    这里的第一个式子就是MMD的直接定义,第二个等号利用的是kernel embedding那一节中最后的结果。注意到,

    在这里插入图片描述

    这里利用的是内积的性质, < a , b > ≤ ∥ a ∥ ∥ b ∥ <a,b>\leq\|a\|\|b\| <a,b>ab,而对 ∥ f ∥ H \|f\|_{\mathcal{H}} fH限制的目的也是为了避免随意取到无穷大。因此,可以得到,

    在这里插入图片描述

    MMD的简化

    由于 μ p \mu_p μp无法直接得到,可以用均值进行无偏估计。假设 X ∼ p , Y ∼ q X\sim p, Y\sim q Xp,Yq,并且 X X X n n n个样本, Y Y Y m m m个样本。

    在这里插入图片描述

    到这里我们还算是没有办法求,因为 f ( x i ) f(x_i) f(xi)是无穷维的。但是核技巧的关键就在于不需要显式地表示映射函数来求两个向量的内积。因此我们对MMD进行平方,化简得到内积并用核函数表达。

    在这里插入图片描述

    代码实现

    在实际的应用中一般使用的是多核MMD,在这里实现的时候利用的就是多个不同RBF-bandwith的高斯核。

    pytorch版本 easezyc/deep-transfer-learning github

    def guassian_kernel(source, target, kernel_mul=2.0, kernel_num=5, fix_sigma=None):
        """计算Gram/核矩阵
        source: sample_size_1 * feature_size 的数据
        target: sample_size_2 * feature_size 的数据
        kernel_mul: 这个概念不太清楚,感觉也是为了计算每个核的bandwith
        kernel_num: 表示的是多核的数量
        fix_sigma: 表示是否使用固定的标准差
    
    		return: (sample_size_1 + sample_size_2) * (sample_size_1 + sample_size_2)的
    						矩阵,表达形式:
    						[	K_ss K_st
    							K_ts K_tt ]
        """
        n_samples = int(source.size()[0])+int(target.size()[0])
        total = torch.cat([source, target], dim=0) # 合并在一起
        
        total0 = total.unsqueeze(0).expand(int(total.size(0)), \
                                           int(total.size(0)), \
                                           int(total.size(1)))
        total1 = total.unsqueeze(1).expand(int(total.size(0)), \
                                           int(total.size(0)), \
                                           int(total.size(1)))
        L2_distance = ((total0-total1)**2).sum(2) # 计算高斯核中的|x-y|
        
        # 计算多核中每个核的bandwidth
        if fix_sigma:
            bandwidth = fix_sigma
        else:
            bandwidth = torch.sum(L2_distance.data) / (n_samples**2-n_samples)
        bandwidth /= kernel_mul ** (kernel_num // 2)
        bandwidth_list = [bandwidth * (kernel_mul**i) for i in range(kernel_num)]
        
        # 高斯核的公式,exp(-|x-y|/bandwith)
        kernel_val = [torch.exp(-L2_distance / bandwidth_temp) for \
                      bandwidth_temp in bandwidth_list]
    
        return sum(kernel_val) # 将多个核合并在一起
      
    def mmd(source, target, kernel_mul=2.0, kernel_num=5, fix_sigma=None):
        batch_size = int(source.size()[0])
        kernels = guassian_kernel(source, target,
                                  kernel_mul=kernel_mul, 	
                                 	kernel_num=kernel_num, 	
                                  fix_sigma=fix_sigma)
        XX = kernels[:batch_size, :batch_size] # Source<->Source
        YY = kernels[batch_size:, batch_size:] # Target<->Target
        XY = kernels[:batch_size, batch_size:] # Source<->Target
        YX = kernels[batch_size:, :batch_size] # Target<->Source
        loss = torch.mean(XX + YY - XY -YX) # 这里是假定X和Y的样本数量是相同的
        																		# 当不同的时候,就需要乘上上面的M矩阵
        return loss
    
    
    if __name__ == "__main__":
        import numpy as np
        data_1 = torch.tensor(np.random.normal(0,10,(100,50)))
        data_2 = torch.tensor(np.random.normal(10,10,(100,50)))
    
        print("MMD Loss:",mmd_rbf_noaccelerate(data_1,data_2))
    
        data_1 = torch.tensor(np.random.normal(0,10,(100,50)))
        data_2 = torch.tensor(np.random.normal(0,9,(100,50)))
    
        print("MMD Loss:",mmd_rbf_noaccelerate(data_1,data_2))
    >> 
    MMD Loss: tensor(1.1013, dtype=torch.float64)
    MMD Loss: tensor(0.0711, dtype=torch.float64)
    

    TensorFlow版本 github

    def maximum_mean_discrepancy(x, y, kernel=utils.gaussian_kernel_matrix):
      r"""Computes the Maximum Mean Discrepancy (MMD) of two samples: x and y.
      Maximum Mean Discrepancy (MMD) is a distance-measure between the samples of
      the distributions of x and y. Here we use the kernel two sample estimate
      using the empirical mean of the two distributions.
      MMD^2(P, Q) = || \E{\phi(x)} - \E{\phi(y)} ||^2
                  = \E{ K(x, x) } + \E{ K(y, y) } - 2 \E{ K(x, y) },
      where K = <\phi(x), \phi(y)>,
        is the desired kernel function, in this case a radial basis kernel.
      Args:
          x: a tensor of shape [num_samples, num_features]
          y: a tensor of shape [num_samples, num_features]
          kernel: a function which computes the kernel in MMD. Defaults to the
                  GaussianKernelMatrix.
      Returns:
          a scalar denoting the squared maximum mean discrepancy loss.
      """
      with tf.name_scope('MaximumMeanDiscrepancy'):
        # \E{ K(x, x) } + \E{ K(y, y) } - 2 \E{ K(x, y) }
        cost = tf.reduce_mean(kernel(x, x))
        cost += tf.reduce_mean(kernel(y, y))
        cost -= 2 * tf.reduce_mean(kernel(x, y))
    
        # We do not allow the loss to become negative.
        cost = tf.where(cost > 0, cost, 0, name='value')
      return cost
    
    def mmd_loss(source_samples, target_samples, weight, scope=None):
      """Adds a similarity loss term, the MMD between two representations.
      This Maximum Mean Discrepancy (MMD) loss is calculated with a number of
      different Gaussian kernels.
      Args:
        source_samples: a tensor of shape [num_samples, num_features].
        target_samples: a tensor of shape [num_samples, num_features].
        weight: the weight of the MMD loss.
        scope: optional name scope for summary tags.
      Returns:
        a scalar tensor representing the MMD loss value.
      """
      sigmas = [
          1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1, 5, 10, 15, 20, 25, 30, 35, 100,
          1e3, 1e4, 1e5, 1e6
      ]
      gaussian_kernel = partial(
          utils.gaussian_kernel_matrix, sigmas=tf.constant(sigmas))
    
      loss_value = maximum_mean_discrepancy(
          source_samples, target_samples, kernel=gaussian_kernel)
      # ...
      return loss_value
    
    

    引用

    [1] Kernel embedding of distributions https://en.wikipedia.org/wiki/Kernel_embedding_of_distributions

    [2] Statistical distance https://en.wikipedia.org/wiki/Statistical_distance

    [3] A collection of implementations of deep domain adaptation algorithms https://github.com/easezyc/deep-transfer-learning

    [4] MMD :maximum mean discrepancy https://blog.csdn.net/a1154761720/article/details/51516273

    [5] Kernel Distribution Embedding - 李新春的文章 - 知乎 https://zhuanlan.zhihu.com/p/114264831

    [6] https://www.cc.gatech.edu/~lsong/papers/SmoGreSonSch07.pdf

    [7] 随机变量的矩和高阶矩有什么实在的含义? - 姚岑卓的回答 - 知乎 https://www.zhihu.com/question/25344430/answer/64509141

    [8] MMD计算的核技巧公式推导 - 王晋东不在家的文章 - 知乎 https://zhuanlan.zhihu.com/p/63026435

    展开全文
  • 最大均值差异MMD

    千次阅读 2019-11-23 15:11:15
    最大均值差异是迁移学习中使用频率最高的度量。 Maximum mean discrepancy,它度量在再生希尔伯特空间中两个分布的距离,是一种核学习方法。简单地理解就是计算两堆数据的均值距离,但是实际比较难计算。就将两个...

    最大均值差异是迁移学习中使用频率最高的度量。 Maximum mean discrepancy,它度量在再生希尔伯特空间中两个分布的距离,是一种核学习方法。简单地理解就是计算两堆数据的均值距离,但是实际比较难计算。就将两个分布映射到另一个空间计算距离。计算距离的方法是,计算分布上每一个点映射到另一空间的距离然后求和。

    MMD的基本原理:假设一个满足P分布的数据集X^{s}=[x_{1}^{s},...,x_{n}^{s}]和一个满足Q分布的数据集X^{t}=[x_{1}^{t},...,x_{m}^{t}]并且存在一个再生希尔伯特空间H(RKHS)存在一个映射函数\Phi (.):X\rightarrow H表示从原始空间到希尔伯特空间的一个映射,并且当n,m趋于无穷时X^{s}X^{t}的最大均值差异可以表示为:

    f(X^{s},X^{t})=\left \| \frac{1}{n}\sum_{i=1}^{n} \phi (x_{i}^{s}) -\frac{1}{m}\sum_{i=1}^{m} \phi (x_{i}^{t}) \right \|

    从公式中可以看出,对每一个样本先投影并求和,求每个数据集的均值,再求差。

     

    展开全文
  • MMD(最大均值差异)是迁移学习,尤其是Domain adaptation (域适应)中使用最广泛(目前)的一种损失函数,主要用来度量两个不同但相关的分布的距离。两个分布的距离定义为: MMD(X,Y)=∣∣1n∑ni=1ϕ(xi)−1m∑mj=...
  • 本文章主要为了复现这个MMD教程中的代码。 pytorch环境安装 下面参考pytorch的官方教程。 这是安装pytorch的先决条件,如果需要用到GPU加速的话还需要下载CUDA驱动。(不过这个小项目就不用啦) ...
  • MATLAB最大均值差异(Maximum Mean Discrepancy) 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 更多内容,请看标签:MATLAB、聚类 注:X与Y数据维度必须一致! 1. MMD介绍 2. MATLAB程序 数据 ...
  • 最大均值差异MMD用于衡量两个分部之间的相似性,迁移学习中经常用其来衡量源领域和目标领域的差异性。它的基本假设是:如果对于所有以分布生成的样本空间为输入的函数f,两个分布生成的样本足够多,且其对于函数f...
  • 【机器学习】最大均值差异MMD详解

    千次阅读 2019-01-08 15:11:46
    最大均值差异(maximum mean discrepancy, MMD)提出时候是用来测试两个样本,是否来自两个不同分布p和q,如果均值差异达到最大,就说明采样的样本来自完全不同的分布。 原理 MMD的基本原理如下所述:假设有一个满足...
  • MMD(最大均值差异)是迁移学习,尤其是Domain adaptation (域适应)中使用最广泛(目前)的一种损失函数,主要用来度量两个不同但相关的分布的距离。两个分布的距离定义为: MMD(X,Y)=||1n∑i=1n...
  • MMD_mean_mmd_discrepancy_weekarq_最大均值差异_源码.zip
  • MMD(最大均值差异)是迁移学习,尤其是Domain adaptation (域适应)中使用最广泛(目前)的一种损失函数,主要用来度量两个不同但相关的分布的距离。两个分布的距离定义为: python代码样例: import torch ...
  • MMD_mean_mmd_discrepancy_weekarq_最大均值差异_源码.rar.rar
  • 将两个分布映射到另一个空间计算距离。 计算距离的方法是,计算分布上每一个点映射到另一空间的距离然后求和。 细节可参见: http://blog.csdn.net/he_min/article/details/69397975
  • 依赖关系: pytorch:版本0.2.0 tqdm:版本4.19.4 pyltp:版本:0.1.9.1 准备: ...该代码通过三个步骤运行: 使用折叠“ generate_tree”中的脚本文件来处理原始数据。 此步骤可以获得原始数据的依赖关系树表示形式...
  • 生成模型已经证明在从未标记的数据中学习特征方面非常有用。 特别是,可变自动编码器能够对高度复杂的自然分布(例如图像)建模,同时无需标签即可提取自然和人类可理解的特征。 在本文中,我们结合了两类非常有用的...
  • MMD :maximum mean discrepancy(最大平均差异)

    万次阅读 多人点赞 2017-05-14 18:56:09
    最大平均差异。最先提出的时候用于双样本的检测(two-sample test)问题,用于判断两个分布p和q是否相同。它的基本假设是:如果对于所有以分布生成的样本空间为输入的函数f,如果两个分布生成的足够多的样本在f上的...
  • 作者直接考虑了源域和目标域具有不同的联合概率分布的情况, 提出了具有类间差异的联合概率最大平均差异。 通过直接考虑联合概率分布的差异,作者提出了一种用于分布适应的具有类间差异的联合概率 MMD ( ...
  • 最大均值差异仅用于反映样本空间总体的分布信息和全局结构信息,忽略了单个样本对全局度量贡献的差异性。为此,提出一种最大分布加权均值差异(MDWMD)度量方法,采用白化余弦相似性度量为源域和目标域的所有样本...
  • 迹,tied-weights,最大平均差异,核函数,正则化
  • Mean Maximum Discrepancy计算代码,分为线性核和高斯核两种,以pytorch书写的
  • 整理了四种常用的聚类方法,自用,现供大家参考...K均值聚类方法中 聚类个数是用了factoextra包中的fviz_nbclust函数 并用此包中的画图函数绘制了拐点图,结果较为直观 系统聚类包括最大距离法、类平均法和离差平方和法
  • 了解生成对抗网络(GAN)

    千次阅读 2019-01-16 08:09:17
    虽然理论上可以使用任何基于样本的距离(或相似性度量)来有效地比较两个分布,但我们可以特别提到最大均值差异(MMD)方法。MMD定义了可以基于这些分布的样本计算(估计)的两个概率分布之间的距离。 分布匹配误差...
  • Matlab source code for EM algorithm EM algorithm for k multidimensional Gaussian mixture estimation % (EM_GM_fast is the modified version of EM_GM for speed enchancement. % The functionalities of EM_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,180
精华内容 9,672
关键字:

最大均值差异