Jiahong 的个人博客

凡事预则立,不预则废


  • Home

  • Tags

  • Archives

  • Navigation

  • Search

Math——f-divergence


f-divergence定义

  • \( f \)-散度(\( f \)-divergence)是概率论和信息论中的一种概念,用于衡量两个概率分布之间的差异。它是由Imre Csiszár引入的,并且在统计学、机器学习以及信息理论等领域有着广泛的应用
  • 形式上,对于两个概率分布 \( P \) 和 \( Q \),定义在一个共同的样本空间上, \( f \)-散度可以被定义为:
    $$ D_f(P|Q) = \int_{\Omega} q(x) f\left(\frac{p(x)}{q(x)}\right) dx $$
    • \( \Omega \) 是样本空间
    • \( p(x) \) 和 \( q(x) \) 分别是 \( P \) 和 \( Q \) 的概率密度函数
    • \( f \) 是一个凸函数,满足 \( f(1) = 0 \),这是为了保证当 \( P = Q \) 时 \( D_f(P|Q) = 0 \)
  • \( f \)-散度的一个重要性质是它是非负的,即 \( D_f(P|Q) \geq 0 \),并且只有当 \( P = Q \) 时等号成立。这意味着 \( f \)-散度可以作为两个概率分布之间距离的一种度量,尽管它不满足距离的所有公理(比如对称性)

常见的f-divergence例子

  • Kullback-Leibler散度 (KL散度),其中 \( f(u) = u \log u \)
    • 注意带入以后可以消去分母得到KL散度的最终公式
  • Hellinger距离,这里 \( f(u) = (\sqrt{u} - 1)^2 \)
  • 总变差距离,此时 \( f(u) = |u - 1| \)
  • χ²散度,使用 \( f(u) = \frac{(u - 1)^2}{u} \)

附录:KL散度的非负性证明

  • 核心,利用Jensen不等式证明 Kullback-Leibler(KL)散度是非负的
  • 对于两个概率分布 \( P \) 和 \( Q \) 在同一空间 \( \mathcal{X} \) 上,KL 散度定义为:
    $$
    D_{\text{KL} }(P \parallel Q) = \sum_{x \in \mathcal{X} } P(x) \log \frac{P(x)}{Q(x)}
    $$
    • 注意 KL 散度的积分权重和分子是相同的(这是由其含义和非负性决定的,详情见附录),若对换分子分母,得到的是 KL 的负数值
  • 对于连续变量,定义为:
    $$
    D_{\text{KL} }(P \parallel Q) = \int_{-\infty}^{\infty} p(x) \log \frac{p(x)}{q(x)} , dx
    $$
    • 其中 \( p(x) \) 和 \( q(x) \) 分别是 \( P \) 和 \( Q \) 的概率密度函数
  • 进一步地,KL散度可以表示为:
    $$
    D_{\text{KL} }(P \parallel Q) = \mathbb{E}_{P} \left[ \log \frac{P(x)}{Q(x)} \right]
    $$
    • 即 \( \log \frac{P(x)}{Q(x)} \) 在分布 \( P \) 下的期望

应用Jensen不等式求负KL散度

  • 由于 \( \log(x) \) 是一个凹函数(伞状),根据Jensen不等式,对于凹函数有:
    $$
    \mathbb{E}_[\log X] \leq \log \mathbb{E}_[X]
    $$
    • 令 \( X = \frac{Q(x)}{P(x)} \),则:
      $$
      \mathbb{E}_{P} \left[ \log \frac{Q(x)}{P(x)} \right] \leq \log \left( \mathbb{E}_{P} \left[ \frac{Q(x)}{P(x)} \right] \right)
      $$
  • 计算期望:
    $$
    \mathbb{E}_{P} \left[ \frac{Q(x)}{P(x)} \right] = \sum_{x} P(x) \cdot \frac{Q(x)}{P(x)} = \sum_{x} Q(x) = 1
    $$
  • 因此:
    $$
    \mathbb{E}_{P} \left[ \log \frac{Q(x)}{P(x)} \right] \leq \log(1) = 0
    $$

推导KL散度的非负性

  • 注意到:
    $$
    \mathbb{E}_{P} \left[ \log \frac{Q(x)}{P(x)} \right] = -D_{\text{KL} }(P \parallel Q)
    $$
  • 因此:
    $$
    -D_{\text{KL} }(P \parallel Q) \leq 0 \implies D_{\text{KL} }(P \parallel Q) \geq 0
    $$
  • 当且仅当 \( P(x) = Q(x) \) 对所有 \( x \) 成立时,\( \frac{P(x)}{Q(x)} = 1 \),此时:
    $$
    D_{\text{KL} }(P \parallel Q) = \sum_{x} P(x) \log 1 = 0
    $$
  • KL散度始终满足:
    $$
    D_{\text{KL} }(P \parallel Q) \geq 0
    $$
  • 且 \( D_{\text{KL} }(P \parallel Q) = 0 \) 当且仅当 \( P = Q \)

附录:KL 散度=交叉熵与熵的差 推导

  • KL 散度本质上是交叉熵与熵的差,反映了用错误模型编码时的“额外信息量”

熵 \(H(P)\) 和 交叉熵 \(H(P, Q)\) 的定义

  • 对于离散分布 \(P(x)\),熵定义为:
    $$
    H(P) = -\sum_x P(x) \log P(x)
    $$
    • 它表示在分布 \(P\) 下,平均需要多少信息量(比特或 nats)来编码事件
  • 交叉熵定义为:
    $$
    H(P, Q) = -\sum_x P(x) \log Q(x)
    $$
    • 它表示在真实分布是 \(P\) 时,如果用分布 \(Q\) 来编码,平均需要的信息量

KL 散度=两者的差

  • 交叉熵与熵的差:
    $$
    \begin{align}
    H(P, Q) - H(P) &= \left[ -\sum_x P(x) \log Q(x) \right] - \left[ -\sum_x P(x) \log P(x) \right] \\
    &= -\sum_x P(x) \log Q(x) + \sum_x P(x) \log P(x) \\
    &= \sum_x P(x) \left[ \log P(x) - \log Q(x) \right] \\
    &= \sum_x P(x) \log \frac{P(x)}{Q(x)} \\
    &= D_{\mathrm{KL} }(P | Q)
    \end{align}
    $$

理解

  • 熵 \(H(P)\) :理想编码长度
  • 交叉熵 \(H(P, Q)\) :用错误分布 \(Q\) 编码的平均长度
  • KL 散度 :额外的编码长度,也就是交叉熵比真实熵多出来的部分

Math——KL散度的近似估计

  • 参考链接:
    • PPO 一作的博客:Approximating KL Divergence, 2020,在博客中解释了作者使用一些近似方法,本文主要参考该博客的内容,有一些自己的总结和思考

KL散度的定义

  • KL散度定义为:
    $$
    D_\text{KL}(q||p) = \sum_x q(x) \log \frac{q(x)}{p(x)} = \mathbb{E}_{x \sim q} \left[ \log \frac{q(x)}{p(x)} \right]
    $$
    • 很多地方也常常写为 \(D_\text{KL}(q,p)\) 或 \(KL[q,p]\)
    • 注意:这里使用的 \(p,q\) 顺序可能和常规的文章可能不同

一些假设

  • 作者假设可以计算任意 \(x\) 的概率(或概率密度) \(p(x)\) 和 \(q(x)\),但无法解析地计算关于 \(x\) 的和(即期望)
  • 现实场景中,无法解析计算的原因是有:
    • 精确计算需要过多计算资源或内存
    • 不存在闭式表达式
    • 为了简化代码,仅存储对数概率而非整个分布。如果KL散度仅用作诊断(如强化学习中常见的情况),这是一个合理的选择

好的估计量应该是怎样的?

  • 好的估计量应具有无偏性(期望相同)和低方差
  • 比如对于来自 \(q\) 的样本, \(\log \frac{q(x)}{p(x)}\) 就是一个无偏估计,但它的方差很高
    • 问题:为什么说这个式子方差高?
    • 回答:一个直观的理解是 因为对于一半样本它是负值,而KL散度总是正值,后续会通过实验验证
    • 注意 KL 散度的积分权重和分子是相同的(这是由其含义和非负性决定的),若对换分子分母,得到的是 KL 的负数值

一些前置定义

  • 定义 一个 比例 \(r\) :
    $$r = \frac{p(x)}{q(x)}$$
    • 特别注意 :这里的定义与 KL 散度中括号内的分子分母相反,对应到原始 KL 散度中,值为:
      $$
      \begin{align}
      D_\text{KL}(q||p) &= \mathbb{E}_{x \sim q} \left[ \log \frac{q(x)}{p(x)} \right] \\
      &= \mathbb{E}_{x \sim q} \left[ - \log \frac{p(x)}{q(x)} \right] \\
      &= \mathbb{E}_{x \sim q} \left[ - \log r \right]
      \end{align}
      $$

朴素估计量(\(k_1\))

  • 朴素估计量(\(k_1\)) 表达式:
    $$
    k_1 = -\log r = \log \frac{q(x)}{p(x)}
    $$
  • 无偏 : \(\mathbb{E}[k_1] = D_\text{KL}(q||p)\)
  • 高方差 :因 \(\log r\) 在 \(r>1\) 时为负, \(r<1\) 时为正,导致样本间波动大
  • 适用场景 :理论分析或对无偏性要求严格的场景,但实际应用中可能因高方差不稳定

二次估计量(\(k_2\))

  • 二次估计量(\(k_2\)) 表达式:
    $$
    k_2 = \frac{1}{2} (\log r)^2
    $$
  • 有偏(低偏差) : \(\mathbb{E}[k_2] \approx D_\text{KL}(q||p) + O(\theta^3)\),当 \(p \approx q\) 时偏差极小(如实验中的0.2%)
  • 低方差 :因平方项强制为正,减少了样本间的波动
  • 适用场景 : \(p\) 和 \(q\) 接近时的高效估计,适合作为诊断指标(如强化学习中的策略评估)
    • 理解:这里的诊断主要是指仅仅作为判断条件,而不是作为损失函数的主要优化目标

为什么说估计量 \(k_2\) 具有低偏差?

  • 它的期望是一个 \(f\)-散度。 \(f\)-散度定义为:
    $$D_f(p,q) = \mathbb{E}_{x \sim q} \left[ f\left( \frac{p(x)}{q(x)} \right) \right]$$
    • 其中 \(f\) 是凸函数
    • KL散度和其他许多著名的概率距离都是 \(f\)-散度, KL 散度中 \(f(\cdot) = -\log (\cdot)\)(\(\log(\cdot)\) 是凹函数,凹函数取负号就是凸函数)
  • 当 \(q\) 接近 \(p\) 时,所有具有可微 \(f\) 的 \(f\)-散度在二阶近似下都类似于KL散度。具体来说,对于参数化分布 \(p_\theta\) :
    $$
    D_f(p_0, p_\theta) = \frac{f’’(1)}{2} \theta^T F \theta + O(\theta^3)
    $$
    • 其中 \(F\) 是 \(p_\theta\) 在 \(p_\theta = p_0\) 处评估的Fisher信息矩阵
    • \(\mathbb{E}_q[k_2] = \mathbb{E}_q \left[ \frac{1}{2}(\log r)^2 \right]\) 对应 \(f(x) = \frac{1}{2}(\log x)^2\) 的 \(f\)-散度,而 \(D_\text{KL}(q||p)\) 对应 \(f(x) = -\log x\)。容易验证两者都有 \(f’’(1)=1\),因此对于 \(p \approx q\),两者看起来像相同的二次距离函数
  • \(k_2\) 的取值总是大于等于0,可以通过求导证明:当 \(x>0\) 时,有 \(x - \log x - 1 \ge 0\) 恒成立,最小值在 \(x=1,y=0\)处,其函数图像如下:

Bregman散度估计量(\(k_3\))

  • Bregman散度估计量(\(k_3\)) 表达式:
    $$
    k_3 = (r - 1) - \log r
    $$
  • 无偏 : \(\mathbb{E}[k_3] = D_\text{KL}(q||p)\)
  • 最低方差 :结合了 \(r-1\) 的线性项与 \(\log r\) 的校正,进一步降低波动
  • 适用场景 :对无偏性和低方差同时要求的场景(如精确的梯度估计或敏感的参数优化)

Bregman散度估计量(\(k_3\)) 是怎么设计出来的?

  • 我们的目标:是找到一个无偏且低方差的KL散度估计量
  • 降低方差的通用方法是使用控制变量:取 \(k_1\) 并加上一个期望为零但与 \(k_1\) 负相关的量
  • 幸运的是,作者发现 \(\frac{p(x)}{q(x)} - 1 = r - 1\) 是一个期望为0的量),于是,对于任意 \(\lambda\),下面的表达式都是 \(D_\text{KL}(q||p)\) 的无偏估计量:
    $$-\log r + \lambda(r - 1)$$
    • 注:作者可以通过计算最小化这个估计量的方差来求解 \(\lambda\)。但不幸的是,作者得到的表达式依赖于 \(p\) 和 \(q\),并且难以解析计算
  • 所以,作者使用更简单的策略选择一个好的 \(\lambda\)
    • 作者注意到由于 \(\log\) 是凹函数,有 \(\log(x) \leq x - 1\)
    • 因此,如果作者设 \(\lambda=1\),上述表达式保证为正。它测量了 \(\log(x)\) 与其切线之间的垂直距离
    • 于是作者提出了估计量 \(k_3 = (r - 1) - \log r\)

更多扩展和思考

  • 这种通过观察凸函数与其切平面之间的差异来测量距离的思想出现在许多地方。它被称为Bregman散度 ,具有许多优美的性质
  • 可以推广上述思想,为任何 \(f\)-散度得到一个良好的、总是正的估计量
  • 另一个KL散度是 \(KL[p,q]\)(注意这里 \(p\) 和 \(q\) 交换了位置 ,与 \(D_\text{KL}(q||p)\) 不同)
  • 由于 \(f\) 是凸函数,且 \(\mathbb{E}_q[r] = 1\),以下表达式是 \(f\)-散度的估计量:
    $$f(r) - f’(1)(r - 1)$$
  • 这个量总是正的,因为它是 \(f\) 在 \(r=1\) 处与切线的距离,而凸函数位于其切线上方。现在 \(KL[p,q]\) 对应 \(f(x) = x \log x\),它有 \(f’(1) = 1\),于是有估计量 \(r \log r - (r - 1)\)
  • 总结一下,作者提出以下估计量(对于样本 \(x \sim q\),且 \(r = \frac{p(x)}{q(x)}\)):
    $$
    \begin{align}
    D_\text{KL}(p||q): &\quad r \log r - (r - 1)\\
    D_\text{KL}(q||p): &\quad (r - 1) - \log r
    \end{align}
    $$
    • 注意上面的 KL 散度先后顺序,KL 散度不是对称的

Experiments

  • 现在让作者比较三个 \(D_\text{KL}(q||p)\) 估计量的偏差和方差
  • 定义 \(q = \mathcal{N}(0,1)\), \(p = \mathcal{N}(0.1,1)\)(此时真实的KL散度为0.005)
    统计量/真实值 \(k_1\) \(k_2\) \(k_3\)
    偏差(期望与真实值差) 0 0.002 0
    标准差 20 1.42 1.42
    • 注意到 \(k_2\) 的偏差在这里极低:仅为0.2%
    • 以上标准差是使用 KL 单独作归一化后的(除以 KL 散度)
  • 定义 \(p = \mathcal{N}(1,1)\) (此时真实KL散度为0.5)
    统计量/真实值 \(k_1\) \(k_2\) \(k_3\)
    偏差(期望与真实值差) 0 0.25 0
    标准差 2 1.73 1.7
    • 这里 \(k_2\) 的偏差大得多
    • \(k_3\) 在保持无偏的同时甚至比 \(k_2\) 具有更低的标准差,因此它似乎是一个严格更好的估计量
  • 作者给出的上述实验的代码:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import torch.distributions as dis
    p = dis.Normal(loc=0, scale=1)
    q = dis.Normal(loc=0.1, scale=1)
    x = q.sample(sample_shape=(10_000_000,))
    truekl = dis.kl_divergence(p, q)
    print("true", truekl)
    logr = p.log_prob(x) - q.log_prob(x)
    k1 = -logr
    k2 = logr ** 2 / 2
    k3 = (logr.exp() - 1) - logr
    for k in (k1, k2, k3):
    print((k.mean() - truekl) / truekl, k.std() / truekl)

一些总结和思考

  • 三种估计量的对比如下:
    估计量 无偏性 方差 偏差(当 \(p \neq q\)) 计算复杂度 适用场景
    \(k_1\) 无偏 高 0 低 理论分析,高精度需求
    \(k_2\) 有偏(低) 中低 随 \(KL\) 增大而增加 低 \(p \approx q\) 时的一些近似判别
    \(k_3\) 无偏 最低 0 中(需算 \(r\)) 高精度需求(如优化算法)
  • 方差排序 : \(k_3 < k_2 < k_1\)
  • 偏差权衡 :
    • 若 \(p \approx q\), \(k_2\) 的偏差可忽略,且计算简单
    • 若 \(KL\) 较大(如 \(p,q\) 差异显著), \(k_3\) 是唯一同时满足无偏和低方差的选项
  • 实践建议 :
    • 使用 \(k_3\) 作为默认选择(尤其对敏感任务)
    • 在快速迭代或 \(p \approx q\) 时,可用 \(k_2\) 作为轻量替代

不同估计值的函数图像

  • 函数图像如下:
  • 生成代码如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    import numpy as np
    import matplotlib.pyplot as plt

    # Define the functions
    def k1(r):
    return -np.log(r)

    def k2(r):
    return 0.5 * (np.log(r))**2

    def k3(r):
    return (r - 1) - np.log(r)

    x_max = 10

    # Generate r values (avoid r=0 for log)
    r = np.linspace(0.01, x_max, 500)

    # Calculate function values
    k1_vals = k1(r)
    k2_vals = k2(r)
    k3_vals = k3(r)

    # Create plot
    plt.figure(figsize=(10, 6))
    plt.plot(r, k1_vals, label='k1(r) = -log(r)', linewidth=2)
    plt.plot(r, k2_vals, label='k2(r) = 0.5*(log(r))^2', linewidth=2)
    plt.plot(r, k3_vals, label='k3(r) = (r-1) - log(r)', linewidth=2)

    # Add special points and lines
    plt.axvline(1, color='gray', linestyle='--', alpha=0.5)
    plt.plot(1, 0, 'ro') # All functions equal 0 at r=1

    # Plot formatting
    plt.title('KL Divergence Estimators as Functions of r=p(x)/q(x)', fontsize=14)
    plt.xlabel('r = p(x)/q(x)', fontsize=12)
    plt.ylabel('Estimator Value', fontsize=12)
    plt.legend(fontsize=12)
    plt.grid(True, alpha=0.3)
    plt.xlim(0, x_max)
    plt.ylim(-3, 10)

    # Show plot
    plt.tight_layout()
    plt.show()

附录:凹函数和凸函数简单介绍

凸函数(Convex Function)

  • 若函数 \( f \) 的定义域为某个凸集(如区间),且对定义域内任意两点 \( x_1, x_2 \) 和任意 \( \lambda \in [0, 1] \),满足:
    $$
    f(\lambda x_1 + (1-\lambda) x_2) \leq \lambda f(x_1) + (1-\lambda) f(x_2)
    $$
  • 则称 \( f \) 为凸函数
  • 直观理解:函数图像上任意两点间的线段始终位于函数图像上方(或重合),形如“碗状”或“线性”
  • 举例: \( f(x) = x^2 \)、\( f(x) = e^x \))

凹函数(Concave Function)

  • 若函数 \( f \) 的定义域为凸集,且对任意两点 \( x_1, x_2 \) 和 \( \lambda \in [0, 1] \),满足:
    $$
    f(\lambda x_1 + (1-\lambda) x_2) \geq \lambda f(x_1) + (1-\lambda) f(x_2)
    $$
  • 则称 \( f \) 为凹函数
  • 直观理解:函数图像上任意两点间的线段始终位于函数图像下方(或重合),形如“拱形”或“线性”
  • 举例:\( f(x) = -x^2 \)、\( f(x) = \ln x \)(定义域 \( x > 0 \))

补充说明

  1. 线性函数既是凸的也是凹的(因不等式取等号)
  2. 凹凸性反转 :若 \( f \) 是凸函数,则 \( -f \) 是凹函数,反之亦然
  3. 严格凸/凹 :当不等式在 \( x_1 \neq x_2 \) 且 \( \lambda \in (0,1) \) 时严格成立(如 \( < \) 或 \( > \)),则称函数为严格凸或严格凹

Math——函数空间总结

最近在看一些书籍时看到一些函数空间的定义,本科学过一些,但是由于不常用忘得差不多了,本文总结一下希尔伯特空间、欧几里得空间和巴拿赫空间等函数空间的概念,本文是对相关概念的基础理解,非专业定义

  • 参考博客:欧几里得空间与希尔伯特空间

前置说明

欧几里得空间、希尔伯特空间和巴拿赫空间属于函数空间。函数空间 = 元素 + 规则 ,即一个函数空间由 元素 与 元素所满足的规则 定义


概念说明

距离

距离 :是指在一个空间中,两个元素之间的某种度量,表示它们之间的“远近”关系。对于集合 \(X\) 中的任意两个元素 \(x,y\) ,距离函数 \(d(x,y)\) 需要满足非负性、对称性、三角不等式等性质

  • 满足三个属性可以简单理解为:
    • 大于0
    • A到B等于B到A
    • 满足三角不等式

范数

  • 范数 :是定义在向量空间上的一种函数,用于衡量向量的“长度”或“大小”。对于向量 \(x\) ,其范数 \(|x|\) 满足非负性、正齐次性、三角不等式
  • 可简单理解为某个点到0点的距离
  • 拥有范数的空间称作赋范空间

线性

  • 线性 :在数学中,线性意味着满足可加性和数乘性。对于空间 \(V\) 中的元素 \(x,y\) 以及标量 \(a,b\) ,若 \(ax + by\) 也属于 \(V\) ,则称 \(V\) 具有线性性质
  • 简单理解:若一个空间为线性空间,只要我们知道了此空间的所有基,便可以用加法与数乘表示这一空间所有的元素

内积

  • 内积 :是两个向量之间的一种运算,它将两个向量映射为一个标量。对于向量 \(x,y\) ,内积 \(\langle x,y\rangle\) 满足共轭对称性、线性性、正定性
  • 内积空间都是赋范空间
  • 有限维内积空间便是我们最熟悉的欧几里得空间

完备性

  • 完备性 :一个空间是完备的,是指该空间中的任何柯西序列都收敛于该空间中的某个元素。柯西序列是指随着序列的推进,序列中的元素之间的距离越来越小,最终趋于零
  • 柯西序列的定义和性质:
    • 柯西序列定义 :设 \((X, d)\) 是一个度量空间, \({x_n}\) 是 \(X\) 中的一个序列。如果对于任意给定的正数 \(\epsilon>0\) ,存在正整数 \(N\) ,使得当 \(m, n>N\) 时,都有 \(d(x_m, x_n)<\epsilon\) ,则称序列 \({x_n}\) 是一个柯西序列(Cauchy sequence)。直观地说,柯西序列中的元素随着序号的增大,彼此之间的距离会越来越小,最终可以任意小
    • 柯西序列性质 :
      • 有界性 :在度量空间中,柯西序列一定是有界的。即存在一个正数 \(M\) 和一个点 \(x_0\in X\) ,使得对于所有的 \(n\) ,都有 \(d(x_n, x_0)\leq M\) 。
      • 唯一性 :在完备度量空间中,柯西序列的极限是唯一的。也就是说,如果一个柯西序列收敛,那么它只能收敛到一个点
  • 对完备性的简单理解:对集合中的元素取极限不超出此空间便称其具有完备性

整体总结

  • 线性完备内积空间称作希尔伯特空间
  • 线性完备赋范空间称作巴拿赫空间
  • 有限维线性内积空间称作欧几里得空间,欧几里得空间是一种特殊的(有限维度)的希尔伯特空间

Math——因果推断

本文介绍因果推断(Causal Inference)相关概念


参考资料

  • 讲的比较好的入门材料:
    • 参考链接:闲聊因果效应(1):当我们聊因果时,我们在聊什么
    • 参考链接:闲聊因果效应(2): 理解因果效应的计算以及PSM、IPW
  • 阿里发的一篇论文,用神经网络实现的二分类Uplift模型:
    • 参考链接:KDD‘22 阿里|DESCN: Deep Entire Space Cross Networks | 多任务、端到端、IPW的共舞

什么时候需要因果推断?

  • 是否需要因果推断主要取决于是否存在混淆因素/混淆因子(Confounders) ,即 treatment 是否是足够随机的(不受其他因素影响)
    • 如果 treatment 是完全随机分配的(即在每个状态下,treatment 是随机决定的),那么观察到的影响差异可以直接归因于 treatment 的变化,此时相关性即因果性 ,理论上不需要复杂的因果推断方法

有“足够多随机数据”时是否需要因果推断?

  • 若“随机”指完全随机实验 :不需要因果推断,直接建模即可
  • 若“随机”仅指数据量大 :仍需因果推断,因为数据量不能解决混淆偏差问题

出价中是否需要因果推断?

  • 如果出价是随机分配的 ,则可以直接用统计模型直接拟合 收益 = f(状态,出价),无需因果推断,因为随机化已消除混淆偏差
  • 如果出价是策略性选择的(如历史数据中出价高低与状态相关),则存在混淆偏差(confounding),必须用因果推断方法(如双重机器学习、倾向得分匹配)来估计条件平均处理效应(CATE)
    • 例如:高收益场景下系统更倾向出高价,此时出价与收益的关联可能混入了状态的影响

因果推断中的一致性假设

  • 一致性假设指的是:对于某一研究对象,其接受的处理(Treatment)与潜在结果(Potential Outcome)之间存在唯一且明确的对应关系
    • 具体来说,若个体 \(i\) 接受了处理 \(Z_i = z\),那么该个体的观测结果 \(Y_i\) 必然等于其在处理 \(z\) 下的潜在结果 \(Y_i(z)\),即:
      $$Y_i = Y_i(Z_i)$$

一致性假设的作用

  • 在因果推断中,我们通常需要比较同一主体在不同处理下的潜在结果差异(如因果效应 \(Y_i(1) - Y_i(0)\)),但现实中个体只能接受一种处理,无法同时观测到两种结果。一致性假设确保了:
    • 当个体接受处理 \(Z=1\) 时,观测结果 \(Y_i\) 等于其潜在结果 \(Y_i(1)\);
    • 当个体接受处理 \(Z=0\) 时,观测结果 \(Y_i\) 等于其潜在结果 \(Y_i(0)\)
  • 如此一来,我们才能通过分组(如处理组和对照组)的观测结果差异,来推断处理的因果效应(如平均因果效应 \(E[Y(1) - Y(0)]\))

目前因果推断的SOTA模型

  • CFR:Estimating individual treatment effect: generalization bounds and algorithms

Math——拟合优度


整体说明

  • 拟合优度(Goodness of Fit)是指所建立的模型对实际观测值的拟合程度
  • 在回归分析中,它衡量了自变量对因变量的解释程度,拟合优度越大,说明拟合越好
    • 拟合越好,意味着:自变量引起的变异占总变异的百分比越高,观察点在回归直线附近越密集

拟合优度的度量:决定系数 \(R^{2}\)

  • 度量拟合优度的常用统计量是决定系数(coefficient of determination) ,一般记作 \(R^{2}\)
  • \(R^{2}\) 的计算公式为:
    $$R^{2}=\frac{SSR}{SST}=1 - \frac{SSE}{SST}$$
    • \(SSR\) 为回归平方和
    • \(SSE\) 为残差平方和
    • \(SST\) 为总离差平方和
    • 注:\(SST = SSR + SSE\)
  • 若用 \(y_{i}\) 表示真实的观测值, \(\bar{y}\) 表示真实观测值的平均值, \(\hat{y}_{i}\) 表示拟合值,则 \(SSR\) 、 \(SSE\) 、 \(SST\) 的具体计算公式如下:
    • 总平方和 \(SST=\sum_{i = 1}^{n}(y_{i}-\bar{y})^{2}\)
    • 回归平方和 \(SSR=\sum_{i = 1}^{n}(\hat{y}_{i}-\bar{y})^{2}\)
    • 残差平方和 \(SSE=\sum_{i = 1}^{n}(y_{i}-\hat{y}_{i})^{2}\)

Math——最优化问题和KKT条件

凸优化&拉个朗日对偶性的直观理解


凸优化相关书籍

  • 参考链接:优化方法-资料集合

问题定义

  • 一般优化问题的定义:

$$
\begin{align}
\min_{x}\quad &f(x) \\
s.t. \quad &g_{i}(x) \leq 0, i = 1,2,\dots,k \\
&h_{j}(x) = 0, j = 1,2,\dots,l
\end{align}
$$

凸优化问题

  • 如果原始优化问题满足:
    • \(f(x)\) 和 \(g_{i}(x)\) 都是 \(\mathbb{R}^{n}\) 上连续可微的凸函数
    • \(h_{j}(x)\) 为 \(\mathbb{R}^{n}\) 上的仿射函数 (仿射函数是满足 \(h_{j}(x) = a\cdot x + b\) 的函数)
  • 那么,原始优化问题是凸优化问题

凸二次优化问题

  • 若上述凸优化问题还满足:
    • \(f(x)\) 是二次函数
    • \(g_{i}(x)\) 是 \(\mathbb{R}^{n}\) 上的仿射函数
  • 那么,原始优化问题是凸二次优化问题

朗格朗日对偶性

拉格朗日对偶性的推导
  • 原始问题定义为

$$
\begin{align}
\min_{x}\quad &f(x) \\
s.t. \quad &g_{i}(x) \leq 0, i = 1,2,\dots,k \\
&h_{j}(x) = 0, j = 1,2,\dots,l
\end{align}
$$

  • 引进拉格朗日函数有
    $$
    \begin{align}
    L(x,\alpha, \beta) = f(x) + \sum_{i=1}^{k}\alpha_{i}g_{i}(x) + \sum_{j=1}^{l}\beta_{j}h_{j}(x)
    \end{align}
    $$

  • 考虑到
    $$
    \begin{align}
    \max_{\alpha,\beta:\alpha_{i}\geq 0}L(x,\alpha, \beta)
    \end{align}
    $$

    • 当 \(x\) 满足原始问题的解时,上面的式子等价与 \(f(x)\)
    • 否则上面的式子等于无穷大 \(+\infty\)
  • 所以假设原始问题的最优值为 \(p^{\star}\),那么
    $$
    \begin{align}
    p^{\star} = \min_{x}\max_{\alpha,\beta:\alpha_{i}\geq 0}L(x,\alpha, \beta)
    \end{align}
    $$

    • (\(p^{\star}\) 不是最优参数,是最优参数对应的函数值,参数应该用 \(\mathop{\arg\max}_{x}\) 而不是 \(\max_{x}\))
  • 定义对偶问题为:
    $$
    \begin{align}
    &\max_{\alpha,\beta:\alpha_{i}\geq 0}\min_{x}L(x,\alpha, \beta) \\
    &s.t.\quad \alpha_{i} \geq 0,\quad i=1,2,\dots,k
    \end{align}
    $$

  • 假设原始问题的最优解为 \(d^{\star}\),则原始问题与对偶问题的关系为:
    $$
    \begin{align}
    d^{\star} = \max_{\alpha,\beta:\alpha_{i}\geq 0}\min_{x}L(x,\alpha, \beta) = \min_{x}\max_{\alpha,\beta:\alpha_{i}\geq 0}L(x,\alpha, \beta) = p^{\star}
    \end{align}
    $$

KKT条件
  1. 原始可行性 : \(g_{i}(x) \leq 0\), \(h_{j}(x) = 0\)
    • 所有原始约束必须满足
  2. 对偶可行性 : \(\alpha_i \geq 0\)
    • 所有的不等式约束对应的拉格朗日乘子大于等于0
  3. 互补松弛性 : \(\alpha_i g_i(x) = 0\)
    • 对于每个不等式约束 \(g_i(x)\),都有 \(\alpha_i g_i(x) = 0\),这意味着如果一个约束是紧约束(即 \(g_i(x) = 0\) ),那么对应的 \(\alpha_i\) 可以是非零的;如果一个约束是松的(即 \(g_i(x) < 0\) ),那么对应的 \(\alpha_i\) 必须为零
  4. 梯度条件 : \(\nabla_x L(x^, \alpha^, \beta^*) = 0\)
    • 在最优解处,拉格朗日函数关于 \(x\) 的梯度必须为零
  • 其他理解:
    • 对KKT条件其他角度的理解可参考周志华<<机器学习>>P404

Math——有限总体校正


整体说明

  • 为了从总体 规模为 \( N \) 的有限样本中需要抽取的样本单位数量,用于在满足特定精度要求的前提下开展抽样调查或统计分析
  • 统计学中称满足特定精度的最小需要的样本总数为 有限总体校正(Finite Population Correction, FPC)
  • 最小需要的样本总数常常用 \( n \)

有限总体校正的定义

  • 有限总体校正(Finite Population Correction, FPC)样本量计算公式:
    $$ n = \frac{N \cdot Z^2 \cdot \sigma^2}{E^2 \cdot (N-1) + Z^2 \cdot \sigma^2} $$
    • 上述公式适用于总体规模 \( N \) 有限(而非无限大)的场景(例如从1000人的班级中抽样,而非从“所有中国人”中抽样)
  • 各参数含义如下:
    • \( n \) :目标样本量 ,最终需要抽取的样本数量,公式计算结果
    • \( N \) :总体规模 ,研究对象的总数量,如某学校的总学生数、某企业的总员工数
    • \( Z \) :Z值 ,对应指定置信水平的标准正态分布分位数,如95%置信水平对应的 \( Z \approx 1.96 \),99%置信水平对应的 \( Z \approx 2.58 \)
    • \( \sigma^2 \) :总体方差 ,总体中研究变量的离散程度,若总体方差未知,通常用历史数据或预调查的样本方差 \( s^2 \) 替代
    • \( E \) :边际误差(允许误差) ,抽样结果与总体真实值的最大允许偏差,如“调查结果误差不超过3%”,则 \( E = 0.03 \)

有限总体校正公式适用场景

  • 当总体规模 \( N \) 较大(如 \( N > 1000 \))且抽样比例(\( n/N \))较小时(通常小于5%),有限总体校正的影响可忽略,公式可简化为无限总体下的样本量公式:
    $$ n \approx \frac{Z^2 \cdot \sigma^2}{E^2} $$
  • 当总体规模 \( N \) 有限(如 \( N < 1000 \))或抽样比例较大(如超过5%)时,必须使用原公式(含有限总体校正项)计算 \( n \),否则会导致样本量估算偏大,造成资源浪费

Math——增广拉格朗日乘子法


整体说明

  • 增广拉格朗日方法(Augmented Lagrangian Method, ALM)是一种用于求解约束优化问题的数值优化算法。它结合了拉格朗日乘子法和罚函数法的优点,能够在保证收敛性的同时避免传统罚函数法中罚参数过大导致的数值不稳定问题

问题描述

  • 考虑一个约束优化问题:
    $$
    \begin{align}
    &\min_{x \in \mathbb{R}^n} , f(x) \\
    \text{s.t.} \quad &g_i(x) = 0, \quad i = 1, \dots, m, \\
    &h_j(x) \leq 0, \quad j = 1, \dots, p.
    \end{align}
    $$
  • 其中:
    • \(f(x)\) 是目标函数;
    • \(g_i(x)\) 是等式约束;
    • \(h_j(x)\) 是不等式约束

增广拉格朗日函数

  • 为了处理上述约束优化问题,引入拉格朗日乘子 \(\lambda \in \mathbb{R}^m\) 和 \(\mu \in \mathbb{R}^p\),并定义增广拉格朗日函数为:
    $$
    L_A(x, \lambda, \mu; \rho) = f(x) + \sum_{i=1}^m \left[ \lambda_i g_i(x) + \frac{\rho}{2} g_i(x)^2 \right] + \sum_{j=1}^p \left[ \mu_j h_j(x) + \frac{\rho}{2} \max(0, h_j(x))^2 \right],
    $$
  • 其中:
    • \(\lambda_i\) 是等式约束 \(g_i(x) = 0\) 的拉格朗日乘子;
    • \(\mu_j\) 是不等式约束 \(h_j(x) \leq 0\) 的拉格朗日乘子;
    • \(\rho > 0\) 是罚参数,用于平衡约束违反的程度

算法步骤

  • 增广拉格朗日方法通过迭代更新变量 \(x\)、拉格朗日乘子 \(\lambda\) 和 \(\mu\),以及罚参数 \(\rho\) 来求解优化问题。具体步骤如下:

初始化

  • 初始化 \(x^{(0)}\),\(\lambda^{(0)}\),\(\mu^{(0)}\),以及初始罚参数 \(\rho^{(0)} > 0\)
  • 设置收敛容差 \(\epsilon > 0\) 和最大迭代次数 \(k_{\text{max}}\)

迭代过程

对于第 \(k\) 次迭代依次执行下面的流程:

  • 优化子问题(更新原始变量) :固定 \(\lambda^{(k)}\)、\(\mu^{(k)}\) 和 \(\rho^{(k)}\),求解以下无约束优化问题:
    $$
    x^{(k+1)} = \arg\min_x L_A(x, \lambda^{(k)}, \mu^{(k)}; \rho^{(k)}).
    $$

  • 更新拉格朗日乘子 :

    • 对于等式约束 :
      $$
      \lambda_i^{(k+1)} = \lambda_i^{(k)} + \rho^{(k)} g_i(x^{(k+1)}), \quad i = 1, \dots, m.
      $$
      • 问题:为什么拉格朗日乘子的更新公式是这样的?理论上,这等价于梯度上升法
      • 直观理解:目标是让 \(g_i(x^{(k+1)}) \rightarrow 0\)?
        • 当 \(g_i(x^{(k+1)}) < 0\) 时,缩小 \(\lambda\),表示可适当放开约束,使得下次优化子问题时 \(g_i(x^{(k+1)})\) 变大?
        • 当 \(g_i(x^{(k+1)}) > 0\) 时,增大 \(\lambda\),表示可适当收紧约束,使得下次优化子问题时 \(g_i(x^{(k+1)})\) 变小?
    • 对于不等式约束 :
      $$
      \mu_j^{(k+1)} = \max\left(0, \mu_j^{(k)} + \rho^{(k)} h_j(x^{(k+1)})\right), \quad j = 1, \dots, p.
      $$
  • 检查收敛条件 :如果满足下面条件,则停止迭代,输出 \(x^{(k+1)}\) 作为解,否则继续迭代
    $$
    |g(x^{(k+1)})|_\infty \leq \epsilon \quad \text{且} \quad |\max(0, h(x^{(k+1)}))|_\infty \leq \epsilon,
    $$

  • 更新罚参数 :通常选择逐步增大罚参数,例如按下面的方法更新
    $$
    \rho^{(k+1)} = \beta \rho^{(k)},
    $$

    • 其中 \(\beta > 1\) 是一个预设的增长因子

终止条件

  • 当达到最大迭代次数或满足收敛条件时,算法终止

特点与优势

  • 稳定性 :相比于传统罚函数法,增广拉格朗日方法对罚参数 \(\rho\) 的依赖较小,能够避免数值不稳定问题
  • 灵活性 :可以处理等式和不等式约束,适用范围广泛
  • 全局收敛性 :在适当的条件下,增广拉格朗日方法具有全局收敛性

附录:对偶上升法与增广拉格朗日乘子法

  • 对偶上升法(Dual Ascent)和增广拉格朗日乘子法(Augmented Lagrangian Method,ALM)都是用于解决约束优化问题的迭代算法。它们在更新变量的方式上有显著的不同
  • 特别说明 :两者的区别不仅仅是对偶变量更新的公式不同,最小化求解原始变量时,分别在最小化拉格朗日函数和增广拉格朗日函数 ,这里区别也很大
  • 以下对照均已等式约束为例

对偶上升法

  • 对偶上升法是一种基于拉格朗日对偶理论的优化方法。它的基本思想是通过交替更新原始变量和对偶变量来逼近最优解。具体步骤如下:
    • 初始化 :选择初始值 \(x^{(0)}\) 和对偶变量 \(\lambda^{(0)}\)
    • 构建增广拉格朗日函数 :构造带拉格朗日函数 \(L(x, \lambda) = f(x) + \lambda^T h(x) \)
    • 最小化拉格朗日函数 :对于固定的 \(\lambda^{(k)}\),求解无约束优化问题(拉格朗日函数)以找到 \(x^{(k+1)}\)
    • 更新对偶变量 :更新对偶变量 \(\lambda^{(k+1)} = \lambda^{(k)} + \alpha_k \nabla_\lambda L(x^{(k+1)}, \lambda^{(k)})\),其中 \(\alpha_k\) 是步长参数
      • 说明:这是根据梯度上升法来更新参数(使用梯度上升是因为更新对偶变量时,目标是最大化原始拉格朗日函数 \(L(x^{(k+1)}, \lambda^{(k)})\)),其中有\(\nabla_\lambda L(x^{(k+1)}, \lambda^{(k)}) = h(x^{(k+1)})\)
  • 这种方法要求目标函数和约束条件满足一定的凸性条件,并且通常需要较小的步长 \(\alpha_k\) 来保证收敛性

增广拉格朗日乘子法

  • 增广拉格朗日乘子法是在拉格朗日乘子法的基础上添加了一个二次惩罚项 ,从而增强了原问题的凸性和稳定性。其主要特点如下:
    • 初始化 :同样选择初始值 \(x^{(0)}\) 和 \(\lambda^{(0)}\)
    • 构建增广拉格朗日函数 :构造带有惩罚项的拉格朗日函数 \(L_{\rho}(x, \lambda) = f(x) + \lambda^T h(x) + \frac{\rho}{2} |h(x)|^2\),其中 \(\rho > 0\) 是惩罚参数
    • 最小化增广拉格朗日函数 :对于固定的 \(\lambda^{(k)}\) 和 \(\rho\),求解无约束优化问题(增广拉格朗日函数)以找到 \(x^{(k+1)}\)
    • 更新对偶变量 :更新 \(\lambda^{(k+1)} = \lambda^{(k)} + \rho h(x^{(k+1)})\)
      • 说明:这等价于固定学习率为 \(\rho\) 的梯度上升法更新 \(\lambda\),其中有\(\nabla_\lambda L_{\rho}(x^{(k+1)}, \lambda^{(k)}) = h(x^{(k+1)})\)
  • 与对偶上升法相比,增广拉格朗日乘子法不需要特别小的步长(固定为 \(\rho\) 了),并且由于惩罚项的存在,它能够更好地处理非凸问题,并且通常具有更好的数值稳定性和收敛速度

比较总结

  • 收敛性 :增广拉格朗日乘子法通常比对偶上升法有更强的收敛性,特别是在非凸问题上
  • 鲁棒性 :由于加入了惩罚项,增广拉格朗日乘子法通常更稳健,不易受到数值不稳定的影响
  • 计算复杂度 :每一步中,增广拉格朗日乘子法可能需要解决一个更加复杂的优化问题 ,因为它包含了额外的惩罚项
  • 适用场景 :如果问题是严格凸的,对偶上升法可能是足够的;但如果存在非凸性或需要更高的鲁棒性 ,则增广拉格朗日乘子法通常是更好的选择

附录:其他相关方法之拉格朗日乘子法

  • 拉格朗日乘子法一般用于求解一个原始问题的最优形式(最优形式一般包含着拉格朗日乘子),部分时候根据KKT条件可以直接求得最优解

具体示例

  • 拉格朗日乘子法 :通过引入拉格朗日乘子将约束条件与目标函数结合成一个新的函数,即拉格朗日函数。其基本思想是将原约束优化问题转化为无约束的拉格朗日函数的极值问题
    • 对于具有等式约束的优化问题:
      $$
      \begin{align}
      &\min f(x) , \\
      \text{s.t.} \ &h_i(x)=0 , i = 1,2,\cdots,m
      \end{align}
      $$
    • 拉格朗日函数定义为:
      $$ L(x,\lambda)=f(x)+\sum_{i = 1}^{m}\lambda_ih_i(x)$$
    • 通过求解 \(\nabla L = 0\) 来得到原问题的最优解

求解方式

  • 拉格朗日乘子法 :直接对拉格朗日函数求偏导数并令其为零,得到一组方程组,然后求解方程组得到最优解。这种方法在理论上很优美,但在实际求解中,当约束条件较多或问题较为复杂时,求解方程组可能会变得非常困难

Math——奇异值分解-SVD

本文从不同角度给出奇异值分解的物理意义

  • 参考知乎回答1:奇异值的物理意义是什么?
  • 参考知乎回答2:人们是如何想到奇异值分解的?

公式说明

$$A=U\Sigma V^{T}$$

  • \(U,V\) 都是正交矩阵, \(\Sigma\) 是对角矩阵,对角上的元素是矩阵 \(A\) 的奇异值
  • 若保留对角元素最大的K个值
    • \(K=r=Rank(A)\) 时为紧奇异值分解,对应的是无损压缩,此时由于奇异值保留数量与原始矩阵相同,能做到对原始矩阵A的完全还原
    • \(K< r=Rank(A)\) 时为截断奇异值分解,对应的是有损压缩,此时由于奇异值保留数量比原始矩阵的小,做不到对原始矩阵A的完全还原,但是如果K足够大就能做到对矩阵A的较完美近似

图像处理方面

  • 直观上可以理解为奇异值分解是将矩阵分解为若干个秩一矩阵之和,用公式表示就是:
    $$A=\sigma_{1}u_{1}v_{1}^{T}+\sigma_{2}u_{2}v_{2}^{T}+…+\sigma_{r}u_{r}v_{r}^{T}$$
    • 式子中每一项的系数 \(\sigma\) 就是奇异值
    • \(u,v\) 都是列向量,每一个 \(uv^{T}\) 都是秩为1的矩阵
    • 奇异值按照从小到大排列
  • 从公式中按照从大到小排序后,保留前面系数最大的项目后效果
    • 对于一张450x333的图片,只需要保留前面的50项即可得到相当清晰的图像
    • 从保留项1到50,图片越来越清晰
  • 结论:
    • 奇异值越大的项,越能体现出来图片的效果 ,奇异值隐含着某种对于A矩阵来说很重要的信息
    • 加权的秩一矩阵能体现整个大矩阵的值,奇异值就是对应秩一矩阵对于A矩阵的权重

线性变换方面

几何含义

  • 对于任何的一个矩阵,我们要找到一组两两正交单位向量序列,使得矩阵作用在此向量序列上后得到新的向量序列保持两两正交.奇异值的几何含义为:这组变换后的新的向量序列的长度

更直观的几何含义

  • 公式:
    $$\mathbb{E}_{m}={y\in C^{m}: y=Ax, x\in C^{n},\left | x\right |_{2}=1}$$
  • 二维矩阵A:
    • 矩阵A将二维平面中的单位圆变换为椭圆,而两个奇异值正好是椭圆的半轴长度.
  • m维矩阵
    • 矩阵A将高维平面中的单位球变换为超椭球,矩阵的奇异值恰好就是超椭球的每条半轴长度.

奇异值分解的降维理解

代码编写

  • 代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    ##encoding=utf-8
    import numpy as np

    A = np.array([[4, 5, 6], [4, 5, 6], [8, 10, 12], [4, 5, 6]])

    print("原始矩阵:")
    print(A)

    U, Sigma, Vt = np.linalg.svd(A)
    U = np.array(U)
    Sigma = np.array(Sigma)
    Vt = np.array(Vt)

    print("分解后的原始U,S,V:")
    print(U)
    Sigma_ = np.zeros((4, 3), dtype=np.float64)
    Sigma_[:3][:3] = np.diag(Sigma)
    print Sigma_
    print(Vt)

    # 不做任何处理,直接恢复原始矩阵
    A_ = np.dot(np.dot(U, Sigma_), Vt)
    print(A_)

    # 原始矩阵的秩为1,所以可以拆解到只剩下一个奇异值,压缩到一维,也能完整恢复原始矩阵,实现将4x3的矩阵变成两个向量+一个数字,当矩阵维度变大时,这里的压缩会更加明显
    U = U[:, :1]
    Sigma_ = Sigma_[:1, :1]
    Vt = Vt[:1, :]

    print("降维后的U,S,V:")
    print(U)
    print(Sigma_)
    print(Vt)
    A_ = np.dot(np.dot(U, Sigma_), Vt)
    print("降维后的恢复矩阵,与原矩阵相同:")
    print(A_)
  • 结果

    原始矩阵:
    [[ 4 5 6]
    [ 4 5 6]
    [ 8 10 12]
    [ 4 5 6]]
    分解后的原始U,S,V:
    [[-3.77964473e-01 -9.25820100e-01 1.52792960e-16 0.00000000e+00]
    [-3.77964473e-01 1.54303350e-01 9.12870929e-01 0.00000000e+00]
    [-7.55928946e-01 3.08606700e-01 -3.65148372e-01 -4.47213595e-01]
    [-3.77964473e-01 1.54303350e-01 -1.82574186e-01 8.94427191e-01]]
    [[2.32163735e+01 0.00000000e+00 0.00000000e+00]
    [0.00000000e+00 1.22295087e-15 0.00000000e+00]
    [0.00000000e+00 0.00000000e+00 5.18334466e-32]
    [0.00000000e+00 0.00000000e+00 0.00000000e+00]]
    [[-0.45584231 -0.56980288 -0.68376346]
    [ 0.02454097 0.75988299 -0.64959647]
    [-0.88972217 0.31289378 0.3324033 ]]
    [[ 4. 5. 6.]
    [ 4. 5. 6.]
    [ 8. 10. 12.]
    [ 4. 5. 6.]]
    降维后的U,S,V:
    [[-0.37796447]
    [-0.37796447]
    [-0.75592895]
    [-0.37796447]]
    [[23.21637353]]
    [[-0.45584231 -0.56980288 -0.68376346]]
    降维后的恢复矩阵,与原矩阵相同:
    [[ 4. 5. 6.]
    [ 4. 5. 6.]
    [ 8. 10. 12.]
    [ 4. 5. 6.]]

Math——概率密度函数的理解

本文介绍概率密度函数的理解


概率密度函数的定义

  • 概率密度函数(Probability Density Function, PDF)是概率论和统计学中用来描述连续型随机变量的概率分布的一种函数。对于一个连续型随机变量 \(X\),其概率密度函数 \(f(x)\) 具有以下性质:

    • 非负性 :对于所有的实数 \(x\),有 \(f(x) \geq 0\)
    • 归一化 :在整个可能值域内, \(f(x)\) 的积分等于1,即 \(\int_{-\infty}^{\infty} f(x) , dx = 1\)
    • 概率计算 :如果 \(a < b\),那么随机变量 \(X\) 落在区间 \([a, b]\) 内的概率可以通过 \(f(x)\) 在该区间上的积分来计算,即 \(P(a \leq X \leq b) = \int_{a}^{b} f(x) , dx\)
  • 需要注意的是,概率密度函数 \(f(x)\) 在某一点的值并不直接表示该点的概率,因为对于连续型随机变量来说,取任何一个具体值的概率实际上是0。相反, \(f(x)\) 更多地用于描述随机变量落在某个区间的概率大小。通过观察 \(f(x)\) 的形状,可以了解随机变量取值的集中趋势和分散程度等特征


概率密度函数在某点的值 \( f(x_0) = \frac{1}{2} \) 的意义

  • 当我们说概率密度函数 \( f(x) \) 在某点 \( x_0 \) 的值等于 \( \frac{1}{2} \),即 \( f(x_0) = \frac{1}{2} \),其意义如下:

概率密度函数的值

  • 概率密度函数 \( f(x) \) 在某点 \( x_0 \) 的值 \( f(x_0) \) 并不直接表示在 \( x_0 \) 点取得某个具体值的概率。对于连续型随机变量,在某个具体点取值的概率实际上是零,即:
    $$ P(X = x_0) = 0 $$

概率密度的意义

  • 概率密度函数 \( f(x) \) 在点 \( x_0 \) 的值 \( f(x_0) \) 表示在 \( x_0 \) 附近的值的相对可能性。更具体地说,它表示在 \( x_0 \) 附近的一个小区间的长度和该区间内的概率的比值。比如,对于一个非常小的区间 \( [x_0 - \epsilon, x_0 + \epsilon] \),其概率可以近似表示为:
    $$ P(x_0 - \epsilon \leq X \leq x_0 + \epsilon) \approx f(x_0) \cdot 2\epsilon $$

例子

  • 假设一个随机变量 \( X \) 的概率密度函数在某点 \( x_0 \) 处为 \( \frac{1}{2} \),即 \( f(x_0) = \frac{1}{2} \) 。这意味着在 \( x_0 \) 附近的一个小区间内的概率可以近似计算。例如,对于一个非常小的区间 \( [x_0 - 0.01, x_0 + 0.01] \),其概率可以近似为:
    $$ P(x_0 - 0.01 \leq X \leq x_0 + 0.01) \approx \frac{1}{2} \cdot 0.02 = 0.01 $$

总结

  • 概率密度函数 \( f(x) \) 在某点 \( x_0 \) 的值 \( f(x_0) = \frac{1}{2} \) 并不表示在 \( x_0 \) 处取值的概率,而是表示在 \( x_0 \) 附近的值的相对可能性
  • 对于连续型随机变量,在某个具体点取值的概率是零
  • 概率密度函数的值可以用于近似计算在某个小区间内的概率
1…414243…61
Joe Zhou

Joe Zhou

Stay Hungry. Stay Foolish.

608 posts
49 tags
GitHub E-Mail
© 2026 Joe Zhou
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4