You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非线性变换单纯形均匀采样算法验证:密度与采样逻辑核查

三维变换单纯形采样算法核查

问题背景

该算法意图在三维空间的变换单纯形曲面上均匀采样优先级向量,变换方式为对原标准2-单纯形的其中一个权重分量取幂。以下从三个核心维度核查代码正确性:


1. 雅可比密度计算的问题

原代码中用于密度修正的雅可比因子为:

density = power * np.power(w[transform_idx], power - 1)

这一计算是错误的,原因如下:

  • 该公式是一维变量变换的雅可比行列式(仅描述单变量$z \to z^p$的长度缩放比例),但我们处理的是二维曲面的测度变换,不能直接套用一维结果。
  • 标准2-单纯形是二维曲面,其测度依赖于参数化后的Gram矩阵行列式的平方根。当对某一分量做幂变换后,曲面的测度元素需要重新计算:
    假设原单纯形参数化为$(u, v, 1-u-v)$,对第三个分量做$z' = (1-u-v)^p$变换后,新曲面的参数化雅可比矩阵的Gram矩阵行列式为$1 + 2p^2 z^{2(p-1)}$($z=1-u-v$),因此曲面测度元素为$\sqrt{1 + 2p^2 z^{2(p-1)}} du dv$,而非一维的$p z^{p-1}$。
  • 额外问题:代码中变换后的向量transformed分量和不为1,不符合单纯形的定义(单纯形要求所有非负分量和为1),这会导致采样结果不在目标曲面上。

2. 重要性采样逻辑的偏差

原采样代码逻辑:

samples = []
while len(samples) < n_samples:
    # Sample from the standard 2-simplex
    u = np.random.uniform(0, 1, 2)
    u = np.sort(u)
    
    w = np.array([u[0], u[1] - u[0], 1 - u[1]])
    
    # Compute the density correction (Jacobian factor)
    # The transformation stretches/compresses the surface

    # The Jacobian determinant factor for the surface measure
    density = power * np.power(w[transform_idx], power - 1)

    # Rejection sampling
    if np.random.uniform(0, max_density) <= density:
        transformed = w.copy()
        transformed[transform_idx] = np.power(w[transform_idx], power)
        samples.append(transformed)

该逻辑存在核心偏差:

  • 若目标是在变换后的单纯形(分量和为1)上均匀采样,正确的流程应该是:
    1. 定义变换后的单纯形:将原分量$w_k$替换为$w_k^p$后,重新归一化所有分量使其和为1;
    2. 推导该变换对应的原单纯形上的诱导分布密度,再基于此设计拒绝采样的接受概率。
  • 当前代码未做归一化,采样结果transformed的分量和为$w_0 + w_1 + w_k^p = (1 - w_k) + w_k^p$($w_k$为被变换的分量),显然不等于1,因此采样结果不在目标单纯形曲面上;同时使用错误的密度因子,无法保证采样的均匀性。

3. 最大密度计算的错误

原代码中的最大密度计算逻辑:

if power >= 1:
    max_densidy = power  # Maximum at w=1
else:
    max_densidy = power * np.power(0.01, power - 1)

存在两处核心问题:

  • 当power < 1时,使用0.01作为$w$的取值是完全随意的,没有数学依据:
    对于一维函数$f(z) = p z^{p-1}$,当$p < 1$时,$z \to 0^+$时$f(z) \to +\infty$,这意味着该函数在原单纯形上没有上界(因为$z$可以无限趋近于0),此时无法用固定的max_density做拒绝采样。
  • 即使忽略曲面测度的问题,仅看一维函数的最大值:当$p \geq 1$时,$f(z)=p z^{p-1}$在$z=1$处取最大值$p$,这部分是对的,但当$p < 1$时函数无界,代码中的0.01是不合理的经验值,会导致大量采样被错误拒绝,或者无法覆盖$z$趋近于0的区域。

修正建议

  • 修正变换定义:若目标是变换后的单纯形,需在分量取幂后进行归一化,确保结果满足$\sum_i w'_i = 1$;
  • 重新推导密度因子:基于正确的曲面测度变换,计算原单纯形采样点对应变换后曲面的测度比值,作为拒绝采样的接受概率;
  • 处理$p < 1$的情况:由于此时一维变换的雅可比无界,无法直接用拒绝采样,需换用其他采样策略(比如先采样变换后的分量,再推导其他分量的分布)。

内容的提问来源于stack exchange,提问作者Engr. Moiz Ahmad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 04:04:53