您的位置:

Gumbel分布

一、介绍

Gumbel分布是极值分布的一种,适用于描述极端事件的概率分布。它也被称为极大值分布(more extreme value distribution)或者Frechet分布。

Gumbel分布是由瑞士数学家Emil Gumbel于1954年提出的,在现代科学工程学中得到了广泛的应用,比如用于建筑工程中极端风及地震引起的破坏力的分析、水文学中洪水的频率分析等。在机器学习中,Gumbel分布被用来进行采样和近似梯度计算。

二、概率密度函数

一个随机变量X服从Gumbel分布,它的概率密度函数为:

f(x) = \frac{1}{\beta}e^{-(z+e^{-z})} 
z = \frac{x - \mu}{\beta}

其中,$\mu$是位置参数,$\beta$是尺度参数,注意当$\beta=1$时,z可以简写成(x-$\mu$)。

以下是Python代码示例:

import numpy as np
import matplotlib.pyplot as plt

def gumbel(x, mu, beta):
    z = (x-mu)/beta
    return np.exp(-(z + np.exp(-z))) / beta

x = np.linspace(0, 10, 100)
y = gumbel(x, 5, 1)
plt.plot(x, y)
plt.xlabel("X")
plt.ylabel("Probability density")
plt.title("Gumbel distribution, mu=5, beta=1")
plt.show()

三、分布特性

1. 期望和方差

Gumbel分布的期望和方差分别为:

E(X) = \mu + \beta \gamma
Var(X) = \frac{\pi^2}{6} \beta^2

其中,$\gamma$是欧拉常数(0.5772...),也就是:

import scipy.special as sp
sp.euler_gamma   # 0.5772156649015329

2. 生成随机数

可以使用numpy的gumbel()函数生成Gumbel分布的随机数,基本用法如下:

import numpy as np
mu = 5
beta = 1
sample = np.random.gumbel(mu, beta, 1000)

其中,mu和beta分别是位置参数和尺度参数,1000是生成的随机数个数。

3. 模拟采样

使用Gumbel分布进行采样的方法通常称为Gumbel-softmax trick,可以用于生成离散空间中的采样,比如深度学习中的softmax采样。

基本思路是先从Gumbel分布中采样出两个随机数,然后将采样概率分布取exponential()值,最后做归一化,即可得到softmax分布中的采样。

以下是Python代码示例:
def gumbel_sample(logits, temperature):
    noise = np.random.gumbel(size=logits.shape)
    y = (logits + noise) / temperature
    return np.exp(y) / np.sum(np.exp(y), axis=-1, keepdims=True)

logits = np.array([2.0, 1.0, 0.5])
t = 1.0
samples = gumbel_sample(logits, t)
print(samples)   # [0.535, 0.272, 0.193]

四、小结

本文介绍了Gumbel分布的概念、概率密度函数、期望和方差、随机数生成方法以及在模拟采样中的应用。Gumbel分布作为极值分布的一种,有着广泛的应用场景,特别是在科学工程学和机器学习中。