1 概念与分类(度量 vs 发散 vs 统计检验)


2 KL 与 JS(定义与性质)

2.1 KL 散度

2.2 Jensen–Shannon(JS)散度


3 Wasserstein 距离(最优传输)

3.1 原始 Monge 问题(直观)

3.2 Kantorovich 问题(合适的松弛)

3.3 Kantorovich–Rubinstein 对偶(1-Wasserstein)


4 OT 的数值问题与 Sinkhorn(熵正则化)

4.1 熵正则化的定义

4.2 Sinkhorn 迭代(行列归一化)

4.3 熵正则化与原问题关系(逼近性)

4.4 对偶解释(信息论视角)

熵正则化的目标等价于在代价和 KL 约束之间权衡(见 Fenchel–Legendre 模)。可理解为在所有耦合中寻找既低成本又高熵(更“扩散”)的耦合。正则化的优势在于数值稳定、易于并行化、可微。

4.5 Sinkhorn 的数值实现注意


5 MMD(最大均值差异)

5.1 无偏估计器(样本形式)

5.2 特征核与检验能力

5.3 样本复杂度


6 点云距离:Chamfer 与 Hausdorff

6.1 Directed Chamfer distance(有向)

6.2 Hausdorff 距离

6.3 在 3D/重建中的应用建议

  • 若关心全局几何与拓扑一致性:建议结合 Chamfer(局部对齐)与 Hausdorff(极端误差)或使用更结构化度量(如 Earth Mover’s Distance / Wasserstein)与表面距离(如点到三角网格的距离)。

  • 为了训练稳定性:常用平滑的 Chamfer 或基于最近邻的可微近似(soft-min、soft-argmin 或带温度的归一化权重)。


7 实现:Sinkhorn 与 MMD(PyTorch 风格伪代码与数值稳定技巧)

下面给出数值实现的关键代码思路(伪码),便于工程实现。重点在数值稳定(log-domain)与 batch 化

7.1 Sinkhorn(log-domain 稳定版)伪码(离散样本)


# pseudocode (vectorized)
def sinkhorn_log(C, r, c, eps, max_iter=100, tol=1e-6):
    # C: (n,m) cost matrix
    # r: (n,), c: (m,)
    # work in log domain
    # initialize log u, log v
    n, m = C.shape
    # K = exp(-C/eps) -> use logK = -C/eps
    logK = -C / eps  # shape (n,m)
    log_r = log(r)   # shape (n,)
    log_c = log(c)   # shape (m,)
    log_u = zeros(n)
    log_v = zeros(m)
    for it in range(max_iter):
        # update log_u such that row sums match r:
        # log_u = log_r - logsumexp(logK + log_v[None,:], axis=1)
        log_u = log_r - logsumexp(logK + log_v[None,:], axis=1)
        # update log_v
        log_v = log_c - logsumexp((logK + log_u[:,None]).transpose(1,0), axis=1)
        # check marginal error using current log_u, log_v
        # optional: compute error and break if small
    # reconstruct transport
    logP = log_u[:,None] + logK + log_v[None,:]
    P = exp(logP)
    return P

数值细节

7.2 简单 Sinkhorn 距离计算(标量代价)

计算熵正则化 OT 值(Sinkhorn cost):

def sinkhorn_cost(C, r, c, eps, max_iter=100):
    P = sinkhorn_log(C, r, c, eps, max_iter)
    cost = sum(P * C)  # elementwise
    # 若需无偏估计可加上 -eps * sum(P * log(P))
    return cost

注意:上式返回的是正则化后代价。若要近似无正则化代价,需要做偏差校正或 ε\varepsilonε 退火。

7.3 MMD 实现(RBF kernel,向量化)

无偏估计版本:

def rbf_kernel_matrix(X, Y, sigma):
    # return k(x_i,y_j) jointly
    # use broadcasting to compute pairwise squared distances
    dist2 = pairwise_sq_dists(X, Y)  # shape (n,m)
    return exp(-dist2 / (2*sigma**2))

def mmd2_unbiased(X, Y, sigma):
    n = X.shape[0]
    m = Y.shape[0]
    K_xx = rbf_kernel_matrix(X, X, sigma)
    K_yy = rbf_kernel_matrix(Y, Y, sigma)
    K_xy = rbf_kernel_matrix(X, Y, sigma)
    sum_xx = (K_xx.sum() - K_xx.trace()) / (n*(n-1))
    sum_yy = (K_yy.sum() - K_yy.trace()) / (m*(m-1))
    sum_xy = K_xy.sum() / (n*m)
    return sum_xx + sum_yy - 2*sum_xy

核带宽选择:可用中位距 heuristic(median pairwise distance)或多尺度核(sum of kernels with different σ)提高健壮性。


8 生成模型评价对比(理论与实践)

比较 KL/JS、Wasserstein(OT)、MMD 在生成模型评估上常关心的维度:

8.1 概念差异

8.2 样本复杂度与估计方差

8.3 实践建议(评估生成图像)

  • 对于图像:常用 FID(基于 Inception 特征的 Fréchet Distance,实质上是对嵌入分布用高斯近似的 2-Wasserstein 分析);也可用 MMD(在嵌入空间上)或 sliced-Wasserstein。

  • 对于点云/3D:直接用 Chamfer + Hausdorff + Earth Mover’s Distance(EMD,即离散 OT 无正则化)评估更直接,EMD 在点对点匹配上更语义化但计算昂贵(Hungarian 算法或 Sinkhorn 近似)。

  • 若评估对样式 vs 结构敏感度:使用多种指标(MMD 表征统计距离、Wasserstein 表征几何位移、Chamfer/EMD 测量点对点对应)。


9 OT 在生成模型与域适配中的现代应用(与可微近似)

9.1 生成模型

  • WGAN:用 W1W_1W1​ 的 Kantorovich–Rubinstein 对偶来构造判别器(学习 1-Lipschitz 函数);实际实施用权重裁剪 / gradient penalty 来近似 1-Lipschitz。WGAN 改善了 GAN 的训练稳定性与模式崩溃情况。

  • Sinkhorn GAN / OT-GAN:在判别器-生成器架构外直接利用 Sinkhorn 距离(熵正则化 OT)作为训练损失,或把 Sinkhorn 的可微代价嵌入优化中(注意 ε\varepsilonε 的平衡)。

  • Flow / score-based 模型:OT 思想用于设计最短路径 /输运映射(Monge 映射)以把简单分布映射到目标分布(而非基于 KL 的训练)。

9.2 域适配(Domain Adaptation)

  • OT 可用于在源域与目标域之间寻找最优耦合,从而将标签或样本重配以使分布对齐(unsupervised domain adaptation)。方法包括加上结构/标签保留项的 OT(带标签的 cost)、联合 OT(joint OT)或 Gromov-Wasserstein(用来对齐结构不同但内部几何有相似性的分布)。

  • Entropic OT(Sinkhorn)和其可微性使其便于集成到 end-to-end 学习中(可对网络参数求导以最小化 OT 代价)。

9.3 可微近似算法

  • Sinkhorn(熵正则化):可微、GPU 友好、并行加速;但 ε\varepsilonε 需调试。

  • Sliced-Wasserstein(SW):通过将高维分布投影到随机 1D 直线上并计算 1D-Wasserstein(可以用排序快速计算),然后对多个投影取平均。SW 的计算成本低且样本复杂度更好。

  • Gromov-Wasserstein(GW):在结构域匹配(两集合之间内部相似性)时更合适,但数值更复杂,通常也用熵正则化近似并用 Sinkhorn-like 算法。

  • Unbalanced OT / Partial OT:处理分布质量不一致或存在噪声/异常时引入的变体,常用于跟踪/分割场景。


10 工程提示(数值稳定、近似保真度的断言方法)

10.1 选择 ε\varepsilonε(Sinkhorn)

  • 起点:用数据对 CCC 的中位数距离 mmm 作为尺度,选择 ε∼λm\varepsilon \sim \lambda mε∼λm(λ\lambdaλ 在 0.01–0.2)。

  • 大 ε\varepsilonε → 快速收敛、低方差、高偏差(更平滑);小 ε\varepsilonε → 更接近原 OT,但需更多迭代且数值不稳定。

  • 可做退火:训练初期大 ε\varepsilonε ,随后减小。

10.2 log-domain 实现

  • 一定要用 logsumexp 防止 exp⁡(−C/ε)\exp(-C/\varepsilon)exp(−C/ε) 下溢。当 ε\varepsilonε 很小或 C 很大(例如平方距),提前缩放 C (例如减去 min)也有帮助。

  • 当分布权重极度不均衡时,使用基于相对熵正规化或 unbalanced OT。

10.3 批量化与近似

  • 对于大样本(nnn 很大),不要构造 n×nn\times nn×n 矩阵;采用 sub-sampling、mini-batch Sinkhorn 或 sliced-Wasserstein(随机投影与排序)替代。

  • 对 Chamfer/Hausdorff 用近邻搜索(Approximate Nearest Neighbors, e.g., FAISS)或 KD-tree 来加速最近邻计算。

10.4 近似保真度验证

  • 若使用熵正则化,要估计偏差:可在不同 ε\varepsilonε 下计算代价并检查随 ε→0\varepsilon\to0ε→0 的稳定性趋势(但不能真正到 0)。

  • 交叉验证:用人工注入变换(平移、旋转、宽度/幅度改变)来验证度量的敏感性/鲁棒性。理想度量应在已知轨迹上呈单调/一致响应。

  • 多指标联合:推荐同时报告 MMD、Sinkhorn cost(或 SW)、和 Chamfer/EMD(若适合)以给出全景式评估。


11 练习与实验建议(可直接运行)

实验 A:实现并对比 Sinkhorn(不同 ε\varepsilonε)与 MMD 在两组高维高斯混合分布上的区分能力

步骤:

  1. 在 d=50d=50d=50 空间生成两种分布 PPP(2 个簇)和 QQQ(相对位移的 2 个簇),不同位移幅度。

  2. 对每个位移量,采样 nnn 个样本(例如 512),计算(a)MMD (RBF with median σ)、(b)Sinkhorn cost (ε\varepsilonε 取若干倍中位数)、(c)Sliced-Wasserstein (k projections)。

  3. 绘制距离随位移的曲线;比较噪声稳定性(重复若干次,显示均值±误差条)。
    预期:MMD 在核选择合适时分辨性好且方差小;原始 Wasserstein 在高维表现差(需要很多样本),而 Sinkhorn 在适中 ε\varepsilonε 下在样本数受限时更稳。Sliced-Wasserstein 在高维通常表现更好且计算更快。

实验 B:点云场景(3D)

  1. 生成基准点云(例如球面网格)与受噪声/平移/缺失点云。

  2. 计算 Chamfer、Hausdorff、EMD(Hungarian for small n / Sinkhorn approx for larger n)。

  3. 评价指标与视觉化(错误最大的点、高误差的局部结构)。
    预期:Chamfer 对小规模缺失点敏感度低;EMD 更能体现整体匹配但计算贵;Hausdorff 捕捉到极端误差。

更多推荐