一、介绍
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分布作为极值分布的一种,有着广泛的应用场景,特别是在科学工程学和机器学习中。